Survey
2.0.4
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
Build for Survey 2.0.4.
Build for Survey 2.0.3.
Build for Survey 2.0.2.
Build for Survey 2.0.1.
Build for Survey 2.0.0 rc1.
Build for Survey 2.0.0 beta3.
Build for Survey 2.0.0 beta2.
Build for Survey 2.0.0 beta1.
A customer survey tool.
Ein Kundenumfragen Werkzeug.
Una herramienta de encuestas a clientes.
3.0.x
<br>
<strong>WELCOME</strong>
<br>
<br>
You are about to install the OTRS package Survey.<br>
<br>
<br>
<strong>ATTENTION</strong>
<br>
<br>
Make sure your database accepts packages over 5 MB in size. A MySQL database for example accepts packages up to 1 MB by default. In this case, the value for max_allowed_packet must be increased. The recommended maximum size accepted is 20 MB.<br>
<br>
<br>
((enjoy))<br>
<br>
<br>
<strong>WILLKOMMEN</strong>
<br>
<br>
Sie sind im Begriff das OTRS-Paket Survey zu installieren.<br>
<br>
<br>
<strong>ACHTUNG</strong>
<br>
<br>
Vergewissern Sie sich, dass ihre Datenbank Pakete mit einer Größe von mehr als 5 MB akzeptiert. Eine MySQL Datenbank akzeptiert beispielsweise standardmäßig Pakete mit einer Größe von maximal 1 MB. In diesem Fall muss der Wert für max_allowed_packet erhöht werden. Empfohlen werden 20 MB.<br>
<br>
<br>
((enjoy))<br>
<br>
<br>
<strong>BIENVENIDO</strong>
<br>
<br>
Está apunto de instalar el módulo de encuestas de OTRS.<br>
<br>
<br>
<strong>ATENCIÓN</strong>
<br>
<br>
Asegúrese de que su base de datos acepta packetes de arriba de 5 MB de tamaño. Por ejemplo una base de datos MySQL acepta packetes de arriba de 1 MB por defecto. En este caso el valor max_allowed_packet debe ser incrementado. El tamaño máximo recomendado es de 20 MB.<br>
<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>
((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>
((enjoy))<br>
<br>
<br>
<strong>ATENCIÓN</strong>
<br>
<br>
Si usted desinstala este paquete, todas las tablas de la base de datos creadas durante la instalación serán borradas.
¡Todos los datos de esas tablas serán irrevocablemente perdidos!.
<br>
<br>
((enjoy))<br>
<br>
<br>
<strong>WELCOME</strong>
<br>
<br>
You are about to upgrade the OTRS package Survey.<br>
<br>
<br>
<strong>ATTENTION</strong>
<br>
<br>
Make sure your database accepts packages over 5 MB in size. A MySQL database for example accepts packages up to 1 MB by default. In this case, the value for max_allowed_packet must be increased. The recommended maximum size accepted is 20 MB.<br>
<br>
<br>
((enjoy))<br>
<br>
<br>
<strong>WILLKOMMEN</strong>
<br>
<br>
Sie sind im Begriff das OTRS-Paket Survey zu aktualisieren.<br>
<br>
<br>
<strong>ACHTUNG</strong>
<br>
<br>
Vergewissern Sie sich, dass ihre Datenbank Pakete mit einer Größe von mehr als 5 MB akzeptiert. Eine MySQL Datenbank akzeptiert beispielsweise standardmäßig Pakete mit einer Größe von maximal 1 MB. In diesem Fall muss der Wert für max_allowed_packet erhöht werden. Empfohlen werden 20 MB.<br>
<br>
<br>
((enjoy))<br>
<br>
<br>
<strong>BIENVENIDO</strong>
<br>
<br>
Esta apunto de actualizar el módulo de encuestas de OTRS.<br>
<br>
<br>
<strong>ATENCIÓN</strong>
<br>
<br>
Asegúrese de que su base de datos acepta packetes de arriba de 5 MB de tamaño. Por ejemplo una base de datos MySQL acepta packetes de arriba de 1 MB por defecto. En este caso el valor max_allowed_packet debe ser incrementado. El tamaño máximo recomendado es de 20 MB.<br>
<br>
<br>
((enjoy))<br>
<br>
2012-03-15 16:18:09
opms.otrs.com
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjEuMCIgaW5pdD0iQXBwbGljYXRpb24iPgogICAgPENWUz4kSWQ6IFN1cnZleS54bWwsdiAxLjI1IDIwMTEvMDIvMTYgMjI6MTU6MTEgZHogRXhwICQ8L0NWUz4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudFN1cnZleSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPkFsbCBwYXJhbWV0ZXJzIGZvciB0aGUgU3VydmV5IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5BbGxlIFBhcmFtZXRlciBkZXMgQmVmcmFndW5ncy1PYmpla3RzIGltIEFnZW50LUludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkEgU3VydmV5IE1vZHVsZS48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+U3VydmV5PC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlPlN1cnZleTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkEgU3VydmV5IE1vZHVsZS48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lICBUcmFuc2xhdGFibGU9IjEiPlN1cnZleTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5NZW51PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz5JdGVtQXJlYTwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50U3VydmV5PC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+U3VydmV5PC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT51PC9BY2Nlc3NLZXk+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+ODAwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24gIFRyYW5zbGF0YWJsZT0iMSI+T3ZlcnZpZXc8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lICBUcmFuc2xhdGFibGU9IjEiPk92ZXJ2aWV3PC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudFN1cnZleTwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5TdXJ2ZXk8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5Pm88L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4xMDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TmV3PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZSBUcmFuc2xhdGFibGU9IjEiPk5ldzwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRTdXJ2ZXk7U3ViYWN0aW9uPVN1cnZleUFkZDwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5TdXJ2ZXk8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5Pm48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4yMDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5TdXJ2ZXkuQWdlbnQuRGVmYXVsdC5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTX0lFNz5TdXJ2ZXkuQWdlbnQuRGVmYXVsdC5JRTcuY3NzPC9DU1NfSUU3PgogICAgICAgICAgICAgICAgPC9Mb2FkZXI+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50U3VydmV5Wm9vbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciBzdXJ2ZXkgem9vbSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U3VydmV5IFpvb20gTW9kdWxlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5TdXJ2ZXk8L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+U3VydmV5LkFnZW50LkRlZmF1bHQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTU19JRTc+U3VydmV5LkFnZW50LkRlZmF1bHQuSUU3LmNzczwvQ1NTX0lFNz4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5TdXJ2ZXkuQWdlbnQuU3VydmV5Wm9vbS5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3Igc3VydmV5IHpvb20gaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkEgbW9kdWxlIHRvIGVkaXQgc3VydmV5IHF1ZXN0aW9ucy48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPlN1cnZleS5BZ2VudC5EZWZhdWx0LmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxDU1NfSUU3PlN1cnZleS5BZ2VudC5EZWZhdWx0LklFNy5jc3M8L0NTU19JRTc+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQdWJsaWNGcm9udGVuZDo6TW9kdWxlIyMjUHVibGljU3VydmV5IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBQdWJsaWNTdXJ2ZXkgb2JqZWN0IGluIHRoZSBwdWJsaWMgU3VydmV5IGFyZWEuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UHVibGljIFN1cnZleS48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+U3VydmV5PC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlPlN1cnZleTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+U3VydmV5LkN1c3RvbWVyLkRlZmF1bHQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTU19JRTc+U3VydmV5LkN1c3RvbWVyLkRlZmF1bHQuSUU3LmNzczwvQ1NTX0lFNz4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN1cnZleTo6U2hvd1ZvdGVEYXRhIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkVuYWJsZSBvciBkaXNhYmxlIHRoZSBTaG93Vm90ZURhdGEgc2NyZWVuIG9uIHB1YmxpYyBpbnRlcmZhY2UgdG8gc2hvdyBkYXRhIG9mIGFuIHNwZWNpZmljIHZvdGF0aW9uIHdoZW4gY3VzdG9tZXIgdHJpZXMgdG8gYW5zd2VyIGEgc3VydmV5IGJ5IHNlY29uZCB0aW1lLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8T3B0aW9uIFNlbGVjdGVkSUQ9IjAiPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIwIj5ObzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+WWVzPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJTdXJ2ZXk6OlNlbmRQZXJpb2QiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGF5cyBzdGFydGluZyBmcm9tIHRoZSBsYXRlc3QgY3VzdG9tZXIgc3VydmV5IGVtYWlsIGJldHdlZW4gbm8gY3VzdG9tZXIgc3VydmV5IGVtYWlsIGlzIHNlbnQsICggMCBtZWFucyBBbHdheXMgc2VuZCBpdCApIC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4zMDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJTdXJ2ZXk6Ok5vdGlmaWNhdGlvblNlbmRlciIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZhdWx0IHNlbmRlciBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj5xdWFsaXR5QGV4YW1wbGUuY29tPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iU3VydmV5OjpOb3RpZmljYXRpb25TdWJqZWN0IiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgc3ViamVjdCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj5IZWxwIHVzIHdpdGggeW91ciBmZWVkYmFjayE8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJTdXJ2ZXk6Ok5vdGlmaWNhdGlvbkJvZHkiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uICBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgYm9keSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFRleHRBcmVhPkRlYXIgQ3VzdG9tZXIsCgp0aGFua3MgZm9yIHVzaW5nIG91ciBzZXJ2aWNlLiBIZWxwIHVzIHRvIGltcHJvdmUgdXMgYW5kIG91ciBzZXJ2aWNlcy4KCkdpdmUgdXMgZmVlZGJhY2sgd2hhdCB3ZSBjYW4gZG86CgombHQ7T1RSU19DT05GSUdfSHR0cFR5cGUmZ3Q7Oi8vJmx0O09UUlNfQ09ORklHX0ZRRE4mZ3Q7LyZsdDtPVFJTX0NPTkZJR19TY3JpcHRBbGlhcyZndDtwdWJsaWMucGw/QWN0aW9uPVB1YmxpY1N1cnZleTtQdWJsaWNTdXJ2ZXlLZXk9Jmx0O09UUlNfUHVibGljU3VydmV5S2V5Jmd0OwoKVGhhbmtzIGZvciB5b3VyIGhlbHAhCgpZb3VyIE9UUlMtVGVhbQogICAgICAgICAgICA8L1RleHRBcmVhPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN1cnZleTo6U2VuZE5vU3VydmV5UmVnRXhwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiAgVHJhbnNsYXRhYmxlPSIxIj5JZiB0aGlzIHJlZ2V4IG1hdGNoZXMsIG5vIGN1c3RvbWVyIHN1cnZleSB3aWxsIGJlIHNlbnQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+KE1BSUxFUi1EQUVNT058cG9zdG1hc3RlcnxhYnVzZSlALis/XC4uKz88L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaWNrZXQ6OkV2ZW50TW9kdWxlUG9zdCMjIzk5LVN1cnZleVNlbmRSZXF1ZXN0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRpY2tldCBldmVudCBtb2R1bGUgdG8gc2VuZCBhdXRvbWF0aWNhbGx5IHN1cnZleSBlbWFpbCByZXF1ZXN0cyB0byBjdXN0b21lcnMgaWYgYSB0aWNrZXQgZ2V0cyBjbG9zZWQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkV2ZW50OjpTdXJ2ZXlTZW5kUmVxdWVzdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRXZlbnQiPihBcnRpY2xlQ3JlYXRlfFRpY2tldFN0YXRlVXBkYXRlKTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN1cnZleTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3IyMjU21hbGwiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHN1cnZleSBsaXN0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6U3VydmV5T3ZlcnZpZXc8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6U3VydmV5T3ZlcnZpZXdTbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+U21hbGw8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlBhZ2VTaG93biI+MjU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkltYWdlIj5vdmVydmlld3NtYWxsLnBuZzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSW1hZ2VTZWxlY3RlZCI+b3ZlcnZpZXdzbWFsbC1zZWxlY3RlZC5wbmc8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJTdXJ2ZXk6OkZyb250ZW5kOjpBZ2VudFN1cnZleSMjI1Nob3dDb2x1bW5zIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIHN1cnZleSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlZpZXdTdXJ2ZXlPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOdW1iZXIiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRpdGxlIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJbnRyb2R1Y3Rpb24iPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj4wPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOb3RpZmljYXRpb25TZW5kZXIiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5vdGlmaWNhdGlvblN1YmplY3QiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5vdGlmaWNhdGlvbkJvZHkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlN0YXR1cyI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JlYXRlVGltZSI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3JlYXRlQnkiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZVRpbWUiPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNoYW5nZUJ5Ij4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iU3VydmV5OjpGcm9udGVuZDo6SFRNTFJpY2hUZXh0SGVpZ2h0RGVmYXVsdCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IGhlaWdodCBmb3IgUmljaHRleHQgdmlld3MgZm9yIFN1cnZleVpvb20gZWxlbWVudHMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpTdXJ2ZXlab29tPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsNH0kIj44MDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN1cnZleTo6RnJvbnRlbmQ6OkhUTUxSaWNoVGV4dEhlaWdodE1heCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBkZWZhdWx0IGhlaWdodCBmb3IgUmljaHRleHQgdmlld3MgZm9yIFN1cnZleVpvb20gZWxlbWVudHMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpTdXJ2ZXlab29tPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iXlswLTldezEsNH0kIj4yNTAwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iU3VydmV5OjpIb29rIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoZSBpZGVudGlmaWVyIGZvciBhIHN1cnZleSwgZS5nLiBTdXJ2ZXkjLCBNeVN1cnZleSMuIFRoZSBkZWZhdWx0IGlzIFN1cnZleSMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6U3VydmV5PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj5TdXJ2ZXkjPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iUHJlZmVyZW5jZXNHcm91cHMjIyNTdXJ2ZXlPdmVydmlld1NtYWxsUGFnZVNob3duIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlBhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIHN1cnZleXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgc3VydmV5IG92ZXJ2aWV3LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6UHJlZmVyZW5jZXM8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6UHJlZmVyZW5jZXNHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDb2x1bW4iPk90aGVyIFNldHRpbmdzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMYWJlbCIgVHJhbnNsYXRhYmxlPSIxIj5TdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5IiBUcmFuc2xhdGFibGU9IjEiPlN1cnZleSBsaW1pdCBwZXIgcGFnZSBmb3IgU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCI8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRhdGEiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEwIj4xMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxNSI+MTU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMjAiPjIwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjI1Ij4yNTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIzMCI+MzA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMzUiPjM1PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YVNlbGVjdGVkIj4yNTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJlZktleSI+VXNlclN1cnZleU92ZXJ2aWV3U21hbGxQYWdlU2hvd248L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlByaW8iPjgwMDA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkFjdGl2ZSI+MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KPC9vdHJzX2NvbmZpZz4K
iVBORw0KGgoAAAANSUhEUgAABA0AAAMSCAIAAACOOKp6AAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAfQAAAH0AG5i+efAAAgAElEQVR4nOzdeUAUR9438OoZZpgBRBABcZBTRFSQPOAVj3hLDol4x9uVRI1G3TfigQLGe+OVRNB4RYzgEVlUxKhBYhLdFe8LgUFOHUBEQQ6Rud8/6tneeQZmGBDk8Pv5q6e6uqq6xe7+VVdXM2q1mgAAAAAAAGjgNHUDAAAAAACg2UGcAAAAAAAA2hAnAAAAAACANsQJAAAAAACgzUjzh0KhuHPnTkpKytOnT6VSKY/Hs7a27tq1q6+vr0AgoHmqqqo2b95sSNFjx4718vL64YcfiouL/1ufkVGbNm2cnJz69etnY2NT44ZPnz69du1aTk5OeXm5Wq02MTGxsrKyt7fv0aNHhw4d9NR49+7djIyMZ8+evXz5UqFQGBsb29ra9ujR43/+5384HIMiIrVaff369Tt37hQVFXE4nA4dOvTt27d79+6GbKu1p5pmzZrl5ORkSCHvMpVKtXbtWoFAsGLFiqZuCwD8H/U+LbdcarU6Nzc3LS0tNzf3xYsXSqXSzMzM0dGxX79+dnZ2BpZQ7wsKAEBz8N844dmzZ8ePH3/x4gUhxMrKqkOHDpWVlXl5eRKJJCkpacKECY6OjoQQDodjb2+vWURFRcXLly8FAkH79u01001MTNjlDh060J8ymaywsPDOnTsPHjyYPHly586dtRp069ats2fPqlQqgUDQsWNHLpdbXl6em5ubk5NTVlY2duxYPTvz119/FRcXCwQCS0tLLpdbVlaWk5OTk5Nz//79GTNmGBkZ6dmWEKJWq3/55ZfU1FQjIyNHR0elUvn48eMTJ048ffp02LBh+rdltW/fno2pWMbGxgZuDgDQ3LzJabnlevTo0ZEjRwghHA6nXbt2PB7vxYsX9+/fT05OHj169Hvvvad/8wa5oAAANK3/vXV++fJlZGRkZWVlp06dRo8ezfb0l5WV/frrr2lpaVFRUbNnz+7YsSOfzw8MDNQsIikp6fz58/b29tOmTdNVzfDhw9mQoKqqKiYmJiMjIy4ubvHixVwul81WXFz866+/qlSq4cOH9+vXj131+vXrtLS0169f69+ZESNGdOjQwdLSkk3JzMyMiYl5/PjxtWvX+vfvr3/zO3fu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gOEtKipK3S5vb+/x48c/uaE19M/j8ZKSkvrWra+v75w5c/o2br800XBIYRAahu9F/fe///36669nZmYuXbq0paXlq6++IoS88847169fP3PmjEAg+Oijj1555ZVbt25NmDCBaZKWlpabm3vhwoWKiopp06Z1advF119/7ejo2O3Qf/3rX8Vi8TfffMPhcN56662WlhbVvXPmzAkPD+/v6f7hxx9/DAkJKSwslMvlZmZm6r4iCQAAMBTl5ubOnj176tSpAznow4cP1e1yd3d/okM/6f77cdxeNdFwSGEQGoZ5wu+//04IWb58+dixYwkhtra2TU1N77777k8//TRt2jRCyI4dO/Lz83NzcwMDA5km69evd3V1JYR0dHR0afto/5WVlTNnzny0/P79+x9//PGlS5ccHBwIIampqcyGkrm5+b179zo6Ovh8fj/O9z//+c/mzZvz8/MpipLL5Tweb/To0S+//HI/DgEaKBSKlStX9tfqTVVVVX19fUdHB/MnUHstLS1VVVWHDx/ulzAAQJ2ff/7Z0NBQ11GMRM3Nze3t7aold+/ejYmJ4fP5zc3Nzs7OmZmZUVFR48aNEwqFcXFxDg4O586dO3r0aEBAwIsvvkgIuXfvXmJiIk3TMpnMzMwsIiKC+av7wYMHYWFhHA6HEFJdXR0VFTVr1iypVBoaGnr58uXt27cTQrhcbnx8PFO/uro6OTlZLBYzoyjjaW1t3b17t1QqpWna3Nx8586dLBarubl5/fr19vb2TU1NHA7HzMxMKBRqnqm6/qurq2NjY/l8vlQq9fLyUm0ilUptbGxmzZqVn5+vzcHMy8u7dOkSi8VSKBQxMTHGxsYaxq2qqoqLi9PX129sbLSwsCgtLd23b5+FhYW6JuqmrOGQwqA1DPMEOzu7559/3tra+uWXX3Zzc1u7dm1paalUKrWzs1Ot9vzzz6s2Udf20X8PHj58qK+v/+i4t27doml6wYIFzM/Zs2fr6empVmBatbe392+eMG7cuK1bt/7222+3bt1qb2+naXrChAkBAQH9OARoUFhY+Oabb/bXf9Py8vLff/+9vb29yx8ebVhZWfU2uwCA3vr000/xfMIgERUVdejQIeaf6f/7v/9zd3f38PAghGzatImpsHLlSuUbRwghIpEoMTGRyQdKSkrS09O3bdtGCDl//vymTZvmz59PCCkoKDAy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H/T09CZPnrx582Ytz1nC9QQAAAAAgD4llUpFIlFzc/Pt27ctLCx0nU7bsD4BAAAAAKBPxcfHNzQ0eHt799sigeB6AgAAAABA3/j999/3799fU1Pz7bffCoXCwsLCMWPG6DqpdmF9AgAAAABAX6iurj58+LC+vr6Dg8PevXv7c5FAcD0BAAAAAABaw/oEAAAAAADQhDoBAAAAAAA0oU4AAAAAAABNqBMAAAAAAEAT6gQAAAAAANCEOgEAAAAAADShTgAAAAAAAE2oEwAAAAAAQBPqBAAAAAAA0IQ6AQAAAAAANKFOAAAAAAAATagTAAAAAAB06dy5cyNGjDAxMZkyZUpVVdWDBw/c3NwGDRrk7OxcUVFRXl4+duxYPT29Tz75hBCisVU9jsZIjbDssF9++UUkEhkbeXqF8AAAAYZJREFUGzs4OJSWlmrsxUKdAAAAAACgS3Z2dsXFxbdv37558+ZXX32VlJRUWVn54MEDIyOjnTt3WlpalpSUmJub08EaW9XjaIzUCMsOe/HFF2/fvi2RSP7973//9ttvGnuxUCcAAAAAAOiSlZXVoEGDPvroI2tr66VLl5aXl1tZWfF4PGtr67KyMn19fX19fXawxlZCyNatW4cOHbp+/XqNkRph2WFCoTAqKsrGxsbS0nLmzJkae7FQJwAAAAAA6NLDhw8XLVp07dq1K1euDB06dPTo0VVVVQqFory8fMyYMRqDW2+NiIgoKiras2eP9rDssIcPH+7YsePevXsNDQ0a9xqp46hUqh4/VAAAAAAA6KTk5OSAgAA9PT1CSFRU1IYNG7y8vG7cuGFtbZ2ZmcnhcCZNmvTgwQNDQ8O33357x44d6lvVC4mKigr1kc8//7x62NDQUDrsk08+2blzZ3Nz85gxYz777DNDQ0P1vRITE+kw1AkAAAAAAKAJ9x0BAAAAAICm/wtvLFccLGpL7QAAAABJRU5ErkJggg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9jc19TdXJ2ZXkucG0gLSB0aGUgY3plY2ggbGFuZ3VhZ2UgZm9yIEFnZW50U3VydmV5CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIENvcHlyaWdodCAoQykgMjAxMCBPMkJTLmNvbSwgcyByLm8uIEpha3ViIEhhbnVzCiMgLS0KIyAkSWQ6IGNzX1N1cnZleS5wbSx2IDEuMSAyMDExLzA0LzEyIDA1OjIzOjIxIG1iIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmNzX0FnZW50U3VydmV5OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS4xICQpIFsxXTsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXknfSA9ICdQcvl6a3VtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9ucyd9ID0gJ0RvdGF6eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbid9ID0gJ0RvdGF6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbmlzaCd9ID0gJ1Vrb27oaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZmluaXNoZWQnfSA9ICd1a29u6GVubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIFN1cnZleS1LZXkgaXMgaW52YWxpZCEnfQogICAgPSAnVGVudG8ga2zt6CBqZSBuZXZob2Ru/SBwcm8gcHL5emt1bSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmsgeW91IGZvciB5b3VyIGZlZWRiYWNrLid9CiAgICA9ICdE7Gt1amVtZSBW4W0gemEgenDsdG5vdSB2YXpidSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWVkIHRvIHNlbGVjdCBxdWVzdGlvbjonfSA9ICdOdXRubyB2eWJyYXQgZG90YXo6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSd9ID0gJ1By+XprdW0sJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzZXQgbmV3IHN0YXR1cyEgTm8gcXVlc3Rpb25zIGRlZmluZWQuJ30KICAgID0gJ05lbHplIG5hc3Rhdml0IG5vdv0gc3RhdiEgTmVqc291IGRlZmlub3bhbnkgZG90YXp5Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2V0IG5ldyBzdGF0dXMhIFF1ZXN0aW9ucyBpbmNvbXBsZXRlLid9CiAgICA9ICdOZWx6ZSBuYXN0YXZpdCBub3b9IHN0YXYhIERvdGF6eSBuZWpzb3Uga29tcGxldG7tLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0dXMgY2hhbmdlZC4nfSA9ICdOb3b9IGFrdGl2bu0gc3RhdiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlIFN0YXR1cyd9ID0gJ1pt7G55IHN0YXZ1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbnQgcmVxdWVzdHMnfSA9ICdaYXNs4W55IHBvvmFkYXZreSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNlaXZlZCBzdXJ2ZXlzJ30gPSAnT2Jkcr5lbnkgaGxhc3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYW5zd2VyZWQnfSA9ICdPZHBvduxkbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbm90IGFuc3dlcmVkJ30gPSAnTmVvZHBvduxkbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5cyd9ID0gJ1By+XprdW15JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQnfSA9ICdOZXBsYXRu6Sc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRyb2R1Y3Rpb24nfSA9ICfadm9kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsJ30gPSAnSW50ZXJu7Sc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbnMnfSA9ICdEb3RhenknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVlc3Rpb24nfSA9ICdEb3Rheic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQb3NpYmxlIEFuc3dlcnMnfSA9ICdQ+O1wYWRu6SBvZHBvduxkeSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZZXNObyd9ID0gJ0FubyBhbmVibyBOZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaXN0J30gPSAnc2V6bmFtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RleHRhcmVhJ30gPSAndGV4dG926SBwb2xlJzsKICAgIAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNvbXBsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSd9ID0gJyc7CiAgICAKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBvciBkaXNhYmxlIHRoZSBTaG93Vm90ZURhdGEgc2NyZWVuIG9uIHB1YmxpYyBpbnRlcmZhY2UgdG8gc2hvdyBkYXRhIG9mIGFuIHNwZWNpZmljIHZvdGF0aW9uIHdoZW4gY3VzdG9tZXIgdHJpZXMgdG8gYW5zd2VyIGEgc3VydmV5IGJ5IHNlY29uZCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBoZWlnaHQgZm9yIFJpY2h0ZXh0IHZpZXdzIGZvciBTdXJ2ZXlab29tIGVsZW1lbnRzLid9ID0gJyc7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ydV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBydV9TdXJ2ZXkucG0sdiAxLjIgMjAxMS8wMi8xNiAyMjoxNToxMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpydV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU2VuZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTdWJqZWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBCb2R5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIEJ5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW50IHJlcXVlc3RzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY2VpdmVkIHN1cnZleXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBHZW5lcmFsIEluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUmVzdWx0cyBHcmFwaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdGF0IHJlc3VsdHMuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYW5zd2VyIHRoZSBuZXh0IHF1ZXN0aW9ucyd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgU3VydmV5IE1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBtb2R1bGUgdG8gZWRpdCBzdXJ2ZXkgcXVlc3Rpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIHN0YXJ0aW5nIGZyb20gdGhlIGxhdGVzdCBjdXN0b21lciBzdXJ2ZXkgZW1haWwgYmV0d2VlbiBubyBjdXN0b21lciBzdXJ2ZXkgZW1haWwgaXMgc2VudCwgKCAwIG1lYW5zIEFsd2F5cyBzZW5kIGl0ICkgLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJvZHkgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2VuZGVyIGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN1YmplY3QgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBzdXJ2ZXkgbGlzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgc3VydmV5IG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciBzdXJ2ZXkgem9vbSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgUHVibGljU3VydmV5IG9iamVjdCBpbiB0aGUgcHVibGljIFN1cnZleSBhcmVhLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGlzIHJlZ2V4IG1hdGNoZXMsIG5vIGN1c3RvbWVyIHN1cnZleSB3aWxsIGJlIHNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIHN1cnZleXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgc3VydmV5IG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMgU3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgWm9vbSBNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBsaW1pdCBwZXIgcGFnZSBmb3IgU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgc3VydmV5LCBlLmcuIFN1cnZleSMsIE15U3VydmV5Iy4gVGhlIGRlZmF1bHQgaXMgU3VydmV5Iy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGV2ZW50IG1vZHVsZSB0byBzZW5kIGF1dG9tYXRpY2FsbHkgc3VydmV5IGVtYWlsIHJlcXVlc3RzIHRvIGN1c3RvbWVycyBpZiBhIHRpY2tldCBnZXRzIGNsb3NlZC4nfSA9ICcnOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbnRyb2R1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcGxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jb21wbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkjJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUnfSA9ICcnOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBvciBkaXNhYmxlIHRoZSBTaG93Vm90ZURhdGEgc2NyZWVuIG9uIHB1YmxpYyBpbnRlcmZhY2UgdG8gc2hvdyBkYXRhIG9mIGFuIHNwZWNpZmljIHZvdGF0aW9uIHdoZW4gY3VzdG9tZXIgdHJpZXMgdG8gYW5zd2VyIGEgc3VydmV5IGJ5IHNlY29uZCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBoZWlnaHQgZm9yIFJpY2h0ZXh0IHZpZXdzIGZvciBTdXJ2ZXlab29tIGVsZW1lbnRzLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ubF9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBubF9TdXJ2ZXkucG0sdiAxLjUgMjAxMS8wNC8xMSAyMToxMzoyNSBtYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpubF9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57Jy0gQ2hhbmdlIFN0YXR1cyAtJ30gPSAnLSBTdGF0dXMgd2lqemlnZW4gLSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgTmV3IFN1cnZleSd9ID0gJ05pZXV3ZSBlbnF16nRlIHRvZXZvZWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRWRpdCd9ID0gJ0Jld2VyayBlbnF16nRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0IFF1ZXN0aW9ucyd9ID0gJ0Jld2VyayB2cmFnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVlc3Rpb24gRWRpdCd9ID0gJ0Jld2VyayB2cmFhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbnN3ZXIgRWRpdCd9ID0gJ0Jld2VyayBhbnR3b29yZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2V0IG5ldyBzdGF0dXMhIE5vIHF1ZXN0aW9ucyBkZWZpbmVkLid9ID0gJ0thbiBzdGF0dXMgbmlldCB3aWp6aWdlbiwgdm9lZyBlZXJzdCB2cmFnZW4gdG9lLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0dXMgY2hhbmdlZC4nfSA9ICdTdGF0dXMgYmlqZ2V3ZXJrdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmsgeW91IGZvciB5b3VyIGZlZWRiYWNrLid9ID0gJ0JlZGFua3Qgdm9vciB1dyBmZWVkYmFjay4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHN1cnZleSBpcyBmaW5pc2hlZC4nfSA9ICdEZSBlbnF16nRlIGlzIGluZ2VzdHV1cmQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXBsZXRlJ30gPSAnVm9sbGVkaWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jb21wbGV0ZSd9ID0gJ09udm9sbGVkaWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hlY2tib3gnfSA9ICdTZWxlY3RpZXZhayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVja2JveCAoTGlzdCknfSA9ICdTZWxlY3RpZXZhayAobGlqc3QpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JhZGlvJ30gPSAnS2V1emVyb25kamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFkaW8gKExpc3QpJ30gPSAnS2V1emVyb25kamUgKGxpanN0KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJ1N0YXRpc3RpZWtlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGVzY3JpcHRpb24nfSA9ICdPbXNjaHJpanZpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJ0ludHJvZHVjdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RleHRhcmVhJ30gPSAnVGVrc3R2YWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWWVzL05vJ30gPSAnSmEvTmVlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1llc05vJ30gPSAnSmFOZWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYW5zd2VyZWQnfSA9ICdiZWFudHdvb3JkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBhbnN3ZXJlZCd9ID0gJ25pZXQgYmVhbnR3b29yZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBEZXRhaWwnfSA9ICdEZXRhaWwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgTmV3IFN1cnZleSd9ID0gJ05pZXV3ZSBlbnF16nRlIGFhbm1ha2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludHJvZHVjdGlvbid9ID0gJ0ludHJvZHVjdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnSW50ZXJuZSBvbXNjaHJpanZpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBHZW5lcmFsIEluZm8nfSA9ICdCZXdlcmsgYWxnZW1lbmUgaW5mb3JtYXRpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkjJ30gPSAnRW5xdWV0ZSMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR2VuZXJhbCBJbmZvJ30gPSAnQWxnZW1lbmUgaW5mb3JtYXRpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyBvZid9ID0gJ0RldGFpbG92ZXJ6aWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJ1ZlcnpvZWtlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICdWZXJzdHV1cmQgb3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnSW5nZXZ1bGQgb3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyd9ID0gJ0RldGFpbHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJ0RldGFpbG92ZXJ6aWNodCBzdGF0aXN0aWVrZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBzdGF0cyBvdmVydmlldyd9ID0gJ2dhIHRlcnVnIG5hYXIgaGV0IG92ZXJ6aWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHbyBCYWNrJ30gPSAnR2EgdGVydWcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbnMnfSA9ICdCZXdlcmsgdnJhZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJ1ZyYWFnIHRvZXZvZWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJ1ZyYWFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBRdWVzdGlvbnMnfSA9ICdWcmFnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVlc3Rpb24nfSA9ICdWcmFhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBxdWVzdGlvbnMgc2F2ZWQgZm9yIHRoaXMgc3VydmV5Lid9ID0gJ0VyIHppam4gZ2VlbiB2cmFnZW4gb3BnZXNsYWdlbiB2b29yIGRlemUgZW5xdep0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFF1ZXN0aW9uJ30gPSAnQmV3ZXJrIHZyYWFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIGJhY2sgdG8gcXVlc3Rpb25zJ30gPSAnZ2EgdGVydWcgbmFhciBkZSB2cmFnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICdNb2dlbGlqa2UgYW50d29vcmRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgQW5zd2VyJ30gPSAnQW50d29vcmQgdG9ldm9lZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgZG9lc25cJ3QgaGF2ZSBzZXZlcmFsIGFuc3dlcnMsIGEgdGV4dGFyZWEgd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPSAnRGV6ZSBoZWVmdCBuaWV0IG1lZXJkZXJlIGFudHdvb3JkZW4uIEVyIHphbCBlZW4gdGVrc3R2YWsgZ2V0b29uZCB3b3JkZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQW5zd2VyJ30gPSAnQW50d29vcmQgYmV3ZXJrZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBlZGl0IHF1ZXN0aW9uJ30gPSAnZ2EgdGVydWcgbmFhciBkZSB2cmFhZyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4LiBzaG93biBTdXJ2ZXlzIHBlciBwYWdlJ30gPSAnTWF4aW1hYWwgYWFudGFsIGVucXXqdGVzIHBlciBwYWdpbmEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIFNlbmRlcid9ID0gJ0FmemVuZGVyIG5vdGlmaWNhdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTdWJqZWN0J30gPSAnT25kZXJ3ZXJwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBCb2R5J30gPSAnQm9keSB0ZXh0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgQnknfSA9ICdHZXdpanppZ2QgZG9vcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgSW5mb3JtYXRpb24nfSA9ICdEZXRhaWxzIGVucXXqdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VudCByZXF1ZXN0cyd9ID0gJ1ZlcnN0dXVyZGUgdmVyem9la2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY2VpdmVkIHN1cnZleXMnfSA9ICdPbnR2YW5nZW4gZW5xdep0ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgRGV0YWlscyd9ID0gJ0RldGFpbHMgc3RhdGlzdGlla2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXRhaWxzJ30gPSAnRGV0YWlscyBlbnF16nRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBSZXN1bHRzIEdyYXBoJ30gPSAnUmVzdWx0YXRlbiAoZ3JhZmllayknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3RhdCByZXN1bHRzLid9ID0gJ0dlZW4gcmVzdWx0YXRlbi4nOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY1N1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5J30gPSAnRW5xdep0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYW5zd2VyIHRoZSBuZXh0IHF1ZXN0aW9ucyd9ID0gJ0JlYW50d29vcmR0IHUgZGUgdm9sZ2VuZGUgdnJhZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbXkgYW5zd2Vycyd9ID0gJ1Rvb24gbWlqbiBhbnR3b29yZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBUaXRsZSd9ID0gJ0VucXXqdGV0aXRlbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVzZSBhcmUgeW91ciBhbnN3ZXJzLid9ID0gJ0RpdCB6aWpuIHV3IGFudHdvb3JkZW4uJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBTdXJ2ZXkgTW9kdWxlLid9ID0gJ0VlbiBtb2R1bGUgb20gZW5xdep0ZXMgdGUgb25kZXJob3VkZW4gZW4gdGUgdmVyc3R1cmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbW9kdWxlIHRvIGVkaXQgc3VydmV5IHF1ZXN0aW9ucy4nfSA9ICdFZW4gbW9kdWxlIG9tIGVucXXqdGVzIHRlIG9uZGVyaG91ZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIHN0YXJ0aW5nIGZyb20gdGhlIGxhdGVzdCBjdXN0b21lciBzdXJ2ZXkgZW1haWwgYmV0d2VlbiBubyBjdXN0b21lciBzdXJ2ZXkgZW1haWwgaXMgc2VudCwgKCAwIG1lYW5zIEFsd2F5cyBzZW5kIGl0ICkgLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJvZHkgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2VuZGVyIGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN1YmplY3QgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBzdXJ2ZXkgbGlzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBoZWlnaHQgZm9yIFJpY2h0ZXh0IHZpZXdzIGZvciBTdXJ2ZXlab29tIGVsZW1lbnRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBzdXJ2ZXkgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBvciBkaXNhYmxlIHRoZSBTaG93Vm90ZURhdGEgc2NyZWVuIG9uIHB1YmxpYyBpbnRlcmZhY2UgdG8gc2hvdyBkYXRhIG9mIGFuIHNwZWNpZmljIHZvdGF0aW9uIHdoZW4gY3VzdG9tZXIgdHJpZXMgdG8gYW5zd2VyIGEgc3VydmV5IGJ5IHNlY29uZCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciBzdXJ2ZXkgem9vbSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgUHVibGljU3VydmV5IG9iamVjdCBpbiB0aGUgcHVibGljIFN1cnZleSBhcmVhLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGlzIHJlZ2V4IG1hdGNoZXMsIG5vIGN1c3RvbWVyIHN1cnZleSB3aWxsIGJlIHNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIHN1cnZleXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgc3VydmV5IG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMgU3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgWm9vbSBNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBsaW1pdCBwZXIgcGFnZSBmb3IgU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgc3VydmV5LCBlLmcuIFN1cnZleSMsIE15U3VydmV5Iy4gVGhlIGRlZmF1bHQgaXMgU3VydmV5Iy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGV2ZW50IG1vZHVsZSB0byBzZW5kIGF1dG9tYXRpY2FsbHkgc3VydmV5IGVtYWlsIHJlcXVlc3RzIHRvIGN1c3RvbWVycyBpZiBhIHRpY2tldCBnZXRzIGNsb3NlZC4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kYV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBkYV9TdXJ2ZXkucG0sdiAxLjMgMjAxMS8wNC8xMiAwNTozOToyNyBtYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpkYV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57Jy0gQ2hhbmdlIFN0YXR1cyAtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOZXcgU3VydmV5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0IFF1ZXN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbiBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fuc3dlciBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzZXQgbmV3IHN0YXR1cyEgTm8gcXVlc3Rpb25zIGRlZmluZWQuJ30gPSAnS2FuIGlra2Ugc+Z0dGUgbnkgc3RhdHVzISBEZXIgZXIgaWtrZSBkZWZpbmVyZXQgbm9nZW4gc3D4cmdzbeVsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0dXMgY2hhbmdlZC4nfSA9ICdTdGF0dXMg5m5kcmV0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFuayB5b3UgZm9yIHlvdXIgZmVlZGJhY2suJ30gPSAnVGFrIGZvciBkaW4gYmVzdmFyZWxzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHN1cnZleSBpcyBmaW5pc2hlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcGxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jb21wbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVja2JveCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVja2JveCAoTGlzdCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFkaW8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFkaW8gKExpc3QpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRzIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RleHRhcmVhJ30gPSAnVGVrc3RvbXLlZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWWVzL05vJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1llc05vJ30gPSAnSmFOZWonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYW5zd2VyZWQnfSA9ICdiZXN2YXJldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgYW5zd2VyZWQnfSA9ICdpa2tlIGJlc3ZhcmV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRzIERldGFpbCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBOZXcgU3VydmV5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludHJvZHVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcm5hbCBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEdlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkjJ30gPSAnVW5kZXJz+GdlbHNlIyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIEluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgT3ZlcnZpZXcgb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdHMgVGFibGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBTdGF0IERldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBzdGF0cyBvdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHbyBCYWNrJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHF1ZXN0aW9ucyBzYXZlZCBmb3IgdGhpcyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW5zd2VyJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU2VuZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTdWJqZWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBCb2R5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgQnknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbnQgcmVxdWVzdHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjZWl2ZWQgc3VydmV5cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBSZXN1bHRzIEdyYXBoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN0YXQgcmVzdWx0cy4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY1N1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5J30gPSAnVW5kZXJz+GdlbHNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBhbnN3ZXIgdGhlIG5leHQgcXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbXkgYW5zd2Vycyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgVGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlc2UgYXJlIHlvdXIgYW5zd2Vycy4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIFN1cnZleSBNb2R1bGUuJ30gPSAnRXQgdW5kZXJz+GdlbHNlc21vZHVsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG1vZHVsZSB0byBlZGl0IHN1cnZleSBxdWVzdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgc3RhcnRpbmcgZnJvbSB0aGUgbGF0ZXN0IGN1c3RvbWVyIHN1cnZleSBlbWFpbCBiZXR3ZWVuIG5vIGN1c3RvbWVyIHN1cnZleSBlbWFpbCBpcyBzZW50LCAoIDAgbWVhbnMgQWx3YXlzIHNlbmQgaXQgKSAuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYm9keSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZW5kZXIgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3ViamVjdCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHN1cnZleSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGhlaWdodCBmb3IgUmljaHRleHQgdmlld3MgZm9yIFN1cnZleVpvb20gZWxlbWVudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIHN1cnZleSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG9yIGRpc2FibGUgdGhlIFNob3dWb3RlRGF0YSBzY3JlZW4gb24gcHVibGljIGludGVyZmFjZSB0byBzaG93IGRhdGEgb2YgYW4gc3BlY2lmaWMgdm90YXRpb24gd2hlbiBjdXN0b21lciB0cmllcyB0byBhbnN3ZXIgYSBzdXJ2ZXkgYnkgc2Vjb25kIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHN1cnZleSB6b29tIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBQdWJsaWNTdXJ2ZXkgb2JqZWN0IGluIHRoZSBwdWJsaWMgU3VydmV5IGFyZWEuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHRoaXMgcmVnZXggbWF0Y2hlcywgbm8gY3VzdG9tZXIgc3VydmV5IHdpbGwgYmUgc2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgc3VydmV5cyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBzdXJ2ZXkgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyBTdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBab29tIE1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IGxpbWl0IHBlciBwYWdlIGZvciBTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBzdXJ2ZXksIGUuZy4gU3VydmV5IywgTXlTdXJ2ZXkjLiBUaGUgZGVmYXVsdCBpcyBTdXJ2ZXkjLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZXZlbnQgbW9kdWxlIHRvIHNlbmQgYXV0b21hdGljYWxseSBzdXJ2ZXkgZW1haWwgcmVxdWVzdHMgdG8gY3VzdG9tZXJzIGlmIGEgdGlja2V0IGdldHMgY2xvc2VkLid9ID0gJyc7Cgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9mcl9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBmcl9TdXJ2ZXkucG0sdiAxLjIgMjAxMS8wMi8xNiAyMjoxNToxMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpmcl9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4LiBzaG93biBTdXJ2ZXlzIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTZW5kZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIFN1YmplY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIEJvZHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgQnknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbnQgcmVxdWVzdHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjZWl2ZWQgc3VydmV5cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEdlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFF1ZXN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBSZXN1bHRzIEdyYXBoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN0YXQgcmVzdWx0cy4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY1N1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBhbnN3ZXIgdGhlIG5leHQgcXVlc3Rpb25zJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBTdXJ2ZXkgTW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG1vZHVsZSB0byBlZGl0IHN1cnZleSBxdWVzdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgc3RhcnRpbmcgZnJvbSB0aGUgbGF0ZXN0IGN1c3RvbWVyIHN1cnZleSBlbWFpbCBiZXR3ZWVuIG5vIGN1c3RvbWVyIHN1cnZleSBlbWFpbCBpcyBzZW50LCAoIDAgbWVhbnMgQWx3YXlzIHNlbmQgaXQgKSAuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYm9keSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZW5kZXIgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3ViamVjdCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHN1cnZleSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBzdXJ2ZXkgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHN1cnZleSB6b29tIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBQdWJsaWNTdXJ2ZXkgb2JqZWN0IGluIHRoZSBwdWJsaWMgU3VydmV5IGFyZWEuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHRoaXMgcmVnZXggbWF0Y2hlcywgbm8gY3VzdG9tZXIgc3VydmV5IHdpbGwgYmUgc2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgc3VydmV5cyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBzdXJ2ZXkgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyBTdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBab29tIE1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IGxpbWl0IHBlciBwYWdlIGZvciBTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBzdXJ2ZXksIGUuZy4gU3VydmV5IywgTXlTdXJ2ZXkjLiBUaGUgZGVmYXVsdCBpcyBTdXJ2ZXkjLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZXZlbnQgbW9kdWxlIHRvIHNlbmQgYXV0b21hdGljYWxseSBzdXJ2ZXkgZW1haWwgcmVxdWVzdHMgdG8gY3VzdG9tZXJzIGlmIGEgdGlja2V0IGdldHMgY2xvc2VkLid9ID0gJyc7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNvbXBsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSd9ID0gJyc7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG9yIGRpc2FibGUgdGhlIFNob3dWb3RlRGF0YSBzY3JlZW4gb24gcHVibGljIGludGVyZmFjZSB0byBzaG93IGRhdGEgb2YgYW4gc3BlY2lmaWMgdm90YXRpb24gd2hlbiBjdXN0b21lciB0cmllcyB0byBhbnN3ZXIgYSBzdXJ2ZXkgYnkgc2Vjb25kIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbCBwYXJhbWV0ZXJzIGZvciB0aGUgU3VydmV5IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGhlaWdodCBmb3IgUmljaHRleHQgdmlld3MgZm9yIFN1cnZleVpvb20gZWxlbWVudHMuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBkZV9TdXJ2ZXkucG0sdiAxLjUgMjAxMS8wMi8xNyAxNzoxNjo0OSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpkZV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICdOZXVlIFVtZnJhZ2UgZXJzdGVsbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludHJvZHVjdGlvbid9ID0gJ0VpbmxlaXR1bmdzdGV4dCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcm5hbCBEZXNjcmlwdGlvbid9ID0gJ0ludGVybmUgQmVzY2hyZWlidW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnVW1mcmFnZSBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJ0FsbGdlbWVpbmUgQW5nYWJlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJ1N0YXRpc3Rpay3cYmVyc2ljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdHMgVGFibGUnfSA9ICdBbmZyYWdlbi1UYWJlbGxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgVGltZSd9ID0gJ1NlbmRlemVpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIFRpbWUnfSA9ICdBYnN0aW1tdW5nc3plaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0YWlscyd9ID0gJ0RldGFpbHMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4nfSA9ICdG/HIgZGllc2UgVW1mcmFnZSBzaW5kIGtlaW5lIEZyYWdlbiBnZXNwZWljaGVydC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJ0RldGFpbHMgVW1mcmFnZXN0YXRpc3Rpayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3J30gPSAnWnVy/GNrIHp1ciDcYmVyc2ljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR28gQmFjayd9ID0gJ1p1cvxjayc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlFZGl0UXVlc3Rpb25zCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRWRpdCBRdWVzdGlvbnMnfSA9ICdGcmFnZW4gYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgUXVlc3Rpb24nfSA9ICdGcmFnZSBoaW56dWb8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGUgdGhlIHF1ZXN0aW9uJ30gPSAnRnJhZ2UgZWluZ2ViZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFF1ZXN0aW9ucyd9ID0gJ1VtZnJhZ2UtRnJhZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnRnJhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbid9ID0gJ0ZyYWdlIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICdadXL8Y2sgenUgZGVuIEZyYWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQb3NzaWJsZSBBbnN3ZXJzIEZvcid9ID0gJ032Z2xpY2hlIEFudHdvcnRlbiBm/HInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJ0FudHdvcnQgaGluenVm/Gdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJ0RpZXNlIEZyYWdlIGhhdCBuaWNodCBtZWhyZXJlIEFudHdvcnRlbiwgZWluIFRleHRlaW5nYWJlZmVsZCB3aXJkIGhpbnp1Z2Vm/Gd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJ0FudHdvcnQgYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICdadXL8Y2sgenVtIEJlYXJiZWl0ZW4gZGVyIEZyYWdlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnS29udGV4dC1FaW5zdGVsbHVuZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSd9ID0gJ01heGltYWxlIEFuemFobCBhbmdlemVpZ3RlciBVbWZyYWdlbiBwcm8gU2VpdGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIFNlbmRlcid9ID0gJ0JlbmFjaHJpY2h0aWd1bmcgQWJzZW5kZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIFN1YmplY3QnfSA9ICdCZW5hY2hyaWNodGlndW5nIEJldHJlZmYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIEJvZHknfSA9ICdCZW5hY2hyaWNodGlndW5nIFRleHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBUaW1lJ30gPSAnRXJzdGVsbC1aZWl0cHVua3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBCeSd9ID0gJ0Vyc3RlbGx0IHZvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIFRpbWUnfSA9ICfEbmRlcnVuZ3MtWmVpdHB1bmt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgQnknfSA9ICdHZeRuZGVydCB2b24nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEluZm9ybWF0aW9uJ30gPSAnVW1mcmFnZS1JbmZvcm1hdGlvbmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbnQgcmVxdWVzdHMnfSA9ICdHZXNlbmRldGUgQW5mcmFnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjZWl2ZWQgc3VydmV5cyd9ID0gJ0VyaGFsdGVuZSBVbWZyYWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEdlbmVyYWwgSW5mbyd9ID0gJ0FsbGdlbWVpbmUgQW5nYWJlbiBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb25zJ30gPSAnRnJhZ2VuIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgRGV0YWlscyd9ID0gJ1N0YXRpc3Rpay1EZXRhaWxzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXRhaWxzJ30gPSAnVW1mcmFnZS1EZXRhaWxzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBSZXN1bHRzIEdyYXBoJ30gPSAnR3JhZmlrIFVtZnJhZ2VlcmdlYm5pc3NlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN0YXQgcmVzdWx0cy4nfSA9ICdLZWluZSBTdGF0aXN0aWstRXJnZWJuaXNzZS4nOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY1N1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5J30gPSAnVW1mcmFnZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYW5zd2VyIHRoZSBuZXh0IHF1ZXN0aW9ucyd9ID0gJ0JpdHRlIGJlYW50d29ydGVuIFNpZSBkaWUgZm9sZ2VuZGVuIEZyYWdlbic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgU3VydmV5IE1vZHVsZS4nfSA9ICdFaW4gVW1mcmFnZS1Nb2R1bCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG1vZHVsZSB0byBlZGl0IHN1cnZleSBxdWVzdGlvbnMuJ30gPSAnRWluIE1vZHVsLCB1bSBVbWZyYWdlbiB6dSBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgc3RhcnRpbmcgZnJvbSB0aGUgbGF0ZXN0IGN1c3RvbWVyIHN1cnZleSBlbWFpbCBiZXR3ZWVuIG5vIGN1c3RvbWVyIHN1cnZleSBlbWFpbCBpcyBzZW50LCAoIDAgbWVhbnMgQWx3YXlzIHNlbmQgaXQgKSAuJ30gPSAnQW56YWhsIFRhZ2UsIHZvbiBkZXIgbGV0enRlbiBVbWZyYWdlLUUtTWFpbCBhbiBkZW4gS3VuZGVuLCBpbiBkZXIga2VpbmUgd2VpdGVyZSBVbWZyYWdlLUVtYWlsIGFuIGRlbiBLdW5kZW4gdmVyc2VuZGV0IHdpcmQgKDAgYmVkZXV0ZXQsIGRhc3MgZGllIEUtTWFpbCBpbW1lciB2ZXJzZW5kZXQgd2lyZCkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYm9keSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICdWb3JlaW5nZXN0ZWxsdGVyIFRleHQgZvxyIEJlbmFjaHJpY2h0aWd1bmdzLU1haWxzIGFuIGRlbiBLdW5kZW4g/GJlciBuZXVlIFVtZnJhZ2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNlbmRlciBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICdWb3JlaW5nZXN0ZWxsdGVyIEFic2VuZGVyIGb8ciBCZW5hY2hyaWNodGlndW5ncy1NYWlscyBhbiBkZW4gS3VuZGVuIPxiZXIgbmV1ZSBVbWZyYWdlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdWJqZWN0IGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJ1ZvcmVpbmdlc3RlbGx0ZXIgQmV0cmVmZiBm/HIgQmVuYWNocmljaHRpZ3VuZ3MtTWFpbHMgYW4gZGVuIEt1bmRlbiD8YmVyIG5ldWUgVW1mcmFnZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBzdXJ2ZXkgbGlzdC4nfSA9ICdEZWZpbmllcnQgZWluINxiZXJzaWNodHMtTW9kdWwsIGRhc3MgZWluZSBMaXN0ZSBhbGxlciBVbWZyYWdlbiBhbnplaWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBzdXJ2ZXkgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAnRGVmaW5pZXJ0IGRpZSBhbmdlemVpZ3RlbiBTcGFsdGVuIGluIGRlciBVbWZyYWdlLdxiZXJzaWNodC4gRGllIEVpbnN0ZWxsdW5nIGhhdCBrZWluZW4gRWZmZWt0IGF1ZiBkaWUgYW5nZXplaWd0ZSBSZWloZW5mb2xnZSBkZXIgU3BhbHRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3Igc3VydmV5IHpvb20gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdGcm9udGVuZC1Nb2R1bC1SZWdpc3RyaWVydW5nIGb8ciBkaWUgVW1mcmFnZS1EZXRhaWxhbnNpY2h0IGltIEFnZW50ZW4tSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgUHVibGljU3VydmV5IG9iamVjdCBpbiB0aGUgcHVibGljIFN1cnZleSBhcmVhLid9ID0gJ0Zyb250ZW5kLU1vZHVsLVJlZ2lzdHJpZXJ1bmcgZvxyIGRpZSD2ZmZlbnRsaWNoZSBVbWZyYWdlLdxiZXJzaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhpcyByZWdleCBtYXRjaGVzLCBubyBjdXN0b21lciBzdXJ2ZXkgd2lsbCBiZSBzZW50Lid9ID0gJ1dlbm4gZGllc2VyIHJlZ3Vs5HJlIEF1c2RydWNrIHp1dHJpZmZ0LCB3aXJkIGtlaW5lIFVtZnJhZ2UgYW4gZGVuIEt1bmRlbiBnZXNlbmRldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgc3VydmV5cyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBzdXJ2ZXkgb3ZlcnZpZXcuJ30gPSAnUGFyYW1ldGVyIGb8ciBkaWUgU2VpdGVuIGRlciBVbWZyYWdlLdxiZXJzaWNodC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljIFN1cnZleS4nfSA9ICfWZmZlbnRsaWNoZSBVbWZyYWdlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJ1VtZnJhZ2Ut3GJlcnNpY2h0IExpbWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBab29tIE1vZHVsZS4nfSA9ICdNb2R1bCBVbWZyYWdlLURldGFpbGFuc2ljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IGxpbWl0IHBlciBwYWdlIGZvciBTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJ1VtZnJhZ2UtTGltaXQgcHJvIFNlaXRlIGluIGRlciBVbWZyYWdlLdxiZXJzaWNodCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBzdXJ2ZXksIGUuZy4gU3VydmV5IywgTXlTdXJ2ZXkjLiBUaGUgZGVmYXVsdCBpcyBTdXJ2ZXkjLid9ID0gJ0RpZSBlaW5kZXV0aWdlIEJlemVpY2hudW5nIGb8ciBlaW5lIFVtZnJhZ2UsIHouIEIuIFN1cnZleSMgb2RlciBNeVN1cnZleSMuIFN0YW5kYXJkIGlzdCBTdXJ2ZXkjLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZXZlbnQgbW9kdWxlIHRvIHNlbmQgYXV0b21hdGljYWxseSBzdXJ2ZXkgZW1haWwgcmVxdWVzdHMgdG8gY3VzdG9tZXJzIGlmIGEgdGlja2V0IGdldHMgY2xvc2VkLid9ID0gJ1RpY2tldC1FdmVudC1Nb2R1bCwgdW0gYXV0b21hdGlzY2ggVW1mcmFnZS1FLU1haWxzIGFuIEt1bmRlbiB6dSBzZW5kZW4sIHdoZW4gZWluIFRpY2tldCBnZXNjaGxvc3NlbiB3aXJkLic7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJ1VtZnJhZ2UtRWlubGVpdHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGVzY3JpcHRpb24nfSA9ICdVbWZyYWdlLUJlc2NocmVpYnVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJ30gPSAnRGllc2VzIEZlbGQgd2lyZCBiZW72dGlndCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wbGV0ZSd9ID0gJ1ZvbGxzdORuZGlnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY29tcGxldGUnfSA9ICdVbnZvbGxzdORuZGlnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSMnfSA9ICdVbWZyYWdlIyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlJ30gPSAnU3RhbmRhcmR3ZXJ0JzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgb3IgZGlzYWJsZSB0aGUgU2hvd1ZvdGVEYXRhIHNjcmVlbiBvbiBwdWJsaWMgaW50ZXJmYWNlIHRvIHNob3cgZGF0YSBvZiBhbiBzcGVjaWZpYyB2b3RhdGlvbiB3aGVuIGN1c3RvbWVyIHRyaWVzIHRvIGFuc3dlciBhIHN1cnZleSBieSBzZWNvbmQgdGltZS4nfSA9CiAgICAgICAgJ0FrdGl2aWVyZW4gb2RlciBkZWFrdGl2aWVyZW4gZGVzIFNob3dWb3RlRGF0YSBzY3JlZW5zIGltIFB1YmxpYyBJbnRlcmZhY2UsIHVtIEFic3RpbW11bmdzLURhdGVuIGFuenV6ZWlnZW4sIHdlbm4gZWluIEt1bmRlIHZlcnN1Y2h0IGVpbiB6d2VpdGVzIG1hbCBhYnp1c3RpbW1lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHBhcmFtZXRlcnMgZm9yIHRoZSBTdXJ2ZXkgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnQWxsZSBQYXJhbWV0ZXIgZvxyIGRhcyBVbWZyYWdlLU1vZHVsIGltIEFnZW50ZW4tSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGhlaWdodCBmb3IgUmljaHRleHQgdmlld3MgZm9yIFN1cnZleVpvb20gZWxlbWVudHMuJ30gPSAnRGVmaW5pZXJ0IGRpZSAgU3RhbmRhcmRo9mhlIGVpbmVzIFdZU0lXWUctQmVyZWljaHMgZvxyIGRpZSBVbWZyYWdlLURldGFpbGFuc2ljaHQuJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ydV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBydV9TdXJ2ZXkucG0sdiAxLjIgMjAxMS8wMi8xNiAyMjoxNToxMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpydV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU2VuZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTdWJqZWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBCb2R5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIEJ5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW50IHJlcXVlc3RzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY2VpdmVkIHN1cnZleXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBHZW5lcmFsIEluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUmVzdWx0cyBHcmFwaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdGF0IHJlc3VsdHMuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYW5zd2VyIHRoZSBuZXh0IHF1ZXN0aW9ucyd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgU3VydmV5IE1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBtb2R1bGUgdG8gZWRpdCBzdXJ2ZXkgcXVlc3Rpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIHN0YXJ0aW5nIGZyb20gdGhlIGxhdGVzdCBjdXN0b21lciBzdXJ2ZXkgZW1haWwgYmV0d2VlbiBubyBjdXN0b21lciBzdXJ2ZXkgZW1haWwgaXMgc2VudCwgKCAwIG1lYW5zIEFsd2F5cyBzZW5kIGl0ICkgLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJvZHkgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2VuZGVyIGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN1YmplY3QgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBzdXJ2ZXkgbGlzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgc3VydmV5IG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciBzdXJ2ZXkgem9vbSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgUHVibGljU3VydmV5IG9iamVjdCBpbiB0aGUgcHVibGljIFN1cnZleSBhcmVhLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGlzIHJlZ2V4IG1hdGNoZXMsIG5vIGN1c3RvbWVyIHN1cnZleSB3aWxsIGJlIHNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIHN1cnZleXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgc3VydmV5IG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMgU3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgWm9vbSBNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBsaW1pdCBwZXIgcGFnZSBmb3IgU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgc3VydmV5LCBlLmcuIFN1cnZleSMsIE15U3VydmV5Iy4gVGhlIGRlZmF1bHQgaXMgU3VydmV5Iy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGV2ZW50IG1vZHVsZSB0byBzZW5kIGF1dG9tYXRpY2FsbHkgc3VydmV5IGVtYWlsIHJlcXVlc3RzIHRvIGN1c3RvbWVycyBpZiBhIHRpY2tldCBnZXRzIGNsb3NlZC4nfSA9ICcnOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbnRyb2R1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGVzY3JpcHRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcGxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jb21wbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkjJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgdmFsdWUnfSA9ICcnOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuYWJsZSBvciBkaXNhYmxlIHRoZSBTaG93Vm90ZURhdGEgc2NyZWVuIG9uIHB1YmxpYyBpbnRlcmZhY2UgdG8gc2hvdyBkYXRhIG9mIGFuIHNwZWNpZmljIHZvdGF0aW9uIHdoZW4gY3VzdG9tZXIgdHJpZXMgdG8gYW5zd2VyIGEgc3VydmV5IGJ5IHNlY29uZCB0aW1lLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZGVmYXVsdCBoZWlnaHQgZm9yIFJpY2h0ZXh0IHZpZXdzIGZvciBTdXJ2ZXlab29tIGVsZW1lbnRzLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kYV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBkYV9TdXJ2ZXkucG0sdiAxLjMgMjAxMS8wNC8xMiAwNTozOToyNyBtYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpkYV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBQUFTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57Jy0gQ2hhbmdlIFN0YXR1cyAtJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBOZXcgU3VydmV5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0IFF1ZXN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbiBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fuc3dlciBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzZXQgbmV3IHN0YXR1cyEgTm8gcXVlc3Rpb25zIGRlZmluZWQuJ30gPSAnS2FuIGlra2Ugc+Z0dGUgbnkgc3RhdHVzISBEZXIgZXIgaWtrZSBkZWZpbmVyZXQgbm9nZW4gc3D4cmdzbeVsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0dXMgY2hhbmdlZC4nfSA9ICdTdGF0dXMg5m5kcmV0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGFuayB5b3UgZm9yIHlvdXIgZmVlZGJhY2suJ30gPSAnVGFrIGZvciBkaW4gYmVzdmFyZWxzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIHN1cnZleSBpcyBmaW5pc2hlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tcGxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jb21wbGV0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVja2JveCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGVja2JveCAoTGlzdCknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFkaW8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmFkaW8gKExpc3QpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRzIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RleHRhcmVhJ30gPSAnVGVrc3RvbXLlZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWWVzL05vJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1llc05vJ30gPSAnSmFOZWonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYW5zd2VyZWQnfSA9ICdiZXN2YXJldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgYW5zd2VyZWQnfSA9ICdpa2tlIGJlc3ZhcmV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRzIERldGFpbCd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZSBOZXcgU3VydmV5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludHJvZHVjdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcm5hbCBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEdlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkjJ30gPSAnVW5kZXJz+GdlbHNlIyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHZW5lcmFsIEluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgT3ZlcnZpZXcgb2YnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWVzdHMgVGFibGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBTdGF0IERldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBzdGF0cyBvdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHbyBCYWNrJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHF1ZXN0aW9ucyBzYXZlZCBmb3IgdGhpcyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW5zd2VyJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU2VuZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTdWJqZWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBCb2R5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgQnknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbnQgcmVxdWVzdHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjZWl2ZWQgc3VydmV5cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBSZXN1bHRzIEdyYXBoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN0YXQgcmVzdWx0cy4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY1N1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5J30gPSAnVW5kZXJz+GdlbHNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBhbnN3ZXIgdGhlIG5leHQgcXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgbXkgYW5zd2Vycyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgVGl0bGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlc2UgYXJlIHlvdXIgYW5zd2Vycy4nfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIFN1cnZleSBNb2R1bGUuJ30gPSAnRXQgdW5kZXJz+GdlbHNlc21vZHVsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG1vZHVsZSB0byBlZGl0IHN1cnZleSBxdWVzdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgc3RhcnRpbmcgZnJvbSB0aGUgbGF0ZXN0IGN1c3RvbWVyIHN1cnZleSBlbWFpbCBiZXR3ZWVuIG5vIGN1c3RvbWVyIHN1cnZleSBlbWFpbCBpcyBzZW50LCAoIDAgbWVhbnMgQWx3YXlzIHNlbmQgaXQgKSAuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYm9keSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZW5kZXIgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3ViamVjdCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHN1cnZleSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGhlaWdodCBmb3IgUmljaHRleHQgdmlld3MgZm9yIFN1cnZleVpvb20gZWxlbWVudHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIHN1cnZleSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5hYmxlIG9yIGRpc2FibGUgdGhlIFNob3dWb3RlRGF0YSBzY3JlZW4gb24gcHVibGljIGludGVyZmFjZSB0byBzaG93IGRhdGEgb2YgYW4gc3BlY2lmaWMgdm90YXRpb24gd2hlbiBjdXN0b21lciB0cmllcyB0byBhbnN3ZXIgYSBzdXJ2ZXkgYnkgc2Vjb25kIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHN1cnZleSB6b29tIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBQdWJsaWNTdXJ2ZXkgb2JqZWN0IGluIHRoZSBwdWJsaWMgU3VydmV5IGFyZWEuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIHRoaXMgcmVnZXggbWF0Y2hlcywgbm8gY3VzdG9tZXIgc3VydmV5IHdpbGwgYmUgc2VudC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgc3VydmV5cyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBzdXJ2ZXkgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyBTdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBab29tIE1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IGxpbWl0IHBlciBwYWdlIGZvciBTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBzdXJ2ZXksIGUuZy4gU3VydmV5IywgTXlTdXJ2ZXkjLiBUaGUgZGVmYXVsdCBpcyBTdXJ2ZXkjLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZXZlbnQgbW9kdWxlIHRvIHNlbmQgYXV0b21hdGljYWxseSBzdXJ2ZXkgZW1haWwgcmVxdWVzdHMgdG8gY3VzdG9tZXJzIGlmIGEgdGlja2V0IGdldHMgY2xvc2VkLid9ID0gJyc7Cgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9lc19TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBlc19TdXJ2ZXkucG0sdiAxLjMgMjAxMS8wMi8xNiAyMjoxNToxMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplc19TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICdDcmVhciBOdWV2YSBFbmN1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRyb2R1Y3Rpb24nfSA9ICdJbnRyb2R1Y2Np824nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJuYWwgRGVzY3JpcHRpb24nfSA9ICdEZXNjcmlwY2nzbiBJbnRlcm5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnRWRpdGFyIEVuY3Vlc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJ0luZm9ybWFjafNuIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgT3ZlcnZpZXcnfSA9ICdyZXP6bWVuIEVzdGFkaXN0aWNhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJ1RhYmxhIGRlIFNvbGljaXR1ZGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgVGltZSd9ID0gJ1RpZW1wbyBkZSBFbnbtbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIFRpbWUnfSA9ICdUaWVtcG8gZGUgVm90byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzJ30gPSAnRGV0YWxsZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4nfSA9ICdObyBoYXkgcHJlZ3VudGFzIGFsbWFjZW5hZGFzIHBhcmEgZXN0YSBlbmN1ZXN0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJ0RldGFsbGVzIGRlIEVzdGFkaXN0aWNhcyBkZSBFbmN1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3J30gPSAncmVncmVzYXIgYSByZXP6bWVuIGRlIGVzdGFkaXN0aWNhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHbyBCYWNrJ30gPSAnUmVncmVzYXInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnRWRpdGFyIFByZWd1bnRhcyBkZSBFc3RhZO1zdGljYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgUXVlc3Rpb24nfSA9ICdBZ3JlZ2FyIFByZWd1bnRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGUgdGhlIHF1ZXN0aW9uJ30gPSAnRXNjcmliYSBsYSBwcmVndW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnUHJlZ3VudGFzIGRlIEVzdGFkaXN0aWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnUHJlZ3VudGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbid9ID0gJ0VkaXRhciBQcmVndW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHF1ZXN0aW9ucyd9ID0gJ3JlZ3Jlc2FyIGEgcHJlZ3VudGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bvc3NpYmxlIEFuc3dlcnMgRm9yJ30gPSAnUG9zaWJsZXMgcmVzcHVlc3RhcyBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBBbnN3ZXInfSA9ICdBZ3JlZ2FyIFJlc3B1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0KICAgICAgICAnRXN0YSBwcmVndW50YSBubyB0aWVuZSB2YXJpYXMgcmVzcHVlc3RhcywgdW4gYXJlYSBkZSB0ZXh0byBzZXLhIG1vc3RyYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQW5zd2VyJ30gPSAnRWRpdGFyIFJlc3B1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICd2b2x2ZXIgYSBlZGl0YXIgcHJlZ3VudGEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICdDb25maWd1cmFjaW9uZXMgZGUgQ29udGV4dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4LiBzaG93biBTdXJ2ZXlzIHBlciBwYWdlJ30gPSAnTnVtZXJvIG3heGltbyBkZSBlbmN1ZXN0YXMgbW9zdHJhZGFzIHBvciBw4WdpbmEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdTbWFsbAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIFNlbmRlcid9ID0gJ1JlbWl0ZW50ZSBkZSBOb3RpZmljYWNpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIFN1YmplY3QnfSA9ICdBc3VudG8gZGUgTm90aWZpY2FjafNuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBCb2R5J30gPSAnQ3VlcnBvIGRlIE5vdGlmaWNhY2nzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIFRpbWUnfSA9ICdUaWVtcG8gZGUgQ3JlYWNp824nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBCeSd9ID0gJ0NyZWFkbyBwb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlZCBUaW1lJ30gPSAnVGllbXBvIGRlIG1vZGlmaWNhY2nzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIEJ5J30gPSAnTW9kaWZpY2FjbyBwb3InOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYWNp824gZGUgRW5jdWVzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VudCByZXF1ZXN0cyd9ID0gJ1NvbGljaXR1ZGVzIGVudmlhZGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY2VpdmVkIHN1cnZleXMnfSA9ICdTb2xpY2l0dWRlcyByZWNpYmlkYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBHZW5lcmFsIEluZm8nfSA9ICdFZGl0YXIgaW5mb3JtYWNp824gR2VuZXJhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFF1ZXN0aW9ucyd9ID0gJ0VkaXRhciBQcmVndW50YXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgRGV0YWlscyd9ID0gJ0RldGFsbGUgZGUgRXN0YWTtc3RpY2FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXRhaWxzJ30gPSAnRGV0YWxsZXMgZGUgRW5jdWVzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFJlc3VsdHMgR3JhcGgnfSA9ICdHcmFmaWNhIGRlIFJlc3VsdGFkb3MgZGUgRW5jdWVzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3RhdCByZXN1bHRzLid9ID0gJ05vIGhheSBncmFmaWNhcyBkZSByZXN1bHRhZG9zLic7CgogICAgIyBUZW1wbGF0ZTogUHVibGljU3VydmV5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXknfSA9ICdFbmN1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYW5zd2VyIHRoZSBuZXh0IHF1ZXN0aW9ucyd9ID0gJ1BvciBmYXZvciBjb250ZXN0ZSBsYXMgc2lndWllbnRlcyBwcmVndW50YXMnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIFN1cnZleSBNb2R1bGUuJ30gPSAnVW4gTfNkdWxvIGRlIEVuY3Vlc3Rhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBtb2R1bGUgdG8gZWRpdCBzdXJ2ZXkgcXVlc3Rpb25zLid9ID0gJ1VuIG3zZHVsbyBwYXJhIGVkaXRhciBsYXMgcHJlZ3VudGFzIGRlIHVuYSBlbmN1ZXN0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyBzdGFydGluZyBmcm9tIHRoZSBsYXRlc3QgY3VzdG9tZXIgc3VydmV5IGVtYWlsIGJldHdlZW4gbm8gY3VzdG9tZXIgc3VydmV5IGVtYWlsIGlzIHNlbnQsICggMCBtZWFucyBBbHdheXMgc2VuZCBpdCApIC4nfSA9CiAgICAgICAgJ0RpYXMgY29tZW56YW5kbyBkZXNkZSBsYSD6bHRpbWEgZW4gY3Vlc3RhIGVudmlhZGEgYWwgY2xpZW50ZSAoIDAgc2lnbmlmaWNhIGVudmlhbGEgc2llbXByZSApIC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBib2R5IGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0KICAgICAgICAnQ3VlcnBvIGRlZmF1bHQgcGFyYSBlbCBlbWFpbCBkZSBub3RpZmljYWNp824gYSBsb3MgY2xpZW50ZXMgc29icmUgbGEgZW5jdWVzdGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2VuZGVyIGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0KICAgICAgICAnUmVtaXRlbnRlIGRlZmF1bHQgcGFyYSBlbCBlbWFpbCBkZSBub3RpZmljYWNp824gYSBsb3MgY2xpZW50ZXMgc29icmUgbGEgZW5jdWVzdGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3ViamVjdCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9CiAgICAgICAgJ0FzdW50byBkZWZhdWx0IHBhcmEgZWwgZW1haWwgZGUgbm90aWZpY2FjafNuIGEgbG9zIGNsaWVudGVzIHNvYnJlIGxhIGVuY3Vlc3RhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgc3VydmV5IGxpc3QuJ30gPQogICAgICAgICdEZWZpbmUgdW5hIG3zZHVsbyByZXN1bWVuIHBhcmEgbW9zdHJhciBsYSB2aXN0YSBwZXF1ZfFhIGRlIGxhIGxpc3RhIGRlIGVuY3Vlc3Rhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgc3VydmV5IG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0KICAgICAgICAnRGVmaW5lIGxhcyBjb2x1bW5hcyBtb3N0cmFkYXMgZW4gbGEgdmlzdGEgXCdSZXN1bWVuIGRlIEVzdGFkaXN0aWNhc1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciBzdXJ2ZXkgem9vbSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGUgbfNkdWxvIGZyb250ZW5kIFN1cnZleVpvb20gZW4gbGEgaW50ZXJmYWNlIGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBQdWJsaWNTdXJ2ZXkgb2JqZWN0IGluIHRoZSBwdWJsaWMgU3VydmV5IGFyZWEuJ30gPQogICAgICAgICdSZWdpc3RybyBkZSBt82R1bG8gZnJvbnRlbmQgUHVibGljU3VydmV5IGVuIGxhIGludGVyZmFjZSBw+mJsaWNhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGlzIHJlZ2V4IG1hdGNoZXMsIG5vIGN1c3RvbWVyIHN1cnZleSB3aWxsIGJlIHNlbnQuJ30gPQogICAgICAgICdTaSBlc3RhIGV4cHJlc2nzbiByZWd1bGFyIGNvbmN1ZXJkYSwgbGEgZW5jdWVzdGEgbm8gc2Vy4SBlbnZpYWRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBzdXJ2ZXlzIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIHN1cnZleSBvdmVydmlldy4nfSA9CiAgICAgICAgJ1BhcmFtZXRyb3MgcGFyYSBsYXMgcOFnaW5hcyAoZW4gcXVlIGxhcyBlbmN1ZXN0YXMgc29uIG1vc3RyYWRhcykgZGUgbGEgdmlzdGEgZGUgcmVzdW1lbiBwZXF1ZfFhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMgU3VydmV5Lid9ID0KICAgICAgICAnRW5jdWVzdGEgUPpibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICdMaW1pdGUgZGUgbGEgdmlzdGEgZGUgcmVzdW1lbiBwZXF1ZfFhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgWm9vbSBNb2R1bGUuJ30gPSAnTW9kdWxvIGRlIERldGFsbGUgZGUgRW5jdWVzdGEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBsaW1pdCBwZXIgcGFnZSBmb3IgU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCIuJ30gPQogICAgICAgICdMaW1pdGUgZGUgZW5jdWVzdGFzIHBvciBw4WdpbmEgcGFyYSBsYSB2aXN0YSBkZSByZXN1bWVuIHBlcXVl8WEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHN1cnZleSwgZS5nLiBTdXJ2ZXkjLCBNeVN1cnZleSMuIFRoZSBkZWZhdWx0IGlzIFN1cnZleSMuJ30gPQogICAgICAgICdFbCBpZGVudGlmaWNhZG9yIHBhcmEgdW5hIGVuY3Vlc3RhLCBlamVtcGxvIFN1cnZleSMsIE15U3VydmV5Iy4gUG9yIGRlZmVjdG8gZXMgU3VydmV5Iy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGV2ZW50IG1vZHVsZSB0byBzZW5kIGF1dG9tYXRpY2FsbHkgc3VydmV5IGVtYWlsIHJlcXVlc3RzIHRvIGN1c3RvbWVycyBpZiBhIHRpY2tldCBnZXRzIGNsb3NlZC4nfSA9CiAgICAgICAgJ01vZHVsbyBkZSBldmVudG8gZGUgVGlja2V0IHBhcmEgZW52aWFyIGF1dG9tYXRpY2FtZW50ZSBjb3JyZW9zIGRlIHNvbGljaXR1ZGVzIGRlIGVuY3Vlc3RhIGEgY2xpZW50ZXMgc2kgZWwgdGlja2V0IHNlIGhhIGNlcnJhZG8uJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJ30gPSAnRXN0ZSBjYW1wbyBlcyByZXF1ZXJpZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJ0ludHJvZHVjY2nzbiBkZSBsYSBFbmN1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGVzY3JpcHRpb24nfSA9ICdEZXNjcmlwY2nzbiBkZSBsYSBFbmN1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21wbGV0ZSd9ID0gJ0NvbXBsZXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY29tcGxldGUnfSA9ICdJbmNvbXBsZXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSMnfSA9ICdFbmN1ZXN0YSMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCB2YWx1ZSd9ID0gJ1ZhbG9yIHByZWRldGVybWluYWRvJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgb3IgZGlzYWJsZSB0aGUgU2hvd1ZvdGVEYXRhIHNjcmVlbiBvbiBwdWJsaWMgaW50ZXJmYWNlIHRvIHNob3cgZGF0YSBvZiBhbiBzcGVjaWZpYyB2b3RhdGlvbiB3aGVuIGN1c3RvbWVyIHRyaWVzIHRvIGFuc3dlciBhIHN1cnZleSBieSBzZWNvbmQgdGltZS4nfSA9CiAgICAgICAgJ0hhYmlsaXRhciBvIGRlc2hhYmlsaXRhciBsYSBwYW50YWxsYSBkZSBTaG93Vm90ZURhdGEgc2NyZWVuIGVuIGxhIGludGVyZmFzZSBwdWJsaWNhIHBhcmEgbW9zdHJhciBsb3MgZGF0b3MgZGUgdW4gdm90ZW8gJy4KICAgICAgICAnY3VhbmRvIGVsIGNsaWVudGUgaW50ZW50YSBjb250ZXN0YXIgbGEgZW5jdWVzdGEgcG9yIHNlZ3VuZGEgdmV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGwgcGFyYW1ldGVycyBmb3IgdGhlIFN1cnZleSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1RvZG9zIGxvcyBwYXJhbWV0cm9zIHBhcmEgZWwgb2JqZXRvIEVuY3Vlc3RhIGVuIGxhIGludGVyZmFzZSBkZSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgaGVpZ2h0IGZvciBSaWNodGV4dCB2aWV3cyBmb3IgU3VydmV5Wm9vbSBlbGVtZW50cy4nfSA9CiAgICAgICAgJ0RlZmluZSBsYSBhbHR1cmEgcHJlZGVmaW5pZGEgcGFyYSBsYSB2aXN0YSBkZSB0ZXh0byBlbnJpcXVlY2lkbyBwYXJhIGxvcyBlbGVtZW50b3MgZGUgbGEgcGFudGFsbCBkZSBkZXRhbGxlIGRlIGVzdGFkaXN0aWNhcy4nOwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9iZ19TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBiZ19TdXJ2ZXkucG0sdiAxLjIgMjAxMS8wMi8xNiAyMjoxNToxMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpiZ19TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXIKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbnRleHQgU2V0dGluZ3MnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4LiBzaG93biBTdXJ2ZXlzIHBlciBwYWdlJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTZW5kZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIFN1YmplY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIEJvZHknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlZCBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgQnknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5Wm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbnQgcmVxdWVzdHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjZWl2ZWQgc3VydmV5cyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEdlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFF1ZXN0aW9ucyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXRhaWxzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBSZXN1bHRzIEdyYXBoJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN0YXQgcmVzdWx0cy4nfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY1N1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBhbnN3ZXIgdGhlIG5leHQgcXVlc3Rpb25zJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBTdXJ2ZXkgTW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIG1vZHVsZSB0byBlZGl0IHN1cnZleSBxdWVzdGlvbnMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FydGljbGUgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBtZXNzYWdlIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLiBOT1RFLiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IHRoZXNlIGZpZWxkcyBhbHNvIGluIHRoZSB0aWNrZXQgem9vbSBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLCB5b3UgaGF2ZSB0byBlbmFibGUgdGhlbSBpbiBDdXN0b21lclRpY2tldFpvb20jIyNBdHRyaWJ1dGVzVmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlndXJlIHlvdXIgb3duIGxvZyB0ZXh0IGZvciBQR1AuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1c3RvbSB0ZXh0IGZvciB0aGUgcGFnZSBzaG93biB0byBjdXN0b21lcnMgdGhhdCBoYXZlIG5vIHRpY2tldHMgeWV0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIHN0YXJ0aW5nIGZyb20gdGhlIGxhdGVzdCBjdXN0b21lciBzdXJ2ZXkgZW1haWwgYmV0d2VlbiBubyBjdXN0b21lciBzdXJ2ZXkgZW1haWwgaXMgc2VudCwgKCAwIG1lYW5zIEFsd2F5cyBzZW5kIGl0ICkgLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IGJvZHkgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2VuZGVyIGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN1YmplY3QgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBzdXJ2ZXkgbGlzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgc3VydmV5IG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciBzdXJ2ZXkgem9vbSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgUHVibGljU3VydmV5IG9iamVjdCBpbiB0aGUgcHVibGljIFN1cnZleSBhcmVhLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGlzIHJlZ2V4IG1hdGNoZXMsIG5vIGN1c3RvbWVyIHN1cnZleSB3aWxsIGJlIHNlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lnbm9yZSBhcnRpY2xlIHdpdGggc3lzdGVtIHNlbmRlciB0eXBlIGZvciBuZXcgYXJ0aWNsZSBmZWF0dXJlIChlLiBnLiBhdXRvIHJlc3BvbnNlcyBvciBlbWFpbCBub3RpZmljYXRpb25zKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgc3VydmV5cyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBzdXJ2ZXkgb3ZlcnZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1B1YmxpYyBTdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGlzIHRvIHllcyBpZiB5b3UgdHJ1c3QgaW4gYWxsIHlvdXIgcHVibGljIGFuZCBwcml2YXRlIHBncCBrZXlzLCBldmVuIGlmIHRoZXkgYXJlIG5vdCBjZXJ0aWZpZWQgd2l0aCBhIHRydXN0ZWQgc2lnbmF0dXJlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93cyB0aW1lIHVzZSBjb21wbGV0ZSBkZXNjcmlwdGlvbiAoZGF5cywgaG91cnMsIG1pbnV0ZXMpLCBpZiBzZXQgdG8gIlllcyI7IG9yIGp1c3QgZmlyc3QgbGV0dGVyIChkLCBoLCBtKSwgaWYgc2V0IHRvICJObyIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBPdmVydmlldyAiU21hbGwiIExpbWl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBab29tIE1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IGxpbWl0IHBlciBwYWdlIGZvciBTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGUgaWRlbnRpZmllciBmb3IgYSBzdXJ2ZXksIGUuZy4gU3VydmV5IywgTXlTdXJ2ZXkjLiBUaGUgZGVmYXVsdCBpcyBTdXJ2ZXkjLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZXZlbnQgbW9kdWxlIHRvIHNlbmQgYXV0b21hdGljYWxseSBzdXJ2ZXkgZW1haWwgcmVxdWVzdHMgdG8gY3VzdG9tZXJzIGlmIGEgdGlja2V0IGdldHMgY2xvc2VkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaWNrZXQgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBtZXNzYWdlIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLiBOT1RFLiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IHRoZXNlIGZpZWxkcyBhbHNvIGluIHRoZSB0aWNrZXQgem9vbSBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLCB5b3UgaGF2ZSB0byBlbmFibGUgdGhlbSBpbiBDdXN0b21lclRpY2tldFpvb20jIyNBdHRyaWJ1dGVzVmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgbWVzc2FnZSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4gTk9URS4gSWYgeW91IHdhbnQgdG8gZGlzcGxheSB0aGVzZSBmaWVsZHMgYWxzbyBpbiB0aGUgdGlja2V0IHpvb20gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZSwgeW91IGhhdmUgdG8gZW5hYmxlIHRoZW0gaW4gQ3VzdG9tZXJUaWNrZXRab29tIyMjQXR0cmlidXRlc1ZpZXcuJ30gPSAnJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbnRyb2R1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXBsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY29tcGxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5Iyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlJ30gPSAnJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgb3IgZGlzYWJsZSB0aGUgU2hvd1ZvdGVEYXRhIHNjcmVlbiBvbiBwdWJsaWMgaW50ZXJmYWNlIHRvIHNob3cgZGF0YSBvZiBhbiBzcGVjaWZpYyB2b3RhdGlvbiB3aGVuIGN1c3RvbWVyIHRyaWVzIHRvIGFuc3dlciBhIHN1cnZleSBieSBzZWNvbmQgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHBhcmFtZXRlcnMgZm9yIHRoZSBTdXJ2ZXkgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgaGVpZ2h0IGZvciBSaWNodGV4dCB2aWV3cyBmb3IgU3VydmV5Wm9vbSBlbGVtZW50cy4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9uYl9OT19TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBuYl9OT19TdXJ2ZXkucG0sdiAxLjIgMjAxMS8wMi8xNiAyMjoxNToxMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpuYl9OT19TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICdMYWcgbnkgc3D4cnJldW5kZXJz+GtlbHNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludHJvZHVjdGlvbid9ID0gJ0ludHJvZHVrc2pvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcm5hbCBEZXNjcmlwdGlvbid9ID0gJ0ludGVybiBiZXNrcml2ZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRWRpdCd9ID0gJ1JlZGlnZXIgc3D4cnJldW5kZXJz+GtlbHNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJ0dlbmVyZWxsIGluZm9ybWFzam9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRzIE92ZXJ2aWV3J30gPSAnU3RhdGlzdGlra292ZXJzaWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RzIFRhYmxlJ30gPSAnVGFiZWxsZm9yZXNw+HJzZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VuZCBUaW1lJ30gPSAnVGlkIHNlbmR0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZvdGUgVGltZSd9ID0gJ1RpZCBzdmFydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzJ30gPSAnRGV0YWxqZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4nfSA9ICdJbmdlbiBzcPhyc23lbCBsYWdyZXQgZm9yIGRlbm5lIHNw+HJyZXVuZGVyc/hrZWxzZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBTdGF0IERldGFpbHMnfSA9ICdEZXRhbGpzdGF0aXN0aWtrIGZvciBzcPhycmV1bmRlcnP4a2Vsc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBzdGF0cyBvdmVydmlldyd9ID0gJ2flIHRpbGJha2UgdGlsIHN0YXRpc3Rpa2tvdmVyc2lrdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICdH5SB0aWxiYWtlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0IFF1ZXN0aW9ucyd9ID0gJ1JlZGlnZXIgc3D4cnNt5WwgdGlsIHNw+HJyZXVuZGVyc/hrZWxzZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFF1ZXN0aW9uJ30gPSAnTGVnZyB0aWwgc3D4cnNt5WwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZSB0aGUgcXVlc3Rpb24nfSA9ICdTa3JpdiBpbm4gc3D4cnNt5WxldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnU3D4cnNt5WwgdGlsIHNw+HJyZXVuZGVyc/hrZWxzZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUXVlc3Rpb24nfSA9ICdTcPhyc23lbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFF1ZXN0aW9uJ30gPSAnUmVkaWdlciBzcPhyc23lbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHF1ZXN0aW9ucyd9ID0gJ3RpbGJha2UgdGlsIHNw+HJzbeVsZW5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bvc3NpYmxlIEFuc3dlcnMgRm9yJ30gPSAnTXVsaWdlIHN2YXJhbHRlcm5hdGl2ZXIgZm9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBBbnN3ZXInfSA9ICdMZWdnIHRpbCBzdmFyYWx0ZXJuYXRpdmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgZG9lc25cJ3QgaGF2ZSBzZXZlcmFsIGFuc3dlcnMsIGEgdGV4dGFyZWEgd2lsbCBiZSBkaXNwbGF5ZWQuJ30gPSAnRGV0dGUgc3D4cnNt5WxldCBoYXIgaWtrZSBtdWxpZ2hldCBmb3Igc3ZhcmFsdGVybmF0aXZlci4gSGVyIHZpbCBkZXQga3VuIGJsaSB2aXN0IGVuIHRla3N0Ym9rcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBBbnN3ZXInfSA9ICdSZWRpZ2VyIHN2YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBlZGl0IHF1ZXN0aW9uJ30gPSAnZ+UgdGlsYmFrZSBmb3Ig5SByZWRpZ2VyZSBzcPhyc23lbCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXguIHNob3duIFN1cnZleXMgcGVyIHBhZ2UnfSA9ICdNYXggYW50YWxsIHNw+HJyZXVuZGVyc/hrZWxzZXIgcHIgc2lkZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU2VuZGVyJ30gPSAnQXZzZW5kZXIgYXYgdmFyc2VsLWUtcG9zdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU3ViamVjdCd9ID0gJ1RpdHRlbCBpIHZhcnNlbC1lLXBvc3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm90aWZpY2F0aW9uIEJvZHknfSA9ICdNZWxkaW5nIGkgdmFyc2VsLWUtcG9zdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIFRpbWUnfSA9ICdUaWQgb3BwcmV0dGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICdPcHByZXR0ZXQgYXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlZCBUaW1lJ30gPSAnVGlkIGVuZHJldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIEJ5J30gPSAnRW5kcmV0IGF2JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFzam9uIG9tIHNw+HJyZXVuZGVyc/hrZWxzZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VudCByZXF1ZXN0cyd9ID0gJ1NlbmR0ZSBmb3Jlc3D4cnNsZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjZWl2ZWQgc3VydmV5cyd9ID0gJ01vdHRhdHRlIHNw+HJyZXVuZGVyc/hrZWxzZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBHZW5lcmFsIEluZm8nfSA9ICdSZWRpZ2VyIGdlbmVyZWxsIGluZm9ybWFzam9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb25zJ30gPSAnUmVkaWdlciBzcPhyc23lbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBEZXRhaWxzJ30gPSAnRGV0YWxqZXIgb20gc3RhdGlzdGlra2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXRhaWxzJ30gPSAnRGV0YWxqZXIgb20gc3D4cnJldW5kZXJz+GtlbHNlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUmVzdWx0cyBHcmFwaCd9ID0gJ0dyYWZpc2sgZnJlbXN0aWxsaW5nIGF2IHN2YXJlbmUgaSBzcPhycmV1bmRlcnP4a2Vsc2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN0YXQgcmVzdWx0cy4nfSA9ICdJbmdlbiByZXN1bHRhdGVyJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSd9ID0gJ1Nw+HJyZXVuZGVyc/hrZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYW5zd2VyIHRoZSBuZXh0IHF1ZXN0aW9ucyd9ID0gJ1Zlbm5saWdzdCBzdmFyIHDlIGRlIG5lc3RlIHNw+HJzbeVsZW5lJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBTdXJ2ZXkgTW9kdWxlLid9ID0gJ0VuIG1vZHVsIGZvciBzcPhycmV1bmRlcnP4a2Vsc2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgbW9kdWxlIHRvIGVkaXQgc3VydmV5IHF1ZXN0aW9ucy4nfSA9ICdFbiBtb2R1bCBmb3Ig5SByZWRpZ2VyZSBzcPhycmV1bmRlcnP4a2Vsc2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgc3RhcnRpbmcgZnJvbSB0aGUgbGF0ZXN0IGN1c3RvbWVyIHN1cnZleSBlbWFpbCBiZXR3ZWVuIG5vIGN1c3RvbWVyIHN1cnZleSBlbWFpbCBpcyBzZW50LCAoIDAgbWVhbnMgQWx3YXlzIHNlbmQgaXQgKSAuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYm9keSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICdTdGFuZGFyZCBtZWxkaW5nIGkgdmFyc2VsLWUtcG9zdCB0aWwga3VuZGVyIG9tIGVuIG55IHNw+HJyZXVuZGVyc/hrZWxzZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZW5kZXIgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnU3RhbmRhcmQgYXZzZW5kZXIgaSB2YXJzZWwtZS1wb3N0IHRpbCBrdW5kZXIgb20gZW4gbnkgc3D4cnJldW5kZXJz+GtlbHNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN1YmplY3QgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnU3RhbmRhcmQgb3ZlcnNrcmlmdCBpIHZhcnNlbC1lLXBvc3QgdGlsIGt1bmRlciBvbSBlbiBueSBzcPhycmV1bmRlcnP4a2Vsc2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgYW4gb3ZlcnZpZXcgbW9kdWxlIHRvIHNob3cgdGhlIHNtYWxsIHZpZXcgb2YgYSBzdXJ2ZXkgbGlzdC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgc3VydmV5IG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciBzdXJ2ZXkgem9vbSBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgUHVibGljU3VydmV5IG9iamVjdCBpbiB0aGUgcHVibGljIFN1cnZleSBhcmVhLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiB0aGlzIHJlZ2V4IG1hdGNoZXMsIG5vIGN1c3RvbWVyIHN1cnZleSB3aWxsIGJlIHNlbnQuJ30gPSAnSHZpcyBkZW5uZSByZWdleGVuIHN0ZW1tZXIsIHZpbCBkZXQgaWtrZSBibGkgc2VuZHQgdXQgZW4gc3D4cnJldW5kZXJz+GtlbHNlIHRpbCBrdW5kZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBwYWdlcyAoaW4gd2hpY2ggdGhlIHN1cnZleXMgYXJlIHNob3duKSBvZiB0aGUgc21hbGwgc3VydmV5IG92ZXJ2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQdWJsaWMgU3VydmV5Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIiBMaW1pdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgWm9vbSBNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBsaW1pdCBwZXIgcGFnZSBmb3IgU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgc3VydmV5LCBlLmcuIFN1cnZleSMsIE15U3VydmV5Iy4gVGhlIGRlZmF1bHQgaXMgU3VydmV5Iy4nfSA9ICdTdGFuZGFyZCBpZGVudGlmaWthdG9yIGZvciBlbiB1bmRlcnP4a2xzZSwgZi5la3MuIFNw+HJyZXVuZGVyc/hrZWxzZSMsIE1pblNw+HJyZXVuZGVyc/hrZWxzZSMuIFN0YW5kYXJkIGVyIFN1cnZleSMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBldmVudCBtb2R1bGUgdG8gc2VuZCBhdXRvbWF0aWNhbGx5IHN1cnZleSBlbWFpbCByZXF1ZXN0cyB0byBjdXN0b21lcnMgaWYgYSB0aWNrZXQgZ2V0cyBjbG9zZWQuJ30gPSAnJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBEZXNjcmlwdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGZpZWxkIGlzIHJlcXVpcmVkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbnRyb2R1Y3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbXBsZXRlJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY29tcGxldGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5Iyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHZhbHVlJ30gPSAnJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmFibGUgb3IgZGlzYWJsZSB0aGUgU2hvd1ZvdGVEYXRhIHNjcmVlbiBvbiBwdWJsaWMgaW50ZXJmYWNlIHRvIHNob3cgZGF0YSBvZiBhbiBzcGVjaWZpYyB2b3RhdGlvbiB3aGVuIGN1c3RvbWVyIHRyaWVzIHRvIGFuc3dlciBhIHN1cnZleSBieSBzZWNvbmQgdGltZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsIHBhcmFtZXRlcnMgZm9yIHRoZSBTdXJ2ZXkgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGRlZmF1bHQgaGVpZ2h0IGZvciBSaWNodGV4dCB2aWV3cyBmb3IgU3VydmV5Wm9vbSBlbGVtZW50cy4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wdF9CUl9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlIGZvciBCcmF6aWxpYW4gUG9ydHVndWVzZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogcHRfQlJfU3VydmV5LnBtLHYgMS4xLjIuMiAyMDEyLzAyLzE1IDIxOjAxOjExIG1iIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0JSX1N1cnZleTsKCnVzZSBzdHJpY3Q7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGUgTmV3IFN1cnZleSd9ID0gJ0NyaWFyIE5vdmEgUGVzcXVpc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnSW50cm9kdefjbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRlcm5hbCBEZXNjcmlwdGlvbid9ID0gJ0Rlc2NyaefjbyBJbnRlcm5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnRWRpdGFyIFBlc3F1aXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJ0luZm9ybWHn428gR2VyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgT3ZlcnZpZXcnfSA9ICdSZXN1bW8gZGUgRXN0YXTtc3RpY2FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVlc3RzIFRhYmxlJ30gPSAnVGFiZWxhIGRlIFJlcXVpc2nn9WVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgVGltZSd9ID0gJ0hvcmEgZGUgRW52aW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnSG9yYSBkbyBWb3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICdEZXRhbGhlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBxdWVzdGlvbnMgc2F2ZWQgZm9yIHRoaXMgc3VydmV5Lid9ID0gJ05lbmh1bWEgcXVlc3TjbyBzYWx2YSBwYXJhIGVzdGEgcGVzcXVpc2EuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBTdGF0IERldGFpbHMnfSA9ICdEZXRhbGhlcyBkZSBFc3RhdO1zdGljYXMgZGEgUGVzcXVpc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBzdGF0cyBvdmVydmlldyd9ID0gJ3ZvbHRhciBhbyByZXN1bW8gZGUgZXN0YXTtc3RpY2FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICdWb2x0YXInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnRWRpdGFyIFByZWd1bnRhcyBkYSBQZXNxdWlzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgUXVlc3Rpb24nfSA9ICdBZGljaW9uYXIgUHJlZ3VudGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHlwZSB0aGUgcXVlc3Rpb24nfSA9ICdFc2NyZXZhIGEgcGVyZ3VudGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFF1ZXN0aW9ucyd9ID0gJ1Blcmd1bnRhcyBkYSBQZXNxdWlzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbid9ID0gJ1ByZWd1bnRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICdFZGl0YXIgUHJlZ3VudGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICd2b2x0YXIg4HMgcHJlZ3VudGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bvc3NpYmxlIEFuc3dlcnMgRm9yJ30gPSAnUG9zc+12ZWlzIFJlc3Bvc3RhcyBQYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBBbnN3ZXInfSA9ICdBZGljaW9uYXIgUmVzcG9zdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBkb2VzblwndCBoYXZlIHNldmVyYWwgYW5zd2VycywgYSB0ZXh0YXJlYSB3aWxsIGJlIGRpc3BsYXllZC4nfSA9CiAgICAgICAgJ0VzdGEgcGVyZ3VudGEgbuNvIHBvc3N1aSB24XJpYXMgcmVzcG9zdGFzLCB1bWEg4XJlYSBkZSB0ZXh0byBzZXLhIG1vc3RyYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgQW5zd2VyJ30gPSAnRWRpdGFyIFJlc3Bvc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2dvIGJhY2sgdG8gZWRpdCBxdWVzdGlvbid9ID0gJ3ZvbHRhciBwYXJhIGVkaXRhciBwZXJndW50YSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld05hdkJhcgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29udGV4dCBTZXR0aW5ncyd9ID0gJ0NvbmZpZ3VyYef1ZXMgZGUgQ29udGV4dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4LiBzaG93biBTdXJ2ZXlzIHBlciBwYWdlJ30gPSAnTeF4aW1vIGRlIFBlc3F1aXNhcyBtb3N0cmFkYXMgcG9yIHDhZ2luYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU2VuZGVyJ30gPSAnUmVtZXRlbnRlIGRhIE5vdGlmaWNh5+NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTdWJqZWN0J30gPSAnQXNzdW50byBkYSBOb3RpZmljYefjbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gQm9keSd9ID0gJ0NvcnBvIGRhIE5vdGlmaWNh5+NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgVGltZSd9ID0gJ0hvcmEgZGUgQ3Jp5+NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICdDcmlhZG8gcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgVGltZSd9ID0gJ0hvcmEgZGUgTW9kaWZpY2Hn428nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlZCBCeSd9ID0gJ01vZGlmaWNhZG8gcG9yJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWHn428gZGEgUGVzcXVpc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VudCByZXF1ZXN0cyd9ID0gJ1NvbGljaXRh5/VlcyBlbnZpYWRhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNlaXZlZCBzdXJ2ZXlzJ30gPSAnU29saWNpdGHn9WVzIHJlY2ViaWRhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEdlbmVyYWwgSW5mbyd9ID0gJ0VkaXRhciBJbmZvcm1h5/VlcyBHZXJhaXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbnMnfSA9ICdFZGl0YXIgUHJlZ3VudGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRzIERldGFpbHMnfSA9ICdEZXRhbGhlcyBkZSBFc3RhdO1zdGljYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IERldGFpbHMnfSA9ICdEZXRhbGhlcyBkYSBQZXNxdWlzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUmVzdWx0cyBHcmFwaCd9ID0gJ0dy4WZpY29zIGRlIFJlc3VsdGFkb3MgZGEgUGVzcXVpc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gc3RhdCByZXN1bHRzLid9ID0gJ1NlbSByZXN1bHRhZG9zIGRlIGVzdGF07XN0aWNhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEludHJvZHVjdGlvbid9ID0gJ0ludHJvZHXn428gZGEgUGVzcXVpc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IERlc2NyaXB0aW9uJ30gPSAnRGVzY3Jp5+NvIGRhIFBlc3F1aXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57Jy0gQ2hhbmdlIFN0YXR1cyAtJ30gPSAnLSBBbHRlcmFyIFN0YXR1cyAtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQnfSA9ICdJbnbhaWRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2Fuc3dlcmVkJ30gPSAnUmVzcG9uZGlkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydub3QgYW5zd2VyZWQnfSA9ICdO428gcmVzcG9uZGlkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkjJ30gPSAnUGVzcXVpc2EjJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSd9ID0gJ1Blc3F1aXNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBhbnN3ZXIgdGhlIG5leHQgcXVlc3Rpb25zJ30gPSAnUG9yIGZhdm9yLCByZXNwb25kYSBhcyBzZWd1aW50ZXMgcGVyZ3VudGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoYW5rIHlvdSBmb3IgeW91ciBmZWVkYmFjay4nfSA9ICdPYnJpZ2FkbyBwZWxhIHN1YSBwYXJ0aWNpcGHn428uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBzdXJ2ZXkgaXMgZmluaXNoZWQuJ30gPSAnQSBwZXNxdWlzYSBlc3ThIGZpbmFsaXphZGEuJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vU3VydmV5LnBtIC0gYWxsIHN1cnZleSBmdW50aW9ucwojIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogU3VydmV5LnBtLHYgMS42MiAyMDExLzAzLzA0IDA1OjEyOjM1IGR6IEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTdXJ2ZXk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRGlnZXN0OjpNRDU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyOwp1c2UgS2VybmVsOjpTeXN0ZW06OkVtYWlsOwp1c2UgS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlsczsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ7CnVzZSBNYWlsOjpBZGRyZXNzOwoKdXNlIHZhcnMgcXcoQElTQSAkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjYyICQpIFsxXTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6U3VydmV5IC0gc3VydmV5IGxpYgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgc3VydmV5IGZ1bmN0aW9ucy4gRS4gZy4gdG8gYWRkIHN1cnZleSBvciBhbmQgZnVuY3Rpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6Q29uZmlnOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpFbmNvZGU7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkxvZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6REI7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok1haW47CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OlVzZXI7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OlN1cnZleTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgbXkgJEVuY29kZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICk7CiAgICBteSAkTG9nT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgKTsKICAgIG15ICRUaW1lT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlRpbWUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkTWFpbk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpNYWluLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICApOwogICAgbXkgJERCT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRVc2VyT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlVzZXItPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICAgICAgVGltZU9iamVjdCAgID0+ICRUaW1lT2JqZWN0LAogICAgICAgIERCT2JqZWN0ICAgICA9PiAkREJPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICApOwogICAgbXkgJFN1cnZleU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpTdXJ2ZXktPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBUaW1lT2JqZWN0ICAgPT4gJFRpbWVPYmplY3QsCiAgICAgICAgREJPYmplY3QgICAgID0+ICREQk9iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgVXNlck9iamVjdCAgID0+ICRVc2VyT2JqZWN0LAogICAgKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgVGltZU9iamVjdCBEQk9iamVjdCBNYWluT2JqZWN0IEVuY29kZU9iamVjdCBVc2VyT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+eyRPYmplY3R9ID0gJFBhcmFteyRPYmplY3R9IHx8IGRpZSAiR290IG5vICRPYmplY3QhIjsKICAgIH0KCiAgICAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0gPSAkUGFyYW17SFRNTFV0aWxzT2JqZWN0fQogICAgICAgIHx8IEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMtPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57U2VuZG1haWxPYmplY3R9ID0gJFBhcmFte1NlbmRtYWlsT2JqZWN0fSB8fCBLZXJuZWw6OlN5c3RlbTo6RW1haWwtPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57Q3VzdG9tZXJVc2VyT2JqZWN0fSA9ICRQYXJhbXtDdXN0b21lclVzZXJPYmplY3R9CiAgICAgICAgfHwgS2VybmVsOjpTeXN0ZW06OkN1c3RvbWVyVXNlci0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntUaWNrZXRPYmplY3R9ID0gJFBhcmFte1RpY2tldE9iamVjdH0gfHwgS2VybmVsOjpTeXN0ZW06OlRpY2tldC0+bmV3KCAleyRTZWxmfSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gU3VydmV5TGlzdCgpCgp0byBnZXQgYSBhcnJheSBsaXN0IG9mIGFsbCBzdXJ2ZXkgaXRlbXMKCiAgICBteSBATGlzdCA9ICRTdXJ2ZXlPYmplY3QtPlN1cnZleUxpc3QoKTsKCj1jdXQKCnN1YiBTdXJ2ZXlMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgc3VydmV5IGxpc3QKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkIEZST00gc3VydmV5IE9SREVSIEJZIGNyZWF0ZV90aW1lIERFU0MnLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHRzCiAgICBteSBATGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBATGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gQExpc3Q7Cn0KCj1pdGVtIFN1cnZleUdldCgpCgp0byBnZXQgYWxsIGF0dHJpYnV0ZXMgb2YgYSBzdXJ2ZXkKCiAgICBteSAlU3VydmV5ID0gJFN1cnZleU9iamVjdC0+U3VydmV5R2V0KAogICAgICAgIFN1cnZleUlEID0+IDEyMwogICAgKTsKCj1jdXQKCnN1YiBTdXJ2ZXlHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1N1cnZleUlEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU3VydmV5SUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17U3VydmV5SUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17U3VydmV5SUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGdldCBhbGwgYXR0cmlidXRlcyBvZiBhIHN1cnZleQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQsIHN1cnZleW51bWJlciwgdGl0bGUsIGludHJvZHVjdGlvbiwgZGVzY3JpcHRpb24sIgogICAgICAgICAgICAuICIgbm90aWZpY2F0aW9uX3NlbmRlciwgbm90aWZpY2F0aW9uX3N1YmplY3QsIG5vdGlmaWNhdGlvbl9ib2R5LCAiCiAgICAgICAgICAgIC4gIiBzdGF0dXMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkgIgogICAgICAgICAgICAuICIgRlJPTSBzdXJ2ZXkgV0hFUkUgaWQgPSAkUGFyYW17U3VydmV5SUR9IiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXtTdXJ2ZXlJRH0gICAgICAgICAgICA9ICRSb3dbMF07CiAgICAgICAgJERhdGF7U3VydmV5TnVtYmVyfSAgICAgICAgPSAkUm93WzFdOwogICAgICAgICREYXRhe1RpdGxlfSAgICAgICAgICAgICAgID0gJFJvd1syXTsKICAgICAgICAkRGF0YXtJbnRyb2R1Y3Rpb259ICAgICAgICA9ICRSb3dbM107CiAgICAgICAgJERhdGF7RGVzY3JpcHRpb259ICAgICAgICAgPSAkUm93WzRdOwogICAgICAgICREYXRhe05vdGlmaWNhdGlvblNlbmRlcn0gID0gJFJvd1s1XTsKICAgICAgICAkRGF0YXtOb3RpZmljYXRpb25TdWJqZWN0fSA9ICRSb3dbNl07CiAgICAgICAgJERhdGF7Tm90aWZpY2F0aW9uQm9keX0gICAgPSAkUm93WzddOwogICAgICAgICREYXRhe1N0YXR1c30gICAgICAgICAgICAgID0gJFJvd1s4XTsKICAgICAgICAkRGF0YXtDcmVhdGVUaW1lfSAgICAgICAgICA9ICRSb3dbOV07CiAgICAgICAgJERhdGF7Q3JlYXRlQnl9ICAgICAgICAgICAgPSAkUm93WzEwXTsKICAgICAgICAkRGF0YXtDaGFuZ2VUaW1lfSAgICAgICAgICA9ICRSb3dbMTFdOwogICAgICAgICREYXRhe0NoYW5nZUJ5fSAgICAgICAgICAgID0gJFJvd1sxMl07CiAgICB9CgogICAgaWYgKCAhJURhdGEgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBzdWNoIFN1cnZleUlEICRQYXJhbXtTdXJ2ZXlJRH0hIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlcwogICAgJERhdGF7Tm90aWZpY2F0aW9uU2VuZGVyfSAgfHw9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdTdXJ2ZXk6Ok5vdGlmaWNhdGlvblNlbmRlcicpOwogICAgJERhdGF7Tm90aWZpY2F0aW9uU3ViamVjdH0gfHw9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdTdXJ2ZXk6Ok5vdGlmaWNhdGlvblN1YmplY3QnKTsKICAgICREYXRhe05vdGlmaWNhdGlvbkJvZHl9ICAgIHx8PSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU3VydmV5OjpOb3RpZmljYXRpb25Cb2R5Jyk7CgogICAgIyBnZXQgcXVldWVzCiAgICAkRGF0YXtRdWV1ZXN9ID0gJFNlbGYtPlN1cnZleVF1ZXVlR2V0KAogICAgICAgIFN1cnZleUlEID0+ICRQYXJhbXtTdXJ2ZXlJRH0sCiAgICApOwoKICAgICMgYWRkZWQgQ3JlYXRlQnkKICAgIGlmICggISRQYXJhbXtQdWJsaWN9ICkgewogICAgICAgIG15ICVDcmVhdGVVc2VySW5mbyA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgPT4gJERhdGF7Q3JlYXRlQnl9LAogICAgICAgICAgICBDYWNoZWQgPT4gMSwKICAgICAgICApOwogICAgICAgICREYXRhe0NyZWF0ZVVzZXJMb2dpbn0gICAgID0gJENyZWF0ZVVzZXJJbmZve1VzZXJMb2dpbn07CiAgICAgICAgJERhdGF7Q3JlYXRlVXNlckZpcnN0bmFtZX0gPSAkQ3JlYXRlVXNlckluZm97VXNlckZpcnN0bmFtZX07CiAgICAgICAgJERhdGF7Q3JlYXRlVXNlckxhc3RuYW1lfSAgPSAkQ3JlYXRlVXNlckluZm97VXNlckxhc3RuYW1lfTsKCiAgICAgICAgIyBhZGRlZCBDaGFuZ2VCeQogICAgICAgIG15ICVDaGFuZ2VVc2VySW5mbyA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgICAgICBVc2VySUQgPT4gJERhdGF7Q2hhbmdlQnl9LAogICAgICAgICAgICBDYWNoZWQgPT4gMSwKICAgICAgICApOwogICAgICAgICREYXRhe0NoYW5nZVVzZXJMb2dpbn0gICAgID0gJENoYW5nZVVzZXJJbmZve1VzZXJMb2dpbn07CiAgICAgICAgJERhdGF7Q2hhbmdlVXNlckZpcnN0bmFtZX0gPSAkQ2hhbmdlVXNlckluZm97VXNlckZpcnN0bmFtZX07CiAgICAgICAgJERhdGF7Q2hhbmdlVXNlckxhc3RuYW1lfSAgPSAkQ2hhbmdlVXNlckluZm97VXNlckxhc3RuYW1lfTsKICAgIH0KCiAgICByZXR1cm4gJURhdGE7Cn0KCj1pdGVtIFN1cnZleVN0YXR1c1NldCgpCgp0byBzZXQgYSBuZXcgc3VydmV5IHN0YXR1cyAoVmFsaWQsIEludmFsaWQsIE1hc3RlcikKCiAgICAkU3RhdHVzU2V0ID0gJFN1cnZleU9iamVjdC0+U3VydmV5U3RhdHVzU2V0KAogICAgICAgIFN1cnZleUlEICA9PiAxMjMsCiAgICAgICAgTmV3U3RhdHVzID0+ICdNYXN0ZXInCiAgICApOwoKPWN1dAoKc3ViIFN1cnZleVN0YXR1c1NldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTdXJ2ZXlJRCBOZXdTdGF0dXMpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtOZXdTdGF0dXN9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17TmV3U3RhdHVzfSApOwogICAgJFBhcmFte1N1cnZleUlEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1N1cnZleUlEfSwgJ0ludGVnZXInICk7CgogICAgIyBnZXQgY3VycmVudCBzdGF0dXMKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICJTRUxFQ1Qgc3RhdHVzIEZST00gc3VydmV5IFdIRVJFIGlkID0gJFBhcmFte1N1cnZleUlEfSIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkU3RhdHVzID0gJyc7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRTdGF0dXMgPSAkUm93WzBdOwogICAgfQoKICAgICMgdGhlIGN1cmVudCBzdGF0dXMKICAgIGlmICggJFN0YXR1cyBlcSAnTmV3JyB8fCAkU3RhdHVzIGVxICdJbnZhbGlkJyApIHsKCiAgICAgICAgIyBnZXQgdGhlIHF1ZXN0aW9uIGlkcwogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgICA9PiAiU0VMRUNUIGlkIEZST00gc3VydmV5X3F1ZXN0aW9uIFdIRVJFIHN1cnZleV9pZCA9ICRQYXJhbXtTdXJ2ZXlJRH0iLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIG15ICRRdWVzdDsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkUXVlc3QgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICdOb1F1ZXN0aW9uJyBpZiAhJFF1ZXN0OwoKICAgICAgICAjIGdldCBhbGwgcXVlc3Rpb25zICh0eXBlIHJhZGlvIGFuZCBjaGVja2JveCkKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQgRlJPTSBzdXJ2ZXlfcXVlc3Rpb24iCiAgICAgICAgICAgICAgICAuICIgV0hFUkUgc3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSBBTkQgIgogICAgICAgICAgICAgICAgLiAiKHF1ZXN0aW9uX3R5cGUgPSAnUmFkaW8nIE9SIHF1ZXN0aW9uX3R5cGUgPSAnQ2hlY2tib3gnKSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICAgICAgbXkgQFF1ZXN0aW9uSURzOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgIHB1c2goIEBRdWVzdGlvbklEcywgJFJvd1swXSApOwogICAgICAgIH0KICAgICAgICBmb3IgbXkgJE9uZUlEIChAUXVlc3Rpb25JRHMpIHsKCiAgICAgICAgICAgICMgZ2V0IGFsbCBhbnN3ZXIgaWRzIG9mIGEgcXVlc3Rpb24KICAgICAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgICAgICBTUUwgICA9PiAiU0VMRUNUIENPVU5UKGlkKSBGUk9NIHN1cnZleV9hbnN3ZXIgV0hFUkUgcXVlc3Rpb25faWQgPSAkT25lSUQiLAogICAgICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgICAgICBteSAkQ291bnRlcjsKICAgICAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgICAgICRDb3VudGVyID0gJFJvd1swXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICdJbmNvbXBsZXRlUXVlc3Rpb24nIGlmICRDb3VudGVyIDwgMjsKICAgICAgICB9CgogICAgICAgICMgc2V0IG5ldyBzdGF0dXMKICAgICAgICBpZiAoICRQYXJhbXtOZXdTdGF0dXN9IGVxICdNYXN0ZXInICkgewogICAgICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXkgU0VUIHN0YXR1cyA9ICdWYWxpZCcgV0hFUkUgc3RhdHVzID0gJ01hc3RlciciLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBpZiAoICRQYXJhbXtOZXdTdGF0dXN9IGVxICdWYWxpZCcgfHwgJFBhcmFte05ld1N0YXR1c30gZXEgJ01hc3RlcicgKSB7CiAgICAgICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleSBTRVQgc3RhdHVzID0gJyRQYXJhbXtOZXdTdGF0dXN9JyAiCiAgICAgICAgICAgICAgICAgICAgLiAiV0hFUkUgaWQgPSAkUGFyYW17U3VydmV5SUR9IiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICdTdGF0dXNTZXQnOwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJFN0YXR1cyBlcSAnVmFsaWQnICkgewoKICAgICAgICAjIHNldCBzdGF0dXMgTWFzdGVyCiAgICAgICAgaWYgKCAkUGFyYW17TmV3U3RhdHVzfSBlcSAnTWFzdGVyJyApIHsKICAgICAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5IFNFVCBzdGF0dXMgPSAnVmFsaWQnIFdIRVJFIHN0YXR1cyA9ICdNYXN0ZXInIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5IFNFVCBzdGF0dXMgPSAnTWFzdGVyJyBXSEVSRSBpZCA9ICRQYXJhbXtTdXJ2ZXlJRH0iLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gJ1N0YXR1c1NldCc7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBzdGF0dXMgSW52YWxpZAogICAgICAgIGVsc2lmICggJFBhcmFte05ld1N0YXR1c30gZXEgJ0ludmFsaWQnICkgewogICAgICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXkgU0VUIHN0YXR1cyA9ICdJbnZhbGlkJyBXSEVSRSBpZCA9ICRQYXJhbXtTdXJ2ZXlJRH0iLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gJ1N0YXR1c1NldCc7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkU3RhdHVzIGVxICdNYXN0ZXInICkgewoKICAgICAgICAjIHNldCBzdGF0dXMgVmFsaWQKICAgICAgICBpZiAoICRQYXJhbXtOZXdTdGF0dXN9IGVxICdWYWxpZCcgfHwgJFBhcmFte05ld1N0YXR1c30gZXEgJ0ludmFsaWQnICkgewogICAgICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXkgU0VUIHN0YXR1cyA9ICckUGFyYW17TmV3U3RhdHVzfScgIgogICAgICAgICAgICAgICAgICAgIC4gIldIRVJFIGlkID0gJFBhcmFte1N1cnZleUlEfSIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiAnU3RhdHVzU2V0JzsKICAgICAgICB9CiAgICB9Cn0KCj1pdGVtIFN1cnZleVNhdmUoKQoKdG8gdXBkYXRlIGFuIGV4aXN0aW5nIHN1cnZleQoKICAgICRTdXJ2ZXlPYmplY3QtPlN1cnZleVNhdmUoCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFN1cnZleUlEICAgICAgICAgICAgPT4gNCwKICAgICAgICBUaXRsZSAgICAgICAgICAgICAgID0+ICdBIFRpdGxlJywKICAgICAgICBJbnRyb2R1Y3Rpb24gICAgICAgID0+ICdUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBzdXJ2ZXknLAogICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgPT4gJ1RoZSBpbnRlcm5hbCBkZXNjcmlwdGlvbiBvZiB0aGUgc3VydmV5JywKICAgICAgICBOb3RpZmljYXRpb25TZW5kZXIgID0+ICdxdWFsaXR5QGV4YW1wbGUuY29tJywKICAgICAgICBOb3RpZmljYXRpb25TdWJqZWN0ID0+ICdIZWxwIHVzIHdpdGggeW91ciBmZWVkYmFjayEnLAogICAgICAgIE5vdGlmaWNhdGlvbkJvZHkgICAgPT4gJ0RlYXIgY3VzdG9tZXIuLi4nLAogICAgICAgIFF1ZXVlcyAgICAgICAgICAgICAgPT4gWzIsIDUsIDldLCAgIyAob3B0aW9uYWwpIHN1cnZleSBpcyB2YWxpZCBmb3IgdGhlc2UgcXVldWVzCiAgICApOwoKPWN1dAoKc3ViIFN1cnZleVNhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAoCiAgICAgICAgcXcoCiAgICAgICAgVXNlcklEIFN1cnZleUlEIFRpdGxlIEludHJvZHVjdGlvbiBEZXNjcmlwdGlvbgogICAgICAgIE5vdGlmaWNhdGlvblNlbmRlciBOb3RpZmljYXRpb25TdWJqZWN0IE5vdGlmaWNhdGlvbkJvZHkKICAgICAgICApCiAgICAgICAgKQogICAgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIHF1ZXVlcwogICAgaWYgKCAkUGFyYW17UXVldWVzfSAmJiByZWYgJFBhcmFte1F1ZXVlc30gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1F1ZXVlcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZS4nLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgdmFsdWUKICAgICRQYXJhbXtRdWV1ZXN9IHx8PSBbXTsKCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50ICgKICAgICAgICBxdygKICAgICAgICBUaXRsZSBJbnRyb2R1Y3Rpb24gRGVzY3JpcHRpb24KICAgICAgICBOb3RpZmljYXRpb25TZW5kZXIgTm90aWZpY2F0aW9uU3ViamVjdCBOb3RpZmljYXRpb25Cb2R5CiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0gKTsKICAgIH0KICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBTdXJ2ZXlJRCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0sICdJbnRlZ2VyJyApOwogICAgfQoKICAgICMgdXBkYXRlIHRoZSBzdXJ2ZXkKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleSBTRVQgIgogICAgICAgICAgICAuICJ0aXRsZSA9ICckUGFyYW17VGl0bGV9JywgIgogICAgICAgICAgICAuICJpbnRyb2R1Y3Rpb24gPSAnJFBhcmFte0ludHJvZHVjdGlvbn0nLCAiCiAgICAgICAgICAgIC4gImRlc2NyaXB0aW9uID0gJyRQYXJhbXtEZXNjcmlwdGlvbn0nLCAiCiAgICAgICAgICAgIC4gIm5vdGlmaWNhdGlvbl9zZW5kZXIgPSAnJFBhcmFte05vdGlmaWNhdGlvblNlbmRlcn0nLCAiCiAgICAgICAgICAgIC4gIm5vdGlmaWNhdGlvbl9zdWJqZWN0ID0gJyRQYXJhbXtOb3RpZmljYXRpb25TdWJqZWN0fScsICIKICAgICAgICAgICAgLiAibm90aWZpY2F0aW9uX2JvZHkgPSAnJFBhcmFte05vdGlmaWNhdGlvbkJvZHl9JywgIgogICAgICAgICAgICAuICJjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCAiCiAgICAgICAgICAgIC4gImNoYW5nZV9ieSA9ICRQYXJhbXtVc2VySUR9ICIKICAgICAgICAgICAgLiAiV0hFUkUgaWQgPSAkUGFyYW17U3VydmV5SUR9IiwKICAgICk7CgogICAgIyBpbnNlcnQgbmV3IHN1cnZleS1xdWV1ZSByZWxhdGlvbnMKICAgIHJldHVybiAkU2VsZi0+U3VydmV5UXVldWVTYXZlKAogICAgICAgIFN1cnZleUlEID0+ICRQYXJhbXtTdXJ2ZXlJRH0sCiAgICAgICAgUXVldWVJRHMgPT4gJFBhcmFte1F1ZXVlc30sCiAgICApOwp9Cgo9aXRlbSBTdXJ2ZXlOZXcoKQoKdG8gYWRkIGEgbmV3IHN1cnZleQoKICAgIG15ICRTdXJ2ZXlJRCA9ICRTdXJ2ZXlPYmplY3QtPlN1cnZleU5ldygKICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+IDEsCiAgICAgICAgVGl0bGUgICAgICAgICAgICAgICA9PiAnQSBUaXRsZScsCiAgICAgICAgSW50cm9kdWN0aW9uICAgICAgICA9PiAnVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgc3VydmV5JywKICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgID0+ICdUaGUgaW50ZXJuYWwgZGVzY3JpcHRpb24gb2YgdGhlIHN1cnZleScsCiAgICAgICAgTm90aWZpY2F0aW9uU2VuZGVyICA9PiAncXVhbGl0eUBleGFtcGxlLmNvbScsCiAgICAgICAgTm90aWZpY2F0aW9uU3ViamVjdCA9PiAnSGVscCB1cyB3aXRoIHlvdXIgZmVlZGJhY2shJywKICAgICAgICBOb3RpZmljYXRpb25Cb2R5ICAgID0+ICdEZWFyIGN1c3RvbWVyLi4uJywKICAgICAgICBRdWV1ZXMgICAgICAgICAgICAgID0+IFsyLCA1LCA5XSwgICMgKG9wdGlvbmFsKSBzdXJ2ZXkgaXMgdmFsaWQgZm9yIHRoZXNlIHF1ZXVlcwogICAgKTsKCj1jdXQKCnN1YiBTdXJ2ZXlOZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAoCiAgICAgICAgcXcoCiAgICAgICAgVXNlcklEIFRpdGxlIEludHJvZHVjdGlvbiBEZXNjcmlwdGlvbgogICAgICAgIE5vdGlmaWNhdGlvblNlbmRlciBOb3RpZmljYXRpb25TdWJqZWN0IE5vdGlmaWNhdGlvbkJvZHkKICAgICAgICApCiAgICAgICAgKQogICAgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50ICgKICAgICAgICBxdygKICAgICAgICBUaXRsZSBJbnRyb2R1Y3Rpb24gRGVzY3JpcHRpb24KICAgICAgICBOb3RpZmljYXRpb25TZW5kZXIgTm90aWZpY2F0aW9uU3ViamVjdCBOb3RpZmljYXRpb25Cb2R5CiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0gKTsKICAgIH0KICAgICRQYXJhbXtVc2VySUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17VXNlcklEfSwgJ0ludGVnZXInICk7CgogICAgIyBpbnNlcnQgYSBuZXcgc3VydmV5CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJJTlNFUlQgSU5UTyBzdXJ2ZXkgKHRpdGxlLCBpbnRyb2R1Y3Rpb24sIGRlc2NyaXB0aW9uLCIKICAgICAgICAgICAgLiAiIG5vdGlmaWNhdGlvbl9zZW5kZXIsIG5vdGlmaWNhdGlvbl9zdWJqZWN0LCBub3RpZmljYXRpb25fYm9keSwiCiAgICAgICAgICAgIC4gIiBzdGF0dXMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkiCiAgICAgICAgICAgIC4gIikgVkFMVUVTICgiCiAgICAgICAgICAgIC4gIickUGFyYW17VGl0bGV9JywgIgogICAgICAgICAgICAuICInJFBhcmFte0ludHJvZHVjdGlvbn0nLCAiCiAgICAgICAgICAgIC4gIickUGFyYW17RGVzY3JpcHRpb259JywgIgogICAgICAgICAgICAuICInJFBhcmFte05vdGlmaWNhdGlvblNlbmRlcn0nLCAiCiAgICAgICAgICAgIC4gIickUGFyYW17Tm90aWZpY2F0aW9uU3ViamVjdH0nLCAiCiAgICAgICAgICAgIC4gIickUGFyYW17Tm90aWZpY2F0aW9uQm9keX0nLCAiCiAgICAgICAgICAgIC4gIidOZXcnLCAiCiAgICAgICAgICAgIC4gImN1cnJlbnRfdGltZXN0YW1wLCAiCiAgICAgICAgICAgIC4gIiRQYXJhbXtVc2VySUR9LCAiCiAgICAgICAgICAgIC4gImN1cnJlbnRfdGltZXN0YW1wLCAiCiAgICAgICAgICAgIC4gIiRQYXJhbXtVc2VySUR9KSIsCiAgICApOwoKICAgICMgZ2V0IHRoZSBpZCBvZiB0aGUgc3VydmV5CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCBGUk9NIHN1cnZleSBXSEVSRSAiCiAgICAgICAgICAgIC4gInRpdGxlID0gJyRQYXJhbXtUaXRsZX0nIEFORCAiCiAgICAgICAgICAgIC4gImludHJvZHVjdGlvbiA9ICckUGFyYW17SW50cm9kdWN0aW9ufScgQU5EICIKICAgICAgICAgICAgLiAiZGVzY3JpcHRpb24gPSAnJFBhcmFte0Rlc2NyaXB0aW9ufScgIgogICAgICAgICAgICAuICJPUkRFUiBCWSBpZCBERVNDIiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRTdXJ2ZXlJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFN1cnZleUlEID0gJFJvd1swXTsKICAgIH0KCiAgICAjIHNldCB0aGUgc3VydmV5IG51bWJlcgogICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleSBTRVQgIgogICAgICAgICAgICAuICJzdXJ2ZXludW1iZXIgPSAnIgogICAgICAgICAgICAuICggJFN1cnZleUlEICsgMTAwMDAgKSAuICInICIKICAgICAgICAgICAgLiAiV0hFUkUgaWQgPSAkU3VydmV5SUQiCiAgICApOwoKICAgIHJldHVybiAkU3VydmV5SUQgaWYgISRQYXJhbXtRdWV1ZXN9OwogICAgcmV0dXJuICRTdXJ2ZXlJRCBpZiByZWYgJFBhcmFte1F1ZXVlc30gbmUgJ0FSUkFZJzsKCiAgICAjIGluc2VydCBuZXcgc3VydmV5LXF1ZXVlIHJlbGF0aW9ucwogICAgJFNlbGYtPlN1cnZleVF1ZXVlU2F2ZSgKICAgICAgICBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQsCiAgICAgICAgUXVldWVJRHMgPT4gJFBhcmFte1F1ZXVlc30sCiAgICApOwoKICAgIHJldHVybiAkU3VydmV5SUQ7Cn0KCj1pdGVtIFF1ZXN0aW9uTGlzdCgpCgp0byBnZXQgYSBhcnJheSBsaXN0IG9mIGFsbCBxdWVzdGlvbiBpdGVtcwoKICAgIG15IEBMaXN0ID0gJFN1cnZleU9iamVjdC0+UXVlc3Rpb25MaXN0KAogICAgICAgIFN1cnZleUlEID0+IDEKICAgICk7Cgo9Y3V0CgpzdWIgUXVlc3Rpb25MaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtTdXJ2ZXlJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFN1cnZleUlEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1N1cnZleUlEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1N1cnZleUlEfSwgJ0ludGVnZXInICk7CgogICAgIyBnZXQgYWxsIHF1ZXN0aW9ucyBvZiBhIHN1cnZleQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQsIHN1cnZleV9pZCwgcXVlc3Rpb24sIHF1ZXN0aW9uX3R5cGUgIgogICAgICAgICAgICAuICIgRlJPTSBzdXJ2ZXlfcXVlc3Rpb24gV0hFUkUgc3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSBPUkRFUiBCWSBwb3NpdGlvbiIsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQExpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG15ICVEYXRhOwogICAgICAgICREYXRhe1F1ZXN0aW9uSUR9ID0gJFJvd1swXTsKICAgICAgICAkRGF0YXtTdXJ2ZXlJRH0gICA9ICRSb3dbMV07CiAgICAgICAgJERhdGF7UXVlc3Rpb259ICAgPSAkUm93WzJdOwogICAgICAgICREYXRhe1R5cGV9ICAgICAgID0gJFJvd1szXTsKCiAgICAgICAgcHVzaCBATGlzdCwgXCVEYXRhOwogICAgfQoKICAgIHJldHVybiBATGlzdDsKfQoKPWl0ZW0gUXVlc3Rpb25BZGQoKQoKdG8gYWRkIGEgbmV3IHF1ZXN0aW9uIHRvIGEgc3VydmV5CgogICAgJFN1cnZleU9iamVjdC0+UXVlc3Rpb25BZGQoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgU3VydmV5SUQgPT4gMTAsCiAgICAgICAgUXVlc3Rpb24gPT4gJ1RoZSBRdWVzdGlvbicsCiAgICAgICAgVHlwZSA9PiAnUmFkaW8nLAogICAgKTsKCj1jdXQKCnN1YiBRdWVzdGlvbkFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgU3VydmV5SUQgUXVlc3Rpb24gVHlwZSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhRdWVzdGlvbiBUeXBlKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSApOwogICAgfQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIFN1cnZleUlEKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgcmV0dXJuIGlmICEkUGFyYW17UXVlc3Rpb259OwoKICAgICMgaW5zZXJ0IGEgbmV3IHF1ZXN0aW9uCiAgICByZXR1cm4gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiSU5TRVJUIElOVE8gc3VydmV5X3F1ZXN0aW9uIChzdXJ2ZXlfaWQsIHF1ZXN0aW9uLCBxdWVzdGlvbl90eXBlLCAiCiAgICAgICAgICAgIC4gInBvc2l0aW9uLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KSBWQUxVRVMgKCIKICAgICAgICAgICAgLiAiJFBhcmFte1N1cnZleUlEfSwgIgogICAgICAgICAgICAuICInJFBhcmFte1F1ZXN0aW9ufScsICIKICAgICAgICAgICAgLiAiJyRQYXJhbXtUeXBlfScsIDI1NSwgIgogICAgICAgICAgICAuICJjdXJyZW50X3RpbWVzdGFtcCwgIgogICAgICAgICAgICAuICIkUGFyYW17VXNlcklEfSwgIgogICAgICAgICAgICAuICJjdXJyZW50X3RpbWVzdGFtcCwgIgogICAgICAgICAgICAuICIkUGFyYW17VXNlcklEfSkiLAogICAgKTsKfQoKPWl0ZW0gUXVlc3Rpb25EZWxldGUoKQoKdG8gZGVsZXRlIGEgcXVlc3Rpb24gZnJvbSBhIHN1cnZleQoKICAgICRTdXJ2ZXlPYmplY3QtPlF1ZXN0aW9uRGVsZXRlKAogICAgICAgIFN1cnZleUlEID0+IDEsCiAgICAgICAgUXVlc3Rpb25JRCA9PiAxMCwKICAgICk7Cgo9Y3V0CgpzdWIgUXVlc3Rpb25EZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU3VydmV5SUQgUXVlc3Rpb25JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU3VydmV5SUQgUXVlc3Rpb25JRCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0sICdJbnRlZ2VyJyApOwogICAgfQoKICAgICMgZGVsZXRlIGFsbCBhbnN3ZXJzIG9mIGEgcXVlc3Rpb24KICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHN1cnZleV9hbnN3ZXIgV0hFUkUgcXVlc3Rpb25faWQgPSAkUGFyYW17UXVlc3Rpb25JRH0iLAogICAgKTsKCiAgICAjIGRlbGV0ZSB0aGUgcXVlc3Rpb24KICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzdXJ2ZXlfcXVlc3Rpb24gV0hFUkUgIgogICAgICAgICAgICAuICJpZCA9ICRQYXJhbXtRdWVzdGlvbklEfSBBTkQgIgogICAgICAgICAgICAuICJzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IiwKICAgICk7Cn0KCj1pdGVtIFF1ZXN0aW9uU29ydCgpCgp0byBzb3J0IGFsbCBxdWVzdGlvbnMgZnJvbSBhIHN1cnZleQoKICAgICRTdXJ2ZXlPYmplY3QtPlF1ZXN0aW9uU29ydCgKICAgICAgICBTdXJ2ZXlJRCA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBRdWVzdGlvblNvcnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1N1cnZleUlEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU3VydmV5SUQhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtTdXJ2ZXlJRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtTdXJ2ZXlJRH0sICdJbnRlZ2VyJyApOwoKICAgICMgZ2V0IGFsbCBxdWVzdGlvbiBvZiBhIHN1cnZleSAoc29ydGVkIGJ5IHBvc2l0aW9uKQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQgRlJPTSBzdXJ2ZXlfcXVlc3Rpb24iCiAgICAgICAgICAgIC4gIiBXSEVSRSBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IE9SREVSIEJZIHBvc2l0aW9uIiwKICAgICk7CgogICAgbXkgQExpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQExpc3QsICRSb3dbMF07CiAgICB9CgogICAgbXkgJENvdW50ZXIgPSAxOwogICAgZm9yIG15ICRRdWVzdGlvbklEIChATGlzdCkgewogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5X3F1ZXN0aW9uIFNFVCBwb3NpdGlvbiA9ICRDb3VudGVyIFdIRVJFIGlkID0gJFF1ZXN0aW9uSUQiLAogICAgICAgICk7CiAgICB9CiAgICBjb250aW51ZSB7CiAgICAgICAgJENvdW50ZXIrKzsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gUXVlc3Rpb25VcCgpCgp0byBtb3ZlIGEgcXVlc3Rpb24gdXAKCiAgICAkU3VydmV5T2JqZWN0LT5RdWVzdGlvblVwKAogICAgICAgIFN1cnZleUlEID0+IDEsCiAgICAgICAgUXVlc3Rpb25JRCA9PiA0LAogICAgKTsKCj1jdXQKCnN1YiBRdWVzdGlvblVwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFN1cnZleUlEIFF1ZXN0aW9uSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFN1cnZleUlEIFF1ZXN0aW9uSUQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICAjIGdldCBwb3NpdGlvbgogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgcG9zaXRpb24gRlJPTSBzdXJ2ZXlfcXVlc3Rpb24iCiAgICAgICAgICAgIC4gIiBXSEVSRSBpZCA9ICRQYXJhbXtRdWVzdGlvbklEfSBBTkQgc3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkUG9zaXRpb24gPSAwOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUG9zaXRpb24gPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBpZiAkUG9zaXRpb24gPCAyOwoKICAgIG15ICRQb3NpdGlvblVwID0gJFBvc2l0aW9uIC0gMTsKCiAgICAjIGdldCBxdWVzdGlvbgogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQgRlJPTSBzdXJ2ZXlfcXVlc3Rpb24iCiAgICAgICAgICAgIC4gIiBXSEVSRSBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IEFORCBwb3NpdGlvbiA9ICRQb3NpdGlvblVwIiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRRdWVzdGlvbklERG93bjsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFF1ZXN0aW9uSUREb3duID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRRdWVzdGlvbklERG93bjsKCiAgICAjIHVwZGF0ZSBwb3NpdGlvbgogICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleV9xdWVzdGlvbiBTRVQgIgogICAgICAgICAgICAuICJwb3NpdGlvbiA9ICRQb3NpdGlvbiAiCiAgICAgICAgICAgIC4gIldIRVJFIGlkID0gJFF1ZXN0aW9uSUREb3duIiwKICAgICk7CgogICAgIyB1cGRhdGUgcG9zaXRpb24KICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5X3F1ZXN0aW9uIFNFVCAiCiAgICAgICAgICAgIC4gInBvc2l0aW9uID0gJFBvc2l0aW9uVXAgIgogICAgICAgICAgICAuICJXSEVSRSBpZCA9ICRQYXJhbXtRdWVzdGlvbklEfSIsCiAgICApOwp9Cgo9aXRlbSBRdWVzdGlvbkRvd24oKQoKdG8gbW92ZSBhIHF1ZXN0aW9uIGRvd24KCiAgICAkU3VydmV5T2JqZWN0LT5RdWVzdGlvbkRvd24oCiAgICAgICAgU3VydmV5SUQgPT4gMSwKICAgICAgICBRdWVzdGlvbklEID0+IDQsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXN0aW9uRG93biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTdXJ2ZXlJRCBRdWVzdGlvbklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTdXJ2ZXlJRCBRdWVzdGlvbklEKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgIyBnZXQgcG9zaXRpb24KICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIHBvc2l0aW9uIEZST00gc3VydmV5X3F1ZXN0aW9uIgogICAgICAgICAgICAuICIgV0hFUkUgaWQgPSAkUGFyYW17UXVlc3Rpb25JRH0gQU5EIHN1cnZleV9pZCA9ICRQYXJhbXtTdXJ2ZXlJRH0iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFBvc2l0aW9uOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUG9zaXRpb24gPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBpZiAhJFBvc2l0aW9uOwoKICAgIG15ICRQb3NpdGlvbkRvd24gPSAkUG9zaXRpb24gKyAxOwoKICAgICMgZ2V0IHF1ZXN0aW9uCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCBGUk9NIHN1cnZleV9xdWVzdGlvbiIKICAgICAgICAgICAgLiAiIFdIRVJFIHN1cnZleV9pZCA9ICRQYXJhbXtTdXJ2ZXlJRH0gQU5EIHBvc2l0aW9uID0gJFBvc2l0aW9uRG93biIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkUXVlc3Rpb25JRFVwOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUXVlc3Rpb25JRFVwID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRRdWVzdGlvbklEVXA7CgogICAgIyB1cGRhdGUgcG9zaXRpb24KICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXlfcXVlc3Rpb24gU0VUICIKICAgICAgICAgICAgLiAicG9zaXRpb24gPSAkUG9zaXRpb24gIgogICAgICAgICAgICAuICJXSEVSRSBpZCA9ICRRdWVzdGlvbklEVXAiLAogICAgKTsKCiAgICAjIHVwZGF0ZSBwb3NpdGlvbgogICAgcmV0dXJuICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXlfcXVlc3Rpb24gU0VUICIKICAgICAgICAgICAgLiAicG9zaXRpb24gPSAkUG9zaXRpb25Eb3duICIKICAgICAgICAgICAgLiAiV0hFUkUgaWQgPSAkUGFyYW17UXVlc3Rpb25JRH0iLAogICAgKTsKfQoKPWl0ZW0gUXVlc3Rpb25HZXQoKQoKdG8gZ2V0IGFsbCBhdHRyaWJ1dGVzIG9mIGEgcXVlc3Rpb24KCiAgICBteSAlUXVlc3Rpb24gPSAkU3VydmV5T2JqZWN0LT5RdWVzdGlvbkdldCgKICAgICAgICBRdWVzdGlvbklEID0+IDEyMwogICAgKTsKCj1jdXQKCnN1YiBRdWVzdGlvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17UXVlc3Rpb25JRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFF1ZXN0aW9uSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17UXVlc3Rpb25JRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtRdWVzdGlvbklEfSwgJ0ludGVnZXInICk7CgogICAgIyBnZXQgcXVlc3Rpb24KICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkLCBzdXJ2ZXlfaWQsIHF1ZXN0aW9uLCBxdWVzdGlvbl90eXBlLCBwb3NpdGlvbiwgIgogICAgICAgICAgICAuICJjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5ICIKICAgICAgICAgICAgLiAiRlJPTSBzdXJ2ZXlfcXVlc3Rpb24gV0hFUkUgaWQgPSAkUGFyYW17UXVlc3Rpb25JRH0iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICREYXRhe1F1ZXN0aW9uSUR9ID0gJFJvd1swXTsKICAgICAgICAkRGF0YXtTdXJ2ZXlJRH0gICA9ICRSb3dbMV07CiAgICAgICAgJERhdGF7UXVlc3Rpb259ICAgPSAkUm93WzJdOwogICAgICAgICREYXRhe1R5cGV9ICAgICAgID0gJFJvd1szXTsKICAgICAgICAkRGF0YXtQb3NpdGlvbn0gICA9ICRSb3dbNF07CiAgICAgICAgJERhdGF7Q3JlYXRlVGltZX0gPSAkUm93WzVdOwogICAgICAgICREYXRhe0NyZWF0ZUJ5fSAgID0gJFJvd1s2XTsKICAgICAgICAkRGF0YXtDaGFuZ2VUaW1lfSA9ICRSb3dbN107CiAgICAgICAgJERhdGF7Q2hhbmdlQnl9ICAgPSAkUm93WzhdOwogICAgfQoKICAgIHJldHVybiAlRGF0YTsKfQoKPWl0ZW0gUXVlc3Rpb25TYXZlKCkKCnRvIHVwZGF0ZSBhbiBleGlzdGluZyBxdWVzdGlvbgoKICAgICRTdXJ2ZXlPYmplY3QtPlF1ZXN0aW9uU2F2ZSgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICBRdWVzdGlvbklEID0+IDQsCiAgICAgICAgU3VydmV5SUQgPT4gMywKICAgICAgICBRdWVzdGlvbiA9PiAnVGhlIFF1ZXN0aW9uJywKICAgICk7Cgo9Y3V0CgpzdWIgUXVlc3Rpb25TYXZlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBRdWVzdGlvbklEIFN1cnZleUlEIFF1ZXN0aW9uKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhRdWVzdGlvbikpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0gKTsKICAgIH0KICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBRdWVzdGlvbklEIFN1cnZleUlEKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgIyB1cGRhdGUgcXVlc3Rpb24KICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5X3F1ZXN0aW9uIFNFVCAiCiAgICAgICAgICAgIC4gInF1ZXN0aW9uID0gJyRQYXJhbXtRdWVzdGlvbn0nLCAiCiAgICAgICAgICAgIC4gImNoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsICIKICAgICAgICAgICAgLiAiY2hhbmdlX2J5ID0gJFBhcmFte1VzZXJJRH0gIgogICAgICAgICAgICAuICJXSEVSRSBpZCA9ICRQYXJhbXtRdWVzdGlvbklEfSAiCiAgICAgICAgICAgIC4gIkFORCBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IiwKICAgICk7Cn0KCj1pdGVtIFF1ZXN0aW9uQ291bnQoKQoKdG8gY291bnQgYWxsIHF1ZXN0aW9ucyBvZiBhIHN1cnZleQoKICAgIG15ICRDb3VudFF1ZXN0aW9uID0gJFN1cnZleU9iamVjdC0+UXVlc3Rpb25Db3VudCgKICAgICAgICBTdXJ2ZXlJRCA9PiAxMjMKICAgICk7Cgo9Y3V0CgpzdWIgUXVlc3Rpb25Db3VudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U3VydmV5SUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTdXJ2ZXlJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtTdXJ2ZXlJRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtTdXJ2ZXlJRH0sICdJbnRlZ2VyJyApOwoKICAgICMgY291bnQgcXVlc3Rpb25zCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAiU0VMRUNUIENPVU5UKGlkKSBGUk9NIHN1cnZleV9xdWVzdGlvbiBXSEVSRSBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRDb3VudFF1ZXN0aW9uOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ291bnRRdWVzdGlvbiA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRDb3VudFF1ZXN0aW9uOwp9Cgo9aXRlbSBBbnN3ZXJMaXN0KCkKCnRvIGdldCBhIGFycmF5IGxpc3Qgb2YgYWxsIGFuc3dlciBpdGVtcwoKICAgIG15IEBMaXN0ID0gJFN1cnZleU9iamVjdC0+QW5zd2VyTGlzdCgKICAgICAgICBRdWVzdGlvbklEID0+IDEKICAgICk7Cgo9Y3V0CgpzdWIgQW5zd2VyTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17UXVlc3Rpb25JRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFF1ZXN0aW9uSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17UXVlc3Rpb25JRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtRdWVzdGlvbklEfSwgJ0ludGVnZXInICk7CgogICAgIyBnZXQgYW5zd2VyIGxpc3QKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkLCBxdWVzdGlvbl9pZCwgYW5zd2VyICIKICAgICAgICAgICAgLiAiIEZST00gc3VydmV5X2Fuc3dlciBXSEVSRSBxdWVzdGlvbl9pZCA9ICRQYXJhbXtRdWVzdGlvbklEfSBPUkRFUiBCWSBwb3NpdGlvbiIsCiAgICApOwoKICAgICMgZmV0Y2h0IHRoZSByZXN1bHQKICAgIG15IEBMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBteSAlRGF0YTsKICAgICAgICAkRGF0YXtBbnN3ZXJJRH0gICA9ICRSb3dbMF07CiAgICAgICAgJERhdGF7UXVlc3Rpb25JRH0gPSAkUm93WzFdOwogICAgICAgICREYXRhe0Fuc3dlcn0gICAgID0gJFJvd1syXTsKCiAgICAgICAgcHVzaCBATGlzdCwgXCVEYXRhOwogICAgfQoKICAgIHJldHVybiBATGlzdDsKfQoKPWl0ZW0gQW5zd2VyQWRkKCkKCnRvIGFkZCBhIG5ldyBhbnN3ZXIgdG8gYSBxdWVzdGlvbgoKICAgICRTdXJ2ZXlPYmplY3QtPkFuc3dlckFkZCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICBRdWVzdGlvbklEID0+IDEwLAogICAgICAgIEFuc3dlciA9PiAnVGhlIEFuc3dlcicsCiAgICApOwoKPWN1dAoKc3ViIEFuc3dlckFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgUXVlc3Rpb25JRCBBbnN3ZXIpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQW5zd2VyKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSApOwogICAgfQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIFF1ZXN0aW9uSUQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRQYXJhbXtBbnN3ZXJ9OwoKICAgICMgaW5zZXJ0IGFuc3dlcgogICAgcmV0dXJuICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIklOU0VSVCBJTlRPIHN1cnZleV9hbnN3ZXIgKHF1ZXN0aW9uX2lkLCBhbnN3ZXIsIHBvc2l0aW9uLCAiCiAgICAgICAgICAgIC4gImNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpIFZBTFVFUyAoIgogICAgICAgICAgICAuICIkUGFyYW17UXVlc3Rpb25JRH0sICIKICAgICAgICAgICAgLiAiJyRQYXJhbXtBbnN3ZXJ9JywgMjU1LCAiCiAgICAgICAgICAgIC4gImN1cnJlbnRfdGltZXN0YW1wLCAiCiAgICAgICAgICAgIC4gIiRQYXJhbXtVc2VySUR9LCAiCiAgICAgICAgICAgIC4gImN1cnJlbnRfdGltZXN0YW1wLCAiCiAgICAgICAgICAgIC4gIiRQYXJhbXtVc2VySUR9KSIsCiAgICApOwp9Cgo9aXRlbSBBbnN3ZXJEZWxldGUoKQoKdG8gZGVsZXRlIGEgYW5zd2VyIGZyb20gYSBxdWVzdGlvbgoKICAgICRTdXJ2ZXlPYmplY3QtPkFuc3dlckRlbGV0ZSgKICAgICAgICBRdWVzdGlvbklEID0+IDEwLAogICAgICAgIEFuc3dlcklEID0+IDQsCiAgICApOwoKPWN1dAoKc3ViIEFuc3dlckRlbGV0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhRdWVzdGlvbklEIEFuc3dlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhRdWVzdGlvbklEIEFuc3dlcklEKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgIyBkZWxldGUgYW5zd2VyCiAgICByZXR1cm4gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc3VydmV5X2Fuc3dlciBXSEVSRSAiCiAgICAgICAgICAgIC4gImlkID0gJFBhcmFte0Fuc3dlcklEfSBBTkQgcXVlc3Rpb25faWQgPSAkUGFyYW17UXVlc3Rpb25JRH0iLAogICAgKTsKfQoKPWl0ZW0gQW5zd2VyU29ydCgpCgp0byBzb3J0IGFsbCBhbnN3ZXJzIGZyb20gYSBxdWVzdGlvbgoKICAgICRTdXJ2ZXlPYmplY3QtPkFuc3dlclNvcnQoCiAgICAgICAgUXVlc3Rpb25JRCA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBBbnN3ZXJTb3J0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtRdWVzdGlvbklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgUXVlc3Rpb25JRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtRdWVzdGlvbklEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1F1ZXN0aW9uSUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGdldCBhbnN3ZXIgbGlzdAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQgRlJPTSBzdXJ2ZXlfYW5zd2VyIgogICAgICAgICAgICAuICIgV0hFUkUgcXVlc3Rpb25faWQgPSAkUGFyYW17UXVlc3Rpb25JRH0gT1JERVIgQlkgcG9zaXRpb24iLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBMaXN0LCAkUm93WzBdOwogICAgfQoKICAgIG15ICRDb3VudGVyID0gMTsKICAgIGZvciBteSAkQW5zd2VySUQgKEBMaXN0KSB7CgogICAgICAgICMgdXBkYXRlIHBvc2l0aW9uCiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXlfYW5zd2VyIFNFVCBwb3NpdGlvbiA9ICRDb3VudGVyIFdIRVJFIGlkID0gJEFuc3dlcklEIiwKICAgICAgICApOwogICAgfQogICAgY29udGludWUgewogICAgICAgICRDb3VudGVyKys7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIEFuc3dlclVwKCkKCnRvIG1vdmUgYSBhbnN3ZXIgdXAKCiAgICAkU3VydmV5T2JqZWN0LT5BbnN3ZXJVcCgKICAgICAgICBRdWVzdGlvbklEID0+IDQsCiAgICAgICAgQW5zd2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQW5zd2VyVXAgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUXVlc3Rpb25JRCBBbnN3ZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUXVlc3Rpb25JRCBBbnN3ZXJJRCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0sICdJbnRlZ2VyJyApOwogICAgfQoKICAgICMgZ2V0IHBvc2l0aW9uCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBwb3NpdGlvbiBGUk9NIHN1cnZleV9hbnN3ZXIiCiAgICAgICAgICAgIC4gIiBXSEVSRSBpZCA9ICRQYXJhbXtBbnN3ZXJJRH0gQU5EIHF1ZXN0aW9uX2lkID0gJFBhcmFte1F1ZXN0aW9uSUR9IiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRQb3NpdGlvbjsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFBvc2l0aW9uID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gaWYgJFBvc2l0aW9uIDwgMjsKCiAgICBteSAkUG9zaXRpb25VcCA9ICRQb3NpdGlvbiAtIDE7CgogICAgIyBnZXQgYW5zd2VyCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCBGUk9NIHN1cnZleV9hbnN3ZXIiCiAgICAgICAgICAgIC4gIiBXSEVSRSBxdWVzdGlvbl9pZCA9ICRQYXJhbXtRdWVzdGlvbklEfSBBTkQgcG9zaXRpb24gPSAkUG9zaXRpb25VcCIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQW5zd2VySUREb3duOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQW5zd2VySUREb3duID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRBbnN3ZXJJRERvd247CgogICAgIyB1cGRhdGUgcG9zaXRpb24KICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXlfYW5zd2VyIFNFVCBwb3NpdGlvbiA9ICRQb3NpdGlvbiBXSEVSRSBpZCA9ICRBbnN3ZXJJRERvd24iLAogICAgKTsKCiAgICAjIHVwZGF0ZSBwb3NpdGlvbgogICAgcmV0dXJuICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXlfYW5zd2VyIFNFVCAiCiAgICAgICAgICAgIC4gInBvc2l0aW9uID0gJFBvc2l0aW9uVXAgIgogICAgICAgICAgICAuICJXSEVSRSBpZCA9ICRQYXJhbXtBbnN3ZXJJRH0iLAogICAgKTsKfQoKPWl0ZW0gQW5zd2VyRG93bigpCgp0byBtb3ZlIGEgYW5zd2VyIGRvd24KCiAgICAkU3VydmV5T2JqZWN0LT5BbnN3ZXJEb3duKAogICAgICAgIFF1ZXN0aW9uSUQgPT4gNCwKICAgICAgICBBbnN3ZXJJRCA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBBbnN3ZXJEb3duIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFF1ZXN0aW9uSUQgQW5zd2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFF1ZXN0aW9uSUQgQW5zd2VySUQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICAjIGdldCBwb3NpdGlvbgogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgcG9zaXRpb24gRlJPTSBzdXJ2ZXlfYW5zd2VyIgogICAgICAgICAgICAuICIgV0hFUkUgaWQgPSAkUGFyYW17QW5zd2VySUR9IEFORCBxdWVzdGlvbl9pZCA9ICRQYXJhbXtRdWVzdGlvbklEfSIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkUG9zaXRpb247CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRQb3NpdGlvbiA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIGlmICEkUG9zaXRpb247CgogICAgbXkgJFBvc2l0aW9uRG93biA9ICRQb3NpdGlvbiArIDE7CgogICAgIyBnZXQgYW5zd2VyCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCBGUk9NIHN1cnZleV9hbnN3ZXIiCiAgICAgICAgICAgIC4gIiBXSEVSRSBxdWVzdGlvbl9pZCA9ICRQYXJhbXtRdWVzdGlvbklEfSBBTkQgcG9zaXRpb24gPSAkUG9zaXRpb25Eb3duIiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRBbnN3ZXJJRFVwOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQW5zd2VySURVcCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIGlmICEkQW5zd2VySURVcDsKCiAgICAjIHVwZGF0ZSBwb3NpdGlvbgogICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleV9hbnN3ZXIgU0VUIHBvc2l0aW9uID0gJFBvc2l0aW9uIFdIRVJFIGlkID0gJEFuc3dlcklEVXAiLAogICAgKTsKCiAgICAjIHVwZGF0ZSBwb3NpdGlvbgogICAgcmV0dXJuICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXlfYW5zd2VyIFNFVCAiCiAgICAgICAgICAgIC4gInBvc2l0aW9uID0gJFBvc2l0aW9uRG93biAiCiAgICAgICAgICAgIC4gIldIRVJFIGlkID0gJFBhcmFte0Fuc3dlcklEfSIsCiAgICApOwp9Cgo9aXRlbSBBbnN3ZXJHZXQoKQoKdG8gZ2V0IGFsbCBhdHRyaWJ1dGVzIG9mIGEgYW5zd2VyCgogICAgbXkgJUFuc3dlciA9ICRTdXJ2ZXlPYmplY3QtPkFuc3dlckdldCgKICAgICAgICBBbnN3ZXJJRCA9PiAxMjMKICAgICk7Cgo9Y3V0CgpzdWIgQW5zd2VyR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtBbnN3ZXJJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFF1ZXN0aW9uSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17QW5zd2VySUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17QW5zd2VySUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGdldCBhbnN3ZXIKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PgogICAgICAgICAgICAiU0VMRUNUIGlkLCBxdWVzdGlvbl9pZCwgYW5zd2VyLCBwb3NpdGlvbiwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSAiCiAgICAgICAgICAgIC4gIkZST00gc3VydmV5X2Fuc3dlciBXSEVSRSBpZCA9ICRQYXJhbXtBbnN3ZXJJRH0iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICREYXRhe0Fuc3dlcklEfSAgID0gJFJvd1swXTsKICAgICAgICAkRGF0YXtRdWVzdGlvbklEfSA9ICRSb3dbMV07CiAgICAgICAgJERhdGF7QW5zd2VyfSAgICAgPSAkUm93WzJdOwogICAgICAgICREYXRhe1Bvc2l0aW9ufSAgID0gJFJvd1szXTsKICAgICAgICAkRGF0YXtDcmVhdGVUaW1lfSA9ICRSb3dbNF07CiAgICAgICAgJERhdGF7Q3JlYXRlQnl9ICAgPSAkUm93WzVdOwogICAgICAgICREYXRhe0NoYW5nZVRpbWV9ID0gJFJvd1s2XTsKICAgICAgICAkRGF0YXtDaGFuZ2VCeX0gICA9ICRSb3dbN107CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBBbnN3ZXJTYXZlKCkKCnRvIHVwZGF0ZSBhbiBleGlzdGluZyBhbnN3ZXIKCiAgICAkU3VydmV5T2JqZWN0LT5BbnN3ZXJTYXZlKAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgIEFuc3dlcklEID0+IDYsCiAgICAgICAgUXVlc3Rpb25JRCA9PiA0LAogICAgICAgIEFuc3dlciA9PiAnVGhlIEFuc3dlcicsCiAgICApOwoKPWN1dAoKc3ViIEFuc3dlclNhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIEFuc3dlcklEIFF1ZXN0aW9uSUQgQW5zd2VyKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEFuc3dlcikpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0gKTsKICAgIH0KICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBBbnN3ZXJJRCBRdWVzdGlvbklEKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgcmV0dXJuIGlmICEkUGFyYW17QW5zd2VyfTsKCiAgICAjIHVwZGF0ZSBhbnN3ZXIKICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5X2Fuc3dlciBTRVQgIgogICAgICAgICAgICAuICJhbnN3ZXIgPSAnJFBhcmFte0Fuc3dlcn0nLCAiCiAgICAgICAgICAgIC4gImNoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsICIKICAgICAgICAgICAgLiAiY2hhbmdlX2J5ID0gJFBhcmFte1VzZXJJRH0gIgogICAgICAgICAgICAuICJXSEVSRSBpZCA9ICRQYXJhbXtBbnN3ZXJJRH0gIgogICAgICAgICAgICAuICJBTkQgcXVlc3Rpb25faWQgPSAkUGFyYW17UXVlc3Rpb25JRH0iLAogICAgKTsKfQoKPWl0ZW0gQW5zd2VyQ291bnQoKQoKdG8gY291bnQgYWxsIGFuc3dlcnMgb2YgYSBxdWVzdGlvbgoKICAgIG15ICRDb3VudEFuc3dlciA9ICRTdXJ2ZXlPYmplY3QtPkFuc3dlckNvdW50KAogICAgICAgIFF1ZXN0aW9uSUQgPT4gMTIzCiAgICApOwoKPWN1dAoKc3ViIEFuc3dlckNvdW50IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtRdWVzdGlvbklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgUXVlc3Rpb25JRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtRdWVzdGlvbklEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1F1ZXN0aW9uSUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGNvdW50IGFuc3dlcnMKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICJTRUxFQ1QgQ09VTlQoaWQpIEZST00gc3VydmV5X2Fuc3dlciBXSEVSRSBxdWVzdGlvbl9pZCA9ICRQYXJhbXtRdWVzdGlvbklEfSIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQ291bnRBbnN3ZXI7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRDb3VudEFuc3dlciA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRDb3VudEFuc3dlcjsKfQoKPWl0ZW0gVm90ZUxpc3QoKQoKdG8gZ2V0IGEgYXJyYXkgbGlzdCBvZiBhbGwgdm90ZSBpdGVtcwoKICAgIG15IEBMaXN0ID0gJFN1cnZleU9iamVjdC0+Vm90ZUxpc3QoCiAgICAgICAgU3VydmV5SUQgPT4gMQogICAgKTsKCj1jdXQKCnN1YiBWb3RlTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U3VydmV5SUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTdXJ2ZXlJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtTdXJ2ZXlJRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtTdXJ2ZXlJRH0sICdJbnRlZ2VyJyApOwoKICAgICMgZ2V0IHZvdGUgbGlzdAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQsIHRpY2tldF9pZCwgc2VuZF90aW1lLCB2b3RlX3RpbWUgIgogICAgICAgICAgICAuICJGUk9NIHN1cnZleV9yZXF1ZXN0IFdIRVJFIHN1cnZleV9pZCA9ICRQYXJhbXtTdXJ2ZXlJRH0gIgogICAgICAgICAgICAuICJBTkQgdmFsaWRfaWQgPSAwIE9SREVSIEJZIHZvdGVfdGltZSBERVNDIiwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBATGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJURhdGE7CiAgICAgICAgJERhdGF7UmVxdWVzdElEfSA9ICRSb3dbMF07CiAgICAgICAgJERhdGF7VGlja2V0SUR9ICA9ICRSb3dbMV07CiAgICAgICAgJERhdGF7U2VuZFRpbWV9ICA9ICRSb3dbMl07CiAgICAgICAgJERhdGF7Vm90ZVRpbWV9ICA9ICRSb3dbM107CgogICAgICAgIHB1c2ggQExpc3QsIFwlRGF0YTsKICAgIH0KCiAgICByZXR1cm4gQExpc3Q7Cn0KCj1pdGVtIFZvdGVHZXQoKQoKdG8gZ2V0IGFsbCBhdHRyaWJ1dGVzIG9mIGEgdm90ZQoKICAgIG15IEBWb3RlID0gJFN1cnZleU9iamVjdC0+Vm90ZUdldCgKICAgICAgICBSZXF1ZXN0SUQgPT4gMTMsCiAgICAgICAgUXVlc3Rpb25JRCA9PiAyMwogICAgKTsKCj1jdXQKCnN1YiBWb3RlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFJlcXVlc3RJRCBRdWVzdGlvbklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhSZXF1ZXN0SUQgUXVlc3Rpb25JRCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0sICdJbnRlZ2VyJyApOwogICAgfQoKICAgICMgZ2V0IHZvdGUKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkLCB2b3RlX3ZhbHVlIEZST00gc3VydmV5X3ZvdGUiCiAgICAgICAgICAgIC4gIiBXSEVSRSByZXF1ZXN0X2lkID0gJFBhcmFte1JlcXVlc3RJRH0gQU5EIHF1ZXN0aW9uX2lkID0gJFBhcmFte1F1ZXN0aW9uSUR9IiwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBATGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJURhdGE7CiAgICAgICAgJERhdGF7UmVxdWVzdElEfSA9ICRSb3dbMF07CiAgICAgICAgJERhdGF7Vm90ZVZhbHVlfSA9ICRSb3dbMV0gfHwgJy0nOwoKICAgICAgICBwdXNoIEBMaXN0LCBcJURhdGE7CiAgICB9CgogICAgcmV0dXJuIEBMaXN0Owp9Cgo9aXRlbSBWb3RlQXR0cmlidXRlR2V0KCkKCnRvIGdldCBhbGwgYXR0cmlidXRlcyBvZiBhIHZvdGUKCiAgICBteSAkVm90ZUF0dHJpYnV0ZUNvbnRlbnQgPSAkU3VydmV5T2JqZWN0LT5Wb3RlQXR0cmlidXRlR2V0KAogICAgICAgIFZvdGVJRCA9PiAxMywKICAgICk7Cgo9Y3V0CgpzdWIgVm90ZUF0dHJpYnV0ZUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhWb3RlSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFZvdGVJRCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0sICdJbnRlZ2VyJyApOwogICAgfQoKICAgICMgZ2V0IHZvdGUgYXR0cmlidXRlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCB2b3RlX3ZhbHVlIEZST00gc3VydmV5X3ZvdGUiCiAgICAgICAgICAgIC4gIiBXSEVSRSBpZCA9ICRQYXJhbXtWb3RlSUR9IiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRWb3RlQXR0cmlidXRlQ29udGVudCA9ICR7ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgfVswXTsKICAgIHJldHVybiAkVm90ZUF0dHJpYnV0ZUNvbnRlbnQ7Cn0KCj1pdGVtIENvdW50Vm90ZSgpCgp0byBjb3VudCBhbGwgdm90ZXMgb2YgYSBzdXJ2ZXkKCiAgICBteSAkQ291bnRWb3RlID0gJFN1cnZleU9iamVjdC0+Q291bnRWb3RlKAogICAgICAgIFF1ZXN0aW9uSUQgPT4gMTIzLAogICAgICAgIFZvdGVWYWx1ZSA9PiAnVGhlIFZhbHVlJywKICAgICk7Cgo9Y3V0CgpzdWIgQ291bnRWb3RlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFF1ZXN0aW9uSUQgVm90ZVZhbHVlKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtWb3RlVmFsdWV9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17Vm90ZVZhbHVlfSApOwogICAgJFBhcmFte1F1ZXN0aW9uSUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17UXVlc3Rpb25JRH0sICdJbnRlZ2VyJyApOwoKICAgICMgY291bnQgdm90ZXMKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIENPVU5UKHZvdGVfdmFsdWUpIEZST00gc3VydmV5X3ZvdGUgV0hFUkUgIgogICAgICAgICAgICAuICJxdWVzdGlvbl9pZCA9ICRQYXJhbXtRdWVzdGlvbklEfSBBTkQgdm90ZV92YWx1ZSA9ICckUGFyYW17Vm90ZVZhbHVlfSciLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJENvdW50Vm90ZTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJENvdW50Vm90ZSA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRDb3VudFZvdGU7Cn0KCj1pdGVtIENvdW50UmVxdWVzdCgpCgp0byBjb3VudCBhbGwgcmVxdWVzdHMgb2YgYSBzdXJ2ZXkKCiAgICBteSAkQ291bnRSZXF1ZXN0ID0gJFN1cnZleU9iamVjdC0+Q291bnRSZXF1ZXN0KAogICAgICAgIFF1ZXN0aW9uSUQgPT4gMTIzLAogICAgICAgIFZhbGlkSUQgPT4gMCwgICAgICAgIyAoMHwxfGFsbCkKICAgICk7Cgo9Y3V0CgpzdWIgQ291bnRSZXF1ZXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFN1cnZleUlEIFZhbGlkSUQpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1N1cnZleUlEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1N1cnZleUlEfSwgJ0ludGVnZXInICk7CgogICAgIyBjb3VudCByZXF1ZXN0cwogICAgbXkgJFNRTCA9ICJTRUxFQ1QgQ09VTlQoaWQpIEZST00gc3VydmV5X3JlcXVlc3QgV0hFUkUgc3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSI7CgogICAgIyBhZGQgdmFsaWQgcGFydAogICAgaWYgKCAhJFBhcmFte1ZhbGlkSUR9ICkgewogICAgICAgICRTUUwgLj0gIiBBTkQgdmFsaWRfaWQgPSAwIjsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte1ZhbGlkSUR9IGVxIDEgKSB7CiAgICAgICAgJFNRTCAuPSAiIEFORCB2YWxpZF9pZCA9IDEiOwogICAgfQoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAkU1FMLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJENvdW50UmVxdWVzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJENvdW50UmVxdWVzdCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRDb3VudFJlcXVlc3Q7Cn0KCj1pdGVtIEVsZW1lbnRFeGlzdHMoKQoKZXhpc3RzIGFuIHN1cnZleS0sIHF1ZXN0aW9uLSwgYW5zd2VyLSBvciByZXF1ZXN0LWVsZW1lbnQKCiAgICBteSAkQ291bnRSZXF1ZXN0ID0gJFN1cnZleU9iamVjdC0+RWxlbWVudEV4aXN0cygKICAgICAgICBJRCA9PiAxMjMsICAgICAgICAgICAjIFN1cnZleUlELCBRdWVzdGlvbklELCBBbnN3ZXJJRCwgUmVxdWVzdElECiAgICAgICAgRWxlbWVudCA9PiAnU3VydmV5JyAgIyBTdXJ2ZXksIFF1ZXN0aW9uLCBBbnN3ZXIsIFJlcXVlc3QKICAgICk7Cgo9Y3V0CgpzdWIgRWxlbWVudEV4aXN0cyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhFbGVtZW50SUQgRWxlbWVudCkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17RWxlbWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtFbGVtZW50fSApOwogICAgJFBhcmFte0VsZW1lbnRJRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtFbGVtZW50SUR9LCAnSW50ZWdlcicgKTsKCiAgICBteSAlTG9va3VwVGFibGUgPSAoCiAgICAgICAgU3VydmV5ICAgPT4gJ3N1cnZleScsCiAgICAgICAgUXVlc3Rpb24gPT4gJ3N1cnZleV9xdWVzdGlvbicsCiAgICAgICAgQW5zd2VyICAgPT4gJ3N1cnZleV9hbnN3ZXInLAogICAgICAgIFJlcXVlc3QgID0+ICdzdXJ2ZXlfcmVxdWVzdCcsCiAgICApOwoKICAgICMgY291bnQgZWxlbWVudAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gIlNFTEVDVCBDT1VOVChpZCkgRlJPTSAkTG9va3VwVGFibGV7JFBhcmFte0VsZW1lbnR9fSBXSEVSRSBpZCA9ICRQYXJhbXtFbGVtZW50SUR9IiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRFbGVtZW50RXhpc3RzID0gJ05vJzsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgaWYgKCAkUm93WzBdICkgewogICAgICAgICAgICAkRWxlbWVudEV4aXN0cyA9ICdZZXMnOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJEVsZW1lbnRFeGlzdHM7Cn0KCj1pdGVtIFJlcXVlc3RTZW5kKCkKCnRvIHNlbmQgYSByZXF1ZXN0IHRvIGEgY3VzdG9tZXIgKGlmIG1hc3RlciBzdXJ2ZXkgaXMgc2V0KQoKICAgICRTdXJ2ZXlPYmplY3QtPlJlcXVlc3RTZW5kKAogICAgICAgIFRpY2tldElEID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgUmVxdWVzdFNlbmQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1RpY2tldElEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVGlja2V0SUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBQdWJsaWNTdXJ2ZXlLZXkKICAgIG15ICRtZDUgPSBEaWdlc3Q6Ok1ENS0+bmV3KCk7CiAgICAkbWQ1LT5hZGQoICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSAuIGludCggcmFuZCg5OTk5OTk5OTkpICkgKTsKICAgIG15ICRQdWJsaWNTdXJ2ZXlLZXkgPSAkbWQ1LT5oZXhkaWdlc3Q7CgogICAgIyBmaW5kIG1hc3RlciBzdXJ2ZXkKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICJTRUxFQ1QgaWQgRlJPTSBzdXJ2ZXkgV0hFUkUgc3RhdHVzID0gJ01hc3RlciciLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFN1cnZleUlEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU3VydmV5SUQgPSAkUm93WzBdOwogICAgfQoKICAgICMgcmV0dXJuLCBubyBtYXN0ZXIgc3VydmV5IGZvdW5kCiAgICByZXR1cm4gaWYgISRTdXJ2ZXlJRDsKCiAgICAjIGdldCB0aGUgc3VydmV5CiAgICBteSAlU3VydmV5ID0gJFNlbGYtPlN1cnZleUdldCgKICAgICAgICBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQsCiAgICApOwogICAgbXkgJFN1YmplY3QgPSAkU3VydmV5e05vdGlmaWNhdGlvblN1YmplY3R9OwogICAgbXkgJEJvZHkgICAgPSAkU3VydmV5e05vdGlmaWNhdGlvbkJvZHl9OwoKICAgICMgZml4IG5ldyBsaW5lcwogICAgJEJvZHkgPX4gcy8oXG5ccnxcclxyXG58XHJcbikvXG4vZzsKCiAgICAjIHRpY2tldCBkYXRhCiAgICBteSAlVGlja2V0ID0gJFNlbGYtPntUaWNrZXRPYmplY3R9LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICk7CgogICAgIyBjaGVjayBpZiB0aWNrZXQgaXMgaW4gYSBzZW5kIHF1ZXVlCiAgICBpZiAoICRTdXJ2ZXl7UXVldWVzfSAmJiByZWYgJFN1cnZleXtRdWV1ZXN9IGVxICdBUlJBWScgJiYgQHsgJFN1cnZleXtRdWV1ZXN9IH0gKSB7CiAgICAgICAgbXkgJEZvdW5kOwoKICAgICAgICBRVUVVRToKICAgICAgICBmb3IgbXkgJFF1ZXVlSUQgKCBAeyAkU3VydmV5e1F1ZXVlc30gfSApIHsKICAgICAgICAgICAgbmV4dCBRVUVVRSBpZiAkVGlja2V0e1F1ZXVlSUR9ICE9ICRRdWV1ZUlEOwogICAgICAgICAgICAkRm91bmQgPSAxOwogICAgICAgICAgICBsYXN0IFFVRVVFOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGlmICEkRm91bmQ7CiAgICB9CgogICAgZm9yIG15ICREYXRhICgga2V5cyAlVGlja2V0ICkgewogICAgICAgIGlmICggZGVmaW5lZCAkVGlja2V0eyREYXRhfSApIHsKICAgICAgICAgICAgJFN1YmplY3QgPX4gcy88T1RSU19USUNLRVRfJERhdGE+LyRUaWNrZXR7JERhdGF9L2dpOwogICAgICAgICAgICAkQm9keSAgICA9fiBzLzxPVFJTX1RJQ0tFVF8kRGF0YT4vJFRpY2tldHskRGF0YX0vZ2k7CgogICAgICAgICAgICAjIGZpbHRlciBmb3IgbmV3IHJpY2ggdGV4dCBjb250ZW50CiAgICAgICAgICAgICRCb2R5ID1+IHMvJmx0O09UUlNfVElDS0VUXyREYXRhJmd0Oy8kVGlja2V0eyREYXRhfS9nOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNsZWFudXAKICAgICRTdWJqZWN0ID1+IHMvPE9UUlNfVElDS0VUXy4rPz4vLS9naTsKICAgICRCb2R5ICAgID1+IHMvPE9UUlNfVElDS0VUXy4rPz4vLS9naTsKCiAgICAjIHJlcGxhY2UgY29uZmlnIG9wdGlvbnMKICAgICRTdWJqZWN0ID1+IHN7PE9UUlNfQ09ORklHXyguKz8pPn17JFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJDEpfWVneDsKICAgICRCb2R5ICAgID1+IHN7PE9UUlNfQ09ORklHXyguKz8pPn17JFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJDEpfWVneDsKCiAgICAjIGZpbHRlciBmb3IgbmV3IHJpY2ggdGV4dCBjb250ZW50CiAgICAkQm9keSA9fiBzeyZsdDtPVFJTX0NPTkZJR18oLis/KSZndDt9eyRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCQxKX1lZ3g7CgogICAgIyBjbGVhbnVwCiAgICAkU3ViamVjdCA9fiBzLzxPVFJTX0NPTkZJR18uKz8+Ly0vZ2k7CiAgICAkQm9keSAgICA9fiBzLzxPVFJTX0NPTkZJR18uKz8+Ly0vZ2k7CgogICAgIyBmaWx0ZXIgZm9yIG5ldyByaWNoIHRleHQgY29udGVudAogICAgJEJvZHkgPX4gcy8mbHQ7T1RSU19DT05GSUdfLis/Jmd0Oy8tL2dpOwoKICAgICMgZ2V0IGN1c3RvbWVyIGRhdGEgYW5kIHJlcGxhY2UgaXQgd2l0aCA8T1RSU19DVVNUT01FUl9EQVRBXy4uLgogICAgbXkgJUN1c3RvbWVyVXNlcjsKICAgIGlmICggJFRpY2tldHtDdXN0b21lclVzZXJJRH0gKSB7CiAgICAgICAgJUN1c3RvbWVyVXNlciA9ICRTZWxmLT57Q3VzdG9tZXJVc2VyT2JqZWN0fS0+Q3VzdG9tZXJVc2VyRGF0YUdldCgKICAgICAgICAgICAgVXNlciA9PiAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHJlcGxhY2UgY3VzdG9tZXIgc3R1ZmYgd2l0aCB0YWdzCiAgICAgICAgZm9yIG15ICREYXRhICgga2V5cyAlQ3VzdG9tZXJVc2VyICkgewogICAgICAgICAgICBuZXh0IGlmICEkQ3VzdG9tZXJVc2VyeyREYXRhfTsKCiAgICAgICAgICAgICRTdWJqZWN0ID1+IHMvPE9UUlNfQ1VTVE9NRVJfREFUQV8kRGF0YT4vJEN1c3RvbWVyVXNlcnskRGF0YX0vZ2k7CiAgICAgICAgICAgICRCb2R5ICAgID1+IHMvPE9UUlNfQ1VTVE9NRVJfREFUQV8kRGF0YT4vJEN1c3RvbWVyVXNlcnskRGF0YX0vZ2k7CgogICAgICAgICAgICAjIGZpbHRlciBmb3IgbmV3IHJpY2ggdGV4dCBjb250ZW50CiAgICAgICAgICAgICRCb2R5ID1+IHMvJmx0O09UUlNfQ1VTVE9NRVJfREFUQV8kRGF0YSZndDsvJEN1c3RvbWVyVXNlcnskRGF0YX0vZ2k7CiAgICAgICAgfQogICAgfQoKICAgICMgY2xlYW51cCBhbGwgbm90IG5lZWRlZCA8T1RSU19DVVNUT01FUl9EQVRBXyB0YWdzCiAgICAkU3ViamVjdCA9fiBzLzxPVFJTX0NVU1RPTUVSX0RBVEFfLis/Pi8tL2dpOwogICAgJEJvZHkgICAgPX4gcy88T1RSU19DVVNUT01FUl9EQVRBXy4rPz4vLS9naTsKCiAgICAjIGZpbHRlciBmb3IgbmV3IHJpY2ggdGV4dCBjb250ZW50CiAgICAkQm9keSA9fiBzLyZsdDtPVFJTX0NVU1RPTUVSX0RBVEFfLis/Jmd0Oy8tL2dpOwoKICAgICMgcmVwbGFjZSBrZXkKICAgICRTdWJqZWN0ID1+IHMvPE9UUlNfUHVibGljU3VydmV5S2V5Pi8kUHVibGljU3VydmV5S2V5L2dpOwogICAgJEJvZHkgICAgPX4gcy88T1RSU19QdWJsaWNTdXJ2ZXlLZXk+LyRQdWJsaWNTdXJ2ZXlLZXkvZ2k7CgogICAgIyBmaWx0ZXIgZm9yIG5ldyByaWNoIHRleHQgY29udGVudAogICAgJEJvZHkgPX4gcy8mbHQ7T1RSU19QdWJsaWNTdXJ2ZXlLZXkmZ3Q7LyRQdWJsaWNTdXJ2ZXlLZXkvZ2k7CgogICAgbXkgJFRvU3RyaW5nID0gJEN1c3RvbWVyVXNlcntVc2VyRW1haWx9OwoKICAgIGlmICggISRUb1N0cmluZyApIHsKICAgICAgICBteSAlQXJ0aWNsZSA9ICRTZWxmLT57VGlja2V0T2JqZWN0fS0+QXJ0aWNsZUxhc3RDdXN0b21lckFydGljbGUoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICRBcnRpY2xle1NlbmRlclR5cGV9IGVxICdhZ2VudCcgKSB7CiAgICAgICAgICAgICRUb1N0cmluZyA9ICRBcnRpY2xle1RvfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRUb1N0cmluZyA9ICRBcnRpY2xle0Zyb219OwogICAgICAgIH0KICAgIH0KCiAgICAjIHBhcnNlIHRoZSB0byBzdHJpbmcKICAgIG15ICRUbzsKICAgIGZvciBteSAkVG9QYXJzZXIgKCBNYWlsOjpBZGRyZXNzLT5wYXJzZSgkVG9TdHJpbmcpICkgewogICAgICAgICRUbyA9ICRUb1BhcnNlci0+YWRkcmVzcygpOwogICAgfQoKICAgICMgcmV0dXJuIGlmIG5vIHRvIGlzIGZvdW5kCiAgICByZXR1cm4gaWYgISRUbzsKCiAgICAjIGNoZWNrIGlmIGl0J3MgYSB2YWxpZCBlbWFpbCBhZGRlZHNzIChtaW4gaXMgbmVlZGVkKQogICAgcmV0dXJuIGlmICRUbyAhfiAvQC87CgogICAgIyBjb252ZXJ0IHRvIGxvd2VyIGNhc2VzCiAgICAkVG8gPSBsYyAkVG87CgogICAgIyBjaGVjayBpZiBub3Qgc3VydmV5IHNob3VsZCBiZSBzZW5kCiAgICBteSAkU2VuZE5vU3VydmV5UmVnRXhwID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1N1cnZleTo6U2VuZE5vU3VydmV5UmVnRXhwJyk7CgogICAgcmV0dXJuIGlmICRTZW5kTm9TdXJ2ZXlSZWdFeHAgJiYgJFRvID1+IC8kU2VuZE5vU3VydmV5UmVnRXhwL2k7CgogICAgIyBxdW90ZQogICAgJFRvID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCRUbyk7CgogICAgIyBjaGVjayBpZiBhIHN1cnZleSBpcyBzZW50IGluIHRoZSBsYXN0IHRpbWUKICAgIG15ICRTZW5kUGVyaW9kID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1N1cnZleTo6U2VuZFBlcmlvZCcpOwogICAgaWYgKCRTZW5kUGVyaW9kKSB7CiAgICAgICAgbXkgJExhc3RTZW50VGltZSA9IDA7CgogICAgICAgICMgZ2V0IHNlbmQgdGltZQogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gIlNFTEVDVCBzZW5kX3RpbWUgRlJPTSBzdXJ2ZXlfcmVxdWVzdCBXSEVSRSBMT1dFUihzZW5kX3RvKSA9ICckVG8nICIKICAgICAgICAgICAgICAgIC4gIk9SREVSIEJZIHNlbmRfdGltZSBERVNDIiwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkTGFzdFNlbnRUaW1lID0gJFJvd1swXTsKICAgICAgICB9CiAgICAgICAgaWYgKCRMYXN0U2VudFRpbWUpIHsKICAgICAgICAgICAgbXkgJE5vdyA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKTsKICAgICAgICAgICAgJExhc3RTZW50VGltZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKCBTdHJpbmcgPT4gJExhc3RTZW50VGltZSApOwoKICAgICAgICAgICAgcmV0dXJuIGlmICggJExhc3RTZW50VGltZSArICRTZW5kUGVyaW9kICogNjAgKiA2MCAqIDI0ICkgPiAkTm93OwogICAgICAgIH0KICAgIH0KCiAgICAjIGluc2VydCByZXF1ZXN0CiAgICAkUGFyYW17VGlja2V0SUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17VGlja2V0SUR9LCAnSW50ZWdlcicgKTsKICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIklOU0VSVCBJTlRPIHN1cnZleV9yZXF1ZXN0ICIKICAgICAgICAgICAgLiAiICh0aWNrZXRfaWQsIHN1cnZleV9pZCwgdmFsaWRfaWQsIHB1YmxpY19zdXJ2ZXlfa2V5LCBzZW5kX3RvLCBzZW5kX3RpbWUpICIKICAgICAgICAgICAgLiAiIFZBTFVFUyAoJFBhcmFte1RpY2tldElEfSwgJFN1cnZleUlELCAxLCAnIgogICAgICAgICAgICAuICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSgkUHVibGljU3VydmV5S2V5KSAuICInLCAiCiAgICAgICAgICAgIC4gIickVG8nLCBjdXJyZW50X3RpbWVzdGFtcCkiLAogICAgKTsKCiAgICAjIGxvZyBhY3Rpb24gb24gdGlja2V0CiAgICAkU2VsZi0+e1RpY2tldE9iamVjdH0tPkhpc3RvcnlBZGQoCiAgICAgICAgVGlja2V0SUQgICAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgQ3JlYXRlVXNlcklEID0+IDEsCiAgICAgICAgSGlzdG9yeVR5cGUgID0+ICdNaXNjJywKICAgICAgICBOYW1lICAgICAgICAgPT4gIlNlbnQgY3VzdG9tZXIgc3VydmV5IHRvICckVG8nLiIsCiAgICApOwoKICAgICMgZ2V0IGNoYXJzZXQKICAgIG15ICRDaGFyc2V0ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0RlZmF1bHRDaGFyc2V0JykgfHwgJ3VmdC04JzsKCiAgICAjIGNsZWFuIGh0bWwgYW5kIGNvbnZlcnQgdGhlIEZpZWxkIGluIGh0bWwgKFxuIC0tPjxicj4pCiAgICAkQm9keSA9fiBze1xBXCRodG1sXC90ZXh0XCRccyguKil9eyQxfXhtczsKICAgIGlmICggISQxICkgewoKICAgICAgICAjIGNvbnZlcnQgYm9keSB0byBodG1sCiAgICAgICAgJEJvZHkgPSAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0tPlRvSFRNTCgKICAgICAgICAgICAgU3RyaW5nID0+ICRCb2R5LAogICAgICAgICk7CiAgICB9CgogICAgIyBwcmVwYXJlIGh0bWwgbGlua3MKICAgICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fS0+TGlua1F1b3RlKAogICAgICAgIFN0cmluZyA9PiBcJEJvZHksCiAgICApOwoKICAgICMgY29tcGxldGUgaHRtbCBkb2N1bWVudAogICAgJEJvZHkgPSAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0tPkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgU3RyaW5nICA9PiAkQm9keSwKICAgICAgICBDaGFyc2V0ID0+ICRDaGFyc2V0LAogICAgKTsKCiAgICAjIHNlbmQgc3VydmV5CiAgICByZXR1cm4gJFNlbGYtPntTZW5kbWFpbE9iamVjdH0tPlNlbmQoCiAgICAgICAgRnJvbSAgICAgPT4gJFN1cnZleXtOb3RpZmljYXRpb25TZW5kZXJ9LAogICAgICAgIFRvICAgICAgID0+ICRUbywKICAgICAgICBTdWJqZWN0ICA9PiAkU3ViamVjdCwKICAgICAgICBNaW1lVHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICBDaGFyc2V0ICA9PiAkQ2hhcnNldCwKICAgICAgICBCb2R5ICAgICA9PiAkQm9keSwKICAgICk7Cn0KCj1pdGVtIFJlcXVlc3RHZXQoKQoKdG8gZ2V0IGFuIGFycmF5IGxpc3Qgb2YgcmVxdWVzdCBlbGVtZW50cwoKICAgIG15ICVSZXF1ZXN0RGF0YSA9ICRTdXJ2ZXlPYmplY3QtPlJlcXVlc3RHZXQoCiAgICAgICAgUHVibGljU3VydmV5S2V5ID0+ICdBdzVkZTNYZjVxQScsCiAgICApOwoKPWN1dAoKc3ViIFJlcXVlc3RHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1B1YmxpY1N1cnZleUtleX0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFB1YmxpY1N1cnZleUtleSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtQdWJsaWNTdXJ2ZXlLZXl9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17UHVibGljU3VydmV5S2V5fSApOwoKICAgICMgZ2V0IHZvdGUgbGlzdAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+CiAgICAgICAgICAgICJTRUxFQ1QgaWQsIHRpY2tldF9pZCwgc3VydmV5X2lkLCB2YWxpZF9pZCwgcHVibGljX3N1cnZleV9rZXksIHNlbmRfdG8sIHNlbmRfdGltZSwgdm90ZV90aW1lICIKICAgICAgICAgICAgLiAiRlJPTSBzdXJ2ZXlfcmVxdWVzdCBXSEVSRSBwdWJsaWNfc3VydmV5X2tleSA9ICckUGFyYW17UHVibGljU3VydmV5S2V5fScgIiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVSZXF1ZXN0RGF0YTsKCiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRSZXF1ZXN0RGF0YXtSZXF1ZXN0SUR9ICAgICAgID0gJFJvd1swXTsKICAgICAgICAkUmVxdWVzdERhdGF7VGlja2V0SUR9ICAgICAgICA9ICRSb3dbMV07CiAgICAgICAgJFJlcXVlc3REYXRhe1N1cnZleUlEfSAgICAgICAgPSAkUm93WzJdOwogICAgICAgICRSZXF1ZXN0RGF0YXtWYWxpZElEfSAgICAgICAgID0gJFJvd1szXTsKICAgICAgICAkUmVxdWVzdERhdGF7UHVibGljU3VydmV5S2V5fSA9ICRSb3dbNF07CiAgICAgICAgJFJlcXVlc3REYXRhe1NlbmRUb30gICAgICAgICAgPSAkUm93WzVdOwogICAgICAgICRSZXF1ZXN0RGF0YXtTZW5kVGltZX0gICAgICAgID0gJFJvd1s2XTsKICAgICAgICAkUmVxdWVzdERhdGF7Vm90ZVRpbWV9ICAgICAgICA9ICRSb3dbN107CiAgICB9CgogICAgcmV0dXJuICVSZXF1ZXN0RGF0YTsKfQoKPWl0ZW0gUHVibGljU3VydmV5R2V0KCkKCnRvIGdldCBhbGwgcHVibGljIGF0dHJpYnV0ZXMgb2YgYSBzdXJ2ZXkKCiAgICBteSAlUHVibGljU3VydmV5ID0gJFN1cnZleU9iamVjdC0+UHVibGljU3VydmV5R2V0KAogICAgICAgICAgICBQdWJsaWNTdXJ2ZXlLZXkgPT4gJ0F3NWRlM1hmNXFBJywKICAgICAgICAgICAgSW52YWxpZCAgICAgICAgID0+IDEsICMgb3B0aW9uYWwgdG8ga25vdyBpZiBvbmUga2V5IHdhcyBhbHJlYWR5IHVzZWQuCiAgICApOwoKPWN1dAoKc3ViIFB1YmxpY1N1cnZleUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtQdWJsaWNTdXJ2ZXlLZXl9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTdXJ2ZXlJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtQdWJsaWNTdXJ2ZXlLZXl9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17UHVibGljU3VydmV5S2V5fSApOwoKICAgIG15ICRWYWxpZElEID0gJ0FORCB2YWxpZF9pZCA9IDEnOwoKICAgICMgaWYgbm90IGludmFsaWQgc2hvdyBqdXN0IHZhbGlkIGtleXMKICAgIGlmICggJFBhcmFte0ludmFsaWR9ICkgewogICAgICAgICRWYWxpZElEID0gJ0FORCB2YWxpZF9pZCA9IDAnOwogICAgfQoKICAgICMgZ2V0IHJlcXVlc3QKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIHN1cnZleV9pZCBGUk9NIHN1cnZleV9yZXF1ZXN0ICIKICAgICAgICAgICAgLiAiV0hFUkUgcHVibGljX3N1cnZleV9rZXkgPSAnJFBhcmFte1B1YmxpY1N1cnZleUtleX0nICRWYWxpZElEICIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkU3VydmV5SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRTdXJ2ZXlJRCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICgpIGlmICEkU3VydmV5SUQ7CgogICAgIyBnZXQgc3VydmV5CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgc3VydmV5bnVtYmVyLCB0aXRsZSwgaW50cm9kdWN0aW9uICIKICAgICAgICAgICAgLiAiRlJPTSBzdXJ2ZXkgV0hFUkUgaWQgPSAkU3VydmV5SUQgQU5EIChzdGF0dXMgPSAnTWFzdGVyJyBPUiBzdGF0dXMgPSAnVmFsaWQnKSIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJERhdGF7U3VydmV5SUR9ICAgICA9ICRSb3dbMF07CiAgICAgICAgJERhdGF7U3VydmV5TnVtYmVyfSA9ICRSb3dbMV07CiAgICAgICAgJERhdGF7VGl0bGV9ICAgICAgICA9ICRSb3dbMl07CiAgICAgICAgJERhdGF7SW50cm9kdWN0aW9ufSA9ICRSb3dbM107CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBQdWJsaWNBbnN3ZXJTYXZlKCkKCnRvIHNhdmUgYSBwdWJsaWMgdm90ZQoKICAgICRTdXJ2ZXlPYmplY3QtPlB1YmxpY0Fuc3dlclNhdmUoCiAgICAgICAgUHVibGljU3VydmV5S2V5ID0+ICdhVmtkRTgyRHcycXc2ZXJDZGEnLAogICAgICAgIFF1ZXN0aW9uSUQgPT4gNCwKICAgICAgICBWb3RlVmFsdWUgPT4gJ1RoZSBWYWx1ZScsCiAgICApOwoKPWN1dAoKc3ViIFB1YmxpY0Fuc3dlclNhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUHVibGljU3VydmV5S2V5IFF1ZXN0aW9uSUQgVm90ZVZhbHVlKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFB1YmxpY1N1cnZleUtleSBWb3RlVmFsdWUpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9ICk7CiAgICB9CiAgICAkUGFyYW17UXVlc3Rpb25JRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtRdWVzdGlvbklEfSwgJ0ludGVnZXInICk7CgogICAgIyBnZXQgcmVxdWVzdAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQgIgogICAgICAgICAgICAuICIgRlJPTSBzdXJ2ZXlfcmVxdWVzdCBXSEVSRSBwdWJsaWNfc3VydmV5X2tleSA9ICckUGFyYW17UHVibGljU3VydmV5S2V5fScgQU5EIHZhbGlkX2lkID0gMSIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkUmVxdWVzdElEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUmVxdWVzdElEID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRSZXF1ZXN0SUQ7CgogICAgIyBpbnNlcnQgdm90ZQogICAgcmV0dXJuICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIklOU0VSVCBJTlRPIHN1cnZleV92b3RlIChyZXF1ZXN0X2lkLCBxdWVzdGlvbl9pZCwgdm90ZV92YWx1ZSwgY3JlYXRlX3RpbWUpIFZBTFVFUyAoIgogICAgICAgICAgICAuICIkUmVxdWVzdElELCAiCiAgICAgICAgICAgIC4gIiRQYXJhbXtRdWVzdGlvbklEfSwgIgogICAgICAgICAgICAuICInJFBhcmFte1ZvdGVWYWx1ZX0nLCAiCiAgICAgICAgICAgIC4gImN1cnJlbnRfdGltZXN0YW1wKSIsCiAgICApOwp9Cgo9aXRlbSBQdWJsaWNTdXJ2ZXlJbnZhbGlkU2V0KCkKCnRvIHNldCBhIHJlcXVlc3QgaW52YWxpZAoKICAgICRTdXJ2ZXlPYmplY3QtPlB1YmxpY1N1cnZleUludmFsaWRTZXQoCiAgICAgICAgUHVibGljU3VydmV5S2V5ID0+ICdhVmtkRTgyRHcycXc2ZXJDZGEnLAogICAgKTsKCj1jdXQKCnN1YiBQdWJsaWNTdXJ2ZXlJbnZhbGlkU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtQdWJsaWNTdXJ2ZXlLZXl9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTdXJ2ZXlJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1B1YmxpY1N1cnZleUtleX0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtQdWJsaWNTdXJ2ZXlLZXl9ICk7CgogICAgIyBnZXQgcmVxdWVzdAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQgIgogICAgICAgICAgICAuICIgRlJPTSBzdXJ2ZXlfcmVxdWVzdCBXSEVSRSBwdWJsaWNfc3VydmV5X2tleSA9ICckUGFyYW17UHVibGljU3VydmV5S2V5fSciLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFJlcXVlc3RJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFJlcXVlc3RJRCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIGlmICEkUmVxdWVzdElEOwoKICAgICMgdXBkYXRlIHJlcXVlc3QKICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5X3JlcXVlc3QgU0VUICIKICAgICAgICAgICAgLiAidmFsaWRfaWQgPSAwLCAiCiAgICAgICAgICAgIC4gInZvdGVfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wICIKICAgICAgICAgICAgLiAiV0hFUkUgaWQgPSAkUmVxdWVzdElEIiwKICAgICk7Cn0KCj1pdGVtIFN1cnZleVF1ZXVlU2F2ZSgpCgphZGQgYSBzdXJ2ZXlfcXVldWUgcmVsYXRpb24KCm15ICRSZXN1bHQgPSAkU3VydmV5T2JqZWN0LT5TdXJ2ZXlRdWV1ZVNhdmUoCiAgICBTdXJ2ZXlJRCA9PiAzLAogICAgUXVldWVJRHMgPT4gWzEsIDddLAopOwoKPWN1dAoKc3ViIFN1cnZleVF1ZXVlU2F2ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTdXJ2ZXlJRCBRdWV1ZUlEcykpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coIFByaW9yaXR5ID0+ICdlcnJvcicsIE1lc3NhZ2UgPT4gIk5lZWQgJEFyZ3VtZW50ISIgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJFF1ZXVlSUQgKCBAeyAkUGFyYW17UXVldWVJRHN9IH0gKSB7CiAgICAgICAgJFF1ZXVlSUQgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRRdWV1ZUlELCAnSW50ZWdlcicgKTsKICAgIH0KICAgICRQYXJhbXtTdXJ2ZXlJRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtTdXJ2ZXlJRH0sICdJbnRlZ2VyJyApOwoKICAgICMgcmVtb3ZlIGFsbCBleGlzdGluZyByZWxhdGlvbnMKICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHN1cnZleV9xdWV1ZSBXSEVSRSBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IiwKICAgICk7CgogICAgIyBhZGQgYWxsIHN1cnZleV9xdWV1ZSByZWxhdGlvbnMgdG8gZGF0YWJhc2UKICAgIGZvciBteSAkUXVldWVJRCAoIEB7ICRQYXJhbXtRdWV1ZUlEc30gfSApIHsKCiAgICAgICAgIyBhZGQgc3VydmV5X3F1ZXVlIHJlbGF0aW9uIHRvIGRhdGFiYXNlCiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiSU5TRVJUIElOVE8gc3VydmV5X3F1ZXVlIgogICAgICAgICAgICAgICAgLiAiIChzdXJ2ZXlfaWQsIHF1ZXVlX2lkKSBWQUxVRVMiCiAgICAgICAgICAgICAgICAuICIgKCRQYXJhbXtTdXJ2ZXlJRH0sICRRdWV1ZUlEKSIsCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gU3VydmV5UXVldWVHZXQoKQoKZ2V0IGEgc3VydmV5X3F1ZXVlIHJlbGF0aW9uIGFzIGFuIGFycmF5IHJlZmVyZW5jZQoKbXkgJFF1ZXVlc1JlZiA9ICRTdXJ2ZXlPYmplY3QtPlN1cnZleVF1ZXVlR2V0KAogICAgU3VydmV5SUQgPT4gMywKKTsKCj1jdXQKCnN1YiBTdXJ2ZXlRdWV1ZUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U3VydmV5SUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTdXJ2ZXlJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtTdXJ2ZXlJRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtTdXJ2ZXlJRH0sICdJbnRlZ2VyJyApOwoKICAgICMgZ2V0IHF1ZXVlIGlkcyBmcm9tIGRhdGFiYXNlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBxdWV1ZV9pZCBGUk9NIHN1cnZleV9xdWV1ZSIKICAgICAgICAgICAgLiAiIFdIRVJFIHN1cnZleV9pZCA9ICRQYXJhbXtTdXJ2ZXlJRH0gT1JERVIgQlkgcXVldWVfaWQgQVNDIiwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAUXVldWVMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBRdWV1ZUxpc3QsICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIFxAUXVldWVMaXN0Owp9Cgo9aXRlbSBTdXJ2ZXlTZWFyY2goKQoKc2VhcmNoIGluIHN1cnZleXMKCiAgICBteSBASURzID0gJFN1cnZleU9iamVjdC0+U3VydmV5U2VhcmNoKAoKICAgICAgICBOdW1iZXIgICAgICAgICAgICAgID0+ICcqMTM0KicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBUaXRsZSAgICAgICAgICAgICAgID0+ICcqc29tZSB0aXRsZSonLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBJbnRyb2R1Y3Rpb24gICAgICAgID0+ICcqc29tZSBpbnRyb2R1Y3Rpb24qJywgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgID0+ICcqc29tZSBkZXNyaXB0aW9uKicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBOb3RpZmljYXRpb25TZW5kZXIgID0+ICcqdXNlckBkb21haW4qJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBOb3RpZmljYXRpb25TdWJqZWN0ID0+ICcqc29tZSBub3RpZmljYXRpb24gc3ViamVjdConLCAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBOb3RpZmljYXRpb25Cb2R5ICAgID0+ICcqc29tZSBub3RpZmljYXRpb24gYm9keSonLCAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgIyBpcyBzZWFyY2hpbmcgaW4gTnVtYmVyLCBUaXRsZSwgSW50cm9kdWN0aW9uLCBEZXNjcmlwdGlvbiwgTm90aWZpY2F0aW9uU2VuZGVyLAogICAgICAgICMgTm90aWZpY2F0aW9uU3ViamVjdCBhbmQgTm90aWZpY2F0aW9uQm9keQogICAgICAgIFdoYXQgICA9PiAnKnNvbWUgdGV4dConLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQoKICAgICAgICBTdGF0dXMgPT4gJypzb21lIHN0YXR1cyonLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAncy5jcmVhdGVfdGltZScsCiAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAncy5jcmVhdGVfYnknLAogICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJ3MuY2hhbmdlX3RpbWUnLAogICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJ3MuY2hhbmdlX2J5JywKCiAgICAgICAgT3JkZXJCeSA9PiBbICdTdXJ2ZXlJRCcsICdUaXRsZScgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgIyBkZWZhdWx0OiBbICdTdXJ2ZXlJRCcgXSwKICAgICAgICAjICgpU3VydmV5SUQsIE51bWJlciwgVGl0bGUsIEludHJvZHVjdGlvbiwgRGVzY3JpcHRpb24sCiAgICAgICAgIyBOb3RpZmljYXRpb25TZW5kZXIsIE5vdGlmaWNhdGlvblN1YmplY3QsIE5vdGlmaWNhdGlvbkJvZHksCiAgICAgICAgIyBTdGF0dXMsIENyZWF0ZVRpbWUsIENyZWF0ZUJ5LCBDaGFuZ2VUaW1lLCBDaGFuZ2VCeSkKCiAgICAgICAgIyBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBPcmRlckJ5OgogICAgICAgICMgVGhlIE9yZGVyQnlEaXJlY3Rpb24gY2FuIGJlIHNwZWNpZmllZCBmb3IgZWFjaCBPcmRlckJ5IGF0dHJpYnV0ZS4KICAgICAgICAjIFRoZSBwYWlyaW5nIGlzIG1hZGUgYnkgdGhlIGFycmF5IGluZGljZXMuCgogICAgICAgIE9yZGVyQnlEaXJlY3Rpb24gPT4gWyAnRG93bicsICdVcCcgXSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgZGVmYXVsdDogWyAnRG93bicgXQogICAgICAgICMgKERvd24gfCBVcCkKCiAgICAgICAgTGltaXQgICAgID0+IDE1MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFN1cnZleVNlYXJjaCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgVXNlcklEISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyB2ZXJpZnkgdGhhdCBhbGwgcGFzc2VkIGFycmF5IHBhcmFtZXRlcnMgY29udGFpbiBhbiBhcnJheXJlZgogICAgQVJHVU1FTlQ6CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPcmRlckJ5IE9yZGVyQnlEaXJlY3Rpb24pKSB7CgogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRQYXJhbXskQXJndW1lbnR9IHx8PSBbXTsKCiAgICAgICAgICAgIG5leHQgQVJHVU1FTlQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoIHJlZiAkUGFyYW17JEFyZ3VtZW50fSBuZSAnQVJSQVknICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJEFyZ3VtZW50IG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWZpbmUgb3JkZXIgdGFibGUKICAgIG15ICVPcmRlckJ5VGFibGUgPSAoCgogICAgICAgICMgU3VydmV5IGl0ZW0gYXR0cmlidXRlcwogICAgICAgIFN1cnZleUlEICAgICAgICAgICAgPT4gJ3MuaWQnLAogICAgICAgIE51bWJlciAgICAgICAgICAgICAgPT4gJ3Muc3VydmV5bnVtYmVyJywKICAgICAgICBUaXRsZSAgICAgICAgICAgICAgID0+ICdzLnRpdGxlJywKICAgICAgICBJbnRyb2R1Y3Rpb24gICAgICAgID0+ICdzLmludHJvZHVjdGlvbicsCiAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICA9PiAncy5kZXNjcmlwdGlvbicsCiAgICAgICAgTm90aWZpY2F0aW9uU2VuZGVyICA9PiAncy5ub3RpZmljYXRpb25fc2VuZGVyJywKICAgICAgICBOb3RpZmljYXRpb25TdWJqZWN0ID0+ICdzLm5vdGlmaWNhdGlvbl9zdWJqZWN0JywKICAgICAgICBOb3RpZmljYXRpb25Cb2R5ICAgID0+ICdzLm5vdGlmaWNhdGlvbl9ib2R5JywKICAgICAgICBTdGF0dXMgICAgICAgICAgICAgID0+ICdzLnN0YXR1cycsCiAgICAgICAgQ3JlYXRlVGltZSAgICAgICAgICA9PiAncy5jcmVhdGVfdGltZScsCiAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAncy5jcmVhdGVfYnknLAogICAgICAgIENoYW5nZVRpbWUgICAgICAgICAgPT4gJ3MuY2hhbmdlX3RpbWUnLAogICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJ3MuY2hhbmdlX2J5JywKICAgICk7CgogICAgIyBjaGVjayBpZiBPcmRlckJ5IGNvbnRhaW5zIG9ubHkgdW5pcXVlIHZhbGlkIHZhbHVlcwogICAgbXkgJU9yZGVyQnlTZWVuOwogICAgZm9yIG15ICRPcmRlckJ5ICggQHsgJFBhcmFte09yZGVyQnl9IH0gKSB7CgogICAgICAgIGlmICggISRPcmRlckJ5IHx8ICEkT3JkZXJCeVRhYmxleyRPcmRlckJ5fSB8fCAkT3JkZXJCeVNlZW57JE9yZGVyQnl9ICkgewoKICAgICAgICAgICAgIyBmb3VuZCBhbiBlcnJvcgogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiT3JkZXJCeSBjb250YWlucyBpbnZhbGlkIHZhbHVlICckT3JkZXJCeScgIgogICAgICAgICAgICAgICAgICAgIC4gJ29yIHRoZSB2YWx1ZSBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlIScsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICMgcmVtZW1iZXIgdGhlIHZhbHVlIHRvIGNoZWNrIGlmIGl0IGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UKICAgICAgICAkT3JkZXJCeVNlZW57JE9yZGVyQnl9ID0gMTsKCiAgICB9CgogICAgIyBjaGVjayBpZiBPcmRlckJ5RGlyZWN0aW9uIGFycmF5IGNvbnRhaW5zIG9ubHkgJ1VwJyBvciAnRG93bicKICAgIERJUkVDVElPTjoKICAgIGZvciBteSAkRGlyZWN0aW9uICggQHsgJFBhcmFte09yZGVyQnlEaXJlY3Rpb259IH0gKSB7CgogICAgICAgICMgb25seSAnVXAnIG9yICdEb3duJyBhbGxvd2VkCiAgICAgICAgbmV4dCBESVJFQ1RJT04gaWYgJERpcmVjdGlvbiBlcSAnVXAnOwogICAgICAgIG5leHQgRElSRUNUSU9OIGlmICREaXJlY3Rpb24gZXEgJ0Rvd24nOwoKICAgICAgICAjIGZvdW5kIGFuIGVycm9yCiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJPcmRlckJ5RGlyZWN0aW9uIGNhbiBvbmx5IGNvbnRhaW4gJ1VwJyBvciAnRG93bichIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGFzc2VtYmxlIHRoZSBPUkRFUiBCWSBjbGF1c2UKICAgIG15IEBTUUxPcmRlckJ5OwogICAgbXkgJENvdW50ID0gMDsKICAgIGZvciBteSAkT3JkZXJCeSAoIEB7ICRQYXJhbXtPcmRlckJ5fSB9ICkgewoKICAgICAgICAjIHNldCB0aGUgZGVmYXVsdCBvcmRlciBkaXJlY3Rpb24KICAgICAgICBteSAkRGlyZWN0aW9uID0gJ0RFU0MnOwoKICAgICAgICAjIGFkZCB0aGUgZ2l2ZW4gb3JkZXIgZGlyZWN0aW9uCiAgICAgICAgaWYgKCAkUGFyYW17T3JkZXJCeURpcmVjdGlvbn0tPlskQ291bnRdICkgewogICAgICAgICAgICBpZiAoICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufS0+WyRDb3VudF0gZXEgJ1VwJyApIHsKICAgICAgICAgICAgICAgICREaXJlY3Rpb24gPSAnQVNDJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufS0+WyRDb3VudF0gZXEgJ0Rvd24nICkgewogICAgICAgICAgICAgICAgJERpcmVjdGlvbiA9ICdERVNDJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBhZGQgU1FMCiAgICAgICAgcHVzaCBAU1FMT3JkZXJCeSwgIiRPcmRlckJ5VGFibGV7JE9yZGVyQnl9ICREaXJlY3Rpb24iOwogICAgfQogICAgY29udGludWUgewogICAgICAgICRDb3VudCsrOwogICAgfQoKICAgICMgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBvcmRlcmluZyBpcyBub3QgZGV0ZXJtaW5lZAogICAgIyB3ZSBhZGQgYW4gZGVzY2VuZGluZyBvcmRlcmluZyBieSBpZAogICAgaWYgKCAhZ3JlcCB7ICRfIGVxICdTdXJ2ZXlJRCcgfSAoIEB7ICRQYXJhbXtPcmRlckJ5fSB9ICkgKSB7CiAgICAgICAgcHVzaCBAU1FMT3JkZXJCeSwgIiRPcmRlckJ5VGFibGV7U3VydmV5SUR9IERFU0MiOwogICAgfQoKICAgICMgc3FsCiAgICBteSAkU1FMID0gJ1NFTEVDVCBzLmlkICcKICAgICAgICAuICdGUk9NIHN1cnZleSBzICc7CgogICAgIyBleHRlbmRlZCBTUUwKICAgIG15ICRFeHQgPSAnJzsKCiAgICAjIGZ1bGx0ZXh0IHNlYXJjaAogICAgaWYgKCAkUGFyYW17V2hhdH0gJiYgJFBhcmFte1doYXR9IG5lICcqJyApIHsKCiAgICAgICAgIyBkZWZpbmUgdGhlIHNlYXJjaCBmaWVsZHMgZm9yIGZ1bGx0ZXh0IHNlYXJjaAogICAgICAgIG15IEBTZWFyY2hGaWVsZHMgPSAoCiAgICAgICAgICAgICdzLnN1cnZleW51bWJlcicsCiAgICAgICAgICAgICdzLnRpdGxlJywKICAgICAgICAgICAgJ3MuaW50cm9kdWN0aW9uJywKICAgICAgICAgICAgJ3MuZGVzY3JpcHRpb24nLAogICAgICAgICAgICAncy5ub3RpZmljYXRpb25fc2VuZGVyJywKICAgICAgICAgICAgJ3Mubm90aWZpY2F0aW9uX3N1YmplY3QnLAogICAgICAgICAgICAncy5ub3RpZmljYXRpb25fYm9keScsCiAgICAgICAgICAgICdzLnN0YXR1cycsCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgdGhlIFNRTCBmb3IgdGhlIGZ1bGx0ZXh0IHNlYXJjaAogICAgICAgICRFeHQgLj0gJFNlbGYtPntEQk9iamVjdH0tPlF1ZXJ5Q29uZGl0aW9uKAogICAgICAgICAgICBLZXkgICAgICAgICAgPT4gXEBTZWFyY2hGaWVsZHMsCiAgICAgICAgICAgIFZhbHVlICAgICAgICA9PiAkUGFyYW17V2hhdH0sCiAgICAgICAgICAgIFNlYXJjaFByZWZpeCA9PiAnKicsCiAgICAgICAgICAgIFNlYXJjaFN1ZmZpeCA9PiAnKicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgdGhlIG51bWJlcgogICAgaWYgKCAkUGFyYW17TnVtYmVyfSApIHsKICAgICAgICAkUGFyYW17TnVtYmVyfSA9fiBzL1wqLyUvZzsKICAgICAgICAkUGFyYW17TnVtYmVyfSA9fiBzLyUlLyUvZzsKICAgICAgICAkUGFyYW17TnVtYmVyfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte051bWJlcn0sICdMaWtlJyApOwogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0IC49ICIgTE9XRVIocy5udW1iZXIpIExJS0UgTE9XRVIoJyIgLiAkUGFyYW17TnVtYmVyfSAuICInKSAkU2VsZi0+e0xpa2VFc2NhcGVTdHJpbmd9IjsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgdGhlIHRpdGxlCiAgICBpZiAoICRQYXJhbXtUaXRsZX0gKSB7CiAgICAgICAgJFBhcmFte1RpdGxlfSA9ICJcJSRQYXJhbXtUaXRsZX1cJSI7CiAgICAgICAgJFBhcmFte1RpdGxlfSA9fiBzL1wqLyUvZzsKICAgICAgICAkUGFyYW17VGl0bGV9ID1+IHMvJSUvJS9nOwogICAgICAgICRQYXJhbXtUaXRsZX0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtUaXRsZX0sICdMaWtlJyApOwogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0IC49ICIgTE9XRVIocy50aXRsZSkgTElLRSBMT1dFUignIiAuICRQYXJhbXtUaXRsZX0gLiAiJykgJFNlbGYtPntMaWtlRXNjYXBlU3RyaW5nfSI7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHRoZSBpbnRyb2R1Y3Rpb24KICAgIGlmICggJFBhcmFte0ludHJvZHVjdGlvbn0gKSB7CiAgICAgICAgJFBhcmFte0ludHJvZHVjdGlvbn0gPSAiXCUkUGFyYW17SW50cm9kdWN0aW9ufVwlIjsKICAgICAgICAkUGFyYW17SW50cm9kdWN0aW9ufSA9fiBzL1wqLyUvZzsKICAgICAgICAkUGFyYW17SW50cm9kdWN0aW9ufSA9fiBzLyUlLyUvZzsKICAgICAgICAkUGFyYW17SW50cm9kdWN0aW9ufSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte0ludHJvZHVjdGlvbn0sICdMaWtlJyApOwogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0CiAgICAgICAgICAgIC49ICIgTE9XRVIocy5pbnRyb2R1Y3Rpb24pIExJS0UgTE9XRVIoJyIKICAgICAgICAgICAgLiAkUGFyYW17SW50cm9kdWN0aW9ufQogICAgICAgICAgICAuICInKSAkU2VsZi0+e0xpa2VFc2NhcGVTdHJpbmd9IjsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgdGhlIGRlc2NyaXB0aW9uCiAgICBpZiAoICRQYXJhbXtEZXNjcmlwdGlvbn0gKSB7CiAgICAgICAgJFBhcmFte0Rlc2NyaXB0aW9ufSA9ICJcJSRQYXJhbXtEZXNjcmlwdGlvbn1cJSI7CiAgICAgICAgJFBhcmFte0Rlc2NyaXB0aW9ufSA9fiBzL1wqLyUvZzsKICAgICAgICAkUGFyYW17RGVzY3JpcHRpb259ID1+IHMvJSUvJS9nOwogICAgICAgICRQYXJhbXtEZXNjcmlwdGlvbn0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtEZXNjcmlwdGlvbn0sICdMaWtlJyApOwogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0CiAgICAgICAgICAgIC49ICIgTE9XRVIocy5kZXNjcmlwdGlvbikgTElLRSBMT1dFUignIgogICAgICAgICAgICAuICRQYXJhbXtEZXNjcmlwdGlvbn0KICAgICAgICAgICAgLiAiJykgJFNlbGYtPntMaWtlRXNjYXBlU3RyaW5nfSI7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHRoZSBub3RpZmljYXRpb24gc2VuZGVyCiAgICBpZiAoICRQYXJhbXtOb3RpZmljYXRpb25TZW5kZXJ9ICkgewogICAgICAgICRQYXJhbXtOb3RpZmljYXRpb25TZW5kZXJ9ID0gIlwlJFBhcmFte05vdGlmaWNhdGlvblNlbmRlcn1cJSI7CiAgICAgICAgJFBhcmFte05vdGlmaWNhdGlvblNlbmRlcn0gPX4gcy9cKi8lL2c7CiAgICAgICAgJFBhcmFte05vdGlmaWNhdGlvblNlbmRlcn0gPX4gcy8lJS8lL2c7CiAgICAgICAgJFBhcmFte05vdGlmaWNhdGlvblNlbmRlcn0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtOb3RpZmljYXRpb25TZW5kZXJ9LCAnTGlrZScgKTsKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dAogICAgICAgICAgICAuPSAiIExPV0VSKHMubm90aWZpY2F0aW9uX3NlbmRlcikgTElLRSBMT1dFUignIgogICAgICAgICAgICAuICRQYXJhbXtOb3RpZmljYXRpb25TZW5kZXJ9CiAgICAgICAgICAgIC4gIicpICRTZWxmLT57TGlrZUVzY2FwZVN0cmluZ30iOwogICAgfQoKICAgICMgc2VhcmNoIGZvciB0aGUgbm90aWZpY2F0aW9uIHN1YmplY3QKICAgIGlmICggJFBhcmFte05vdGlmaWNhdGlvblN1YmplY3R9ICkgewogICAgICAgICRQYXJhbXtOb3RpZmljYXRpb25TdWJqZWN0fSA9ICJcJSRQYXJhbXtOb3RpZmljYXRpb25TdWJqZWN0fVwlIjsKICAgICAgICAkUGFyYW17Tm90aWZpY2F0aW9uU3ViamVjdH0gPX4gcy9cKi8lL2c7CiAgICAgICAgJFBhcmFte05vdGlmaWNhdGlvblN1YmplY3R9ID1+IHMvJSUvJS9nOwogICAgICAgICRQYXJhbXtOb3RpZmljYXRpb25TdWJqZWN0fQogICAgICAgICAgICA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte05vdGlmaWNhdGlvblN1YmplY3R9LCAnTGlrZScgKTsKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dAogICAgICAgICAgICAuPSAiIExPV0VSKHMubm90aWZpY2F0aW9uX3N1YmplY3QpIExJS0UgTE9XRVIoJyIKICAgICAgICAgICAgLiAkUGFyYW17Tm90aWZpY2F0aW9uU3ViamVjdH0KICAgICAgICAgICAgLiAiJykgJFNlbGYtPntMaWtlRXNjYXBlU3RyaW5nfSI7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHRoZSBub3RpZmljYXRpb24gYm9keQogICAgaWYgKCAkUGFyYW17Tm90aWZpY2F0aW9uQm9keX0gKSB7CiAgICAgICAgJFBhcmFte05vdGlmaWNhdGlvbkJvZHl9ID0gIlwlJFBhcmFte05vdGlmaWNhdGlvbkJvZHl9XCUiOwogICAgICAgICRQYXJhbXtOb3RpZmljYXRpb25Cb2R5fSA9fiBzL1wqLyUvZzsKICAgICAgICAkUGFyYW17Tm90aWZpY2F0aW9uQm9keX0gPX4gcy8lJS8lL2c7CiAgICAgICAgJFBhcmFte05vdGlmaWNhdGlvbkJvZHl9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17Tm90aWZpY2F0aW9uQm9keX0sICdMaWtlJyApOwogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0CiAgICAgICAgICAgIC49ICIgTE9XRVIocy5ub3RpZmljYXRpb25fYm9keSkgTElLRSBMT1dFUignIgogICAgICAgICAgICAuICRQYXJhbXtOb3RpZmljYXRpb25Cb2R5fQogICAgICAgICAgICAuICInKSAkU2VsZi0+e0xpa2VFc2NhcGVTdHJpbmd9IjsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgdGhlIHN0YXR1cwogICAgaWYgKCAkUGFyYW17U3RhdHVzfSApIHsKICAgICAgICAkUGFyYW17U3RhdHVzfSA9ICJcJSRQYXJhbXtTdGF0dXN9XCUiOwogICAgICAgICRQYXJhbXtTdGF0dXN9ID1+IHMvXCovJS9nOwogICAgICAgICRQYXJhbXtTdGF0dXN9ID1+IHMvJSUvJS9nOwogICAgICAgICRQYXJhbXtTdGF0dXN9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17U3RhdHVzfSwgJ0xpa2UnICk7CiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQgLj0gIiBMT1dFUihzLnN0YXR1cykgTElLRSBMT1dFUignIiAuICRQYXJhbXtTdGF0dXN9IC4gIicpICRTZWxmLT57TGlrZUVzY2FwZVN0cmluZ30iOwogICAgfQoKICAgICMgc2VhcmNoIGZvciB0aGUgY3JlYXRlIGJ5CiAgICBpZiAoICRQYXJhbXtDcmVhdGVCeX0gKSB7CiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQgLj0gIiBzLmNyZWF0ZV9ieSA9ICIgLiAkUGFyYW17Q3JlYXRlQnl9OwogICAgfQoKICAgICMgc2VhcmNoIGZvciB0aGUgY3JlYXRlIGJ5CiAgICBpZiAoICRQYXJhbXtDaGFuZ2VCeX0gKSB7CiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQgLj0gIiBzLmNyZWF0ZV9ieSA9ICIgLiAkUGFyYW17Q2hhbmdlQnl9OwogICAgfQoKICAgICMgc2V0IHRpbWUgcGFyYW1zCiAgICBteSAlVGltZVBhcmFtcyA9ICgKCiAgICAgICAgIyB0aW1lcyBpbiBjaGFuZ2VfaXRlbQogICAgICAgIENyZWF0ZVRpbWVOZXdlckRhdGUgPT4gJ3MuY3JlYXRlX3RpbWUgPj0nLAogICAgICAgIENyZWF0ZVRpbWVPbGRlckRhdGUgPT4gJ3MuY3JlYXRlX3RpbWUgPD0nLAogICAgICAgIENoYW5nZVRpbWVOZXdlckRhdGUgPT4gJ3MuY2hhbmdlX3RpbWUgPj0nLAogICAgICAgIENoYW5nZVRpbWVPbGRlckRhdGUgPT4gJ3MuY2hhbmdlX3RpbWUgPD0nLAogICAgKTsKCiAgICAjIGNoZWNrIGFuZCBhZGQgdGltZSBwYXJhbXMgdG8gV0hFUkUKICAgIFRJTUVQQVJBTToKICAgIGZvciBteSAkVGltZVBhcmFtICgga2V5cyAlVGltZVBhcmFtcyApIHsKCiAgICAgICAgbmV4dCBUSU1FUEFSQU0gaWYgISRQYXJhbXskVGltZVBhcmFtfTsKCiAgICAgICAgIyBjaGVjayBmb3JtYXQKICAgICAgICBpZiAoICRQYXJhbXskVGltZVBhcmFtfSAhfiBteyBcQSBcZFxkXGRcZC1cZFxkLVxkXGQgXHMgXGRcZDpcZFxkOlxkXGQgXHogfXhtcyApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlRoZSBwYXJhbWV0ZXIgJFRpbWVQYXJhbSBoYXMgYW4gaW52YWxpZCBkYXRlIGZvcm1hdCEiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJFBhcmFteyRUaW1lUGFyYW19ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JFRpbWVQYXJhbX0gKTsKCiAgICAgICAgIyBhZGQgdGltZSBwYXJhbWV0ZXIgdG8gV0hFUkUKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dCAuPSAiJFRpbWVQYXJhbXN7JFRpbWVQYXJhbX0gJyRQYXJhbXskVGltZVBhcmFtfSciOwogICAgfQoKICAgICMgYWRkIFdIRVJFIHN0YXRlbWVudAogICAgaWYgKCRFeHQpIHsKICAgICAgICAkRXh0ID0gJyBXSEVSRSAnIC4gJEV4dDsKICAgIH0KCiAgICAjIGFkZCBHUk9VUCBCWQogICAgJEV4dAogICAgICAgIC49ICcgR1JPVVAgQlkgcy5pZCwgcy5zdXJ2ZXludW1iZXIgJzsKCiAgICAjIGFkZCB0aGUgT1JERVIgQlkgY2xhdXNlCiAgICBpZiAoQFNRTE9yZGVyQnkpIHsKICAgICAgICAkRXh0IC49ICdPUkRFUiBCWSAnOwogICAgICAgICRFeHQgLj0gam9pbiAnLCAnLCBAU1FMT3JkZXJCeTsKICAgICAgICAkRXh0IC49ICcgJzsKICAgIH0KCiAgICAjIGFkZCBleHRlbmRlZCBTUUwKICAgICRTUUwgLj0gJEV4dDsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAkU1FMLAogICAgICAgIExpbWl0ID0+ICRQYXJhbXtMaW1pdH0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQExpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQExpc3QsICRSb3dbMF07CiAgICB9CiAgICByZXR1cm4gQExpc3Q7Cn0KCj1pdGVtIEdldFJpY2hUZXh0RG9jdW1lbnRDb21wbGV0ZSgpCgpnZXQgc29tZSB0ZXh0IHJlYWR5IHRvIHNob3cgYXMgcmljaHRleHQgYXR0YWNobWVudCBpbmxpbmUKCiAgICBteSAkUmljaFRleHREb2N1bWVudENvbXBsZXRlID0gJFN1cnZleU9iamVjdC0+R2V0UmljaFRleHREb2N1bWVudENvbXBsZXRlKAogICAgICAgIFRleHQgPT4gJFJpY2hUZXh0LAogICAgKTsKCj1jdXQKCnN1YiBHZXRSaWNoVGV4dERvY3VtZW50Q29tcGxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGV4dCkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQgcGFyYW1ldGVyISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjbGVhbiBodG1sIHN0cmluZwogICAgbXkgJFRleHQgPSAkUGFyYW17VGV4dH07CiAgICAkVGV4dCA9fiBze1xBXCRodG1sXC90ZXh0XCRccyguKil9eyQxfXhtczsKCiAgICAjIGdldCBkb2N1bWVudCBjb21wbGV0ZQogICAgbXkgJEhUTUxEb2N1bWVudENvbXBsZXRlID0gJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9LT5Eb2N1bWVudENvbXBsZXRlKAogICAgICAgIFN0cmluZyAgPT4gJFRleHQsCiAgICAgICAgQ2hhcnNldCA9PiAndXRmLTgnLAogICAgKTsKCiAgICByZXR1cm4gJEhUTUxEb2N1bWVudENvbXBsZXRlOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWhlYWQxIFZFUlNJT04KCiRSZXZpc2lvbjogMS42MiAkICREYXRlOiAyMDExLzAzLzA0IDA1OjEyOjM1ICQKCj1jdXQK
IyAtLQojIEtlcm5lbC9TeXN0ZW0vVGlja2V0L0V2ZW50L1N1cnZleVNlbmRSZXF1ZXN0LnBtIC0gc2VuZCBzdXJ2ZXkgcmVxdWVzdHMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IFN1cnZleVNlbmRSZXF1ZXN0LnBtLHYgMS4xNCAyMDEwLzA1LzIxIDEyOjQ5OjUyIG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkV2ZW50OjpTdXJ2ZXlTZW5kUmVxdWVzdDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6U3VydmV5OwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS4xNCAkKSBbMV07CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhDb25maWdPYmplY3QgVGlja2V0T2JqZWN0IExvZ09iamVjdCBVc2VyT2JqZWN0IERCT2JqZWN0IE1haW5PYmplY3QgVGltZU9iamVjdCBFbmNvZGVPYmplY3QpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQogICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OlN1cnZleS0+bmV3KCAleyRTZWxmfSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUaWNrZXRJRCBFdmVudCBDb25maWcpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHRpY2tldCBkYXRhCiAgICBteSAlVGlja2V0ID0gJFNlbGYtPntUaWNrZXRPYmplY3R9LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICk7CgogICAgcmV0dXJuIDEgaWYgJFRpY2tldHtTdGF0ZVR5cGV9IG5lICdjbG9zZWQnOwoKICAgICMgc2VuZCBhbHNvIHN1cnZleSByZXF1ZXN0IG9uIHRpY2tldCBjcmVhdGlvbiAob24gZmlyc3QgYXJ0aWNsZSkKICAgIGlmICggJFBhcmFte0V2ZW50fSBlcSAnQXJ0aWNsZUNyZWF0ZScgKSB7CgogICAgICAgIG15IEBBcnRpY2xlSW5kZXggPSAkU2VsZi0+e1RpY2tldE9iamVjdH0tPkFydGljbGVJbmRleCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gMSBpZiBzY2FsYXIgQEFydGljbGVJbmRleCAhPSAxOwogICAgfQoKICAgICMgc2VuZCByZXF1ZXN0CiAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlJlcXVlc3RTZW5kKAogICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIFN1cnZleS50IC0gU3VydmV5IHRlc3RzCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBTdXJ2ZXkudCx2IDEuMjAgMjAxMS8wNC8yMCAxNDo1Nzo0NSBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIHF3KCRTZWxmKTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyOwp1c2UgS2VybmVsOjpTeXN0ZW06OkVtYWlsOwp1c2UgS2VybmVsOjpTeXN0ZW06OlN1cnZleTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VXNlcjsKCiMgY3JlYXRlIGxvY2FsIGNvbmZpZyBvYmplY3QKbXkgJENvbmZpZ09iamVjdCA9IEtlcm5lbDo6Q29uZmlnLT5uZXcoKTsKCiMgc2V0IGNvbmZpZyB0byBub3Qgc2VuZCBlbWFpbHMKJENvbmZpZ09iamVjdC0+U2V0KAogICAgS2V5ICAgPT4gJ1NlbmRtYWlsTW9kdWxlJywKICAgIFZhbHVlID0+ICdLZXJuZWw6OlN5c3RlbTo6RW1haWw6OkRvTm90U2VuZEVtYWlsJywKKTsKCiMgY3JlYXRlIGxvY2FsIG9iamVjdHMKbXkgJFVzZXJPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6VXNlci0+bmV3KAogICAgJXskU2VsZn0sCiAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKKTsKbXkgJFRpY2tldE9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQtPm5ldygKICAgICV7JFNlbGZ9LAogICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCik7Cm15ICRTdXJ2ZXlPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6U3VydmV5LT5uZXcoCiAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgIExvZ09iamVjdCAgICA9PiAkU2VsZi0+e0xvZ09iamVjdH0sCiAgICBUaW1lT2JqZWN0ICAgPT4gJFNlbGYtPntUaW1lT2JqZWN0fSwKICAgIERCT2JqZWN0ICAgICA9PiAkU2VsZi0+e0RCT2JqZWN0fSwKICAgIE1haW5PYmplY3QgICA9PiAkU2VsZi0+e01haW5PYmplY3R9LAogICAgRW5jb2RlT2JqZWN0ID0+ICRTZWxmLT57RW5jb2RlT2JqZWN0fSwKICAgIFVzZXJPYmplY3QgICA9PiAkVXNlck9iamVjdCwKKTsKCiMgY2xlYW51cCBzeXN0ZW0KJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSBzdXJ2ZXlfcmVxdWVzdCBXSEVSRSBzZW5kX3RvIExJS0UgJ1wlXEB1bml0dGVzdC5jb21cJSciLAopOwoKIyBjcmVhdGUgc3VydmV5Cm15ICVTdXJ2ZXlEYXRhID0gKAogICAgVGl0bGUgICAgICAgICAgICAgICA9PiAnQSBUaXRsZScsCiAgICBJbnRyb2R1Y3Rpb24gICAgICAgID0+ICdUaGUgaW50cm9kdWN0aW9uIG9mIHRoZSBzdXJ2ZXknLAogICAgRGVzY3JpcHRpb24gICAgICAgICA9PiAnVGhlIGludGVybmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBzdXJ2ZXknLAogICAgTm90aWZpY2F0aW9uU2VuZGVyICA9PiAncXVhbGl0eUB1bml0dGVzdC5jb20nLAogICAgTm90aWZpY2F0aW9uU3ViamVjdCA9PiAnSGVscCB1cyB3aXRoIHlvdXIgZmVlZGJhY2shIMOEw5bDnCcsCiAgICBOb3RpZmljYXRpb25Cb2R5ICAgID0+ICdEZWFyIGN1c3RvbWVyLi4uIMOkw7bDvCcsCik7Cm15ICRTdXJ2ZXlJRCA9ICRTdXJ2ZXlPYmplY3QtPlN1cnZleU5ldygKICAgIFVzZXJJRCA9PiAxLAogICAgJVN1cnZleURhdGEsCik7CiRTZWxmLT5UcnVlKAogICAgJFN1cnZleUlELAogICAgIlN1cnZleU5ldygpIiwKKTsKCmZvciAoIDEgLi4gMyApIHsKICAgIG15ICRRdWVzdGlvbkFkZCA9ICRTdXJ2ZXlPYmplY3QtPlF1ZXN0aW9uQWRkKAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgU3VydmV5SUQgPT4gJFN1cnZleUlELAogICAgICAgIFF1ZXN0aW9uID0+ICdUaGUgUXVlc3Rpb24nLAogICAgICAgIFR5cGUgICAgID0+ICdSYWRpbycsCiAgICApOwp9Cm15IEBMaXN0ID0gJFN1cnZleU9iamVjdC0+UXVlc3Rpb25MaXN0KAogICAgU3VydmV5SUQgPT4gJFN1cnZleUlELAopOwpmb3IgbXkgJFF1ZXN0aW9uIChATGlzdCkgewogICAgZm9yICggMSAuLiAzICkgewogICAgICAgICRTdXJ2ZXlPYmplY3QtPkFuc3dlckFkZCgKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICBBbnN3ZXIgICAgID0+ICdUaGUgQW5zd2VyJywKICAgICAgICApOwogICAgfQp9CgpteSAkU3RhdHVzU2V0ID0gJFN1cnZleU9iamVjdC0+U3VydmV5U3RhdHVzU2V0KAogICAgU3VydmV5SUQgID0+ICRTdXJ2ZXlJRCwKICAgIE5ld1N0YXR1cyA9PiAnTWFzdGVyJwopOwokU2VsZi0+SXMoCiAgICAkU3RhdHVzU2V0LAogICAgJ1N0YXR1c1NldCcsCiAgICAiU3VydmV5U3RhdHVzU2V0KCkiLAopOwoKbXkgJVN1cnZleUdldCA9ICRTdXJ2ZXlPYmplY3QtPlN1cnZleUdldCgKICAgIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCwKKTsKCmZvciBteSAkS2V5ICggc29ydCBrZXlzICVTdXJ2ZXlHZXQgKSB7CiAgICBuZXh0IGlmICFkZWZpbmVkICRTdXJ2ZXlEYXRheyRLZXl9OwogICAgJFNlbGYtPklzKAogICAgICAgICRTdXJ2ZXlHZXR7JEtleX0sCiAgICAgICAgJFN1cnZleURhdGF7JEtleX0sCiAgICAgICAgIlN1cnZleUdldCgpIiwKICAgICk7Cn0KCm15IEBUZXN0cyA9ICgKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnIzEgdHJ5JywKICAgICAgICAnU3VydmV5OjpTZW5kUGVyaW9kJyA9PiAxMDAsCiAgICAgICAgVGlja2V0ICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1NvbWUgVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ29wZW4nLAogICAgICAgICAgICBDdXN0b21lck5vICAgPT4gJzEyMzQ2NScsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJAdW5pdHRlc3QuY29tJywKICAgICAgICAgICAgT3duZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgIEFydGljbGVUeXBlICAgID0+ICdlbWFpbC1leHRlcm5hbCcsCiAgICAgICAgICAgIFNlbmRlclR5cGUgICAgID0+ICdjdXN0b21lcicsCiAgICAgICAgICAgIEZyb20gICAgICAgICAgID0+ICdTb21lIEN1c3RvbWVyIDxzb21lQHVuaXR0ZXN0LmNvbT4nLAogICAgICAgICAgICBUbyAgICAgICAgICAgICA9PiAnU29tZSBUbyA8dG9AdW5pdHRlc3QuY29tPicsCiAgICAgICAgICAgIFN1YmplY3QgICAgICAgID0+ICdTb21lIFN1YmplY3QnLAogICAgICAgICAgICBCb2R5ICAgICAgICAgICA9PiAndGhlIG1lc3NhZ2UgdGV4dCcsCiAgICAgICAgICAgIE1lc3NhZ2VJRCAgICAgID0+ICc8YXNkYXNkYXNkLjEyM0B1bml0dGVzdC5jb20+JywKICAgICAgICAgICAgQ29udGVudFR5cGUgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTUnLAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAnT3duZXJVcGRhdGUnLAogICAgICAgICAgICBIaXN0b3J5Q29tbWVudCA9PiAnU29tZSBmcmVlIHRleHQhJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTm9BZ2VudE5vdGlmeSA9PiAxLCAgICAjIGlmIHlvdSBkb24ndCB3YW50IHRvIHNlbmQgYWdlbnQgbm90aWZpY2F0aW9ucwogICAgICAgIH0sCiAgICAgICAgUmVzdWx0ID0+IFsKICAgICAgICAgICAgMSwKICAgICAgICAgICAgMCwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnIzIgdHJ5JywKICAgICAgICAnU3VydmV5OjpTZW5kUGVyaW9kJyA9PiAxMDAsCiAgICAgICAgVGlja2V0ICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1NvbWUgVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ29wZW4nLAogICAgICAgICAgICBDdXN0b21lck5vICAgPT4gJzEyMzQ2NScsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJAdW5pdHRlc3QuY29tJywKICAgICAgICAgICAgT3duZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgIEFydGljbGVUeXBlICAgID0+ICdlbWFpbC1leHRlcm5hbCcsCiAgICAgICAgICAgIFNlbmRlclR5cGUgICAgID0+ICdjdXN0b21lcicsCiAgICAgICAgICAgIEZyb20gICAgICAgICAgID0+ICdTb21lIEN1c3RvbWVyIDxTT01FQHVuaXR0ZXN0LmNvbT4nLAogICAgICAgICAgICBUbyAgICAgICAgICAgICA9PiAnU29tZSBUbyA8dG9AdW5pdHRlc3QuY29tPicsCiAgICAgICAgICAgIFN1YmplY3QgICAgICAgID0+ICdTb21lIFN1YmplY3QnLAogICAgICAgICAgICBCb2R5ICAgICAgICAgICA9PiAndGhlIG1lc3NhZ2UgdGV4dCcsCiAgICAgICAgICAgIE1lc3NhZ2VJRCAgICAgID0+ICc8YXNkYXNkYXNkLjEyM0B1bml0dGVzdC5jb20+JywKICAgICAgICAgICAgQ29udGVudFR5cGUgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTUnLAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAnT3duZXJVcGRhdGUnLAogICAgICAgICAgICBIaXN0b3J5Q29tbWVudCA9PiAnU29tZSBmcmVlIHRleHQhJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTm9BZ2VudE5vdGlmeSA9PiAxLCAgICAjIGlmIHlvdSBkb24ndCB3YW50IHRvIHNlbmQgYWdlbnQgbm90aWZpY2F0aW9ucwogICAgICAgIH0sCiAgICAgICAgUmVzdWx0ID0+IFsKICAgICAgICAgICAgMCwKICAgICAgICAgICAgMCwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnIzMgdHJ5JywKICAgICAgICAnU3VydmV5OjpTZW5kUGVyaW9kJyA9PiAxMDAsCiAgICAgICAgVGlja2V0ICAgICAgICAgICAgICAgPT4gewogICAgICAgICAgICBUaXRsZSAgICAgICAgPT4gJ1NvbWUgVGlja2V0IFRpdGxlJywKICAgICAgICAgICAgUXVldWUgICAgICAgID0+ICdSYXcnLAogICAgICAgICAgICBMb2NrICAgICAgICAgPT4gJ3VubG9jaycsCiAgICAgICAgICAgIFByaW9yaXR5ICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ29wZW4nLAogICAgICAgICAgICBDdXN0b21lck5vICAgPT4gJzEyMzQ2NScsCiAgICAgICAgICAgIEN1c3RvbWVyVXNlciA9PiAnY3VzdG9tZXJAdW5pdHRlc3QuY29tJywKICAgICAgICAgICAgT3duZXJJRCAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQXJ0aWNsZSA9PiB7CiAgICAgICAgICAgIEFydGljbGVUeXBlICAgID0+ICdlbWFpbC1leHRlcm5hbCcsCiAgICAgICAgICAgIFNlbmRlclR5cGUgICAgID0+ICdjdXN0b21lcicsCiAgICAgICAgICAgIEZyb20gICAgICAgICAgID0+ICdTT01FQHVuaXR0ZXN0LmNvbScsCiAgICAgICAgICAgIFRvICAgICAgICAgICAgID0+ICdTb21lIFRvIDx0b0B1bml0dGVzdC5jb20+JywKICAgICAgICAgICAgU3ViamVjdCAgICAgICAgPT4gJ1NvbWUgU3ViamVjdCcsCiAgICAgICAgICAgIEJvZHkgICAgICAgICAgID0+ICd0aGUgbWVzc2FnZSB0ZXh0JywKICAgICAgICAgICAgTWVzc2FnZUlEICAgICAgPT4gJzxhc2Rhc2Rhc2QuMTIzQHVuaXR0ZXN0LmNvbT4nLAogICAgICAgICAgICBDb250ZW50VHlwZSAgICA9PiAndGV4dC9wbGFpbjsgY2hhcnNldD1JU08tODg1OS0xNScsCiAgICAgICAgICAgIEhpc3RvcnlUeXBlICAgID0+ICdPd25lclVwZGF0ZScsCiAgICAgICAgICAgIEhpc3RvcnlDb21tZW50ID0+ICdTb21lIGZyZWUgdGV4dCEnLAogICAgICAgICAgICBVc2VySUQgICAgICAgICA9PiAxLAogICAgICAgICAgICBOb0FnZW50Tm90aWZ5ID0+IDEsICAgICMgaWYgeW91IGRvbid0IHdhbnQgdG8gc2VuZCBhZ2VudCBub3RpZmljYXRpb25zCiAgICAgICAgfSwKICAgICAgICBSZXN1bHQgPT4gWwogICAgICAgICAgICAwLAogICAgICAgICAgICAwLAogICAgICAgIF0sCiAgICB9LAogICAgewogICAgICAgIE5hbWUgICAgICAgICAgICAgICAgID0+ICcjNCB0cnknLAogICAgICAgIFNsZWVwICAgICAgICAgICAgICAgID0+IDgwLAogICAgICAgICdTdXJ2ZXk6OlNlbmRQZXJpb2QnID0+IDEgLyAyNCAvIDYwLAogICAgICAgIFRpY2tldCAgICAgICAgICAgICAgID0+IHsKICAgICAgICAgICAgVGl0bGUgICAgICAgID0+ICdTb21lIFRpY2tldCBUaXRsZScsCiAgICAgICAgICAgIFF1ZXVlICAgICAgICA9PiAnUmF3JywKICAgICAgICAgICAgTG9jayAgICAgICAgID0+ICd1bmxvY2snLAogICAgICAgICAgICBQcmlvcml0eSAgICAgPT4gJzMgbm9ybWFsJywKICAgICAgICAgICAgU3RhdGUgICAgICAgID0+ICdvcGVuJywKICAgICAgICAgICAgQ3VzdG9tZXJObyAgID0+ICcxMjM0NjUnLAogICAgICAgICAgICBDdXN0b21lclVzZXIgPT4gJ2N1c3RvbWVyQHVuaXR0ZXN0LmNvbScsCiAgICAgICAgICAgIE93bmVySUQgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEFydGljbGUgPT4gewogICAgICAgICAgICBBcnRpY2xlVHlwZSAgICA9PiAnZW1haWwtZXh0ZXJuYWwnLAogICAgICAgICAgICBTZW5kZXJUeXBlICAgICA9PiAnY3VzdG9tZXInLAogICAgICAgICAgICBGcm9tICAgICAgICAgICA9PiAnU09NRUB1bml0dGVzdC5jb20nLAogICAgICAgICAgICBUbyAgICAgICAgICAgICA9PiAnU29tZSBUbyA8dG9AdW5pdHRlc3QuY29tPicsCiAgICAgICAgICAgIFN1YmplY3QgICAgICAgID0+ICdTb21lIFN1YmplY3QnLAogICAgICAgICAgICBCb2R5ICAgICAgICAgICA9PiAndGhlIG1lc3NhZ2UgdGV4dCcsCiAgICAgICAgICAgIE1lc3NhZ2VJRCAgICAgID0+ICc8YXNkYXNkYXNkLjEyM0B1bml0dGVzdC5jb20+JywKICAgICAgICAgICAgQ29udGVudFR5cGUgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTUnLAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAnT3duZXJVcGRhdGUnLAogICAgICAgICAgICBIaXN0b3J5Q29tbWVudCA9PiAnU29tZSBmcmVlIHRleHQhJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTm9BZ2VudE5vdGlmeSA9PiAxLCAgICAjIGlmIHlvdSBkb24ndCB3YW50IHRvIHNlbmQgYWdlbnQgbm90aWZpY2F0aW9ucwogICAgICAgIH0sCiAgICAgICAgUmVzdWx0ID0+IFsKICAgICAgICAgICAgMSwKICAgICAgICAgICAgMCwKICAgICAgICBdLAogICAgfSwKICAgIHsKICAgICAgICBOYW1lICAgICAgICAgICAgICAgICA9PiAnIzUgdHJ5JywKICAgICAgICBTbGVlcCAgICAgICAgICAgICAgICA9PiAyMCwKICAgICAgICAnU3VydmV5OjpTZW5kUGVyaW9kJyA9PiAxIC8gMjQgLyA2MCwKICAgICAgICBUaWNrZXQgICAgICAgICAgICAgICA9PiB7CiAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnU29tZSBUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnb3BlbicsCiAgICAgICAgICAgIEN1c3RvbWVyTm8gICA9PiAnMTIzNDY1JywKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICdjdXN0b21lckB1bml0dGVzdC5jb20nLAogICAgICAgICAgICBPd25lcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgQXJ0aWNsZVR5cGUgICAgPT4gJ2VtYWlsLWV4dGVybmFsJywKICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgPT4gJ2N1c3RvbWVyJywKICAgICAgICAgICAgRnJvbSAgICAgICAgICAgPT4gJ1NPTUVAdW5pdHRlc3QuY29tJywKICAgICAgICAgICAgVG8gICAgICAgICAgICAgPT4gJ1NvbWUgVG8gPHRvQHVuaXR0ZXN0LmNvbT4nLAogICAgICAgICAgICBTdWJqZWN0ICAgICAgICA9PiAnU29tZSBTdWJqZWN0JywKICAgICAgICAgICAgQm9keSAgICAgICAgICAgPT4gJ3RoZSBtZXNzYWdlIHRleHQnLAogICAgICAgICAgICBNZXNzYWdlSUQgICAgICA9PiAnPGFzZGFzZGFzZC4xMjNAdW5pdHRlc3QuY29tPicsCiAgICAgICAgICAgIENvbnRlbnRUeXBlICAgID0+ICd0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTE1JywKICAgICAgICAgICAgSGlzdG9yeVR5cGUgICAgPT4gJ093bmVyVXBkYXRlJywKICAgICAgICAgICAgSGlzdG9yeUNvbW1lbnQgPT4gJ1NvbWUgZnJlZSB0ZXh0IScsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgID0+IDEsCiAgICAgICAgICAgIE5vQWdlbnROb3RpZnkgPT4gMSwgICAgIyBpZiB5b3UgZG9uJ3Qgd2FudCB0byBzZW5kIGFnZW50IG5vdGlmaWNhdGlvbnMKICAgICAgICB9LAogICAgICAgIFJlc3VsdCA9PiBbCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgIDAsCiAgICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgICAgTmFtZSAgID0+ICcjNiB0cnknLAogICAgICAgIFRpY2tldCA9PiB7CiAgICAgICAgICAgIFRpdGxlICAgICAgICA9PiAnU29tZSBUaWNrZXQgVGl0bGUnLAogICAgICAgICAgICBRdWV1ZSAgICAgICAgPT4gJ1JhdycsCiAgICAgICAgICAgIExvY2sgICAgICAgICA9PiAndW5sb2NrJywKICAgICAgICAgICAgUHJpb3JpdHkgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgIFN0YXRlICAgICAgICA9PiAnb3BlbicsCiAgICAgICAgICAgIEN1c3RvbWVyTm8gICA9PiAnMTIzNDY1JywKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyID0+ICdjdXN0b21lckB1bml0dGVzdC5jb20nLAogICAgICAgICAgICBPd25lcklEICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBcnRpY2xlID0+IHsKICAgICAgICAgICAgQXJ0aWNsZVR5cGUgICAgPT4gJ2VtYWlsLWV4dGVybmFsJywKICAgICAgICAgICAgU2VuZGVyVHlwZSAgICAgPT4gJ2N1c3RvbWVyJywKICAgICAgICAgICAgRnJvbSAgICAgICAgICAgPT4gJ015IE5hbWUnLAogICAgICAgICAgICBUbyAgICAgICAgICAgICA9PiAnU29tZSBUbyA8dG9AdW5pdHRlc3QuY29tPicsCiAgICAgICAgICAgIFN1YmplY3QgICAgICAgID0+ICdTb21lIFN1YmplY3QnLAogICAgICAgICAgICBCb2R5ICAgICAgICAgICA9PiAndGhlIG1lc3NhZ2UgdGV4dCcsCiAgICAgICAgICAgIE1lc3NhZ2VJRCAgICAgID0+ICc8YXNkYXNkYXNkLjEyM0B1bml0dGVzdC5jb20+JywKICAgICAgICAgICAgQ29udGVudFR5cGUgICAgPT4gJ3RleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMTUnLAogICAgICAgICAgICBIaXN0b3J5VHlwZSAgICA9PiAnT3duZXJVcGRhdGUnLAogICAgICAgICAgICBIaXN0b3J5Q29tbWVudCA9PiAnU29tZSBmcmVlIHRleHQhJywKICAgICAgICAgICAgVXNlcklEICAgICAgICAgPT4gMSwKICAgICAgICAgICAgTm9BZ2VudE5vdGlmeSA9PiAxLCAgICAjIGlmIHlvdSBkb24ndCB3YW50IHRvIHNlbmQgYWdlbnQgbm90aWZpY2F0aW9ucwogICAgICAgIH0sCiAgICAgICAgUmVzdWx0ID0+IFsKICAgICAgICAgICAgMCwKICAgICAgICAgICAgMCwKICAgICAgICBdLAogICAgfSwKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CgogICAgaWYgKCAkVGVzdC0+eydTdXJ2ZXk6OlNlbmRQZXJpb2QnfSApIHsKICAgICAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgICAgIEtleSAgID0+ICdTdXJ2ZXk6OlNlbmRQZXJpb2QnLAogICAgICAgICAgICBWYWx1ZSA9PiAkVGVzdC0+eydTdXJ2ZXk6OlNlbmRQZXJpb2QnfSwKICAgICAgICApOwogICAgfQoKICAgIGlmICggJFRlc3QtPntTbGVlcH0gKSB7CiAgICAgICAgc2xlZXAgJFRlc3QtPntTbGVlcH07CiAgICB9CgogICAgbXkgJFRpY2tldElEID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgICV7ICRUZXN0LT57VGlja2V0fSB9LAogICAgKTsKCiAgICBteSAkQXJ0aWNsZUlEID0gJFRpY2tldE9iamVjdC0+QXJ0aWNsZUNyZWF0ZSgKICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgJXsgJFRlc3QtPntBcnRpY2xlfSB9LAogICAgKTsKCiAgICAjIHNlbmQgc3VydmV5IGZpcnN0IHRpbWUKICAgIG15ICggJEhlYWRlclJlZiwgJEJvZHlSZWYgKSA9ICRTdXJ2ZXlPYmplY3QtPlJlcXVlc3RTZW5kKAogICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICk7CgogICAgIyBjaGVjayBpZiBzdXJ2ZXkgZ290IHNlbnQKICAgIGlmICggJFRlc3QtPntSZXN1bHR9LT5bMF0gKSB7CgogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkeyRIZWFkZXJSZWZ9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBSZXF1ZXN0U2VuZCgpIC0gc3VydmV5IGdvdCBzZW50IiwKICAgICAgICApOwoKICAgICAgICAkeyRIZWFkZXJSZWZ9ID1+IG17IF4gU3ViamVjdDogWyBdICggLis/ICkgXG4gXFMrOiBbIF0gfXhtczsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICQxLAogICAgICAgICAgICAnSGVscCB1cyB3aXRoIHlvdXIgZmVlZGJhY2shID0/VVRGLTg/UT89QzM9ODQ9QzM9OTY9QzM9OUM/PScsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IFRlc3Qgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGVtYWlsIHN1YmplY3QiLAogICAgICAgICk7CgogICAgICAgICMgZGVmaW5lIG1haWwgYm9keQogICAgICAgIG15ICRNYWlsYm9keTEgPSAiVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4uLgoKLS0tLS0tLS0tLS0tPV9NRVNTQUdFSUQKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVwidXRmLThcIgpDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQoKRGVhciBjdXN0b21lci4uLiA9QzM9QTQ9QzM9QjY9QzM9QkM9CgotLS0tLS0tLS0tLS09X01FU1NBR0VJRApDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1cInV0Zi04XCIKQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKCjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9M0RcIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9M0RcInRleHQvaHRtbDsgY2hhcnNldD0KPTNEdXRmLThcIi8+PC9oZWFkPjxib2R5IHN0eWxlPTNEXCJmb250LWZhbWlseTpHZW5ldmEsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2U9CnJpZjsgZm9udC1zaXplOiAxMnB4O1wiPkRlYXIgY3VzdG9tZXIuLi4gPUMzPUE0PUMzPUI2PUMzPUJDPC9ib2R5PjwvaHRtbD49CgotLS0tLS0tLS0tLS09X01FU1NBR0VJRC0tCiI7CgogICAgICAgICMgY29weSBtYWlsIGJvZHkKICAgICAgICBteSAkTWFpbGJvZHkyID0gJHskQm9keVJlZn07CgogICAgICAgICMgcHJlcGFyZSBtYWlsIGJvZHkKICAgICAgICAkTWFpbGJvZHkyID1+IHN7IFxkezgsMTJ9IC0gXGR7Myw2fSAtIFxkezEsM30gfXtNRVNTQUdFSUR9eG1zZzsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTWFpbGJvZHkyLAogICAgICAgICAgICAkTWFpbGJvZHkxLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBUZXN0IHNwZWNpYWwgY2hhcmFjdGVycyBpbiBlbWFpbCBib2R5IiwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkeyRIZWFkZXJSZWZ9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBSZXF1ZXN0U2VuZCgpIC0gbm8gc3VydmV5IGdvdCBzZW50IiwKICAgICAgICApOwogICAgfQoKICAgICMgc2VuZCBzdXJ2ZXkgc2Vjb25kIHRpbWUKICAgICggJEhlYWRlclJlZiwgJEJvZHlSZWYgKSA9ICRTdXJ2ZXlPYmplY3QtPlJlcXVlc3RTZW5kKAogICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICk7CgogICAgIyBjaGVjayBpZiBzdXJ2ZXkgZ290IHNlbnQKICAgIGlmICggJFRlc3QtPntSZXN1bHR9LT5bMV0gKSB7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICR7JEhlYWRlclJlZn0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IDIgUmVxdWVzdFNlbmQoKSAtIHN1cnZleSBnb3Qgc2VudCIsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJHskSGVhZGVyUmVmfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gMiBSZXF1ZXN0U2VuZCgpIC0gbm8gc3VydmV5IGdvdCBzZW50IiwKICAgICAgICApOwogICAgfQoKICAgIG15ICREZWxldGUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwp9CgojIHRlc3QgR2V0UmljaFRleHREb2N1bWVudENvbXBsZXRlCnsKICAgIG15ICVUZXh0OwoKICAgICN0ZXN0cyBmb3IgcmljaCB0ZXh0CiAgICAkVGV4dHtSaWNoVGV4dH0gPSB7CiAgICAgICAgSW5wdXQgPT4KICAgICAgICAgICAgJyRodG1sL3RleHQkIDxlbT5UaGlzIGlzIHRoZSBpbnRyb2R1Y3Rpb24gdG8gdGhpcyBzdXJ2ZXksIGlmIHlvdSB3YW50IHRvIGFuc3dlciBpdCB5b3UgaGF2ZSB0bzxiciAvPgpyZWFkIHRoaXMgZmlyc3QsIHBsZWFzZSBsZXQgdXMgdGVsbCB5b3UgdGhhbmtzIGZvciB0aGUgb3Bwb3J0dW5pdHkgdG8gaW50ZXJhY3Q8YnIgLz4Kd2l0aCB5b3UuPC9lbT48YnIgLz4KPHVsPgogICAgPGxpPgogICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDEyOCk7Ij5QbGVhc2UgcmVhZCBhbGwgdGhlIGluc3RydWN0aW9uczwvc3Bhbj48L2xpPgogICAgPGxpPgogICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDAsIDAsIDEyOCk7Ij5QbGVhc2UgdGFrZSBhdHRlbnRpb24gaW4gZXZlcnkgcXVlc3Rpb248L3NwYW4+PC9saT4KICAgIDxsaT4KICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAxMjgpOyI+QW5zd2VyIGFzIGNsZWFyIGFzIHBvc3NpYmxlPC9zcGFuPjwvbGk+CjwvdWw+CjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDI1NSwgMTYwLCAxMjIpOyI+VGhpcyBpcyBhbGwgd2UgaGF2ZSB0byB0ZWxsIHlvdSBmb3Igbm93LCBwbGVhc2UgdGFrZSB0aGUgb3Bwb3J0dW5pdHkgbm93IHRvPGJyIC8+CmV4cHJlc3MgeW91ciBmZWVsaW5ncyBpbiBvdXIgc3VydmV5Ljwvc3Bhbj48YnIgLz4KPGJyIC8+CjxzcGFuIHN0eWxlPSJjb2xvcjogcmdiKDI1NSwgMTYwLCAxMjIpOyI+IGdyZWV0aW5ncyw8YnIgLz4KPGJyIC8+CmRhbmllbHosPC9zcGFuPjxiciAvPicsCiAgICAgICAgT3V0cHV0ID0+CiAgICAgICAgICAgICc8aHRtbD48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIvPjwvaGVhZD48Ym9keSBzdHlsZT0iZm9udC1mYW1pbHk6R2VuZXZhLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij48ZW0+VGhpcyBpcyB0aGUgaW50cm9kdWN0aW9uIHRvIHRoaXMgc3VydmV5LCBpZiB5b3Ugd2FudCB0byBhbnN3ZXIgaXQgeW91IGhhdmUgdG88YnIgLz4KcmVhZCB0aGlzIGZpcnN0LCBwbGVhc2UgbGV0IHVzIHRlbGwgeW91IHRoYW5rcyBmb3IgdGhlIG9wcG9ydHVuaXR5IHRvIGludGVyYWN0PGJyIC8+CndpdGggeW91LjwvZW0+PGJyIC8+Cjx1bD4KICAgIDxsaT4KICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAxMjgpOyI+UGxlYXNlIHJlYWQgYWxsIHRoZSBpbnN0cnVjdGlvbnM8L3NwYW4+PC9saT4KICAgIDxsaT4KICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6IHJnYigwLCAwLCAxMjgpOyI+UGxlYXNlIHRha2UgYXR0ZW50aW9uIGluIGV2ZXJ5IHF1ZXN0aW9uPC9zcGFuPjwvbGk+CiAgICA8bGk+CiAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiByZ2IoMCwgMCwgMTI4KTsiPkFuc3dlciBhcyBjbGVhciBhcyBwb3NzaWJsZTwvc3Bhbj48L2xpPgo8L3VsPgo8c3BhbiBzdHlsZT0iY29sb3I6IHJnYigyNTUsIDE2MCwgMTIyKTsiPlRoaXMgaXMgYWxsIHdlIGhhdmUgdG8gdGVsbCB5b3UgZm9yIG5vdywgcGxlYXNlIHRha2UgdGhlIG9wcG9ydHVuaXR5IG5vdyB0bzxiciAvPgpleHByZXNzIHlvdXIgZmVlbGluZ3MgaW4gb3VyIHN1cnZleS48L3NwYW4+PGJyIC8+CjxiciAvPgo8c3BhbiBzdHlsZT0iY29sb3I6IHJnYigyNTUsIDE2MCwgMTIyKTsiPiBncmVldGluZ3MsPGJyIC8+CjxiciAvPgpkYW5pZWx6LDwvc3Bhbj48YnIgLz48L2JvZHk+PC9odG1sPicsCiAgICB9OwoKICAgICMgY3JlYXRlIHRlc3RzIGZvciBzaW1wbGUgdGV4dAogICAgJFRleHR7U2ltcGxlVGV4dH0gPSB7CiAgICAgICAgSW5wdXQgPT4gIlRoaXMgaXMgYW4gaW50ZXJuYWwgZGVzY3JpcHRpb24gZXhhbXBsZToKCiAtIE9uZQogLSBUd28KIC0gVGhyZWUKIC0gRm91cgogLSBGaXZlCgpUaGF0J3MgaXQuCi1kegoiLAogICAgICAgIE91dHB1dCA9PgogICAgICAgICAgICAnPGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz48L2hlYWQ+PGJvZHkgc3R5bGU9ImZvbnQtZmFtaWx5OkdlbmV2YSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyI+VGhpcyBpcyBhbiBpbnRlcm5hbCBkZXNjcmlwdGlvbiBleGFtcGxlOgoKIC0gT25lCiAtIFR3bwogLSBUaHJlZQogLSBGb3VyCiAtIEZpdmUKClRoYXRcJ3MgaXQuCi1kego8L2JvZHk+PC9odG1sPicsCiAgICB9OwoKICAgIG15ICREb2N1bWVudENvbXBsZXRlOwogICAgZm9yIG15ICRUZXh0VHlwZSAoIGtleXMgJVRleHQgKSB7CiAgICAgICAgJERvY3VtZW50Q29tcGxldGUKICAgICAgICAgICAgPSAkU3VydmV5T2JqZWN0LT5HZXRSaWNoVGV4dERvY3VtZW50Q29tcGxldGUoIFRleHQgPT4gJFRleHR7JFRleHRUeXBlfS0+e0lucHV0fSApOwogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFRleHR7JFRleHRUeXBlfS0+e091dHB1dH0sCiAgICAgICAgICAgICREb2N1bWVudENvbXBsZXRlLAogICAgICAgICAgICAiR2V0UmljaFRleHREb2N1bWVudENvbXBsZXRlIFRlc3QgLSAkVGV4dFR5cGUiLAogICAgICAgICk7CiAgICB9Cn0KCiMgY2xlYW51cCBzeXN0ZW0KJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgU1FMID0+ICJERUxFVEUgRlJPTSBzdXJ2ZXlfcmVxdWVzdCBXSEVSRSBzZW5kX3RvIExJS0UgJ1wlXEB1bml0dGVzdC5jb21cJSciLAopOwoKMTsK
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXRTdXJ2ZXkucG0gLSBwcm92aWRlcyBnZW5lcmljIEhUTUwgb3V0cHV0IGZvciBTdXJ2ZXkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IExheW91dFN1cnZleS5wbSx2IDEuMiAyMDExLzA0LzExIDE5OjA4OjIyIG1iIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXRTdXJ2ZXk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OKTsKJFZFUlNJT04gPSBxdygkUmV2aXNpb246IDEuMiAkKSBbMV07Cgo9b3ZlciA0Cgo9aXRlbSBTdXJ2ZXlMaXN0U2hvdygpCgpSZXR1cm5zIGEgbGlzdCBvZiBzdXJ2ZXlzIGxpc3Qgd2l0aCBwYWdpbmF0aW9uLgoKVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIEw8S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dFRpY2tldDo6VGlja2V0TGlzdFNob3coKT4KaW4gRjxLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0VGlja2V0LnBtPi4KCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+U3VydmV5TGlzdFNob3coCiAgICAgICAgU3VydmV5SURzICA9PiAkU3VydmV5SURzUmVmLCAgICAgICAgICAgICAgICAgICAgICAjIHRvdGFsIGxpc3Qgb2Ygc3VydmV5cyBpZHMsIHRoYXQgY2FuIGJlIGxpc3RlZAogICAgICAgIFRvdGFsICAgICAgPT4gc2NhbGFyIEB7ICRTdXJ2ZXlJRHNSZWYgfSwgICAgICAgICAgIyB0b3RhbCBudW1iZXIgb2YgbGlzdCBpdGVtcywgY2hhbmdlcyBpbiB0aGlzIGNhc2UKICAgICAgICBWaWV3ICAgICAgID0+ICRTZWxmLT57Vmlld30sICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIHRoZSBkZWZhdWx0IHZhbHVlIGlzICdTbWFsbCcKICAgICAgICBGaWx0ZXIgICAgID0+ICdBbGwnLAogICAgICAgIEZpbHRlcnMgICAgPT4gXCVOYXZCYXJGaWx0ZXIsCiAgICAgICAgRmlsdGVyTGluayA9PiAkTGlua0ZpbHRlciwKICAgICAgICBUaXRsZU5hbWUgID0+ICdPdmVydmlldzogU3VydmV5JywKICAgICAgICBUaXRsZVZhbHVlID0+ICRTZWxmLT57RmlsdGVyfSwKICAgICAgICBFbnYgICAgICAgID0+ICRTZWxmLAogICAgICAgIExpbmtQYWdlICAgPT4gJExpbmtQYWdlLAogICAgKTsKCj1jdXQKCnN1YiBTdXJ2ZXlMaXN0U2hvdyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdGFrZSBvYmplY3QgcmVmIHRvIGxvY2FsLCByZW1vdmUgaXQgZnJvbSAlUGFyYW0gKHByZXZlbnQgbWVtb3J5IGxlYWspCiAgICBteSAkRW52ID0gZGVsZXRlICRQYXJhbXtFbnZ9OwoKICAgICMgbG9va3VwIGxhdGVzdCB1c2VkIHZpZXcgbW9kZQogICAgaWYgKCAhJFBhcmFte1ZpZXd9ICYmICRTZWxmLT57ICdVc2VyU3VydmV5T3ZlcnZpZXcnIC4gJEVudi0+e0FjdGlvbn0gfSApIHsKICAgICAgICAkUGFyYW17Vmlld30gPSAkU2VsZi0+eyAnVXNlclN1cnZleU92ZXJ2aWV3JyAuICRFbnYtPntBY3Rpb259IH07CiAgICB9CgogICAgIyBzZXQgZnJvbnRlbmQKICAgIG15ICRGcm9udGVuZCA9ICRQYXJhbXtGcm9udGVuZH0gfHwgJ0FnZW50JzsKCiAgICAjIHNldCBkZWZhdXQgdmlldyBtb2RlIHRvICdzbWFsbCcKICAgIG15ICRWaWV3ID0gJFBhcmFte1ZpZXd9IHx8ICdTbWFsbCc7CgogICAgIyBzdG9yZSBsYXRlc3QgdmlldyBtb2RlCiAgICAkU2VsZi0+e1Nlc3Npb25PYmplY3R9LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ1VzZXJTdXJ2ZXlPdmVydmlldycgLiAkRW52LT57QWN0aW9ufSwKICAgICAgICBWYWx1ZSAgICAgPT4gJFZpZXcsCiAgICApOwoKICAgICMgZ2V0IGJhY2tlbmQgZnJvbSBjb25maWcKICAgIG15ICRCYWNrZW5kcyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdTdXJ2ZXk6OkZyb250ZW5kOjpPdmVydmlldycpOwogICAgaWYgKCAhJEJhY2tlbmRzICkgewogICAgICAgIHJldHVybiAkRW52LT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnTmVlZCBjb25maWcgb3B0aW9uIFN1cnZleTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3JywKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgZm9yIGhhc2gtcmVmCiAgICBpZiAoIHJlZiAkQmFja2VuZHMgbmUgJ0hBU0gnICkgewogICAgICAgIHJldHVybiAkRW52LT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnQ29uZmlnIG9wdGlvbiBTdXJ2ZXk6OkZyb250ZW5kOjpPdmVydmlldyBuZWVkcyB0byBiZSBhIEhBU0ggcmVmIScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBjb25maWcga2V5CiAgICBpZiAoICEkQmFja2VuZHMtPnskVmlld30gKSB7CiAgICAgICAgcmV0dXJuICRFbnYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICJObyBjb25maWcgb3B0aW9uIGZvdW5kIGZvciB0aGUgdmlldyAnJFZpZXcnISIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG5hdiBiYXIKICAgIG15ICRTdGFydEhpdCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSgKICAgICAgICBQYXJhbSA9PiAnU3RhcnRIaXQnLAogICAgKSB8fCAxOwoKICAgICMgZ2V0IHBlcnNvbmFsIHBhZ2Ugc2hvd24gY291bnQKICAgIG15ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleSA9ICdVc2VyU3VydmV5T3ZlcnZpZXcnIC4gJFZpZXcgLiAnUGFnZVNob3duJzsKICAgIG15ICRQYWdlU2hvd24gICAgICAgICAgICAgICA9ICRTZWxmLT57JFBhZ2VTaG93blByZWZlcmVuY2VzS2V5fSB8fCAxMDsKICAgIG15ICRHcm91cCAgICAgICAgICAgICAgICAgICA9ICdTdXJ2ZXlPdmVydmlldycgLiAkVmlldyAuICdQYWdlU2hvd24nOwoKICAgICMgY2hlY2sgc3RhcnQgb3B0aW9uLCBpZiBoaWdoZXIgdGhlbiBlbGVtZW50cyBhdmFpbGFibGUsIHNldAogICAgIyBpdCB0byB0aGUgbGFzdCBvdmVydmlldyBwYWdlIChUaGFua3MgdG8gU3RlZmFuIFNjaG1pZHQhKQogICAgaWYgKCAkU3RhcnRIaXQgPiAkUGFyYW17VG90YWx9ICkgewogICAgICAgIG15ICRQYWdlcyA9IGludCggKCAkUGFyYW17VG90YWx9IC8gJFBhZ2VTaG93biApICsgMC45OTk5OSApOwogICAgICAgICRTdGFydEhpdCA9ICggKCAkUGFnZXMgLSAxICkgKiAkUGFnZVNob3duICkgKyAxOwogICAgfQoKICAgICMgZ2V0IGRhdGEgc2VsZWN0aW9uCiAgICBteSAlRGF0YTsKICAgIG15ICRDb25maWcgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUHJlZmVyZW5jZXNHcm91cHMnKTsKICAgIGlmICggJENvbmZpZyAmJiAkQ29uZmlnLT57JEdyb3VwfSAmJiAkQ29uZmlnLT57JEdyb3VwfS0+e0RhdGF9ICkgewogICAgICAgICVEYXRhID0gJXsgJENvbmZpZy0+eyRHcm91cH0tPntEYXRhfSB9OwogICAgfQoKICAgICMgc2V0IHBhZ2UgbGltaXQgYW5kIGJ1aWxkIHBhZ2UgbmF2CiAgICBteSAkTGltaXQgPSAkUGFyYW17TGltaXR9IHx8IDIwXzAwMDsKICAgIG15ICVQYWdlTmF2ID0gJEVudi0+e0xheW91dE9iamVjdH0tPlBhZ2VOYXZCYXIoCiAgICAgICAgTGltaXQgICAgID0+ICRMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkUGFyYW17VG90YWx9IHx8IDAsCiAgICAgICAgQWN0aW9uICAgID0+ICdBY3Rpb249JyAuICRFbnYtPntMYXlvdXRPYmplY3R9LT57QWN0aW9ufSwKICAgICAgICBMaW5rICAgICAgPT4gJFBhcmFte0xpbmtQYWdlfSwKICAgICk7CgogICAgIyBidWlsZCBzaG93biBzdXJ2ZXlzIHBlciBwYWdlCiAgICAkUGFyYW17UmVxdWVzdGVkVVJMfSAgICA9ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IjsKICAgICRQYXJhbXtHcm91cH0gICAgICAgICAgID0gJEdyb3VwOwogICAgJFBhcmFte1ByZWZlcmVuY2VzS2V5fSAgPSAkUGFnZVNob3duUHJlZmVyZW5jZXNLZXk7CiAgICAkUGFyYW17UGFnZVNob3duU3RyaW5nfSA9ICRTZWxmLT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBOYW1lICAgICAgICA9PiAkUGFnZVNob3duUHJlZmVyZW5jZXNLZXksCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJFBhZ2VTaG93biwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgIERhdGEgICAgICAgID0+IFwlRGF0YSwKICAgICk7CgogICAgIyBidWlsZCBuYXZiYXIgY29udGVudAogICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyJywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICMgYmFjayBsaW5rCiAgICBpZiAoICRQYXJhbXtMaW5rQmFja30gKSB7CiAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclBhZ2VCYWNrJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZmlsdGVycwogICAgaWYgKCAkUGFyYW17RmlsdGVyc30gKSB7CgogICAgICAgICMgZ2V0IGdpdmVuIGZpbHRlcnMKICAgICAgICBteSBATmF2QmFyRmlsdGVyczsKICAgICAgICBmb3IgbXkgJFByaW8gKCBzb3J0IGtleXMgJXsgJFBhcmFte0ZpbHRlcnN9IH0gKSB7CiAgICAgICAgICAgIHB1c2ggQE5hdkJhckZpbHRlcnMsICRQYXJhbXtGaWx0ZXJzfS0+eyRQcmlvfTsKICAgICAgICB9CgogICAgICAgICMgYnVpbGQgZmlsdGVyIGNvbnRlbnQKICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyRmlsdGVyJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBsb29wIG92ZXIgZmlsdGVycwogICAgICAgIG15ICRDb3VudCA9IDA7CiAgICAgICAgZm9yIG15ICRGaWx0ZXIgKEBOYXZCYXJGaWx0ZXJzKSB7CgogICAgICAgICAgICAjIGluY3JlbWVudCBmaWx0ZXIgY291bnQgYW5kIGJ1aWxkIGZpbHRlciBpdGVtCiAgICAgICAgICAgICRDb3VudCsrOwogICAgICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhckZpbHRlckl0ZW0nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICV7JEZpbHRlcn0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBmaWx0ZXIgaXMgc2VsZWN0ZWQKICAgICAgICAgICAgaWYgKCAkRmlsdGVyLT57RmlsdGVyfSBlcSAkUGFyYW17RmlsdGVyfSApIHsKICAgICAgICAgICAgICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZCcsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgJXskRmlsdGVyfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWROb3QnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgbG9vcCBvdmVyIGNvbmZpZ3VyZWQgYmFja2VuZHMKICAgIGZvciBteSAkQmFja2VuZCAoIGtleXMgJXskQmFja2VuZHN9ICkgewoKICAgICAgICAjIGJ1aWxkIG5hdmJhciB2aWV3IG1vZGUKICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyVmlld01vZGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICV7ICRCYWNrZW5kcy0+eyRCYWNrZW5kfSB9LAogICAgICAgICAgICAgICAgRmlsdGVyID0+ICRQYXJhbXtGaWx0ZXJ9LAogICAgICAgICAgICAgICAgVmlldyAgID0+ICRCYWNrZW5kLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgY3VycmVudCB2aWV3IGlzIGNvbmZpZ3VyZWQgaW4gYmFja2VuZAogICAgICAgIGlmICggJFZpZXcgZXEgJEJhY2tlbmQgKSB7CiAgICAgICAgICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyVmlld01vZGVTZWxlY3RlZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJXsgJEJhY2tlbmRzLT57JEJhY2tlbmR9IH0sCiAgICAgICAgICAgICAgICAgICAgRmlsdGVyID0+ICRQYXJhbXtGaWx0ZXJ9LAogICAgICAgICAgICAgICAgICAgIFZpZXcgICA9PiAkQmFja2VuZCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclZpZXdNb2RlTm90U2VsZWN0ZWQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICV7ICRCYWNrZW5kcy0+eyRCYWNrZW5kfSB9LAogICAgICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkUGFyYW17RmlsdGVyfSwKICAgICAgICAgICAgICAgICAgICBWaWV3ICAgPT4gJEJhY2tlbmQsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHBhZ2UgbmF2IGlzIGF2YWlsYWJsZQogICAgaWYgKCVQYWdlTmF2KSB7CiAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclBhZ2VOYXZCYXInLAogICAgICAgICAgICBEYXRhID0+IFwlUGFnZU5hdiwKICAgICAgICApOwoKICAgICAgICAjIGRvbid0IHNob3cgY29udGV4dCBzZXR0aW5ncyBpbiBBSkFYIGNhc2UgKGUuIGcuIGluIGN1c3RvbWVyIHRpY2tldCBoaXN0b3J5KSwKICAgICAgICAjICAgYmVjYXVzZSB0aGUgc3VibWl0IHdpdGggcGFnZSByZWxvYWQgd2lsbCBub3Qgd29yayB0aGVyZQogICAgICAgIGlmICggISRQYXJhbXtBSkFYfSApIHsKICAgICAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQ29udGV4dFNldHRpbmdzJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYWdlTmF2LAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgYnVpbGQgaHRtbCBjb250ZW50CiAgICBteSAkT3V0cHV0TmF2QmFyID0gJEVudi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXInLAogICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyBjcmVhdGUgb3V0cHV0CiAgICBteSAkT3V0cHV0UmF3ID0gJyc7CiAgICBpZiAoICEkUGFyYW17T3V0cHV0fSApIHsKICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+UHJpbnQoCiAgICAgICAgICAgIE91dHB1dCA9PiBcJE91dHB1dE5hdkJhciwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE91dHB1dFJhdyAuPSAkT3V0cHV0TmF2QmFyOwogICAgfQoKICAgICMgbG9hZCBtb2R1bGUKICAgIGlmICggISRTZWxmLT57TWFpbk9iamVjdH0tPlJlcXVpcmUoICRCYWNrZW5kcy0+eyRWaWV3fS0+e01vZHVsZX0gKSApIHsKICAgICAgICByZXR1cm4gJEVudi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBiYWNrZW5kIG9iamVjdAogICAgbXkgJE9iamVjdCA9ICRCYWNrZW5kcy0+eyRWaWV3fS0+e01vZHVsZX0tPm5ldyggJXskRW52fSApOwogICAgcmV0dXJuIGlmICEkT2JqZWN0OwoKICAgICMgcnVuIG1vZHVsZQogICAgbXkgJE91dHB1dCA9ICRPYmplY3QtPlJ1bigKICAgICAgICAlUGFyYW0sCiAgICAgICAgTGltaXQgICAgID0+ICRMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkUGFyYW17VG90YWx9IHx8IDAsCiAgICAgICAgRnJvbnRlbmQgID0+ICRGcm9udGVuZCwKICAgICk7CgogICAgIyBjcmVhdGUgb3V0cHV0CiAgICBpZiAoICEkUGFyYW17T3V0cHV0fSApIHsKICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+UHJpbnQoCiAgICAgICAgICAgIE91dHB1dCA9PiBcJE91dHB1dCwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE91dHB1dFJhdyAuPSAkT3V0cHV0OwogICAgfQoKICAgICMgY3JlYXRlIG92ZXJ2aWV3IG5hdiBiYXIKICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhcicsCiAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICk7CgogICAgIyByZXR1cm4gY29udGVudCBpZiBhdmFpbGFibGUKICAgIHJldHVybiAkT3V0cHV0UmF3Owp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWhlYWQxIFZFUlNJT04KCiRSZXZpc2lvbjogMS4yICQgJERhdGU6IDIwMTEvMDQvMTEgMTk6MDg6MjIgJAoKPWN1dAo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50U3VydmV5LnBtIC0gYSBzdXJ2ZXkgbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZ2VudFN1cnZleS5wbSx2IDEuNDkuMi4xIDIwMTIvMDMvMTQgMTA6MDU6MzUganAgRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFN1cnZleTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6U3VydmV5Owp1c2UgS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlsczsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OKTsKJFZFUlNJT04gPSBxdygkUmV2aXNpb246IDEuNDkuMi4xICQpIFsxXTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBnZXQgY29tbW9uIG9iamVjdHMKICAgICV7JFNlbGZ9ID0gJVBhcmFtOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0gICAgPSBLZXJuZWw6OlN5c3RlbTo6U3VydmV5LT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMtPm5ldyglUGFyYW0pOwoKICAgICMgZ2V0IGNvbmZpZyBvZiBmcm9udGVuZCBtb2R1bGUKICAgICRTZWxmLT57Q29uZmlnfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJTdXJ2ZXk6OkZyb250ZW5kOjokU2VsZi0+e0FjdGlvbn0iKTsKCiAgICAjIGdldCBkZWZhdWx0IHBhcmFtZXRlcnMKICAgICRTZWxmLT57RmlsdGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0ZpbHRlcicgKSB8fCAnJzsKICAgICRTZWxmLT57Vmlld30gICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1ZpZXcnICkgICB8fCAnJzsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkT3V0cHV0OwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc3VydmV5IGVkaXQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTdXJ2ZXlFZGl0JyApIHsKICAgICAgICBteSAkU3VydmV5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzdXJ2ZXkgZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9CiAgICAgICAgICAgICAgICAtPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPUFnZW50U3VydmV5IiApOwogICAgICAgIH0KCiAgICAgICAgbXkgJVN1cnZleSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+U3VydmV5R2V0KCBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQgKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT5fU3VydmV5QWRkTWFzaygKICAgICAgICAgICAgJVN1cnZleSwKICAgICAgICApOwoKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN1cnZleSBzYXZlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU3VydmV5U2F2ZScgKSB7CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgIG15ICRTdXJ2ZXlJRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1cnZleUlEIiApOwoKICAgICAgICBpZiAoICEkU3VydmV5SUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHJlcXVpZXJlZCBmb3JtIGVsZW1lbnRzIGFuZCBlcnJvcnMKICAgICAgICBteSAlU2VydmVyRXJyb3I7CiAgICAgICAgbXkgJUZvcm1FbGVtZW50czsKICAgICAgICBmb3IgbXkgJEl0ZW0gKAogICAgICAgICAgICBxdyggVGl0bGUgSW50cm9kdWN0aW9uIERlc2NyaXB0aW9uIE5vdGlmaWNhdGlvblNlbmRlciBOb3RpZmljYXRpb25TdWJqZWN0IE5vdGlmaWNhdGlvbkJvZHkgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkRm9ybUVsZW1lbnRzeyRJdGVtfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIiRJdGVtIiApOwoKICAgICAgICAgICAgaWYgKCAhJEZvcm1FbGVtZW50c3skSXRlbX0gKSB7CiAgICAgICAgICAgICAgICAkU2VydmVyRXJyb3J7ICIkSXRlbSIgLiAnU2VydmVyRXJyb3InIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBAeyAkRm9ybUVsZW1lbnRze1F1ZXVlc30gfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRBcnJheSggUGFyYW0gPT4gIlF1ZXVlcyIgKTsKCiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJvbnRlbmQ6OlJpY2hUZXh0JykgKSB7CiAgICAgICAgICAgICRGb3JtRWxlbWVudHN7SW50cm9kdWN0aW9ufQogICAgICAgICAgICAgICAgPSAoIGxlbmd0aCAkRm9ybUVsZW1lbnRze0ludHJvZHVjdGlvbn0gKQogICAgICAgICAgICAgICAgPyAiXCRodG1sL3RleHRcJCAkRm9ybUVsZW1lbnRze0ludHJvZHVjdGlvbn0iCiAgICAgICAgICAgICAgICA6ICcnOwogICAgICAgICAgICAkRm9ybUVsZW1lbnRze05vdGlmaWNhdGlvbkJvZHl9CiAgICAgICAgICAgICAgICA9ICggbGVuZ3RoICRGb3JtRWxlbWVudHN7Tm90aWZpY2F0aW9uQm9keX0gKQogICAgICAgICAgICAgICAgPyAiXCRodG1sL3RleHRcJCAkRm9ybUVsZW1lbnRze05vdGlmaWNhdGlvbkJvZHl9IgogICAgICAgICAgICAgICAgOiAnJzsKICAgICAgICAgICAgJEZvcm1FbGVtZW50c3tEZXNjcmlwdGlvbn0KICAgICAgICAgICAgICAgID0gKCBsZW5ndGggJEZvcm1FbGVtZW50c3tEZXNjcmlwdGlvbn0gKQogICAgICAgICAgICAgICAgPyAiXCRodG1sL3RleHRcJCAkRm9ybUVsZW1lbnRze0Rlc2NyaXB0aW9ufSIKICAgICAgICAgICAgICAgIDogJyc7CiAgICAgICAgfQoKICAgICAgICAjIHNhdmUgaWYgbm8gZXJyb3JzCiAgICAgICAgaWYgKCAhJVNlcnZlckVycm9yICkgewogICAgICAgICAgICBteSAkU2F2ZVJlc3VsdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+U3VydmV5U2F2ZSgKICAgICAgICAgICAgICAgICVGb3JtRWxlbWVudHMsCiAgICAgICAgICAgICAgICBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Qb3B1cENsb3NlKAogICAgICAgICAgICAgICAgVVJMID0+ICJBY3Rpb249QWdlbnRTdXJ2ZXlab29tO1N1cnZleUlEPSRTdXJ2ZXlJRDsiLAogICAgICAgICAgICApOwoKICAgICAgICB9CgogICAgICAgICMgcmVsb2FkIGZvcm0gaWYgZXJyb3IKICAgICAgICByZXR1cm4gJFNlbGYtPl9TdXJ2ZXlBZGRNYXNrKAogICAgICAgICAgICBGb3JtRWxlbWVudHMgPT4gXCVGb3JtRWxlbWVudHMsCiAgICAgICAgICAgIFNlcnZlckVycm9yICA9PiBcJVNlcnZlckVycm9yLAogICAgICAgICAgICBTdXJ2ZXlJRCAgICAgPT4gJFN1cnZleUlELAogICAgICAgICk7CgogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc3VydmV5IGFkZAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1N1cnZleUFkZCcgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5fU3VydmV5QWRkTWFzazsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN1cnZleSBuZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTdXJ2ZXlOZXcnICkgewoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkU3VydmV5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKCiAgICAgICAgIyBnZXQgcmVxdWllcmVkIGZvcm0gZWxlbWVudHMgYW5kIGVycm9ycwogICAgICAgIG15ICVTZXJ2ZXJFcnJvcjsKICAgICAgICBteSAlRm9ybUVsZW1lbnRzOwogICAgICAgIGZvciBteSAkSXRlbSAoCiAgICAgICAgICAgIHF3KCBUaXRsZSBJbnRyb2R1Y3Rpb24gRGVzY3JpcHRpb24gTm90aWZpY2F0aW9uU2VuZGVyIE5vdGlmaWNhdGlvblN1YmplY3QgTm90aWZpY2F0aW9uQm9keSApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRGb3JtRWxlbWVudHN7JEl0ZW19ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiJEl0ZW0iICk7CgogICAgICAgICAgICBpZiAoICEkRm9ybUVsZW1lbnRzeyRJdGVtfSApIHsKICAgICAgICAgICAgICAgICRTZXJ2ZXJFcnJvcnsgIiRJdGVtIiAuICdTZXJ2ZXJFcnJvcicgfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIEB7ICRGb3JtRWxlbWVudHN7UXVldWVzfSB9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldEFycmF5KCBQYXJhbSA9PiAiUXVldWVzIiApOwoKICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGcm9udGVuZDo6UmljaFRleHQnKSApIHsKICAgICAgICAgICAgJEZvcm1FbGVtZW50c3tJbnRyb2R1Y3Rpb259ICAgICA9ICJcJGh0bWwvdGV4dFwkICRGb3JtRWxlbWVudHN7SW50cm9kdWN0aW9ufSI7CiAgICAgICAgICAgICRGb3JtRWxlbWVudHN7Tm90aWZpY2F0aW9uQm9keX0gPSAiXCRodG1sL3RleHRcJCAkRm9ybUVsZW1lbnRze05vdGlmaWNhdGlvbkJvZHl9IjsKICAgICAgICAgICAgJEZvcm1FbGVtZW50c3tEZXNjcmlwdGlvbn0gICAgICA9ICJcJGh0bWwvdGV4dFwkICRGb3JtRWxlbWVudHN7RGVzY3JpcHRpb259IjsKICAgICAgICB9CgogICAgICAgICMgc2F2ZSBpZiBubyBlcnJvcnMKICAgICAgICBpZiAoICElU2VydmVyRXJyb3IgKSB7CiAgICAgICAgICAgIG15ICRTdXJ2ZXlJRCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+U3VydmV5TmV3KAogICAgICAgICAgICAgICAgJUZvcm1FbGVtZW50cywKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRTdXJ2ZXlab29tO1N1cnZleUlEPSRTdXJ2ZXlJRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHJlbG9hZCBmb3JtIGlmIGVycm9yCiAgICAgICAgcmV0dXJuICRTZWxmLT5fU3VydmV5QWRkTWFzaygKICAgICAgICAgICAgRm9ybUVsZW1lbnRzID0+IFwlRm9ybUVsZW1lbnRzLAogICAgICAgICAgICBTZXJ2ZXJFcnJvciAgPT4gXCVTZXJ2ZXJFcnJvciwKICAgICAgICApOwoKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN1cnZleSBzdGF0dXMKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTdXJ2ZXlTdGF0dXMnICkgewogICAgICAgIG15ICRTdXJ2ZXlJRCAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKICAgICAgICBteSAkTmV3U3RhdHVzID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiTmV3U3RhdHVzIiApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgICAgICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CgogICAgICAgICMgc2V0IGEgbmV3IHN0YXR1cwogICAgICAgIG15ICRTdGF0dXNTZXQgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleVN0YXR1c1NldCgKICAgICAgICAgICAgU3VydmV5SUQgID0+ICRTdXJ2ZXlJRCwKICAgICAgICAgICAgTmV3U3RhdHVzID0+ICROZXdTdGF0dXMsCiAgICAgICAgKTsKICAgICAgICBteSAkTWVzc2FnZSA9ICcnOwogICAgICAgIGlmICggZGVmaW5lZCgkU3RhdHVzU2V0KSAmJiAkU3RhdHVzU2V0IGVxICdOb1F1ZXN0aW9uJyApIHsKICAgICAgICAgICAgJE1lc3NhZ2UgPSAnO01lc3NhZ2U9Tm9RdWVzdGlvbic7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggZGVmaW5lZCgkU3RhdHVzU2V0KSAmJiAkU3RhdHVzU2V0IGVxICdJbmNvbXBsZXRlUXVlc3Rpb24nICkgewogICAgICAgICAgICAkTWVzc2FnZSA9ICc7TWVzc2FnZT1JbmNvbXBsZXRlUXVlc3Rpb24nOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoIGRlZmluZWQoJFN0YXR1c1NldCkgJiYgJFN0YXR1c1NldCBlcSAnU3RhdHVzU2V0JyApIHsKICAgICAgICAgICAgJE1lc3NhZ2UgPSAnO01lc3NhZ2U9U3RhdHVzU2V0JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRTdXJ2ZXlab29tO1N1cnZleUlEPSRTdXJ2ZXlJRCRNZXNzYWdlIiwKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc3RhdHMKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTdGF0cycgKSB7CiAgICAgICAgbXkgJFN1cnZleUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5SUQiICk7CgogICAgICAgICMgY2hlY2sgaWYgc3VydmV5IGV4aXN0cwogICAgICAgIGlmICgKICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKCBFbGVtZW50SUQgPT4gJFN1cnZleUlELCBFbGVtZW50ID0+ICdTdXJ2ZXknICkgbmUKICAgICAgICAgICAgJ1llcycKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgIH0KICAgICAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoCiAgICAgICAgICAgIFRpdGxlID0+ICdTdGF0cyBPdmVydmlldycsCiAgICAgICAgICAgIFR5cGUgID0+ICdTbWFsbCcsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJVN1cnZleSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+U3VydmV5R2V0KCBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQgKTsKCiAgICAgICAgIyBwcmludCB0aGUgbWFpbiB0YWJsZS4KICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTdGF0cycsCiAgICAgICAgICAgIERhdGEgPT4geyVTdXJ2ZXl9LAogICAgICAgICk7CiAgICAgICAgbXkgQExpc3QgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlZvdGVMaXN0KCBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQgKTsKICAgICAgICBmb3IgbXkgJFZvdGUgKEBMaXN0KSB7CiAgICAgICAgICAgICRWb3RlLT57U3VydmV5SUR9ID0gJFN1cnZleUlEOwogICAgICAgICAgICBteSAlVGlja2V0ID0gJFNlbGYtPntUaWNrZXRPYmplY3R9LT5UaWNrZXRHZXQoIFRpY2tldElEID0+ICRWb3RlLT57VGlja2V0SUR9ICk7CiAgICAgICAgICAgICRWb3RlLT57VGlja2V0TnVtYmVyfSA9ICRUaWNrZXR7VGlja2V0TnVtYmVyfTsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N0YXRzVm90ZScsCiAgICAgICAgICAgICAgICBEYXRhID0+ICRWb3RlLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50U3VydmV5JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgICAgICk7CgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc3RhdHMgZGV0YWlscwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1N0YXRzRGV0YWlsJyApIHsKICAgICAgICBteSAkU3VydmV5SUQgICAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5SUQiICk7CiAgICAgICAgbXkgJFJlcXVlc3RJRCAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlJlcXVlc3RJRCIgKTsKICAgICAgICBteSAkVGlja2V0TnVtYmVyID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiVGlja2V0TnVtYmVyIiApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgICAgICdZZXMnCiAgICAgICAgICAgIHx8ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRSZXF1ZXN0SUQsIEVsZW1lbnQgPT4gJ1JlcXVlc3QnICkKICAgICAgICAgICAgbmUgJ1llcycKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgIH0KICAgICAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoCiAgICAgICAgICAgIFRpdGxlID0+ICdTdGF0cyBEZXRhaWwnLAogICAgICAgICAgICBUeXBlICA9PiAnU21hbGwnLAogICAgICAgICk7CgogICAgICAgIG15ICVTdXJ2ZXkgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleUdldCggU3VydmV5SUQgPT4gJFN1cnZleUlEICk7CgogICAgICAgICMgcHJpbnQgdGhlIG1haW4gdGFibGUuCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU3RhdHNEZXRhaWwnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVTdXJ2ZXksCiAgICAgICAgICAgICAgICBUaWNrZXROdW1iZXIgPT4gJFRpY2tldE51bWJlciwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgIG15IEBRdWVzdGlvbkxpc3QgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlF1ZXN0aW9uTGlzdCggU3VydmV5SUQgPT4gJFN1cnZleUlEICk7CiAgICAgICAgZm9yIG15ICRRdWVzdGlvbiAoQFF1ZXN0aW9uTGlzdCkgewoKICAgICAgICAgICAgbXkgJENsYXNzID0gJyc7CiAgICAgICAgICAgIGlmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1RleHRhcmVhJyApIHsKICAgICAgICAgICAgICAgICRDbGFzcyA9ICdUZXh0YXJlYSc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTdGF0c0RldGFpbFF1ZXN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICV7JFF1ZXN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICBteSBAQW5zd2VyczsKICAgICAgICAgICAgaWYgKCAkUXVlc3Rpb24tPntUeXBlfSBlcSAnUmFkaW8nIHx8ICRRdWVzdGlvbi0+e1R5cGV9IGVxICdDaGVja2JveCcgKSB7CiAgICAgICAgICAgICAgICBteSBAQW5zd2VyTGlzdDsKICAgICAgICAgICAgICAgIEBBbnN3ZXJMaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5Wb3RlR2V0KAogICAgICAgICAgICAgICAgICAgIFJlcXVlc3RJRCAgPT4gJFJlcXVlc3RJRCwKICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGZvciBteSAkUm93IChAQW5zd2VyTGlzdCkgewogICAgICAgICAgICAgICAgICAgIG15ICVBbnN3ZXIgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkFuc3dlckdldCggQW5zd2VySUQgPT4gJFJvdy0+e1ZvdGVWYWx1ZX0gKTsKICAgICAgICAgICAgICAgICAgICBteSAlRGF0YTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtBbnN3ZXJ9ID0gJEFuc3dlcntBbnN3ZXJ9OwogICAgICAgICAgICAgICAgICAgIHB1c2goIEBBbnN3ZXJzLCBcJURhdGEgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdZZXNObycgfHwgJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1RleHRhcmVhJyApIHsKICAgICAgICAgICAgICAgIG15IEBMaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5Wb3RlR2V0KAogICAgICAgICAgICAgICAgICAgIFJlcXVlc3RJRCAgPT4gJFJlcXVlc3RJRCwKICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAlRGF0YTsKICAgICAgICAgICAgICAgICREYXRhe0Fuc3dlcn0gPSAkTGlzdFswXS0+e1ZvdGVWYWx1ZX07CgogICAgICAgICAgICAgICAgIyBjbGVhbiBodG1sCiAgICAgICAgICAgICAgICBpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdUZXh0YXJlYScgJiYgJERhdGF7QW5zd2VyfSApIHsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtBbnN3ZXJ9ID1+IHN7XEFcJGh0bWxcL3RleHRcJFxzKC4qKX17JDF9eG1zOwogICAgICAgICAgICAgICAgICAgICREYXRhe0Fuc3dlcn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICREYXRhe0Fuc3dlcn0sCiAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtBbnN3ZXJ9ID0KICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9LT5Ub0FzY2lpKCBTdHJpbmcgPT4gJERhdGF7QW5zd2VyfSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcHVzaCggQEFuc3dlcnMsIFwlRGF0YSApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciBteSAkUm93IChAQW5zd2VycykgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTdGF0c0RldGFpbEFuc3dlcicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICV7JFJvd30sCiAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50U3VydmV5JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2hvdyBvdmVydmlldwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKICAgICMgc3RvcmUgbGFzdCBzY3JlZW4sIHVzZWQgZm9yIGJhY2tsaW5rcwogICAgJFNlbGYtPntTZXNzaW9uT2JqZWN0fS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuVmlldycsCiAgICAgICAgVmFsdWUgICAgID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICk7CgogICAgIyBnZXQgc29ydGluZyBwYXJhbWV0ZXJzCiAgICBteSAkU29ydEJ5ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU29ydEJ5JyApCiAgICAgICAgfHwgJFNlbGYtPntDb25maWd9LT57J1NvcnRCeTo6RGVmYXVsdCd9CiAgICAgICAgfHwgJ051bWJlcic7CgogICAgIyBnZXQgb3JkZXJpbmcgcGFyYW1ldGVycwogICAgbXkgJE9yZGVyQnkgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdPcmRlckJ5JyApCiAgICAgICAgfHwgJFNlbGYtPntDb25maWd9LT57J09yZGVyOjpEZWZhdWx0J30KICAgICAgICB8fCAnRG93bic7CgogICAgIyBpbnZlc3RpZ2F0ZSByZWZyZXNoCiAgICBteSAkUmVmcmVzaCA9ICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA/IDYwICogJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9IDogdW5kZWY7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoCiAgICAgICAgVGl0bGUgICA9PiAnT3ZlcnZpZXcnLAogICAgICAgIFJlZnJlc2ggPT4gJFJlZnJlc2gsCiAgICApOwogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UHJpbnQoIE91dHB1dCA9PiBcJE91dHB1dCApOwogICAgJE91dHB1dCA9ICcnOwoKICAgICMgZ2V0IHN1cnZleSBsaXN0CiAgICBteSBAU3VydmV5SURzID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5TdXJ2ZXlTZWFyY2goCiAgICAgICAgT3JkZXJCeSAgICAgICAgICA9PiBbJFNvcnRCeV0sCiAgICAgICAgT3JkZXJCeURpcmVjdGlvbiA9PiBbJE9yZGVyQnldLAogICAgICAgIFVzZXJJRCAgICAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgKTsKCiAgICAjIGZpbmQgb3V0IHdoaWNoIGNvbHVtbnMgc2hvdWxkIGJlIHNob3duCiAgICBteSBAU2hvd0NvbHVtbnM7CiAgICBpZiAoICRTZWxmLT57Q29uZmlnfS0+e1Nob3dDb2x1bW5zfSApIHsKCiAgICAgICAgIyBnZXQgYWxsIHBvc3NpYmxlIGNvbHVtbnMgZnJvbSBjb25maWcKICAgICAgICBteSAlUG9zc2libGVDb2x1bW4gPSAleyAkU2VsZi0+e0NvbmZpZ30tPntTaG93Q29sdW1uc30gfTsKCiAgICAgICAgIyBnZXQgdGhlIGNvbHVtbiBuYW1lcyB0aGF0IHNob3VsZCBiZSBzaG93bgogICAgICAgIENPTFVNTk5BTUU6CiAgICAgICAgZm9yIG15ICROYW1lICgga2V5cyAlUG9zc2libGVDb2x1bW4gKSB7CiAgICAgICAgICAgIG5leHQgQ09MVU1OTkFNRSBpZiAhJFBvc3NpYmxlQ29sdW1ueyROYW1lfTsKICAgICAgICAgICAgcHVzaCBAU2hvd0NvbHVtbnMsICROYW1lOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNob3cgdGhlIGxpc3QKICAgIG15ICRMaW5rUGFnZSA9CiAgICAgICAgJ0ZpbHRlcj0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTZWxmLT57RmlsdGVyfSApCiAgICAgICAgLiAnO1ZpZXc9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e1ZpZXd9ICkKICAgICAgICAuICc7U29ydEJ5PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNvcnRCeSApCiAgICAgICAgLiAnO09yZGVyQnk9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkT3JkZXJCeSApCiAgICAgICAgLiAnOyc7CiAgICBteSAkTGlua1NvcnQgPQogICAgICAgICdGaWx0ZXI9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkU2VsZi0+e0ZpbHRlcn0gKQogICAgICAgIC4gJztWaWV3PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntWaWV3fSApCiAgICAgICAgLiAnOyc7CiAgICBteSAkTGlua0ZpbHRlciA9CiAgICAgICAgJ1NvcnRCeT0nIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRTb3J0QnkgKQogICAgICAgIC4gJztPcmRlckJ5PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoIFRleHQgPT4gJE9yZGVyQnkgKQogICAgICAgIC4gJztWaWV3PScgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoIFRleHQgPT4gJFNlbGYtPntWaWV3fSApCiAgICAgICAgLiAnOyc7CgogICAgIyBzaG93IGNvbmZpZyBpdGVtIGxpc3QKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5TdXJ2ZXlMaXN0U2hvdygKICAgICAgICBTdXJ2ZXlJRHMgICA9PiBbQFN1cnZleUlEc10sCiAgICAgICAgVG90YWwgICAgICAgPT4gc2NhbGFyIEBTdXJ2ZXlJRHMsCiAgICAgICAgVmlldyAgICAgICAgPT4gJFNlbGYtPntWaWV3fSwKICAgICAgICBGaWx0ZXJMaW5rICA9PiAkTGlua0ZpbHRlciwKICAgICAgICBUaXRsZU5hbWUgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnT3ZlcnZpZXcnKSwKICAgICAgICBUaXRsZVZhbHVlICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnU3VydmV5JyksCiAgICAgICAgRW52ICAgICAgICAgPT4gJFNlbGYsCiAgICAgICAgTGlua1BhZ2UgICAgPT4gJExpbmtQYWdlLAogICAgICAgIExpbmtTb3J0ICAgID0+ICRMaW5rU29ydCwKICAgICAgICBTaG93Q29sdW1ucyA9PiBcQFNob3dDb2x1bW5zLAogICAgICAgIFNvcnRCeSAgICAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCggVGV4dCA9PiAkU29ydEJ5ICksCiAgICAgICAgT3JkZXJCeSAgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKCBUZXh0ID0+ICRPcmRlckJ5ICksCiAgICApOwoKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgIHJldHVybiAkT3V0cHV0Owp9CgpzdWIgX1N1cnZleUFkZE1hc2sgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlU2VydmVyRXJyb3I7CiAgICBpZiAoICRQYXJhbXtTZXJ2ZXJFcnJvcn0gKSB7CiAgICAgICAgJVNlcnZlckVycm9yID0gJXsgJFBhcmFte1NlcnZlckVycm9yfSB9OwogICAgfQoKICAgIG15ICVGb3JtRWxlbWVudHM7CiAgICBpZiAoICRQYXJhbXtGb3JtRWxlbWVudHN9ICkgewogICAgICAgICVGb3JtRWxlbWVudHMgPSAleyAkUGFyYW17Rm9ybUVsZW1lbnRzfSB9OwogICAgfQoKICAgIG15ICRPdXRwdXQ7CgogICAgIyBpZiBTdXJ2ZXlJRCB0aGUgU3VydmV5RWRpdCBzaG91bGQgYmUgbG9hZGVkIChwb3B1cCkKICAgIG15ICRUaXRsZTsKICAgIG15ICRUeXBlOwogICAgaWYgKCAkUGFyYW17U3VydmV5SUR9ICkgewogICAgICAgICRUaXRsZSA9ICdTdXJ2ZXkgRWRpdCc7CgogICAgICAgICMgZm9yIGhlYWRlciBhbmQgZm9vdGVyCiAgICAgICAgJFR5cGUgPSAnU21hbGwnOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFRpdGxlID0gJ0FkZCBOZXcgU3VydmV5JzsKICAgIH0KCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKAogICAgICAgIFRpdGxlID0+ICRUaXRsZSwKICAgICAgICBUeXBlICA9PiAkVHlwZSwKICAgICk7CgogICAgbXkgJFNlbGVjdGVkUXVldWVzOwogICAgaWYgKCAhJFBhcmFte1N1cnZleUlEfSApIHsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgIH0KICAgIGVsc2UgewogICAgICAgIG15ICVTdXJ2ZXkgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleUdldCggU3VydmV5SUQgPT4gJFBhcmFte1N1cnZleUlEfSApOwoKICAgICAgICAjIGdldCBzZWxlY3RlZCBxdWV1ZXMKICAgICAgICAkU2VsZWN0ZWRRdWV1ZXMgPSAkU3VydmV5e1F1ZXVlc307CiAgICB9CgogICAgbXkgJVF1ZXVlcyAgICAgID0gJFNlbGYtPntRdWV1ZU9iamVjdH0tPkdldEFsbFF1ZXVlcygpOwogICAgbXkgJFF1ZXVlU3RyaW5nID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVRdWV1ZXMsCiAgICAgICAgTmFtZSAgICAgICAgID0+ICdRdWV1ZXMnLAogICAgICAgIFNpemUgICAgICAgICA9PiA2LAogICAgICAgIE11bHRpcGxlICAgICA9PiAxLAogICAgICAgIFBvc3NpYmxlTm9uZSA9PiAwLAogICAgICAgIFNvcnQgICAgICAgICA9PiAnQWxwaGFudW1lcmljVmFsdWUnLAogICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkRm9ybUVsZW1lbnRze1F1ZXVlc30gfHwgJFNlbGVjdGVkUXVldWVzLAogICAgKTsKCiAgICBteSAkQmxvY2s7CiAgICBpZiAoICEkUGFyYW17U3VydmV5SUR9ICkgewogICAgICAgICRCbG9jayA9ICdTdXJ2ZXlBZGQnOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJEJsb2NrID0gJ1N1cnZleUVkaXQnOwogICAgfQoKICAgICMgcHJpbnQgdGhlIGZvcm0KICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAkQmxvY2ssCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgUXVldWVTdHJpbmcgICAgICAgID0+ICRRdWV1ZVN0cmluZywKICAgICAgICAgICAgTm90aWZpY2F0aW9uU2VuZGVyID0+ICRGb3JtRWxlbWVudHN7Tm90aWZpY2F0aW9uU2VuZGVyfQogICAgICAgICAgICAgICAgfHwgJFBhcmFte05vdGlmaWNhdGlvblNlbmRlcn0KICAgICAgICAgICAgICAgIHx8ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdTdXJ2ZXk6Ok5vdGlmaWNhdGlvblNlbmRlcicpLAogICAgICAgICAgICBOb3RpZmljYXRpb25TdWJqZWN0ID0+ICRGb3JtRWxlbWVudHN7Tm90aWZpY2F0aW9uU3ViamVjdH0KICAgICAgICAgICAgICAgIHx8ICRQYXJhbXtOb3RpZmljYXRpb25TdWJqZWN0fQogICAgICAgICAgICAgICAgfHwgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1N1cnZleTo6Tm90aWZpY2F0aW9uU3ViamVjdCcpLAogICAgICAgICAgICAlU2VydmVyRXJyb3IsCiAgICAgICAgICAgICVGb3JtRWxlbWVudHMsCiAgICAgICAgfSwKICAgICk7CgogICAgIyByaWNoIHRleHQgZWxlbWVudHMKICAgIG15ICVTdXJ2ZXlFbGVtZW50czsKCiAgICAkU3VydmV5RWxlbWVudHN7SW50cm9kdWN0aW9ufSA9ICRGb3JtRWxlbWVudHN7SW50cm9kdWN0aW9ufSB8fAogICAgICAgICRQYXJhbXtJbnRyb2R1Y3Rpb259OwoKICAgICRTdXJ2ZXlFbGVtZW50c3tOb3RpZmljYXRpb25Cb2R5fSA9ICRGb3JtRWxlbWVudHN7Tm90aWZpY2F0aW9uQm9keX0gfHwKICAgICAgICAkUGFyYW17Tm90aWZpY2F0aW9uQm9keX0gfHwKICAgICAgICAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU3VydmV5OjpOb3RpZmljYXRpb25Cb2R5Jyk7CgogICAgJFN1cnZleUVsZW1lbnRze0Rlc2NyaXB0aW9ufSA9ICRGb3JtRWxlbWVudHN7RGVzY3JpcHRpb259IHx8CiAgICAgICAgJFBhcmFte0Rlc2NyaXB0aW9ufSB8fAogICAgICAgICcnOwoKICAgICMgbG9hZCByaWNoIHRleHQgZWRpdG9yCiAgICBteSAkUmljaFRleHRFZGl0b3IgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJvbnRlbmQ6OlJpY2hUZXh0Jyk7CiAgICBpZiAoJFJpY2hUZXh0RWRpdG9yKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAiJEJsb2NrIiAuICdSaWNoVGV4dCcgKTsKICAgIH0KCiAgICAjIGNvbnZlcnQgcmVxdWlyZWQgZWxlbWVudHMgdG8gUlRFCiAgICBmb3IgbXkgJFN1cnZleUZpZWxkICgga2V5cyAlU3VydmV5RWxlbWVudHMgKSB7CiAgICAgICAgbmV4dCBpZiAhJFN1cnZleUVsZW1lbnRzeyRTdXJ2ZXlGaWVsZH07CgogICAgICAgICMgY2xlYW4gaHRtbAogICAgICAgIG15ICRIVE1MQ29udGVudCA9CiAgICAgICAgICAgICRTdXJ2ZXlFbGVtZW50c3skU3VydmV5RmllbGR9ID1+IHN7XEFcJGh0bWxcL3RleHRcJFxzKC4qKX17JDF9eG1zOwoKICAgICAgICBpZiAoICEkSFRNTENvbnRlbnQgJiYgJFJpY2hUZXh0RWRpdG9yICkgewogICAgICAgICAgICAkU3VydmV5RWxlbWVudHN7JFN1cnZleUZpZWxkfSA9CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkU3VydmV5RWxlbWVudHN7JFN1cnZleUZpZWxkfSwKICAgICAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRIVE1MQ29udGVudCAmJiAhJFJpY2hUZXh0RWRpdG9yICkgewogICAgICAgICAgICAkU3VydmV5RWxlbWVudHN7JFN1cnZleUZpZWxkfSA9CiAgICAgICAgICAgICAgICAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0tPlRvQXNjaWkoIFN0cmluZyA9PiAkU3VydmV5RWxlbWVudHN7JFN1cnZleUZpZWxkfSApOwogICAgICAgIH0KICAgIH0KCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gIiRCbG9jayIgLiAnSW50cm9kdWN0aW9uJywKICAgICAgICBEYXRhID0+IHsgSW50cm9kdWN0aW9uID0+ICRTdXJ2ZXlFbGVtZW50c3tJbnRyb2R1Y3Rpb259LCB9LAogICAgKTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gIiRCbG9jayIgLiAnTm90aWZpY2F0aW9uQm9keScsCiAgICAgICAgRGF0YSA9PiB7IE5vdGlmaWNhdGlvbkJvZHkgPT4gJFN1cnZleUVsZW1lbnRze05vdGlmaWNhdGlvbkJvZHl9LCB9LAogICAgKTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gIiRCbG9jayIgLiAnSW50ZXJuYWxEZXNjcmlwdGlvbicsCiAgICAgICAgRGF0YSA9PiB7IERlc2NyaXB0aW9uID0+ICRTdXJ2ZXlFbGVtZW50c3tEZXNjcmlwdGlvbn0sIH0sCiAgICApOwoKICAgICMgZ2VuZXJhdGVzIGdlbmVyaWMgZXJyb3JzIGZvciBqYXZhc2NyaXB0CiAgICBmb3IgbXkgJE5lZWRlZEl0ZW0gKAogICAgICAgIHF3KCBUaXRsZSBJbnRyb2R1Y3Rpb24gRGVzY3JpcHRpb24gTm90aWZpY2F0aW9uU2VuZGVyIE5vdGlmaWNhdGlvblN1YmplY3QgTm90aWZpY2F0aW9uQm9keSApCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJEJsb2NrIC4gJ0dlbmVyaWNFcnJvcicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgSXRlbU5hbWUgPT4gJE5lZWRlZEl0ZW0gLiAnRXJyb3InLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgZm9yIG15ICRJdGVtICgga2V5cyAlU2VydmVyRXJyb3IgKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAkQmxvY2sgLiAnR2VuZXJpY1NlcnZlckVycm9yJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBJdGVtTmFtZSA9PiAkSXRlbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRTdXJ2ZXknICk7CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCBUeXBlID0+ICRUeXBlICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KMTsK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50U3VydmV5RWRpdFF1ZXN0aW9ucy5wbSAtIGEgc3VydmV5IG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogQWdlbnRTdXJ2ZXlFZGl0UXVlc3Rpb25zLnBtLHYgMS45IDIwMTEvMDIvMDMgMjI6NDg6MjcgZHogRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlN1cnZleTsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OKTsKJFZFUlNJT04gPSBxdygkUmV2aXNpb246IDEuOSAkKSBbMV07CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IGNvbW1vbiBvYmplY3RzCiAgICAleyRTZWxmfSA9ICVQYXJhbTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBDb25maWdPYmplY3QpKSB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OlN1cnZleS0+bmV3KCVQYXJhbSk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dDsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHF1ZXN0aW9uIGFkZAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1F1ZXN0aW9uQWRkJyApIHsKICAgICAgICBteSAkU3VydmV5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKICAgICAgICBteSAkUXVlc3Rpb24gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJRdWVzdGlvbiIgKTsKICAgICAgICBteSAkVHlwZSAgICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJUeXBlIiApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgICAgICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CgogICAgICAgIG15ICVTZXJ2ZXJFcnJvcjsKICAgICAgICBpZiAoJFF1ZXN0aW9uKSB7CiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+UXVlc3Rpb25BZGQoCiAgICAgICAgICAgICAgICBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQsCiAgICAgICAgICAgICAgICBRdWVzdGlvbiA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAkVHlwZSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvblNvcnQoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlcnZlckVycm9ye1F1ZXN0aW9ufSA9IDE7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJFNlbGYtPl9NYXNrUXVlc3Rpb25PdmVydmlldygKICAgICAgICAgICAgU3VydmV5SUQgICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICBTZXJ2ZXJFcnJvciA9PiBcJVNlcnZlckVycm9yLAogICAgICAgICk7CgogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgcXVlc3Rpb24gZGVsZXRlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnUXVlc3Rpb25EZWxldGUnICkgewogICAgICAgIG15ICRRdWVzdGlvbklEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiUXVlc3Rpb25JRCIgKTsKICAgICAgICBteSAkU3VydmV5SUQgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1cnZleUlEIiApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBhbmQgcXVlc3Rpb24gZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoCiAgICAgICAgICAgICAgICBFbGVtZW50SUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBFbGVtZW50ICAgPT4gJ1F1ZXN0aW9uJwogICAgICAgICAgICApIG5lICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CiAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvbkRlbGV0ZSgKICAgICAgICAgICAgU3VydmV5SUQgICA9PiAkU3VydmV5SUQsCiAgICAgICAgICAgIFF1ZXN0aW9uSUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlF1ZXN0aW9uU29ydCggU3VydmV5SUQgPT4gJFN1cnZleUlEICk7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1TdXJ2ZXlFZGl0O1N1cnZleUlEPSRTdXJ2ZXlJRCNRdWVzdGlvbiIKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgcXVlc3Rpb24gdXAKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdRdWVzdGlvblVwJyApIHsKICAgICAgICBteSAkUXVlc3Rpb25JRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlF1ZXN0aW9uSUQiICk7CiAgICAgICAgbXkgJFN1cnZleUlEICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzdXJ2ZXkgYW5kIHF1ZXN0aW9uIGV4aXN0cwogICAgICAgIGlmICgKICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKCBFbGVtZW50SUQgPT4gJFN1cnZleUlELCBFbGVtZW50ID0+ICdTdXJ2ZXknICkgbmUKICAgICAgICAgICAgJ1llcycKICAgICAgICAgICAgfHwgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKAogICAgICAgICAgICAgICAgRWxlbWVudElEID0+ICRRdWVzdGlvbklELAogICAgICAgICAgICAgICAgRWxlbWVudCAgID0+ICdRdWVzdGlvbicKICAgICAgICAgICAgKSBuZSAnWWVzJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgfQogICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+UXVlc3Rpb25Tb3J0KCBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQgKTsKICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlF1ZXN0aW9uVXAoCiAgICAgICAgICAgIFN1cnZleUlEICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbklELAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249U3VydmV5RWRpdDtTdXJ2ZXlJRD0kU3VydmV5SUQjUXVlc3Rpb24iCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHF1ZXN0aW9uIGRvd24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdRdWVzdGlvbkRvd24nICkgewogICAgICAgIG15ICRRdWVzdGlvbklEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiUXVlc3Rpb25JRCIgKTsKICAgICAgICBteSAkU3VydmV5SUQgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1cnZleUlEIiApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBhbmQgcXVlc3Rpb24gZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoCiAgICAgICAgICAgICAgICBFbGVtZW50SUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBFbGVtZW50ICAgPT4gJ1F1ZXN0aW9uJwogICAgICAgICAgICApIG5lICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CiAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvblNvcnQoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwogICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+UXVlc3Rpb25Eb3duKAogICAgICAgICAgICBTdXJ2ZXlJRCAgID0+ICRTdXJ2ZXlJRCwKICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb25JRCwKICAgICAgICApOwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249U3VydmV5RWRpdDtTdXJ2ZXlJRD0kU3VydmV5SUQjUXVlc3Rpb24iCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHF1ZXN0aW9uIGVkaXQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdRdWVzdGlvbkVkaXQnICkgewogICAgICAgIG15ICRTdXJ2ZXlJRCAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU3VydmV5SUQnICk7CiAgICAgICAgbXkgJFF1ZXN0aW9uSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdRdWVzdGlvbklEJyApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBhbmQgcXVlc3Rpb24gZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoCiAgICAgICAgICAgICAgICBFbGVtZW50SUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBFbGVtZW50ICAgPT4gJ1F1ZXN0aW9uJwogICAgICAgICAgICApIG5lICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkU2VsZi0+X01hc2tRdWVzdGlvbkVkaXQoCiAgICAgICAgICAgIFN1cnZleUlEICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbklELAogICAgICAgICk7CgogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgcXVlc3Rpb24gc2F2ZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1F1ZXN0aW9uU2F2ZScgKSB7CiAgICAgICAgbXkgJFF1ZXN0aW9uSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdRdWVzdGlvbklEJyApOwogICAgICAgIG15ICRTdXJ2ZXlJRCAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU3VydmV5SUQnICk7CiAgICAgICAgbXkgJFF1ZXN0aW9uICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdRdWVzdGlvbicgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzdXJ2ZXkgYW5kIHF1ZXN0aW9uIGV4aXN0cwogICAgICAgIGlmICgKICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKCBFbGVtZW50SUQgPT4gJFN1cnZleUlELCBFbGVtZW50ID0+ICdTdXJ2ZXknICkgbmUKICAgICAgICAgICAgJ1llcycKICAgICAgICAgICAgfHwgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKAogICAgICAgICAgICAgICAgRWxlbWVudElEID0+ICRRdWVzdGlvbklELAogICAgICAgICAgICAgICAgRWxlbWVudCAgID0+ICdRdWVzdGlvbicKICAgICAgICAgICAgKSBuZSAnWWVzJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgfQoKICAgICAgICBteSAlU2VydmVyRXJyb3I7CiAgICAgICAgaWYgKCRRdWVzdGlvbikgewogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlF1ZXN0aW9uU2F2ZSgKICAgICAgICAgICAgICAgIFF1ZXN0aW9uSUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBTdXJ2ZXlJRCAgID0+ICRTdXJ2ZXlJRCwKICAgICAgICAgICAgICAgIFF1ZXN0aW9uICAgPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICAgICAgVXNlcklEICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9NYXNrUXVlc3Rpb25FZGl0KAogICAgICAgICAgICAgICAgU3VydmV5SUQgICA9PiAkU3VydmV5SUQsCiAgICAgICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbklELAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlcnZlckVycm9ye1F1ZXN0aW9uU2VydmVyRXJyb3J9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkU2VsZi0+X01hc2tRdWVzdGlvbkVkaXQoCiAgICAgICAgICAgIFN1cnZleUlEICAgID0+ICRTdXJ2ZXlJRCwKICAgICAgICAgICAgUXVlc3Rpb25JRCAgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgIFNlcnZlckVycm9yID0+IFwlU2VydmVyRXJyb3IsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFuc3dlciBhZGQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBbnN3ZXJBZGQnICkgewogICAgICAgIG15ICRTdXJ2ZXlJRCAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5SUQiICk7CiAgICAgICAgbXkgJFF1ZXN0aW9uSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJRdWVzdGlvbklEIiApOwogICAgICAgIG15ICRBbnN3ZXIgICAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiQW5zd2VyIiApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBhbmQgcXVlc3Rpb24gZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoCiAgICAgICAgICAgICAgICBFbGVtZW50SUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBFbGVtZW50ICAgPT4gJ1F1ZXN0aW9uJwogICAgICAgICAgICApIG5lICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CgogICAgICAgIG15ICVTZXJ2ZXJFcnJvcjsKICAgICAgICBpZiAoJEFuc3dlcikgewogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkFuc3dlckFkZCgKICAgICAgICAgICAgICAgIFN1cnZleUlEICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb25JRCwKICAgICAgICAgICAgICAgIEFuc3dlciAgICAgPT4gJEFuc3dlciwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fTWFza1F1ZXN0aW9uRWRpdCgKICAgICAgICAgICAgICAgIFN1cnZleUlEICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb25JRCwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZXJ2ZXJFcnJvcntBbnN3ZXJTZXJ2ZXJFcnJvcn0gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRTZWxmLT5fTWFza1F1ZXN0aW9uRWRpdCgKICAgICAgICAgICAgU3VydmV5SUQgICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICBRdWVzdGlvbklEICA9PiAkUXVlc3Rpb25JRCwKICAgICAgICAgICAgU2VydmVyRXJyb3IgPT4gXCVTZXJ2ZXJFcnJvciwKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgYW5zd2VyIGRlbGV0ZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0Fuc3dlckRlbGV0ZScgKSB7CiAgICAgICAgbXkgJEFuc3dlcklEICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJBbnN3ZXJJRCIgKTsKICAgICAgICBteSAkUXVlc3Rpb25JRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlF1ZXN0aW9uSUQiICk7CiAgICAgICAgbXkgJFN1cnZleUlEICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzdXJ2ZXksIHF1ZXN0aW9uIGFuZCBhbnN3ZXIgZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoCiAgICAgICAgICAgICAgICBFbGVtZW50SUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBFbGVtZW50ICAgPT4gJ1F1ZXN0aW9uJwogICAgICAgICAgICApIG5lICdZZXMnCiAgICAgICAgICAgIHx8ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRBbnN3ZXJJRCwgRWxlbWVudCA9PiAnQW5zd2VyJyApCiAgICAgICAgICAgIG5lICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CiAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5BbnN3ZXJEZWxldGUoCiAgICAgICAgICAgIFF1ZXN0aW9uSUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgIEFuc3dlcklEICAgPT4gJEFuc3dlcklELAogICAgICAgICk7CiAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5BbnN3ZXJTb3J0KCBRdWVzdGlvbklEID0+ICRRdWVzdGlvbklEICk7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgIE9QID0+CiAgICAgICAgICAgICAgICAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249UXVlc3Rpb25FZGl0O1N1cnZleUlEPSRTdXJ2ZXlJRDtRdWVzdGlvbklEPSRRdWVzdGlvbklEI0Fuc3dlciIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFuc3dlciB1cAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0Fuc3dlclVwJyApIHsKICAgICAgICBteSAkQW5zd2VySUQgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIkFuc3dlcklEIiApOwogICAgICAgIG15ICRRdWVzdGlvbklEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiUXVlc3Rpb25JRCIgKTsKICAgICAgICBteSAkU3VydmV5SUQgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1cnZleUlEIiApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSwgcXVlc3Rpb24gYW5kIGFuc3dlciBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgICAgICdZZXMnCiAgICAgICAgICAgIHx8ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cygKICAgICAgICAgICAgICAgIEVsZW1lbnRJRCA9PiAkUXVlc3Rpb25JRCwKICAgICAgICAgICAgICAgIEVsZW1lbnQgICA9PiAnUXVlc3Rpb24nCiAgICAgICAgICAgICkgbmUgJ1llcycKICAgICAgICAgICAgfHwgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKCBFbGVtZW50SUQgPT4gJEFuc3dlcklELCBFbGVtZW50ID0+ICdBbnN3ZXInICkKICAgICAgICAgICAgbmUgJ1llcycKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgIH0KICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkFuc3dlclNvcnQoIFF1ZXN0aW9uSUQgPT4gJFF1ZXN0aW9uSUQgKTsKICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkFuc3dlclVwKAogICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbklELAogICAgICAgICAgICBBbnN3ZXJJRCAgID0+ICRBbnN3ZXJJRCwKICAgICAgICApOwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PgogICAgICAgICAgICAgICAgIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPVF1ZXN0aW9uRWRpdDtTdXJ2ZXlJRD0kU3VydmV5SUQ7UXVlc3Rpb25JRD0kUXVlc3Rpb25JRCNBbnN3ZXIiLAogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhbnN3ZXIgZG93bgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0Fuc3dlckRvd24nICkgewogICAgICAgIG15ICRBbnN3ZXJJRCAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiQW5zd2VySUQiICk7CiAgICAgICAgbXkgJFF1ZXN0aW9uSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJRdWVzdGlvbklEIiApOwogICAgICAgIG15ICRTdXJ2ZXlJRCAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5SUQiICk7CgogICAgICAgICMgY2hlY2sgaWYgc3VydmV5LCBxdWVzdGlvbiBhbmQgYW5zd2VyIGV4aXN0cwogICAgICAgIGlmICgKICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKCBFbGVtZW50SUQgPT4gJFN1cnZleUlELCBFbGVtZW50ID0+ICdTdXJ2ZXknICkgbmUKICAgICAgICAgICAgJ1llcycKICAgICAgICAgICAgfHwgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKAogICAgICAgICAgICAgICAgRWxlbWVudElEID0+ICRRdWVzdGlvbklELAogICAgICAgICAgICAgICAgRWxlbWVudCAgID0+ICdRdWVzdGlvbicKICAgICAgICAgICAgKSBuZSAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkQW5zd2VySUQsIEVsZW1lbnQgPT4gJ0Fuc3dlcicgKQogICAgICAgICAgICBuZSAnWWVzJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgfQogICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyU29ydCggUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb25JRCApOwogICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyRG93bigKICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb25JRCwKICAgICAgICAgICAgQW5zd2VySUQgICA9PiAkQW5zd2VySUQsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4KICAgICAgICAgICAgICAgICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1RdWVzdGlvbkVkaXQ7U3VydmV5SUQ9JFN1cnZleUlEO1F1ZXN0aW9uSUQ9JFF1ZXN0aW9uSUQjQW5zd2VyIiwKICAgICAgICApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgYW5zd2VyIGVkaXQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBbnN3ZXJFZGl0JyApIHsKICAgICAgICBteSAkU3VydmV5SUQgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1N1cnZleUlEJyApOwogICAgICAgIG15ICRRdWVzdGlvbklEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnUXVlc3Rpb25JRCcgKTsKICAgICAgICBteSAkQW5zd2VySUQgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0Fuc3dlcklEJyApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSwgcXVlc3Rpb24gYW5kIGFuc3dlciBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgICAgICdZZXMnCiAgICAgICAgICAgIHx8ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cygKICAgICAgICAgICAgICAgIEVsZW1lbnRJRCA9PiAkUXVlc3Rpb25JRCwKICAgICAgICAgICAgICAgIEVsZW1lbnQgICA9PiAnUXVlc3Rpb24nCiAgICAgICAgICAgICkgbmUgJ1llcycKICAgICAgICAgICAgfHwgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKCBFbGVtZW50SUQgPT4gJEFuc3dlcklELCBFbGVtZW50ID0+ICdBbnN3ZXInICkKICAgICAgICAgICAgbmUgJ1llcycKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IiApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRTZWxmLT5fTWFza0Fuc3dlckVkaXQoCiAgICAgICAgICAgIFN1cnZleUlEICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbklELAogICAgICAgICAgICBBbnN3ZXJJRCAgID0+ICRBbnN3ZXJJRCwKICAgICAgICApOwoKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFuc3dlciBzYXZlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQW5zd2VyU2F2ZScgKSB7CiAgICAgICAgbXkgJEFuc3dlcklEICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJBbnN3ZXJJRCIgKTsKICAgICAgICBteSAkUXVlc3Rpb25JRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlF1ZXN0aW9uSUQiICk7CiAgICAgICAgbXkgJFN1cnZleUlEICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKICAgICAgICBteSAkQW5zd2VyICAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIkFuc3dlciIgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzdXJ2ZXksIHF1ZXN0aW9uIGFuZCBhbnN3ZXIgZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICB8fCAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoCiAgICAgICAgICAgICAgICBFbGVtZW50SUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBFbGVtZW50ICAgPT4gJ1F1ZXN0aW9uJwogICAgICAgICAgICApIG5lICdZZXMnCiAgICAgICAgICAgIHx8ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRBbnN3ZXJJRCwgRWxlbWVudCA9PiAnQW5zd2VyJyApCiAgICAgICAgICAgIG5lICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CgogICAgICAgIG15ICVTZXJ2ZXJFcnJvcjsKICAgICAgICBpZiAoJEFuc3dlcikgewogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkFuc3dlclNhdmUoCiAgICAgICAgICAgICAgICBBbnN3ZXJJRCAgID0+ICRBbnN3ZXJJRCwKICAgICAgICAgICAgICAgIFF1ZXN0aW9uSUQgPT4gJFF1ZXN0aW9uSUQsCiAgICAgICAgICAgICAgICBBbnN3ZXIgICAgID0+ICRBbnN3ZXIsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PgogICAgICAgICAgICAgICAgICAgICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1RdWVzdGlvbkVkaXQ7U3VydmV5SUQ9JFN1cnZleUlEO1F1ZXN0aW9uSUQ9JFF1ZXN0aW9uSUQjQW5zd2VyIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlcnZlckVycm9ye0Fuc3dlclNlcnZlckVycm9yfSA9ICdTZXZlckVycm9yJzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkU2VsZi0+X01hc2tBbnN3ZXJFZGl0KAogICAgICAgICAgICBTdXJ2ZXlJRCAgICA9PiAkU3VydmV5SUQsCiAgICAgICAgICAgIFF1ZXN0aW9uSUQgID0+ICRRdWVzdGlvbklELAogICAgICAgICAgICBBbnN3ZXJJRCAgICA9PiAkQW5zd2VySUQsCiAgICAgICAgICAgIFNlcnZlckVycm9yID0+IFwlU2VydmVyRXJyb3IsCiAgICAgICAgICAgICkKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHF1ZXN0aW9uIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBteSAkU3VydmV5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdXJ2ZXlJRCcgKTsKCiAgICBpZiAoICEkU3VydmV5SUQgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249QWdlbnRTdXJ2ZXkiICk7CiAgICB9CgogICAgcmV0dXJuICRTZWxmLT5fTWFza1F1ZXN0aW9uT3ZlcnZpZXcoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwp9CgpzdWIgX01hc2tRdWVzdGlvbk92ZXJ2aWV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJVNlcnZlckVycm9yOwogICAgaWYgKCAkUGFyYW17U2VydmVyRXJyb3J9ICkgewogICAgICAgICVTZXJ2ZXJFcnJvciA9ICV7ICRQYXJhbXtTZXJ2ZXJFcnJvcn0gfTsKICAgIH0KCiAgICBteSAkT3V0cHV0OwoKICAgIGlmICggISRQYXJhbXtTdXJ2ZXlJRH0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249QWdlbnRTdXJ2ZXkiICk7CiAgICB9CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoCiAgICAgICAgVGl0bGUgPT4gJ1N1cnZleSBFZGl0IFF1ZXN0aW9ucycsCiAgICAgICAgVHlwZSAgPT4gJ1NtYWxsJywKICAgICk7CgogICAgIyBnZXQgYWxsIGF0dHJpYnV0ZXMgb2YgdGhlIHN1cnZleQogICAgbXkgJVN1cnZleSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+U3VydmV5R2V0KCBTdXJ2ZXlJRCA9PiAkUGFyYW17U3VydmV5SUR9ICk7CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdTdXJ2ZXlFZGl0UXVlc3Rpb25zJywKICAgICAgICBEYXRhID0+IFwlU3VydmV5LAogICAgKTsKCiAgICBteSBATGlzdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+UXVlc3Rpb25MaXN0KCBTdXJ2ZXlJRCA9PiAkUGFyYW17U3VydmV5SUR9ICk7CgogICAgaWYgKCAkU3VydmV5e1N0YXR1c30gJiYgJFN1cnZleXtTdGF0dXN9IGVxICdOZXcnICkgewoKICAgICAgICBteSAkQXJyYXlIYXNoUmVmID0gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICAgICA9PiAnWWVzTm8nLAogICAgICAgICAgICAgICAgVmFsdWUgICAgPT4gJ1llc05vJywKICAgICAgICAgICAgICAgIFNlbGVjdGVkID0+IDEsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSAgID0+ICdSYWRpbycsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnUmFkaW8gKExpc3QpJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ICAgPT4gJ0NoZWNrYm94JywKICAgICAgICAgICAgICAgIFZhbHVlID0+ICdDaGVja2JveCAoTGlzdCknLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnVGV4dGFyZWEnLAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJ1RleHRhcmVhJywKICAgICAgICAgICAgfSwKICAgICAgICBdOwoKICAgICAgICBteSAkU2VsZWN0aW9uVHlwZSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgICAgPT4gJEFycmF5SGFzaFJlZiwKICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAnVHlwZScsCiAgICAgICAgICAgIElEICAgICAgICAgICAgPT4gJ1R5cGUnLAogICAgICAgICAgICBTZWxlY3RlZFZhbHVlID0+ICdZZXMvTm8nLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFF1ZXN0aW9uRXJyb3JDbGFzcyA9ICcnOwogICAgICAgIGlmICggJFNlcnZlckVycm9ye1F1ZXN0aW9ufSApIHsKICAgICAgICAgICAgJFF1ZXN0aW9uRXJyb3JDbGFzcyA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTdXJ2ZXlBZGRRdWVzdGlvbicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgU3VydmV5SUQgICAgICAgICAgID0+ICRQYXJhbXtTdXJ2ZXlJRH0sCiAgICAgICAgICAgICAgICBTZWxlY3Rpb25UeXBlICAgICAgPT4gJFNlbGVjdGlvblR5cGUsCiAgICAgICAgICAgICAgICBRdWVzdGlvbkVycm9yQ2xhc3MgPT4gJFF1ZXN0aW9uRXJyb3JDbGFzcywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdTdXJ2ZXlEZWxldGVDb2x1bW4nICk7CiAgICAgICAgaWYgKCBzY2FsYXIgQExpc3QgKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1N1cnZleVN0YXR1c0NvbHVtbicgKTsKICAgICAgICAgICAgbXkgJENvdW50ZXIgPSAwOwoKICAgICAgICAgICAgZm9yIG15ICRRdWVzdGlvbiAoQExpc3QpIHsKICAgICAgICAgICAgICAgIG15ICRBbnN3ZXJDb3VudCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyQ291bnQoCiAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb24tPntRdWVzdGlvbklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbXkgJENsYXNzOwogICAgICAgICAgICAgICAgbXkgJENsYXNzVXA7CiAgICAgICAgICAgICAgICBteSAkQ2xhc3NEb3duOwoKICAgICAgICAgICAgICAgIGlmICggISRDb3VudGVyICkgewogICAgICAgICAgICAgICAgICAgICRDbGFzc1VwID0gJ0Rpc2FibGVkJywKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICRDb3VudGVyID09ICQjTGlzdCApIHsKICAgICAgICAgICAgICAgICAgICAkQ2xhc3NEb3duID0gJ0Rpc2FibGVkJywKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkU3RhdHVzID0gJ0NvbXBsZXRlJzsKICAgICAgICAgICAgICAgIGlmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1JhZGlvJyB8fCAkUXVlc3Rpb24tPntUeXBlfSBlcSAnQ2hlY2tib3gnICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJEFuc3dlckNvdW50IDwgMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJENsYXNzICA9ICdFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgICRTdGF0dXMgPSAnSW5jb21wbGV0ZSc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU3VydmV5UXVlc3Rpb25zUm93JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJXskUXVlc3Rpb259LAogICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgICAgPT4gJFN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgICAgID0+ICRDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NVcCAgID0+ICRDbGFzc1VwLAogICAgICAgICAgICAgICAgICAgICAgICBDbGFzc0Rvd24gPT4gJENsYXNzRG93biwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU3VydmV5UXVlc3Rpb25zRGVsZXRlQnV0dG9uJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRRdWVzdGlvbiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU3VydmV5Tm9RdWVzdGlvbnNTYXZlZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsgQ29sdW1ucyA9PiA1LCB9CiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgIH0KICAgIGVsc2UgewogICAgICAgIG15ICRDb3VudGVyOwogICAgICAgIGZvciBteSAkUXVlc3Rpb24gKEBMaXN0KSB7CgogICAgICAgICAgICBteSAkQ2xhc3NVcDsKICAgICAgICAgICAgbXkgJENsYXNzRG93bjsKCiAgICAgICAgICAgIGlmICggISRDb3VudGVyICkgewogICAgICAgICAgICAgICAgJENsYXNzVXAgPSAnRGlzYWJsZWQnLAogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRDb3VudGVyICYmICRDb3VudGVyID09ICQjTGlzdCApIHsKICAgICAgICAgICAgICAgICRDbGFzc0Rvd24gPSAnRGlzYWJsZWQnLAogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU3VydmV5UXVlc3Rpb25zU2F2ZWQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJXskUXVlc3Rpb259LAogICAgICAgICAgICAgICAgICAgIENsYXNzVXAgICA9PiAkQ2xhc3NVcCwKICAgICAgICAgICAgICAgICAgICBDbGFzc0Rvd24gPT4gJENsYXNzRG93biwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgIH0KICAgIH0KCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRTdXJ2ZXlFZGl0UXVlc3Rpb25zJywKICAgICAgICBEYXRhID0+IHsgU3VydmV5SUQgPT4gJFBhcmFte1N1cnZleUlEfSB9LAogICAgKTsKCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKICAgIHJldHVybiAkT3V0cHV0Owp9CgpzdWIgX01hc2tRdWVzdGlvbkVkaXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlU2VydmVyRXJyb3I7CiAgICBpZiAoICRQYXJhbXtTZXJ2ZXJFcnJvcn0gKSB7CiAgICAgICAgJVNlcnZlckVycm9yID0gJXsgJFBhcmFte1NlcnZlckVycm9yfSB9OwogICAgfQoKICAgIG15ICRPdXRwdXQ7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoCiAgICAgICAgVGl0bGUgPT4gJ1F1ZXN0aW9uIEVkaXQnLAogICAgICAgIFR5cGUgID0+ICdTbWFsbCcsCiAgICApOwogICAgbXkgJVN1cnZleSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+U3VydmV5R2V0KCBTdXJ2ZXlJRCA9PiAkUGFyYW17U3VydmV5SUR9ICk7CiAgICBteSAlUXVlc3Rpb24gPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlF1ZXN0aW9uR2V0KCBRdWVzdGlvbklEID0+ICRQYXJhbXtRdWVzdGlvbklEfSApOwoKICAgICMgcHJpbnQgdGhlIG1haW4gYm9keQogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdRdWVzdGlvbkVkaXQnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUXVlc3Rpb24sCiAgICAgICAgICAgICVTZXJ2ZXJFcnJvciwKICAgICAgICB9LAogICAgKTsKCiAgICBpZiAoICRRdWVzdGlvbntUeXBlfSBlcSAnWWVzTm8nICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1F1ZXN0aW9uRWRpdFRhYmxlJyApOwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1F1ZXN0aW9uRWRpdFllc25vJyApOwogICAgfQogICAgZWxzaWYgKCAkUXVlc3Rpb257VHlwZX0gZXEgJ1JhZGlvJyB8fCAkUXVlc3Rpb257VHlwZX0gZXEgJ0NoZWNrYm94JyApIHsKCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnUXVlc3Rpb25FZGl0VGFibGUnICk7CgogICAgICAgIG15ICRUeXBlID0gJFF1ZXN0aW9ue1R5cGV9OwogICAgICAgIG15IEBMaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5BbnN3ZXJMaXN0KCBRdWVzdGlvbklEID0+ICRQYXJhbXtRdWVzdGlvbklEfSApOwogICAgICAgIGlmICggc2NhbGFyIEBMaXN0ICkgewoKICAgICAgICAgICAgaWYgKCAkU3VydmV5e1N0YXR1c30gZXEgJ05ldycgKSB7CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnUXVlc3Rpb25FZGl0VGFibGVEZWxldGUnICk7CgogICAgICAgICAgICAgICAgbXkgJENvdW50ZXIgPSAwOwogICAgICAgICAgICAgICAgZm9yIG15ICRBbnN3ZXIyIChATGlzdCkgewogICAgICAgICAgICAgICAgICAgICRBbnN3ZXIyLT57U3VydmV5SUR9ID0gJFBhcmFte1N1cnZleUlEfTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJENsYXNzVXA7CiAgICAgICAgICAgICAgICAgICAgbXkgJENsYXNzRG93bjsKCiAgICAgICAgICAgICAgICAgICAgIyBkaXNhYmxlIHVwIGFjdGlvbiBvbiBmaXJzdCByb3cKICAgICAgICAgICAgICAgICAgICBpZiAoICEkQ291bnRlciApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJENsYXNzVXAgPSAnRGlzYWJsZWQnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBkaXNhYmxlIGRvd24gYWN0aW9uIG9uIGxhc3Qgcm93CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ291bnRlciA9PSAkI0xpc3QgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDbGFzc0Rvd24gPSAnRGlzYWJsZWQnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAiUXVlc3Rpb25FZGl0IiAuICRUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICV7JEFuc3dlcjJ9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NVcCAgID0+ICRDbGFzc1VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NEb3duID0+ICRDbGFzc0Rvd24sCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdRdWVzdGlvbkVkaXQnIC4gJFR5cGUgLiAnRGVsZXRlJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkQW5zd2VyMiwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICRDb3VudGVyKys7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdRdWVzdGlvbkVkaXRBZGRBbnN3ZXInLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUXVlc3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICVTZXJ2ZXJFcnJvciwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG15ICRDb3VudGVyOwogICAgICAgICAgICAgICAgZm9yIG15ICRBbnN3ZXIyIChATGlzdCkgewogICAgICAgICAgICAgICAgICAgICRBbnN3ZXIyLT57U3VydmV5SUR9ID0gJFBhcmFte1N1cnZleUlEfTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJENsYXNzVXA7CiAgICAgICAgICAgICAgICAgICAgbXkgJENsYXNzRG93bjsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJENvdW50ZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDbGFzc1VwID0gJ0Rpc2FibGVkJywKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICggJENvdW50ZXIgJiYgJENvdW50ZXIgPT0gJCNMaXN0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ2xhc3NEb3duID0gJ0Rpc2FibGVkJywKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gIlF1ZXN0aW9uRWRpdCIgLiAkVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAleyRBbnN3ZXIyfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzVXAgICA9PiAkQ2xhc3NVcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzRG93biA9PiAkQ2xhc3NEb3duLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ05vQW5zd2Vyc1NhdmVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIENvbHVtbnMgPT4gMywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdRdWVzdGlvbkVkaXRBZGRBbnN3ZXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JVF1ZXN0aW9ufSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRRdWVzdGlvbntUeXBlfSBlcSAnVGV4dGFyZWEnICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1F1ZXN0aW9uRWRpdFRleHRBcmVhJyApOwogICAgfQogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50U3VydmV5RWRpdFF1ZXN0aW9ucycsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCnN1YiBfTWFza0Fuc3dlckVkaXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlU2VydmVyRXJyb3I7CiAgICBpZiAoICRQYXJhbXtTZXJ2ZXJFcnJvcn0gKSB7CiAgICAgICAgJVNlcnZlckVycm9yID0gJXsgJFBhcmFte1NlcnZlckVycm9yfSB9OwogICAgfQoKICAgIG15ICRPdXRwdXQ7CiAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoCiAgICAgICAgVGl0bGUgPT4gJ0Fuc3dlciBFZGl0JywKICAgICAgICBUeXBlICA9PiAnU21hbGwnLAogICAgKTsKICAgIG15ICVBbnN3ZXIgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkFuc3dlckdldCggQW5zd2VySUQgPT4gJFBhcmFte0Fuc3dlcklEfSApOwogICAgJEFuc3dlcntTdXJ2ZXlJRH0gPSAkUGFyYW17U3VydmV5SUR9OwoKICAgICMgcHJpbnQgdGhlIG1haW4gdGFibGUuCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ0Fuc3dlckVkaXQnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlQW5zd2VyLAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICVTZXJ2ZXJFcnJvciwKICAgICAgICB9LAogICAgKTsKCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRTdXJ2ZXlFZGl0UXVlc3Rpb25zJywKICAgICAgICBEYXRhICAgICAgICAgPT4geyVQYXJhbX0sCiAgICApOwoKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoIFR5cGUgPT4gJ1NtYWxsJyApOwogICAgcmV0dXJuICRPdXRwdXQ7Cgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50U3VydmV5Wm9vbS5wbSAtIGEgc3VydmV5IG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogQWdlbnRTdXJ2ZXlab29tLnBtLHYgMS45IDIwMTEvMDQvMTMgMTA6NDU6MTkgbWIgRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFN1cnZleVpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlN1cnZleTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHM7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjkgJCkgWzFdOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBjb21tb24gb2JqZWN0cwogICAgJXskU2VsZn0gPSAlUGFyYW07CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KICAgICRTZWxmLT57U3VydmV5T2JqZWN0fSAgICA9IEtlcm5lbDo6U3lzdGVtOjpTdXJ2ZXktPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscy0+bmV3KCVQYXJhbSk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dDsKCiAgICAjIHZpZXcgYXR0YWNobWVudCBmb3IgaHRtbCBlbWFpbAogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0hUTUxWaWV3JyApIHsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJFN1cnZleUlEICAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5SUQiICk7CiAgICAgICAgbXkgJFN1cnZleUZpZWxkID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5RmllbGQiICk7CgogICAgICAgICMgbmVlZGVkIHBhcmFtcwogICAgICAgIGZvciBteSAkTmVlZGVkIChxdyggU3VydmV5SUQgU3VydmV5RmllbGQgKSkgewogICAgICAgICAgICBpZiAoICEkTmVlZGVkICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWRlZCBQYXJhbTogJE5lZWRlZCEiLAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICRTdXJ2ZXlGaWVsZCBuZSAnSW50cm9kdWN0aW9uJyAmJiAkU3VydmV5RmllbGQgbmUgJ0Rlc2NyaXB0aW9uJyApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiSW52YWxpZCBTdXJ2ZXlGaWVsZCBQYXJhbTogJFN1cnZleUZpZWxkISIsCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgICAgICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkludmFsaWQgU3VydmV5SUQ6ICRTdXJ2ZXlJRCEiLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgYWxsIGF0dHJpYnV0ZXMgb2YgdGhlIHN1cnZleQogICAgICAgIG15ICVTdXJ2ZXkgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleUdldCggU3VydmV5SUQgPT4gJFN1cnZleUlEICk7CgogICAgICAgIGlmICggJFN1cnZleXskU3VydmV5RmllbGR9ICkgewoKICAgICAgICAgICAgIyBjbGVhbiBodG1sIGFuZCBjb252ZXJ0IHRoZSBGaWVsZCBpbiBodG1sIChcbiAtLT48YnI+KQogICAgICAgICAgICAkU3VydmV5eyRTdXJ2ZXlGaWVsZH0gPX4gc3tcQVwkaHRtbFwvdGV4dFwkXHMoLiopfXskMX14bXM7CiAgICAgICAgICAgICRTdXJ2ZXl7JFN1cnZleUZpZWxkfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICRTdXJ2ZXl7JFN1cnZleUZpZWxkfSwKICAgICAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIGNvbnZlcnQgdGV4dCBhcmVhIGZpZWxkcyB0byBhc2NpaQogICAgICAgICRTdXJ2ZXl7JFN1cnZleUZpZWxkfQogICAgICAgICAgICA9ICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fS0+VG9Bc2NpaSggU3RyaW5nID0+ICRTdXJ2ZXl7JFN1cnZleUZpZWxkfSApOwoKICAgICAgICAkU3VydmV5eyRTdXJ2ZXlGaWVsZH0gPSAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0tPkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgICAgIFN0cmluZyAgPT4gJFN1cnZleXskU3VydmV5RmllbGR9LAogICAgICAgICAgICBDaGFyc2V0ID0+ICd1dGYtOCcsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXR0YWNobWVudCgKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIENvbnRlbnRUeXBlID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkU3VydmV5eyRTdXJ2ZXlGaWVsZH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN1cnZleSB6b29tCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkU3VydmV5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKICAgIG15ICRNZXNzYWdlICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIk1lc3NhZ2UiICk7CgogICAgIyBjaGVjayBpZiBzdXJ2ZXkgZXhpc3RzCiAgICBpZiAoCiAgICAgICAgISRTdXJ2ZXlJRCB8fAogICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgJ1llcycKICAgICAgICApCiAgICB7CiAgICAgICAgJE1lc3NhZ2UgPSAnO01lc3NhZ2U9Tm9TdXJ2ZXlJRCc7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249QWdlbnRTdXJ2ZXkkTWVzc2FnZSIgKTsKICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIKICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVGl0bGUgPT4gJ1N1cnZleScgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBvdXRwdXQgbWVzYWdlcyBpZiBzdGF0dXMgd2FzIGNoYW5nZWQKICAgIGlmICggZGVmaW5lZCgkTWVzc2FnZSkgJiYgJE1lc3NhZ2UgZXEgJ05vUXVlc3Rpb24nICkgewogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgIEluZm8gICAgID0+ICdDYW5cJ3Qgc2V0IG5ldyBzdGF0dXMhIE5vIHF1ZXN0aW9ucyBkZWZpbmVkLicsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggZGVmaW5lZCgkTWVzc2FnZSkgJiYgJE1lc3NhZ2UgZXEgJ0luY29tcGxldGVRdWVzdGlvbicgKSB7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJ0NhblwndCBzZXQgbmV3IHN0YXR1cyEgUXVlc3Rpb25zIGluY29tcGxldGUuJywKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCBkZWZpbmVkKCRNZXNzYWdlKSAmJiAkTWVzc2FnZSBlcSAnU3RhdHVzU2V0JyApIHsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KAogICAgICAgICAgICBQcmlvcml0eSA9PiAnTm90aWNlJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJ1N0YXR1cyBjaGFuZ2VkLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBhbGwgYXR0cmlidXRlcyBvZiB0aGUgc3VydmV5CiAgICBteSAlU3VydmV5ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5TdXJ2ZXlHZXQoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwogICAgbXkgJUhUTUw7CgogICAgIyBjbGVhbiBodG1sIGFuZCBjb252ZXJ0IHRoZSB0ZXh0YXJlYXMgaW4gaHRtbCAoXG4gLS0+PGJyPikKICAgIGZvciBteSAkU3VydmV5RmllbGQgKHF3KCBJbnRyb2R1Y3Rpb24gRGVzY3JpcHRpb24gKSkgewogICAgICAgIG5leHQgaWYgISRTdXJ2ZXl7JFN1cnZleUZpZWxkfTsKCiAgICAgICAgJFN1cnZleXskU3VydmV5RmllbGR9ID1+IHN7XEFcJGh0bWxcL3RleHRcJFxzKC4qKX17JDF9eG1zOwoKICAgICAgICBpZiAoJDEpIHsKICAgICAgICAgICAgJEhUTUx7JFN1cnZleUZpZWxkfSA9IDE7CiAgICAgICAgfQoKICAgICAgICAkU3VydmV5eyRTdXJ2ZXlGaWVsZH0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICRTdXJ2ZXl7JFN1cnZleUZpZWxkfSwKICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IG51bWJlcnMgb2YgcmVxdWVzdHMgYW5kIHZvdGVzCiAgICBteSAkU2VuZFJlcXVlc3QgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkNvdW50UmVxdWVzdCgKICAgICAgICBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQsCiAgICAgICAgVmFsaWRJRCAgPT4gJ2FsbCcsCiAgICApOwogICAgbXkgJFJlcXVlc3RDb21wbGV0ZSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+Q291bnRSZXF1ZXN0KAogICAgICAgIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCwKICAgICAgICBWYWxpZElEICA9PiAwLAogICAgKTsKICAgICRTdXJ2ZXl7U2VuZFJlcXVlc3R9ICAgICA9ICRTZW5kUmVxdWVzdDsKICAgICRTdXJ2ZXl7UmVxdWVzdENvbXBsZXRlfSA9ICRSZXF1ZXN0Q29tcGxldGU7CgogICAgIyBnZXQgc2VsZWN0ZWQgcXVldWVzCiAgICBteSAlUXVldWVzID0gJFNlbGYtPntRdWV1ZU9iamVjdH0tPkdldEFsbFF1ZXVlcygpOwogICAgbXkgQFF1ZXVlTGlzdCA9IG1hcCB7ICRRdWV1ZXN7JF99IH0gQHsgJFN1cnZleXtRdWV1ZXN9IH07CiAgICBAUXVldWVMaXN0ID0gc29ydCB7IGxjICRhIGNtcCBsYyAkYiB9IEBRdWV1ZUxpc3Q7CiAgICBteSAkUXVldWVMaXN0U3RyaW5nID0gam9pbiBxeywgfSwgQFF1ZXVlTGlzdDsKCiAgICBteSAkTm9RdWV1ZU1lc3NhZ2UgPSAnJzsKICAgIGlmICggISRRdWV1ZUxpc3RTdHJpbmcgKSB7CiAgICAgICAgJFF1ZXVlTGlzdFN0cmluZyA9ICctIE5vIHF1ZXVlIHNlbGVjdGVkIC0nOwogICAgfQoKICAgICMgcHJpbnQgdGhlIG1haW4gdGFibGUuCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1N1cnZleVpvb20nLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlU3VydmV5LAogICAgICAgICAgICBOb1F1ZXVlTWVzc2FnZSAgPT4gJE5vUXVldWVNZXNzYWdlLAogICAgICAgICAgICBRdWV1ZUxpc3RTdHJpbmcgPT4gJFF1ZXVlTGlzdFN0cmluZywKICAgICAgICAgICAgSFRNTFJpY2hUZXh0SGVpZ2h0RGVmYXVsdCA9PgogICAgICAgICAgICAgICAgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1N1cnZleTo6RnJvbnRlbmQ6OkhUTUxSaWNoVGV4dEhlaWdodERlZmF1bHQnKSB8fCA4MCwKICAgICAgICAgICAgSFRNTFJpY2hUZXh0SGVpZ2h0TWF4ID0+CiAgICAgICAgICAgICAgICAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU3VydmV5OjpGcm9udGVuZDo6SFRNTFJpY2hUZXh0SGVpZ2h0TWF4JykgfHwgMjUwMCwKICAgICAgICB9LAogICAgKTsKCiAgICBmb3IgbXkgJEZpZWxkIChxdyggSW50cm9kdWN0aW9uIERlc2NyaXB0aW9uKSkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1N1cnZleUJsb2NrJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBUaXRsZSA9PiAiU3VydmV5ICRGaWVsZCIsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgKTsKICAgICAgICBpZiAoICRIVE1MeyRGaWVsZH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdCb2R5SFRNTCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBTdXJ2ZXlGaWVsZCA9PiAkRmllbGQsCiAgICAgICAgICAgICAgICAgICAgU3VydmV5SUQgICAgPT4gJFN1cnZleUlELAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdCb2R5UGxhaW4nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTGFiZWwgICA9PiAkRmllbGQsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkU3VydmV5eyRGaWVsZH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRpc3BsYXkgc3RhdHMgaWYgc3RhdHVzIE1hc3RlciwgVmFsaWQgb3IgSW52YWxpZAogICAgaWYgKAogICAgICAgICRTdXJ2ZXl7U3RhdHVzfSAgICBlcSAnTWFzdGVyJwogICAgICAgIHx8ICRTdXJ2ZXl7U3RhdHVzfSBlcSAnVmFsaWQnCiAgICAgICAgfHwgJFN1cnZleXtTdGF0dXN9IGVxICdJbnZhbGlkJwogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdTdXJ2ZXlFZGl0U3RhdHMnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBhbGwgcXVlc3Rpb25zIG9mIHRoZSBzdXJ2ZXkKICAgICAgICBteSBAUXVlc3Rpb25MaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvbkxpc3QoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwogICAgICAgIGZvciBteSAkUXVlc3Rpb24gKEBRdWVzdGlvbkxpc3QpIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N1cnZleUVkaXRTdGF0c1F1ZXN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICApOwogICAgICAgICAgICBteSBAQW5zd2VyczsKCiAgICAgICAgICAgICMgZ2VuZXJhdGUgdGhlIGFuc3dlcnMgb2YgdGhlIHF1ZXN0aW9uCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRRdWVzdGlvbi0+e1R5cGV9ICAgIGVxICdZZXNObycKICAgICAgICAgICAgICAgIHx8ICRRdWVzdGlvbi0+e1R5cGV9IGVxICdSYWRpbycKICAgICAgICAgICAgICAgIHx8ICRRdWVzdGlvbi0+e1R5cGV9IGVxICdDaGVja2JveCcKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgQEFuc3dlckxpc3Q7CgogICAgICAgICAgICAgICAgIyBzZXQgYW5zd2VycyB0byBZZXMgYW5kIE5vIGlmIHR5cGUgd2FzIFllc05vCiAgICAgICAgICAgICAgICBpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdZZXNObycgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJURhdGE7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7QW5zd2VyfSAgID0gIlllcyI7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7QW5zd2VySUR9ID0gIlllcyI7CiAgICAgICAgICAgICAgICAgICAgcHVzaCggQEFuc3dlckxpc3QsIFwlRGF0YSApOwogICAgICAgICAgICAgICAgICAgIG15ICVEYXRhMjsKICAgICAgICAgICAgICAgICAgICAkRGF0YTJ7QW5zd2VyfSAgID0gIk5vIjsKICAgICAgICAgICAgICAgICAgICAkRGF0YTJ7QW5zd2VySUR9ID0gIk5vIjsKICAgICAgICAgICAgICAgICAgICBwdXNoKCBAQW5zd2VyTGlzdCwgXCVEYXRhMiApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgZ2V0IGFsbCBhbnN3ZXJzIG9mIGEgcXVlc3Rpb24KICAgICAgICAgICAgICAgICAgICBAQW5zd2VyTGlzdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyTGlzdCgKICAgICAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb24tPntRdWVzdGlvbklEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIG15ICRSb3cgKEBBbnN3ZXJMaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJENvdW50Vm90ZSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+Q291bnRWb3RlKAogICAgICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBWb3RlVmFsdWUgID0+ICRSb3ctPntBbnN3ZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBteSAkUGVyY2VudCA9IDA7CgogICAgICAgICAgICAgICAgICAgICMgY2FsY3VsYXRlIHRoZSBwZXJjZW50cwogICAgICAgICAgICAgICAgICAgIGlmICgkUmVxdWVzdENvbXBsZXRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQZXJjZW50ID0gMTAwIC8gJFJlcXVlc3RDb21wbGV0ZSAqICRDb3VudFZvdGU7CiAgICAgICAgICAgICAgICAgICAgICAgICRQZXJjZW50ID0gc3ByaW50ZiggIiUuMGYiLCAkUGVyY2VudCApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBteSAlRGF0YTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtBbnN3ZXJ9ICAgICAgICA9ICRSb3ctPntBbnN3ZXJ9OwogICAgICAgICAgICAgICAgICAgICREYXRhe0Fuc3dlclBlcmNlbnR9ID0gJFBlcmNlbnQ7CiAgICAgICAgICAgICAgICAgICAgcHVzaCggQEFuc3dlcnMsIFwlRGF0YSApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1RleHRhcmVhJyApIHsKICAgICAgICAgICAgICAgIG15ICRBbnN3ZXJObyA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+Q291bnRWb3RlKAogICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uSUQgPT4gJFF1ZXN0aW9uLT57UXVlc3Rpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgVm90ZVZhbHVlICA9PiAnJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSAkUGVyY2VudCA9IDA7CgogICAgICAgICAgICAgICAgIyBjYWxjdWxhdGUgdGhlIHBlcmNlbnRzCiAgICAgICAgICAgICAgICBpZiAoJFJlcXVlc3RDb21wbGV0ZSkgewogICAgICAgICAgICAgICAgICAgICRQZXJjZW50ID0gMTAwIC8gJFJlcXVlc3RDb21wbGV0ZSAqICRBbnN3ZXJObzsKICAgICAgICAgICAgICAgICAgICAkUGVyY2VudCA9IHNwcmludGYoICIlLjBmIiwgJFBlcmNlbnQgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG15ICVEYXRhOwogICAgICAgICAgICAgICAgJERhdGF7QW5zd2VyfSA9ICJhbnN3ZXJlZCI7CiAgICAgICAgICAgICAgICBpZiAoICEkUmVxdWVzdENvbXBsZXRlICkgewogICAgICAgICAgICAgICAgICAgICREYXRhe0Fuc3dlclBlcmNlbnR9ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICREYXRhe0Fuc3dlclBlcmNlbnR9ID0gMTAwIC0gJFBlcmNlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwdXNoKCBAQW5zd2VycywgXCVEYXRhICk7CiAgICAgICAgICAgICAgICBteSAlRGF0YTI7CiAgICAgICAgICAgICAgICAkRGF0YTJ7QW5zd2VyfSAgICAgICAgPSAibm90IGFuc3dlcmVkIjsKICAgICAgICAgICAgICAgICREYXRhMntBbnN3ZXJQZXJjZW50fSA9ICRQZXJjZW50OwogICAgICAgICAgICAgICAgcHVzaCggQEFuc3dlcnMsIFwlRGF0YTIgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBvdXRwdXQgYWxsIGFuc3dlcnMgb2YgdGhlIHN1cnZleQogICAgICAgICAgICBmb3IgbXkgJFJvdyAoQEFuc3dlcnMpIHsKICAgICAgICAgICAgICAgICRSb3ctPntBbnN3ZXJQZXJjZW50VGFibGV9ID0gJFJvdy0+e0Fuc3dlclBlcmNlbnR9OwogICAgICAgICAgICAgICAgaWYgKCAhJFJvdy0+e0Fuc3dlclBlcmNlbnR9ICkgewogICAgICAgICAgICAgICAgICAgICRSb3ctPntBbnN3ZXJQZXJjZW50VGFibGV9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnU3VydmV5RWRpdFN0YXRzQW5zd2VyJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRSb3csCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkUmVxdWVzdENvbXBsZXRlKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTdXJ2ZXlFZGl0U3RhdHNEZXRhaWxzJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkU3VydmV5e1N0YXR1c30gZXEgJ05ldycgKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnTm9TdGF0UmVzdWx0cycgKTsKICAgIH0KCiAgICAjIG91dHB1dCB0aGUgcG9zc2libGUgc3RhdHVzCiAgICBteSAlTmV3U3RhdHVzOwogICAgJE5ld1N0YXR1c3tDaGFuZ2VTdGF0dXN9ID0gJy0gQ2hhbmdlIFN0YXR1cyAtJzsKCiAgICBpZiAoICRTdXJ2ZXl7U3RhdHVzfSBlcSAnTmV3JyB8fCAkU3VydmV5e1N0YXR1c30gZXEgJ0ludmFsaWQnICkgewogICAgICAgICROZXdTdGF0dXN7TWFzdGVyfSA9ICdNYXN0ZXInOwogICAgICAgICROZXdTdGF0dXN7VmFsaWR9ICA9ICdWYWxpZCc7CiAgICB9CiAgICBlbHNpZiAoICRTdXJ2ZXl7U3RhdHVzfSBlcSAnVmFsaWQnICkgewogICAgICAgICROZXdTdGF0dXN7TWFzdGVyfSAgPSAnTWFzdGVyJzsKICAgICAgICAkTmV3U3RhdHVze0ludmFsaWR9ID0gJ0ludmFsaWQnOwogICAgfQogICAgZWxzaWYgKCAkU3VydmV5e1N0YXR1c30gZXEgJ01hc3RlcicgKSB7CiAgICAgICAgJE5ld1N0YXR1c3tWYWxpZH0gICA9ICdWYWxpZCc7CiAgICAgICAgJE5ld1N0YXR1c3tJbnZhbGlkfSA9ICdJbnZhbGlkJzsKICAgIH0KCiAgICBteSAkTmV3U3RhdHVzU3RyID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBOYW1lICAgICAgID0+ICdOZXdTdGF0dXMnLAogICAgICAgIElEICAgICAgICAgPT4gJ05ld1N0YXR1cycsCiAgICAgICAgRGF0YSAgICAgICA9PiBcJU5ld1N0YXR1cywKICAgICAgICBTZWxlY3RlZElEID0+ICdDaGFuZ2VTdGF0dXMnLAogICAgKTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1N1cnZleVN0YXR1cycsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIE5ld1N0YXR1c1N0ciA9PiAkTmV3U3RhdHVzU3RyLAogICAgICAgICAgICBTdXJ2ZXlJRCAgICAgPT4gJFN1cnZleUlELAogICAgICAgIH0sCiAgICApOwogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50U3VydmV5Wm9vbScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgIHJldHVybiAkT3V0cHV0OwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL1B1YmxpY1N1cnZleS5wbSAtIGEgc3VydmV5IG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogUHVibGljU3VydmV5LnBtLHYgMS4yNSAyMDExLzExLzA0IDEyOjQwOjAxIGpoIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6UHVibGljU3VydmV5OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpTdXJ2ZXk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS4yNSAkKSBbMV07CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IGNvbW1vbiBvYmplY3RzCiAgICAleyRTZWxmfSA9ICVQYXJhbTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBDb25maWdPYmplY3QgVXNlck9iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0gICAgPSBLZXJuZWw6OlN5c3RlbTo6U3VydmV5LT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMtPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRPdXRwdXQ7CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBwdWJsaWMgc3VydmV5IHZvdGUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdQdWJsaWNTdXJ2ZXlWb3RlJyApIHsKICAgICAgICBteSAkUHVibGljU3VydmV5S2V5ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnUHVibGljU3VydmV5S2V5JyApOwogICAgICAgIG15ICVTdXJ2ZXkgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlB1YmxpY1N1cnZleUdldCggUHVibGljU3VydmV5S2V5ID0+ICRQdWJsaWNTdXJ2ZXlLZXkgKTsKICAgICAgICBpZiAoICRTdXJ2ZXl7U3VydmV5SUR9ICkgewogICAgICAgICAgICBteSBAUXVlc3Rpb25MaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvbkxpc3QoIFN1cnZleUlEID0+ICRTdXJ2ZXl7U3VydmV5SUR9ICk7CiAgICAgICAgICAgIGZvciBteSAkUXVlc3Rpb24gKEBRdWVzdGlvbkxpc3QpIHsKICAgICAgICAgICAgICAgIGlmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1llc05vJyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkUHVibGljU3VydmV5Vm90ZTEgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oCiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtID0+ICJQdWJsaWNTdXJ2ZXlWb3RlMVskUXVlc3Rpb24tPntRdWVzdGlvbklEfV0iCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlB1YmxpY0Fuc3dlclNhdmUoCiAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5LAogICAgICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEICAgICAgPT4gJFF1ZXN0aW9uLT57UXVlc3Rpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFZvdGVWYWx1ZSAgICAgICA9PiAkUHVibGljU3VydmV5Vm90ZTEsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1JhZGlvJyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkUHVibGljU3VydmV5Vm90ZTIgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oCiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtID0+ICJQdWJsaWNTdXJ2ZXlWb3RlMlskUXVlc3Rpb24tPntRdWVzdGlvbklEfV0iCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlB1YmxpY0Fuc3dlclNhdmUoCiAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5LAogICAgICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEICAgICAgPT4gJFF1ZXN0aW9uLT57UXVlc3Rpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFZvdGVWYWx1ZSAgICAgICA9PiAkUHVibGljU3VydmV5Vm90ZTIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ0NoZWNrYm94JyApIHsKICAgICAgICAgICAgICAgICAgICBteSBAQW5zd2VyTGlzdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyTGlzdCgKICAgICAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb24tPntRdWVzdGlvbklEfQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRBbnN3ZXIgKEBBbnN3ZXJMaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRQdWJsaWNTdXJ2ZXlWb3RlMyA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtID0+ICJQdWJsaWNTdXJ2ZXlWb3RlM1skQW5zd2VyLT57QW5zd2VySUR9XSIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkUHVibGljU3VydmV5Vm90ZTMgJiYgJFB1YmxpY1N1cnZleVZvdGUzIGVxICdZZXMnICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5QdWJsaWNBbnN3ZXJTYXZlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uSUQgICAgICA9PiAkUXVlc3Rpb24tPntRdWVzdGlvbklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb3RlVmFsdWUgICAgICAgPT4gJEFuc3dlci0+e0Fuc3dlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdUZXh0YXJlYScgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJFB1YmxpY1N1cnZleVZvdGU0ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKAogICAgICAgICAgICAgICAgICAgICAgICBQYXJhbSA9PiAiUHVibGljU3VydmV5Vm90ZTRbJFF1ZXN0aW9uLT57UXVlc3Rpb25JRH1dIgogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgcmljaCB0ZXh0IGlzIGVuYWJsZWQKICAgICAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQdWJsaWNTdXJ2ZXlWb3RlNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAoIGxlbmd0aCAkUHVibGljU3VydmV5Vm90ZTQgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAiXCRodG1sL3RleHRcJCAkUHVibGljU3VydmV5Vm90ZTQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5QdWJsaWNBbnN3ZXJTYXZlKAogICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNTdXJ2ZXlLZXkgPT4gJFB1YmxpY1N1cnZleUtleSwKICAgICAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25JRCAgICAgID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICAgICAgICAgICAgICBWb3RlVmFsdWUgICAgICAgPT4gJFB1YmxpY1N1cnZleVZvdGU0LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5QdWJsaWNTdXJ2ZXlJbnZhbGlkU2V0KCBQdWJsaWNTdXJ2ZXlLZXkgPT4gJFB1YmxpY1N1cnZleUtleSApOwogICAgICAgIH0KICAgICAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckhlYWRlciggVGl0bGUgPT4gJ1N1cnZleScgKTsKCiAgICAgICAgIyBwcmludCB0aGUgbWFpbiB0YWJsZS4KICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQdWJsaWNTdXJ2ZXlNZXNzYWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBNZXNzYWdlVHlwZSAgID0+ICdTdXJ2ZXkgSW5mb3JtYXRpb24nLAogICAgICAgICAgICAgICAgTWVzc2FnZUhlYWRlciA9PiAnVGhhbmsgeW91IGZvciB5b3VyIGZlZWRiYWNrLicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgICAgID0+ICdUaGUgc3VydmV5IGlzIGZpbmlzaGVkLicsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdQdWJsaWNTdXJ2ZXknLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4geyVQYXJhbX0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNob3cgc3VydmV5IHZvdGUgZGF0YQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1Nob3dWb3RlRGF0YScgKSB7CiAgICAgICAgbXkgJFB1YmxpY1N1cnZleUtleSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1B1YmxpY1N1cnZleUtleScgKTsKCiAgICAgICAgIyByZXR1cm4gaWYgZmVhdHVyZSBub3QgZW5hYmxlZAogICAgICAgIGlmICggISRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJTdXJ2ZXk6OlNob3dWb3RlRGF0YSIpICkgewogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJIZWFkZXIoKTsKCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdQdWJsaWNTdXJ2ZXlNZXNzYWdlJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VUeXBlICAgPT4gJ1N1cnZleSBNZXNzYWdlIScsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUhlYWRlciA9PiAnTW9kdWxlIG5vdCBlbmFibGVkLicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAnVGhpcyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBlbmFibGVkLCBwbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdQdWJsaWNTdXJ2ZXknLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVyRm9vdGVyKCk7CiAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgIH0KCiAgICAgICAgIyBHZXQgdGhlIHJlcXVlc3QgZGF0YSBhbmQgc3RhcnQgc2hvd2luZyB0aGUgZGF0YQogICAgICAgIG15ICVSZXF1ZXN0RGF0YSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+UmVxdWVzdEdldCgKICAgICAgICAgICAgUHVibGljU3VydmV5S2V5ID0+ICRQdWJsaWNTdXJ2ZXlLZXksCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFN1cnZleUlEICA9ICRSZXF1ZXN0RGF0YXtTdXJ2ZXlJRH07CiAgICAgICAgbXkgJFRpY2tldElEICA9ICRSZXF1ZXN0RGF0YXtUaWNrZXRJRH07CiAgICAgICAgbXkgJFJlcXVlc3RJRCA9ICRSZXF1ZXN0RGF0YXtSZXF1ZXN0SUR9OwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgICAgICdZZXMnCiAgICAgICAgICAgIHx8ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRSZXF1ZXN0SUQsIEVsZW1lbnQgPT4gJ1JlcXVlc3QnICkKICAgICAgICAgICAgbmUgJ1llcycKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiV3JvbmcgcHVibGljIHN1cnZleSBrZXk6ICRQdWJsaWNTdXJ2ZXlLZXkhIiwKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdpbmZvJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVySGVhZGVyKCBUaXRsZSA9PiAnU3VydmV5JyApOwoKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1B1YmxpY1N1cnZleU1lc3NhZ2UnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVR5cGUgICA9PiAnU3VydmV5IEVycm9yIScsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUhlYWRlciA9PiAnSW52YWxpZCBzdXJ2ZXkga2V5LicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICAgICAnVGhlIGluc2VydGVkIHN1cnZleSBrZXkgaXMgaW52YWxpZCwgaWYgeW91IGZvbGxvd2VkIGEgbGluayBtYXliZSB0aGlzIGlzIG9ic29sZXRlIG9yIGJyb2tlbi4nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1B1YmxpY1N1cnZleScsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGb290ZXIoKTsKICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgfQoKICAgICAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckhlYWRlciggVGl0bGUgPT4gJ1N1cnZleSBWb3RlJyApOwoKICAgICAgICBteSAlU3VydmV5ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5TdXJ2ZXlHZXQoCiAgICAgICAgICAgIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCwKICAgICAgICAgICAgUHVibGljICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGNsZWFuIGh0bWwKICAgICAgICBpZiAoICRTdXJ2ZXl7SW50cm9kdWN0aW9ufSApIHsKICAgICAgICAgICAgJFN1cnZleXtJbnRyb2R1Y3Rpb259ID1+IHN7XEFcJGh0bWxcL3RleHRcJFxzKC4qKX17JDF9eG1zOwogICAgICAgICAgICAkU3VydmV5e0ludHJvZHVjdGlvbn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkU3VydmV5e0ludHJvZHVjdGlvbn0sCiAgICAgICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoJDEpIHsKICAgICAgICAgICAgICAgICRTdXJ2ZXl7SW50cm9kdWN0aW9ufSA9CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9LT5Ub0FzY2lpKCBTdHJpbmcgPT4gJFN1cnZleXtJbnRyb2R1Y3Rpb259ICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgcHJpbnQgdGhlIG1haW4gdGFibGUuCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljU3VydmV5Vm90ZURhdGEnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVTdXJ2ZXksCiAgICAgICAgICAgICAgICBNZXNzYWdlVHlwZSA9PiAnU3VydmV5IFZvdGUgRGF0YScsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICBteSBAUXVlc3Rpb25MaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvbkxpc3QoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwogICAgICAgIGZvciBteSAkUXVlc3Rpb24gKEBRdWVzdGlvbkxpc3QpIHsKCiAgICAgICAgICAgIG15ICRDbGFzcyA9ICcnOwogICAgICAgICAgICBpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdUZXh0YXJlYScgKSB7CiAgICAgICAgICAgICAgICAkQ2xhc3MgPSAnVGV4dGFyZWEnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljU3VydmV5Vm90ZVF1ZXN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICV7JFF1ZXN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICBteSBAQW5zd2VyczsKICAgICAgICAgICAgaWYgKCAkUXVlc3Rpb24tPntUeXBlfSBlcSAnUmFkaW8nIHx8ICRRdWVzdGlvbi0+e1R5cGV9IGVxICdDaGVja2JveCcgKSB7CiAgICAgICAgICAgICAgICBteSBAQW5zd2VyTGlzdDsKICAgICAgICAgICAgICAgIEBBbnN3ZXJMaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5Wb3RlR2V0KAogICAgICAgICAgICAgICAgICAgIFJlcXVlc3RJRCAgPT4gJFJlcXVlc3RJRCwKICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGZvciBteSAkUm93IChAQW5zd2VyTGlzdCkgewogICAgICAgICAgICAgICAgICAgIG15ICVBbnN3ZXIgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkFuc3dlckdldCggQW5zd2VySUQgPT4gJFJvdy0+e1ZvdGVWYWx1ZX0gKTsKICAgICAgICAgICAgICAgICAgICBteSAlRGF0YTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtBbnN3ZXJ9ID0gJEFuc3dlcntBbnN3ZXJ9OwogICAgICAgICAgICAgICAgICAgIHB1c2goIEBBbnN3ZXJzLCBcJURhdGEgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdZZXNObycgfHwgJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1RleHRhcmVhJyApIHsKICAgICAgICAgICAgICAgIG15IEBMaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5Wb3RlR2V0KAogICAgICAgICAgICAgICAgICAgIFJlcXVlc3RJRCAgPT4gJFJlcXVlc3RJRCwKICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAlRGF0YTsKICAgICAgICAgICAgICAgICREYXRhe0Fuc3dlcn0gPSAkTGlzdFswXS0+e1ZvdGVWYWx1ZX07CgogICAgICAgICAgICAgICAgIyBjbGVhbiBodG1sCiAgICAgICAgICAgICAgICBpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdUZXh0YXJlYScgJiYgJERhdGF7QW5zd2VyfSApIHsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtBbnN3ZXJ9ID1+IHN7XEFcJGh0bWxcL3RleHRcJFxzKC4qKX17JDF9eG1zOwogICAgICAgICAgICAgICAgICAgICREYXRhe0Fuc3dlcn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICREYXRhe0Fuc3dlcn0sCiAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCQxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRhe0Fuc3dlcn0gPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9LT5Ub0FzY2lpKCBTdHJpbmcgPT4gJERhdGF7QW5zd2VyfSApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHB1c2goIEBBbnN3ZXJzLCBcJURhdGEgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgbXkgJFJvdyAoQEFuc3dlcnMpIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljU3VydmV5Vm90ZUFuc3dlcicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICV7JFJvd30sCiAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1B1YmxpY1N1cnZleScsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNob3cgc3VydmV5CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBteSAkUHVibGljU3VydmV5S2V5ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnUHVibGljU3VydmV5S2V5JyApOwogICAgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJIZWFkZXIoIFRpdGxlID0+ICdTdXJ2ZXknICk7CgogICAgbXkgJFVzZWRTdXJ2ZXlLZXkgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlB1YmxpY1N1cnZleUdldCgKICAgICAgICBQdWJsaWNTdXJ2ZXlLZXkgPT4gJFB1YmxpY1N1cnZleUtleSwKICAgICAgICBJbnZhbGlkICAgICAgICAgPT4gMSwKICAgICk7CgogICAgbXkgJVN1cnZleSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+UHVibGljU3VydmV5R2V0KCBQdWJsaWNTdXJ2ZXlLZXkgPT4gJFB1YmxpY1N1cnZleUtleSApOwoKICAgICRTdXJ2ZXl7UHVibGljU3VydmV5S2V5fSA9ICRQdWJsaWNTdXJ2ZXlLZXk7CgogICAgaWYgKCRVc2VkU3VydmV5S2V5KSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljU3VydmV5TWVzc2FnZScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgTWVzc2FnZVR5cGUgICA9PiAnU3VydmV5IEluZm9ybWF0aW9uJywKICAgICAgICAgICAgICAgIE1lc3NhZ2VIZWFkZXIgPT4gJ1RoYW5rIHlvdSBmb3IgeW91ciBmZWVkYmFjay4nLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgICAgICA9PiAnWW91IGhhdmUgYWxyZWFkeSBhbnN3ZXJlZCB0aGUgc3VydmV5LicsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiU3VydmV5OjpTaG93Vm90ZURhdGEiKSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1Nob3dBbnN3ZXJzQnV0dG9uJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5LAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRTdXJ2ZXl7U3VydmV5SUR9ICkgewoKICAgICAgICAjIGNsZWFuIGh0bWwgYW5kIHByb2NjZXNzIGludHJvZHVjdGlvbiB0ZXh0CiAgICAgICAgJFN1cnZleXtJbnRyb2R1Y3Rpb259ID1+IHN7XEFcJGh0bWxcL3RleHRcJFxzKC4qKX17JDF9eG1zOwogICAgICAgIG15ICRIVE1MQ29udGVudCA9ICQxOwogICAgICAgICRTdXJ2ZXl7SW50cm9kdWN0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJFN1cnZleXtJbnRyb2R1Y3Rpb259LAogICAgICAgICAgICBIVE1MUmVzdWx0TW9kZSA9PiAxLAogICAgICAgICk7CgogICAgICAgIGlmICgkSFRNTENvbnRlbnQpIHsKICAgICAgICAgICAgJFN1cnZleXtJbnRyb2R1Y3Rpb259CiAgICAgICAgICAgICAgICA9ICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fS0+VG9Bc2NpaSggU3RyaW5nID0+ICRTdXJ2ZXl7SW50cm9kdWN0aW9ufSApOwogICAgICAgIH0KICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQdWJsaWNTdXJ2ZXknLAogICAgICAgICAgICBEYXRhID0+IHslU3VydmV5fSwKICAgICAgICApOwoKICAgICAgICBteSBAUXVlc3Rpb25MaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvbkxpc3QoIFN1cnZleUlEID0+ICRTdXJ2ZXl7U3VydmV5SUR9ICk7CiAgICAgICAgZm9yIG15ICRRdWVzdGlvbiAoQFF1ZXN0aW9uTGlzdCkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdQdWJsaWNRdWVzdGlvbnMnICk7CiAgICAgICAgICAgIGlmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1llc05vJyApIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljQW5zd2VyWWVzTm8nLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdSYWRpbycgKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1B1YmxpY0Fuc3dlclJhZGlvJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRRdWVzdGlvbiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSBAQW5zd2VyTGlzdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyTGlzdCgKICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGZvciBteSAkQW5zd2VyIChAQW5zd2VyTGlzdCkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1B1YmxpY0Fuc3dlclJhZGlvYicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJEFuc3dlciwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ0NoZWNrYm94JyApIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljQW5zd2VyQ2hlY2tib3gnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15IEBBbnN3ZXJMaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5BbnN3ZXJMaXN0KAogICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uSUQgPT4gJFF1ZXN0aW9uLT57UXVlc3Rpb25JRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgZm9yIG15ICRBbnN3ZXIgKEBBbnN3ZXJMaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljQW5zd2VyQ2hlY2tib3hiJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkQW5zd2VyLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUXVlc3Rpb24tPntUeXBlfSBlcSAnVGV4dGFyZWEnICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdQdWJsaWNBbnN3ZXJUZXh0YXJlYScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgcmljaCB0ZXh0IGlzIGVuYWJsZWQKICAgICAgICAgICAgICAgIGlmICggJFNlbGYtPntMYXlvdXRPYmplY3R9LT57QnJvd3NlclJpY2hUZXh0fSApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdSaWNoVGV4dCcgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1B1YmxpY1N1cnZleU1lc3NhZ2UnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE1lc3NhZ2VUeXBlICAgPT4gJ1N1cnZleSBFcnJvciEnLAogICAgICAgICAgICAgICAgTWVzc2FnZUhlYWRlciA9PiAnSW52YWxpZCBzdXJ2ZXkga2V5LicsCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgJ1RoZSBpbnNlcnRlZCBzdXJ2ZXkga2V5IGlzIGludmFsaWQsIGlmIHlvdSBmb2xsb3dlZCBhIGxpbmsgbWF5YmUgdGhpcyBpcyBvYnNvbGV0ZSBvciBicm9rZW4uJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1B1YmxpY1N1cnZleScsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZvb3RlcigpOwogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdXJ2ZXlPdmVydmlld1NtYWxsLnBtLnBtCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBTdXJ2ZXlPdmVydmlld1NtYWxsLnBtLHYgMS4xIDIwMTEvMDEvMDcgMTM6MTc6MDAgY3IgRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlN1cnZleU92ZXJ2aWV3U21hbGw7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjEgJCkgWzFdOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IFVzZXJJRCBVc2VyT2JqZWN0IE1haW5PYmplY3QpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUGFnZVNob3duIFN0YXJ0SGl0KSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbmVlZCBTdXJ2ZXlJRHMKICAgIGlmICggISRQYXJhbXtTdXJ2ZXlJRHN9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCB0aGUgU3VydmV5SURzIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzdG9yZSB0aGUgU3VydmV5SURzIGxvY2FsbHkKICAgIG15IEBJRHMgPSBAeyAkUGFyYW17U3VydmV5SURzfSB9OwoKICAgICMgY2hlY2sgU2hvd0NvbHVtbnMgcGFyYW1ldGVyCiAgICBteSBAU2hvd0NvbHVtbnM7CiAgICBpZiAoICRQYXJhbXtTaG93Q29sdW1uc30gJiYgcmVmICRQYXJhbXtTaG93Q29sdW1uc30gZXEgJ0FSUkFZJyApIHsKICAgICAgICBAU2hvd0NvbHVtbnMgPSBAeyAkUGFyYW17U2hvd0NvbHVtbnN9IH07CiAgICB9CgogICAgbXkgJE91dHB1dCA9ICcnOwoKICAgICMgc2hvdyBzdXJ2ZXlzIGlmIHRoZXJlIGFyZSBzb21lCiAgICBpZiAoQElEcykgewoKICAgICAgICAjIGJ1aWxkIGNvbHVtbiBoZWFkZXIgYmxvY2tzCiAgICAgICAgIyBjdXJyZW50bHkgc29ydGluZyBpcyBub3QgaW1wbGVtZW50ZWQgb24gc3VydmV5LCBsZWF2ZSB0aGUgY29kZSBmb3IgZnV0dXJlIGltcGxlbWVudGF0aW9uCiAgICAgICAgaWYgKEBTaG93Q29sdW1ucykgewogICAgICAgICAgICBmb3IgbXkgJENvbHVtbiAoQFNob3dDb2x1bW5zKSB7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgbmVlZGVkIHZhcmlhYmxlcwogICAgICAgICAgICAgICAgbXkgJENTUyA9ICcnOwogICAgICAgICAgICAgICAgbXkgJE9yZGVyQnk7CgogICAgICAgICAgICAgICAgIyBzZXQgdGhlIGNvcnJlY3QgU2V0IENTUyBjbGFzcyBhbmQgb3JkZXIgYnkgbGluawogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17U29ydEJ5fSAmJiAoICRQYXJhbXtTb3J0Qnl9IGVxICRDb2x1bW4gKSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRQYXJhbXtPcmRlckJ5fSAmJiAoICRQYXJhbXtPcmRlckJ5fSBlcSAnVXAnICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRPcmRlckJ5ID0gJ0Rvd24nOwogICAgICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydERlc2NlbmRpbmcnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE9yZGVyQnkgPSAnVXAnOwogICAgICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydEFzY2VuZGluZyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJE9yZGVyQnkgPSAnVXAnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgb3V0cHV0IGVhY2ggaGVhZGVyCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcgLiAkQ29sdW1uIC4gJ0hlYWRlcicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgQ1NTICAgICA9PiAkQ1NTLAogICAgICAgICAgICAgICAgICAgICAgICBPcmRlckJ5ID0+ICRPcmRlckJ5LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkQ291bnRlciA9IDA7CgogICAgICAgIElEOgogICAgICAgIGZvciBteSAkSUQgKEBJRHMpIHsKICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvdW50ZXIgPj0gJFBhcmFte1N0YXJ0SGl0fQogICAgICAgICAgICAgICAgJiYgJENvdW50ZXIgPCAoICRQYXJhbXtQYWdlU2hvd259ICsgJFBhcmFte1N0YXJ0SGl0fSApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGdldCBzdXJ2ZXkgZGF0YQogICAgICAgICAgICAgICAgbXkgJURhdGEgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleUdldCgKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgU3VydmV5SUQgPT4gJElELAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IElEIGlmICElRGF0YTsKCiAgICAgICAgICAgICAgICAjIGdldCB1c2VyIGRhdGEgZm9yIG5lZWRlZCB1c2VyIHR5cGVzCiAgICAgICAgICAgICAgICBVU0VSVFlQRToKICAgICAgICAgICAgICAgIGZvciBteSAkVXNlclR5cGUgKHF3KENyZWF0ZSBDaGFuZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7ICRVc2VyVHlwZSAuICdMZWZ0UGFyZW50aGVzaXMnIH0gID0gJygnOwogICAgICAgICAgICAgICAgICAgICREYXRheyAkVXNlclR5cGUgLiAnUmlnaHRQYXJlbnRoZXNpcycgfSA9ICcpJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGJ1aWxkIHJlY29yZCBibG9jawogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgY29sdW1uIHJlY29yZCBibG9ja3MKICAgICAgICAgICAgICAgIGlmIChAU2hvd0NvbHVtbnMpIHsKICAgICAgICAgICAgICAgICAgICBDT0xVTU46CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKEBTaG93Q29sdW1ucykgewogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG93IGxpbmtzIGlmIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4gLiAnTGlua1N0YXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiAuICdMaW5rRW5kJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgdGhlcmUgYXJlIG5vIHN1cnZleXMgdG8gc2hvdywgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGluIHRoZSB0YWJsZQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRvdGFsQ29sdW1ucyA9PiBzY2FsYXIgQFNob3dDb2x1bW5zLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyB1c2UgdGVtcGxhdGUKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFN1cnZleU92ZXJ2aWV3U21hbGwnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJFNlbGYtPntWaWV3VHlwZX0sCiAgICAgICAgICAgIENvbHVtbkNvdW50ID0+IHNjYWxhciBAU2hvd0NvbHVtbnMsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIEFnZW50U3VydmV5LmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgQWdlbnRTdXJ2ZXkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEFnZW50U3VydmV5LmR0bCx2IDEuNTUgMjAxMS8wNC8xMSAyMTowODozNSBtYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkIC0tPgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckxhc3QiPgoKICAgIDxoMT4kVGV4dHsiQ3JlYXRlIE5ldyBTdXJ2ZXkifTwvaDE+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iU3VydmV5IiBpZD0iU3VydmV5IiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIgLz4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlN1cnZleU5ldyIgLz4KCiAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IlRpdGxlIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiVGl0bGUifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJUaXRsZSIgbmFtZT0iVGl0bGUiIHR5cGU9InRleHQiIGNsYXNzPSJXNzVwYyBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7IlRpdGxlU2VydmVyRXJyb3IifSIgdmFsdWU9IiRRRGF0YXsiVGl0bGUifSIgLz4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlBZGRSaWNoVGV4dCAtLT4KJEluY2x1ZGV7IlJpY2hUZXh0RWRpdG9yIn0KPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkUmljaFRleHQgLS0+CgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkSW50cm9kdWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkludHJvZHVjdGlvbiI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IkludHJvZHVjdGlvbiJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0iSW50cm9kdWN0aW9uIiBuYW1lPSJJbnRyb2R1Y3Rpb24iIG5hbWU9IkludHJvZHVjdGlvbiIgY2xhc3M9IlJpY2hUZXh0IFZhbGlkYXRlX1JlcXVpcmVkICRRRGF0YXsiSW50cm9kdWN0aW9uU2VydmVyRXJyb3IifSIgdGl0bGU9IlN1cnZleSBJbnRyb2R1Y3Rpb24iIHJvd3M9IjE1IiBjb2xzPSIkQ29uZmlneyJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUifSI+JERhdGF7IkludHJvZHVjdGlvbiJ9PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUFkZEludHJvZHVjdGlvbiAtLT4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTm90aWZpY2F0aW9uU2VuZGVyIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiU2VuZGVyIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iTm90aWZpY2F0aW9uU2VuZGVyIiBuYW1lPSJOb3RpZmljYXRpb25TZW5kZXIiIHR5cGU9InRleHQiIGNsYXNzPSJXNzVwYyBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7Ik5vdGlmaWNhdGlvblNlbmRlclNlcnZlckVycm9yIn0iIHZhbHVlPSIkUURhdGF7Ik5vdGlmaWNhdGlvblNlbmRlciJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTm90aWZpY2F0aW9uU3ViamVjdCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IlN1YmplY3QifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJOb3RpZmljYXRpb25TdWJqZWN0IiBuYW1lPSJOb3RpZmljYXRpb25TdWJqZWN0IiB0eXBlPSJ0ZXh0IiBjbGFzcz0iVzc1cGMgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJOb3RpZmljYXRpb25TdWJqZWN0U2VydmVyRXJyb3IifSIgdmFsdWU9IiRRRGF0YXsiTm90aWZpY2F0aW9uU3ViamVjdCJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleUFkZE5vdGlmaWNhdGlvbkJvZHkgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTm90aWZpY2F0aW9uQm9keSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IkJvZHkifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJpY2hUZXh0RmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9Ik5vdGlmaWNhdGlvbkJvZHkiIG5hbWU9Ik5vdGlmaWNhdGlvbkJvZHkiIGNsYXNzPSJSaWNoVGV4dCBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7Ik5vdGlmaWNhdGlvbkJvZHlTZXJ2ZXJFcnJvciJ9IiB0aXRsZT0iTm90aWZpY2F0aW9uIEJvZHkiIHJvd3M9IjE1IiBjb2xzPSIkQ29uZmlneyJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUifSI+JFFEYXRheyJOb3RpZmljYXRpb25Cb2R5In08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkTm90aWZpY2F0aW9uQm9keSAtLT4KCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUXVldWVzIj4kVGV4dHsiUXVldWVzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJRdWV1ZVN0cmluZyJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkSW50ZXJuYWxEZXNjcmlwdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJEZXNjcmlwdGlvbiI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IkludGVybmFsIERlc2NyaXB0aW9uIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSaWNoVGV4dEZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJEZXNjcmlwdGlvbiIgbmFtZT0iRGVzY3JpcHRpb24iIGNsYXNzPSJSaWNoVGV4dCBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7IkRlc2NyaXB0aW9uU2VydmVyRXJyb3IifSIgdGl0bGU9IkludGVybmFsIERlc2NyaXB0aW9uIiByb3dzPSIxNSIgY29scz0iJENvbmZpZ3siVGlja2V0OjpGcm9udGVuZDo6VGV4dEFyZWFOb3RlIn0iPiRRRGF0YXsiRGVzY3JpcHRpb24ifTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlBZGRJbnRlcm5hbERlc2NyaXB0aW9uIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkR2VuZXJpY0Vycm9yIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IiRRRGF0YXsiSXRlbU5hbWUifSIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkR2VuZXJpY0Vycm9yIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkR2VuZXJpY1NlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IiRRRGF0YXsiSXRlbU5hbWUifSIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkR2VuZXJpY1NlcnZlckVycm9yIC0tPgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTYXZlIn0iPiRUZXh0eyJTYXZlIn08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICA8L2Zvcm0+CgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlBZGQgLS0+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0IC0tPgo8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9IlN1cnZleSIgaWQ9IlN1cnZleSIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTdXJ2ZXlTYXZlIiAvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VydmV5SUQiIHZhbHVlPSIkUURhdGF7IlN1cnZleUlEIn0iIC8+CgogICAgPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICA8aDE+JFRleHR7IkVkaXQgR2VuZXJhbCBJbmZvIn06ICRUZXh0eyIkQ29uZmlneyJTdXJ2ZXk6Okhvb2sifSJ9JFFEYXRheyJTdXJ2ZXlOdW1iZXIifSAtICRRRGF0YXsiVGl0bGUifTwvaDE+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgPGEgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiIGhyZWY9IiMiPiRUZXh0eyJDYW5jZWwgJiBjbG9zZSB3aW5kb3cifTwvYT4KICAgICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiR2VuZXJhbCBJbmZvIn08L2gyPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJUaXRsZSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IlRpdGxlIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9IlRpdGxlIiBuYW1lPSJUaXRsZSIgdHlwZT0idGV4dCIgY2xhc3M9Ilc3NXBjIFZhbGlkYXRlX1JlcXVpcmVkICRRRGF0YXsiVGl0bGVTZXJ2ZXJFcnJvciJ9IiB2YWx1ZT0iJFFEYXRheyJUaXRsZSJ9IiAvPgogICAgICAgICAgICAgICAgPC9kaXY+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0UmljaFRleHQgLS0+CiRJbmNsdWRleyJSaWNoVGV4dEVkaXRvciJ9CjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRSaWNoVGV4dCAtLT4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRJbnRyb2R1Y3Rpb24gLS0+CiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJJbnRyb2R1Y3Rpb24iPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJJbnRyb2R1Y3Rpb24ifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJJbnRyb2R1Y3Rpb24iIG5hbWU9IkludHJvZHVjdGlvbiIgbmFtZT0iSW50cm9kdWN0aW9uIiBjbGFzcz0iUmljaFRleHQgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJJbnRyb2R1Y3Rpb25TZXJ2ZXJFcnJvciJ9IiB0aXRsZT0iU3VydmV5IEludHJvZHVjdGlvbiIgcm93cz0iMTUiIGNvbHM9IiRDb25maWd7IlRpY2tldDo6RnJvbnRlbmQ6OlRleHRBcmVhTm90ZSJ9Ij4kRGF0YXsiSW50cm9kdWN0aW9uIn08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRJbnRyb2R1Y3Rpb24gLS0+CgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTm90aWZpY2F0aW9uU2VuZGVyIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiU2VuZGVyIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9Ik5vdGlmaWNhdGlvblNlbmRlciIgbmFtZT0iTm90aWZpY2F0aW9uU2VuZGVyIiB0eXBlPSJ0ZXh0IiBjbGFzcz0iVzc1cGMgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJOb3RpZmljYXRpb25TZW5kZXJTZXJ2ZXJFcnJvciJ9IiB2YWx1ZT0iJFFEYXRheyJOb3RpZmljYXRpb25TZW5kZXIifSIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5vdGlmaWNhdGlvblN1YmplY3QiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJTdWJqZWN0In06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9Ik5vdGlmaWNhdGlvblN1YmplY3QiIG5hbWU9Ik5vdGlmaWNhdGlvblN1YmplY3QiIHR5cGU9InRleHQiIGNsYXNzPSJXNzVwYyBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7Ik5vdGlmaWNhdGlvblN1YmplY3RTZXJ2ZXJFcnJvciJ9IiB2YWx1ZT0iJFFEYXRheyJOb3RpZmljYXRpb25TdWJqZWN0In0iIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXROb3RpZmljYXRpb25Cb2R5IC0tPgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iTm90aWZpY2F0aW9uQm9keSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IkJvZHkifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJOb3RpZmljYXRpb25Cb2R5IiBuYW1lPSJOb3RpZmljYXRpb25Cb2R5IiBjbGFzcz0iUmljaFRleHQgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJOb3RpZmljYXRpb25Cb2R5U2VydmVyRXJyb3IifSIgdGl0bGU9Ik5vdGlmaWNhdGlvbiBCb2R5IiByb3dzPSIxNSIgY29scz0iJENvbmZpZ3siVGlja2V0OjpGcm9udGVuZDo6VGV4dEFyZWFOb3RlIn0iPiRRRGF0YXsiTm90aWZpY2F0aW9uQm9keSJ9PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0Tm90aWZpY2F0aW9uQm9keSAtLT4KCiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJRdWV1ZXMiPiRUZXh0eyJRdWV1ZXMifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICREYXRheyJRdWV1ZVN0cmluZyJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRJbnRlcm5hbERlc2NyaXB0aW9uIC0tPgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iRGVzY3JpcHRpb24iPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJJbnRlcm5hbCBEZXNjcmlwdGlvbiJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSaWNoVGV4dEZpZWxkIj4KICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9IkRlc2NyaXB0aW9uIiBuYW1lPSJEZXNjcmlwdGlvbiIgY2xhc3M9IlJpY2hUZXh0IFZhbGlkYXRlX1JlcXVpcmVkICRRRGF0YXsiRGVzY3JpcHRpb25TZXJ2ZXJFcnJvciJ9IiB0aXRsZT0iSW50ZXJuYWwgRGVzY3JpcHRpb24iIHJvd3M9IjE1IiBjb2xzPSIkQ29uZmlneyJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUifSI+JFFEYXRheyJEZXNjcmlwdGlvbiJ9PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0SW50ZXJuYWxEZXNjcmlwdGlvbiAtLT4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRHZW5lcmljRXJyb3IgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSIkUURhdGF7Ikl0ZW1OYW1lIn0iIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0R2VuZXJpY0Vycm9yIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFNlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgPGRpdiBpZD0iJFFEYXRheyJJdGVtTmFtZSJ9IiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFNlcnZlckVycm9yIC0tPgoKICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiU2F2ZSJ9Ij4kVGV4dHsiU2F2ZSJ9PC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9mb3JtPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0IC0tPgoKPCEtLSBkdGw6YmxvY2s6U3RhdHMgLS0+CjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CiAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgIDxoMT4kVGV4dHsiU3RhdHMgT3ZlcnZpZXcgb2YifSA6ICRUZXh0eyIkQ29uZmlneyJTdXJ2ZXk6Okhvb2sifSJ9JERhdGF7IlN1cnZleU51bWJlciJ9IC0gJERhdGF7IlRpdGxlIn0gPC9oMT4KICAgICAgICA8cD4KICAgICAgICAgICAgPGEgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiIGhyZWY9IiMiPiRUZXh0eyJDYW5jZWwgJiBjbG9zZSB3aW5kb3cifTwvYT4KICAgICAgICA8L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICA8aDI+PC9oMj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiUmVxdWVzdHMgVGFibGUifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiU2VuZCBUaW1lIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IlZvdGUgVGltZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJUaWNrZXQifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiRGV0YWlscyJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpTdGF0c1ZvdGUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGltZUxvbmd7IiREYXRheyJTZW5kVGltZSJ9In0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWVMb25neyIkRGF0YXsiVm90ZVRpbWUifSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJMaW5rWm9vbVZpZXcgQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1BZ2VudFRpY2tldFpvb207VGlja2V0SUQ9JExRRGF0YXsiVGlja2V0SUQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiVGlja2V0TnVtYmVyIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVN0YXRzRGV0YWlsO1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifTtSZXF1ZXN0SUQ9JFFEYXRheyJSZXF1ZXN0SUQifTtUaWNrZXROdW1iZXI9JFFEYXRheyJUaWNrZXROdW1iZXIifSIgY2xhc3M9IlNlZURldGFpbHMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5TZWUgRGV0YWlsczwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpTdGF0c1ZvdGUgLS0+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iRm9vdGVyIj4KICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAgUHJpbWFyeSIgdmFsdWU9IiRUZXh0eyJDbG9zZSB3aW5kb3cifSI+JFRleHR7IkNsb3NlIHdpbmRvdyJ9PC9idXR0b24+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJ2EuTGlua1pvb21WaWV3JykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgd2luZG93Lm9wZW5lci5Db3JlLlVJLlBvcHVwLkZpcmVQb3B1cEV2ZW50KCdVUkwnLCB7IFVSTDogJCh0aGlzKS5hdHRyKCdocmVmJyl9KTsKICAgICAgICB3aW5kb3cuY2xvc2UoKTsKICAgIH0pOwoKICAgICQoJ2EuSGlzdG9yeUJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIGhpc3RvcnkuYmFjaygpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwogICAgJCgnYnV0dG9uLkhpc3RvcnlCYWNrJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBoaXN0b3J5LmJhY2soKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKCi8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3RhdHMgLS0+Cgo8IS0tIGR0bDpibG9jazpTdGF0c0RldGFpbCAtLT4KPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgPGgxPiRUZXh0eyJTdXJ2ZXkgU3RhdCBEZXRhaWxzIn0gOiAkVGV4dHsiVGlja2V0In0jJERhdGF7IlRpY2tldE51bWJlciJ9IDogJENvbmZpZ3siU3VydmV5OjpIb29rIn0kRGF0YXsiU3VydmV5TnVtYmVyIn0gLSAkRGF0YXsiVGl0bGUifSA6ICA8L2gxPgogICAgICAgIDxwPgogICAgICAgICAgICA8YSBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCIgaHJlZj0iIyI+JFRleHR7IkNhbmNlbCAmIGNsb3NlIHdpbmRvdyJ9PC9hPgogICAgICAgICAgICAkVGV4dHsib3IifQogICAgICAgICAgICA8YSBjbGFzcz0iSGlzdG9yeUJhY2siIGhyZWY9IiMiPiRUZXh0eyJnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3In08L2E+CiAgICAgICAgPC9wPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgPGgyPjwvaDI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbU1lZGl1bSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkRldGFpbHMifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KPCEtLSBkdGw6YmxvY2s6U3RhdHNEZXRhaWxRdWVzdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9IiREYXRheyJDbGFzcyJ9Ij4kUURhdGF7IlF1ZXN0aW9uIn06PC9sYWJlbD4KPCEtLSBkdGw6YmxvY2s6U3RhdHNEZXRhaWxBbnN3ZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgJERhdGF7IkNsYXNzIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiQW5zd2VyIn0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlN0YXRzRGV0YWlsQW5zd2VyIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3RhdHNEZXRhaWxRdWVzdGlvbiAtLT4KICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPgogICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTdGF0cyIgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VydmV5SUQiIHZhbHVlPSIkUURhdGF7IlN1cnZleUlEIn0iIC8+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iUHJpbWFyeSIgdmFsdWU9IiRUZXh0eyJHbyBCYWNrIn0iPiRUZXh0eyJHbyBCYWNrIn08L2J1dHRvbj4KICAgICAgICA8L2Zvcm0+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJ2EuSGlzdG9yeUJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIGhpc3RvcnkuYmFjaygpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwovL11dPjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPCEtLSBkdGw6YmxvY2s6U3RhdHNEZXRhaWwgLS0+Cg==
IyAtLQojIEFnZW50U3VydmV5Wm9vbS5kdGwgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIEFnZW50U3VydmV5CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZ2VudFN1cnZleVpvb20uZHRsLHYgMS4xNyAyMDExLzExLzA3IDA5OjQ5OjM0IGpoIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlab29tIC0tPgo8ZGl2IGNsYXNzPSJNYWluQm94IEFyaWFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSI+CiAgICAgICAgPGgxIHRpdGxlPSIkUURhdGF7IlRpdGxlIn0iID4kVGV4dHsiJENvbmZpZ3siU3VydmV5OjpIb29rIn0ifSRRRGF0YXsiU3VydmV5TnVtYmVyIn0gLSAkUURhdGF7IlRpdGxlIiwiNjAifSA8L2gxPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJMYXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJTdXJ2ZXkgSW5mb3JtYXRpb24ifTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IkNyZWF0ZWQifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPiRUaW1lU2hvcnR7IiREYXRheyJDcmVhdGVUaW1lIn0ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJDcmVhdGVkIGJ5In06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iJFF1b3RleyIkRGF0YXsiQ3JlYXRlVXNlckxvZ2luIn0gKCREYXRheyJDcmVhdGVVc2VyRmlyc3RuYW1lIn0gJERhdGF7IkNyZWF0ZVVzZXJMYXN0bmFtZSJ9KSJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRdW90ZXsiJERhdGF7IkNyZWF0ZVVzZXJMb2dpbiJ9ICgkRGF0YXsiQ3JlYXRlVXNlckZpcnN0bmFtZSJ9ICREYXRheyJDcmVhdGVVc2VyTGFzdG5hbWUifSIsIjE4In0pCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJDaGFuZ2VkIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiA+JFRpbWVTaG9ydHsiJERhdGF7IkNoYW5nZVRpbWUifSJ9PC9wPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJDaGFuZ2VkIGJ5In06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iJFF1b3RleyIkRGF0YXsiQ3JlYXRlVXNlckxvZ2luIn0gKCREYXRheyJDcmVhdGVVc2VyRmlyc3RuYW1lIn0gJERhdGF7IkNyZWF0ZVVzZXJMYXN0bmFtZSJ9KSJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRdW90ZXsiJERhdGF7IkNoYW5nZVVzZXJMb2dpbiJ9ICgkRGF0YXsiQ2hhbmdlVXNlckZpcnN0bmFtZSJ9ICREYXRheyJDaGFuZ2VVc2VyTGFzdG5hbWUifSkiLCIxOCJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJTdGF0dXMifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiIHRpdGxlPSIkVGV4dHsiJERhdGF7IlN0YXR1cyJ9In0iPiRRdW90ZXsiJERhdGF7IlN0YXR1cyJ9IiwiMTgifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4gJFRleHR7IlNlbnQgcmVxdWVzdHMifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPiRRRGF0YXsiU2VuZFJlcXVlc3QifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJSZWNlaXZlZCBzdXJ2ZXlzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4kUURhdGF7IlJlcXVlc3RDb21wbGV0ZSJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWRkaXRpb25hbEluZm9ybWF0aW9uIj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIiIGNsYXNzPSJIaXN0b3J5QmFjayI+JFRleHR7IkJhY2sifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1BZ2VudFN1cnZleTtTdWJhY3Rpb249U3VydmV5RWRpdDtTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn0iIGNsYXNzPSJBc1BvcHVwIj4kVGV4dHsiRWRpdCBHZW5lcmFsIEluZm8ifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1BZ2VudFN1cnZleUVkaXRRdWVzdGlvbnM7U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9IiBjbGFzcz0iQXNQb3B1cCI+JFRleHR7IkVkaXQgUXVlc3Rpb25zIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFN0YXRzRGV0YWlscyAtLT4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRTdXJ2ZXk7U3ViYWN0aW9uPVN0YXRzO1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifSIgY2xhc3M9IkFzUG9wdXAiPiRUZXh0eyJTdGF0cyBEZXRhaWxzIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFN0YXRzRGV0YWlscyAtLT4KPCEtLSBkdGw6YmxvY2s6U3VydmV5U3RhdHVzIC0tPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iQWN0aW9uRm9ybSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJBZ2VudFN1cnZleSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlN1cnZleVN0YXR1cyIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1cnZleUlEIiB2YWx1ZT0iJFFEYXRheyJTdXJ2ZXlJRCJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7Ik5ld1N0YXR1c1N0ciJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlTdGF0dXMgLS0+CiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJTdXJ2ZXkgRGV0YWlscyJ9PC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiTnVtYmVyIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPiRRRGF0YXsiU3VydmV5TnVtYmVyIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJUaXRsZSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIiB0aXRsZT0iJFFEYXRheyJUaXRsZSJ9Ij4kUURhdGF7IlRpdGxlIiwiODAifTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IlF1ZXVlcyJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIiB0aXRsZT0iJFFEYXRheyJRdWV1ZUxpc3RTdHJpbmcifSI+JFFEYXRheyJRdWV1ZUxpc3RTdHJpbmciLCI4MCJ9ICRRRGF0YXsiTm9RdWV1ZU1lc3NhZ2UifTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlCbG9jayAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AgVG9nZ2xlIiBpZD0iJERhdGF7IlN1cnZleUZpZWxkIn1CbG9jayI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPjxhIGhyZWY9IiMiIHRpdGxlPSIkVGV4dHsiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50In0iPjxzcGFuPjwvc3Bhbj48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyIkRGF0YXsiVGl0bGUifSJ9PC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CjwhLS0gZHRsOmJsb2NrOkJvZHlIVE1MIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpZnJhbWUgd2lkdGg9IjEwMCUiIGZyYW1lYm9yZGVyPSIwIiBpZD0iSWZyYW1lU3VydmV5JERhdGF7IlN1cnZleUZpZWxkIn0iIG9ubG9hZD0iU3VydmV5LkFnZW50LlN1cnZleVpvb20uSWZyYW1lQXV0b0hlaWdodCgkKCcjSWZyYW1lU3VydmV5JERhdGF7IlN1cnZleUZpZWxkIn0nKSk7IiBzcmM9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRTdXJ2ZXlab29tO1N1YmFjdGlvbj1IVE1MVmlldztTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07U3VydmV5RmllbGQ9JFFEYXRheyJTdXJ2ZXlGaWVsZCJ9OyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvaWZyYW1lPgogICAgICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpCb2R5SFRNTCAtLT4KPCEtLSBkdGw6YmxvY2s6Qm9keVBsYWluIC0tPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldD4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJUZXh0YXJlYSI+JFRleHR7IiREYXRheyJMYWJlbCJ9In06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgVGV4dGFyZWEiPiREYXRheyJDb250ZW50In08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CjwhLS0gZHRsOmJsb2NrOkJvZHlQbGFpbiAtLT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5QmxvY2sgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIFNwYWNpbmdCb3R0b21NZWRpdW0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj48YSBocmVmPSIjIiB0aXRsZT0iJFRleHR7IlNob3cgb3IgaGlkZSB0aGUgY29udGVudCJ9Ij48c3Bhbj48L3NwYW4+PC9hPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiU3VydmV5IFJlc3VsdHMgR3JhcGgifTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKPCEtLSBkdGw6YmxvY2s6Tm9TdGF0UmVzdWx0cyAtLT4KICAgICAgICAgICAgICAgICAgICAkVGV4dHsiTm8gc3RhdCByZXN1bHRzLiJ9CjwhLS0gZHRsOmJsb2NrOk5vU3RhdFJlc3VsdHMgLS0+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0U3RhdHMgLS0+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0U3RhdHNRdWVzdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlNwYWNpbmdUb3AgU3VydmV5R3JhcGhzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUXVlc3Rpb24iIHRpdGxlPSIkRGF0YXsiUXVlc3Rpb24ifSIgPiRRRGF0YXsiUXVlc3Rpb24iLCIxMDAifTogPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRTdGF0c0Fuc3dlciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQW5zd2VyIj4kVGV4dHsiJERhdGF7IkFuc3dlciJ9In08L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlN1cnZleUdyYXBoIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlN1cnZleUdyYXBoQ29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTdXJ2ZXlHcmFwaEJhciIgc3R5bGU9IndpZHRoOiRRRGF0YXsiQW5zd2VyUGVyY2VudFRhYmxlIn0lOyI+PC9kaXYgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iU3VydmV5R3JhcGhMZXllbmQiPiRRRGF0YXsiQW5zd2VyUGVyY2VudCJ9JTwvcD4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFN0YXRzQW5zd2VyIC0tPgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRTdGF0c1F1ZXN0aW9uIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFN0YXRzIC0tPgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgJCgndWwuQWN0aW9ucyBhLkFzUG9wdXAnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuVUkuUG9wdXAuT3BlblBvcHVwICgkKHRoaXMpLmF0dHIoJ2hyZWYnKSwgJ0FjdGlvbicpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKICAgICQoJ3VsLkFjdGlvbnMgYS5IaXN0b3J5QmFjaycpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgaGlzdG9yeS5iYWNrKCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7CgogICAgJCgnI05ld1N0YXR1cycpLmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgICQodGhpcykuY2xvc2VzdCgnZm9ybScpLnN1Ym1pdCgpOwogICAgfSk7CgogICAgQ29yZS5Db25maWcuU2V0KCdTdXJ2ZXkuSFRNTFJpY2hUZXh0SGVpZ2h0RGVmYXVsdCcsICIkUURhdGF7IkhUTUxSaWNoVGV4dEhlaWdodERlZmF1bHQifSIpOwogICAgQ29yZS5Db25maWcuU2V0KCdTdXJ2ZXkuSFRNTFJpY2hUZXh0SGVpZ2h0TWF4JywgIiRRRGF0YXsiSFRNTFJpY2hUZXh0SGVpZ2h0TWF4In0iKTsKCi8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlab29tIC0tPgo=
IyAtLQojIEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucy5kdGwgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIEFnZW50U3VydmV5CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnMuZHRsLHYgMS4xMyAyMDExLzA0LzExIDIxOjA4OjU3IG1iIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRRdWVzdGlvbnMgLS0+CjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CiAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgIDxoMT4kVGV4dHsiRWRpdCBRdWVzdGlvbnMifTogJFRleHR7IiRDb25maWd7IlN1cnZleTo6SG9vayJ9In0kUURhdGF7IlN1cnZleU51bWJlciJ9IC0gJFFEYXRheyJUaXRsZSJ9PC9oMT4KICAgICAgICA8cD4KICAgICAgICAgICAgPGEgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiIGhyZWY9IiMiPiRUZXh0eyJDYW5jZWwgJiBjbG9zZSB3aW5kb3cifTwvYT4KICAgICAgICA8L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgIDwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkUXVlc3Rpb24gLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbU1lZGl1bSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkFkZCBRdWVzdGlvbiJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iU3VydmV5UXVlc3Rpb25zIiBpZD0iU3VydmV5UXVlc3Rpb25zIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iUXVlc3Rpb25BZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VydmV5SUQiIHZhbHVlPSIkUURhdGF7IlN1cnZleUlEIn0iIC8+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJRdWVzdGlvbiI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IlR5cGUgdGhlIHF1ZXN0aW9uIn06Jm5ic3A7PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJRdWVzdGlvbiIgbmFtZT0iUXVlc3Rpb24iIGNsYXNzPSJWYWxpZGF0ZV9SZXF1aXJlZCAkRGF0YXsiUXVlc3Rpb25FcnJvckNsYXNzIn0gIiBzaXplPSI2MCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJTZWxlY3Rpb25UeXBlIn0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJRdWVzdGlvbkVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJRdWVzdGlvblNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiQWRkIn0iPiRUZXh0eyJBZGQifTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkUXVlc3Rpb24gLS0+CgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIFNwYWNpbmdCb3R0b21NZWRpdW0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJTdXJ2ZXkgUXVlc3Rpb25zIn08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IlF1ZXN0aW9uIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IlR5cGUifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6U3VydmV5U3RhdHVzQ29sdW1uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJTdGF0dXMifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6U3VydmV5U3RhdHVzQ29sdW1uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJVcCJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJEb3duIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlN1cnZleURlbGV0ZUNvbHVtbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiRGVsZXRlIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlN1cnZleURlbGV0ZUNvbHVtbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6U3VydmV5Tm9RdWVzdGlvbnNTYXZlZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IiREYXRheyJDb2x1bW5zIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJObyBxdWVzdGlvbnMgc2F2ZWQgZm9yIHRoaXMgc3VydmV5LiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlOb1F1ZXN0aW9uc1NhdmVkIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5UXVlc3Rpb25zU2F2ZWQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1RdWVzdGlvbkVkaXQ7U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9O1F1ZXN0aW9uSUQ9JFFEYXRheyJRdWVzdGlvbklEIn0iID4kUURhdGF7IlF1ZXN0aW9uIiwiOTAifTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IiREYXRheyJUeXBlIn0ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1RdWVzdGlvblVwO1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifTtRdWVzdGlvbklEPSRRRGF0YXsiUXVlc3Rpb25JRCJ9IiBjbGFzcz0iQXJyb3dVcCREYXRheyJDbGFzc1VwIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiVXAifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVF1ZXN0aW9uRG93bjtTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07UXVlc3Rpb25JRD0kUURhdGF7IlF1ZXN0aW9uSUQifSIgY2xhc3M9IkFycm93RG93biREYXRheyJDbGFzc0Rvd24ifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyJEb3duIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5UXVlc3Rpb25zU2F2ZWQgLS0+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlRdWVzdGlvbnNSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1RdWVzdGlvbkVkaXQ7U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9O1F1ZXN0aW9uSUQ9JFFEYXRheyJRdWVzdGlvbklEIn0iIGNsYXNzPSIkRGF0YXsiQ2xhc3MifSI+JFFEYXRheyJRdWVzdGlvbiIsIjcwIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyIkRGF0YXsiVHlwZSJ9In0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IiREYXRheyJTdGF0dXMifSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVF1ZXN0aW9uVXA7U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9O1F1ZXN0aW9uSUQ9JFFEYXRheyJRdWVzdGlvbklEIn0iIGNsYXNzPSJBcnJvd1VwJERhdGF7IkNsYXNzVXAifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyJVcCJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249UXVlc3Rpb25Eb3duO1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifTtRdWVzdGlvbklEPSRRRGF0YXsiUXVlc3Rpb25JRCJ9IiBjbGFzcz0iQXJyb3dEb3duJERhdGF7IkNsYXNzRG93biJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IkRvd24ifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlRdWVzdGlvbnNEZWxldGVCdXR0b24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlF1ZXN0aW9uRGVsZXRlIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdXJ2ZXlJRCIgdmFsdWU9IiRRRGF0YXsiU3VydmV5SUQifSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUXVlc3Rpb25JRCIgdmFsdWU9IiRRRGF0YXsiUXVlc3Rpb25JRCJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9IlRyYXNoQ2FuIiB2YWx1ZT0iJFRleHR7IkRlbGV0ZSJ9IiA+JFRleHR7IkRlbGV0ZSJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6U3VydmV5UXVlc3Rpb25zRGVsZXRlQnV0dG9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlRdWVzdGlvbnNSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iRm9vdGVyIj4KICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAgUHJpbWFyeSIgdmFsdWU9IiRUZXh0eyJDbG9zZSB3aW5kb3cifSI+JFRleHR7IkNsb3NlIHdpbmRvdyJ9PC9idXR0b24+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJ2EuSGlzdG9yeUJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIGhpc3RvcnkuYmFjaygpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKICAgICQoJ2J1dHRvbi5DYW5jZWxDbG9zZVBvcHVwJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBoaXN0b3J5LmJhY2soKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKCi8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0UXVlc3Rpb25zIC0tPgoKCjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdCAtLT4KPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgPGgxPiRUZXh0eyJFZGl0IFF1ZXN0aW9uIn06ICRUZXh0eyIkRGF0YXsiUXVlc3Rpb24ifSJ9PC9oMT4KICAgICAgICA8cD4KICAgICAgICAgICAgPGEgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiIGhyZWY9IiMiPiRUZXh0eyJDYW5jZWwgJiBjbG9zZSB3aW5kb3cifTwvYT4KICAgICAgICAgICAgJFRleHR7Im9yIn0KICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdXJ2ZXlJRD0kRGF0YXsiU3VydmV5SUQifSIgPiRUZXh0eyJnbyBiYWNrIHRvIHF1ZXN0aW9ucyJ9PC9hPgogICAgICAgIDwvcD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIFNwYWNpbmdCb3R0b21NZWRpdW0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJFZGl0IFF1ZXN0aW9uIn08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJTdXJ2ZXlRdWVzdGlvbiIgaWQ9IlN1cnZleVF1ZXN0aW9uIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iUXVlc3Rpb25TYXZlIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlF1ZXN0aW9uSUQiIHZhbHVlPSIkUURhdGF7IlF1ZXN0aW9uSUQifSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdXJ2ZXlJRCIgdmFsdWU9IiRRRGF0YXsiU3VydmV5SUQifSIgLz4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlF1ZXN0aW9uIiBjbGFzcz0iTWFuZGF0b3J5Ij48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiUXVlc3Rpb24ifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNjAiIG5hbWU9IlF1ZXN0aW9uIiBpZD0iUXVlc3Rpb24iIHZhbHVlPSIkUURhdGF7IlF1ZXN0aW9uIn0iIGNsYXNzPSJWYWxpZGF0ZV9SZXF1aXJlZCAkRGF0YXsiUXVlc3Rpb25TZXJ2ZXJFcnJvciJ9IiAvPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlF1ZXN0aW9uRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlF1ZXN0aW9uU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlNhdmUifSI+JFRleHR7IlNhdmUifTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbU1lZGl1bSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IlBvc3NpYmxlIEFuc3dlcnMgRm9yIn06ICRUZXh0eyIkRGF0YXsiVHlwZSJ9In08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdEFkZEFuc3dlciAtLT4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iQW5zd2VyQWRkIiBpZD0iQW5zd2VyQWRkIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iQW5zd2VyQWRkIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlF1ZXN0aW9uSUQiIHZhbHVlPSIkUURhdGF7IlF1ZXN0aW9uSUQifSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdXJ2ZXlJRCIgdmFsdWU9IiRRRGF0YXsiU3VydmV5SUQifSIgLz4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkFuc3dlciIgY2xhc3M9Ik1hbmRhdG9yeSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IkFkZCBBbnN3ZXIifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkFuc3dlciIgbmFtZT0iQW5zd2VyIiBzaXplPSI2MCIgY2xhc3M9IlZhbGlkYXRlX1JlcXVpcmVkICREYXRheyJBbnN3ZXJTZXJ2ZXJFcnJvciJ9ICIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiQWRkIn0iPiRUZXh0eyJBZGQifTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkFuc3dlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBbnN3ZXJTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9mb3JtPgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRBZGRBbnN3ZXIgLS0+Cgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRUYWJsZSAtLT4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4gJFRleHR7IkRlc2NyaXB0aW9uIn0gPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4gJFRleHR7IlVwIn0gPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4gJFRleHR7IkRvd24ifSA8L3RoPgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRUYWJsZURlbGV0ZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4gJFRleHR7IkRlbGV0ZSJ9IDwvdGg+CjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdFRhYmxlRGVsZXRlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpOb0Fuc3dlcnNTYXZlZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IiREYXRheyJDb2x1bW5zIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJObyBxdWVzdGlvbnMgc2F2ZWQgZm9yIHRoaXMgc3VydmV5LiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpOb0Fuc3dlcnNTYXZlZCAtLT4KCjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdFJhZGlvIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249QW5zd2VyRWRpdDtTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07UXVlc3Rpb25JRD0kUURhdGF7IlF1ZXN0aW9uSUQifTtBbnN3ZXJJRD0kUURhdGF7IkFuc3dlcklEIn0iPiAkUURhdGF7IkFuc3dlciIsIjkwIn0gPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1BbnN3ZXJVcDtTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07UXVlc3Rpb25JRD0kUURhdGF7IlF1ZXN0aW9uSUQifTtBbnN3ZXJJRD0kUURhdGF7IkFuc3dlcklEIn0iIGNsYXNzPSJBcnJvd1VwJERhdGF7IkNsYXNzVXAifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyJVcCJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249QW5zd2VyRG93bjtTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07UXVlc3Rpb25JRD0kUURhdGF7IlF1ZXN0aW9uSUQifTtBbnN3ZXJJRD0kUURhdGF7IkFuc3dlcklEIn0iIGNsYXNzPSJBcnJvd0Rvd24kRGF0YXsiQ2xhc3NEb3duIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiRG93biJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdFJhZGlvRGVsZXRlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJBbnN3ZXJEZWxldGUiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1cnZleUlEIiB2YWx1ZT0iJFFEYXRheyJTdXJ2ZXlJRCJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJRdWVzdGlvbklEIiB2YWx1ZT0iJFFEYXRheyJRdWVzdGlvbklEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFuc3dlcklEIiB2YWx1ZT0iJFFEYXRheyJBbnN3ZXJJRCJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9IlRyYXNoQ2FuIiB2YWx1ZT0iJFRleHR7IkRlbGV0ZSJ9Ij4kVGV4dHsiRGVsZXRlIn08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRSYWRpb0RlbGV0ZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0UmFkaW8gLS0+Cgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRDaGVja2JveCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPUFuc3dlckVkaXQ7U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9O1F1ZXN0aW9uSUQ9JFFEYXRheyJRdWVzdGlvbklEIn07QW5zd2VySUQ9JFFEYXRheyJBbnN3ZXJJRCJ9Ij4kUURhdGF7IkFuc3dlciJ9PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1BbnN3ZXJVcDtTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07UXVlc3Rpb25JRD0kUURhdGF7IlF1ZXN0aW9uSUQifTtBbnN3ZXJJRD0kUURhdGF7IkFuc3dlcklEIn0iIGNsYXNzPSJBcnJvd1VwJERhdGF7IkNsYXNzVXAifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyJVcCJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249QW5zd2VyRG93bjtTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07UXVlc3Rpb25JRD0kUURhdGF7IlF1ZXN0aW9uSUQifTtBbnN3ZXJJRD0kUURhdGF7IkFuc3dlcklEIn0iIGNsYXNzPSJBcnJvd0Rvd24kRGF0YXsiQ2xhc3NEb3duIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiRG93biJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdENoZWNrYm94RGVsZXRlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJBbnN3ZXJEZWxldGUiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1cnZleUlEIiB2YWx1ZT0iJFFEYXRheyJTdXJ2ZXlJRCJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJRdWVzdGlvbklEIiB2YWx1ZT0iJFFEYXRheyJRdWVzdGlvbklEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFuc3dlcklEIiB2YWx1ZT0iJFFEYXRheyJBbnN3ZXJJRCJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJEZWxldGUifSIgY2xhc3M9IlRyYXNoQ2FuIiA+ICRUZXh0eyJEZWxldGUifSA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRDaGVja2JveERlbGV0ZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0Q2hlY2tib3ggLS0+Cgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRZZXNubyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiAkVGV4dHsiWWVzIn0gPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSIiIGNsYXNzPSJBcnJvd1VwRGlzYWJsZWQiPjxzcGFuPiRUZXh0eyJVcCJ9PC9zcGFuPjwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9IiIgY2xhc3M9IkFycm93RG93bkRpc2FibGVkIj48c3Bhbj4kVGV4dHsiRG93biJ9PC9zcGFuPjwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+ICRUZXh0eyJObyJ9IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0iIiBjbGFzcz0iQXJyb3dVcERpc2FibGVkIiA+PHNwYW4+JFRleHR7IlVwIn08L3NwYW4+PC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0iIiBjbGFzcz0iQXJyb3dEb3duRGlzYWJsZWQiID48c3Bhbj4kVGV4dHsiRG93biJ9PC9zcGFuPjwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRZZXNubyAtLT4KCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdFRhYmxlIC0tPgoKCjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdFRleHRBcmVhIC0tPgogICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IlRoaXMgZG9lc24ndCBoYXZlIHNldmVyYWwgYW5zd2VycywgYSB0ZXh0YXJlYSB3aWxsIGJlIGRpc3BsYXllZC4ifQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9maWVsZHNldD4KPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0VGV4dEFyZWEgLS0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPgogICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdXJ2ZXlJRCIgdmFsdWU9IiRRRGF0YXsiU3VydmV5SUQifSIgLz4KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJQcmltYXJ5IiB2YWx1ZT0iJFRleHR7IkdvIEJhY2sifSI+JFRleHR7IkdvIEJhY2sifTwvYnV0dG9uPgogICAgICAgIDwvZm9ybT4KICAgIDwvZGl2Pgo8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0IC0tPgoKPCEtLSBkdGw6YmxvY2s6QW5zd2VyRWRpdCAtLT4KPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJBbnN3ZXJFZGl0IiBpZD0iQW5zd2VyRWRpdCIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJBbnN3ZXJTYXZlIiAvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQW5zd2VySUQiIHZhbHVlPSIkUURhdGF7IkFuc3dlcklEIn0iIC8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJRdWVzdGlvbklEIiB2YWx1ZT0iJFFEYXRheyJRdWVzdGlvbklEIn0iIC8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdXJ2ZXlJRCIgdmFsdWU9IiRRRGF0YXsiU3VydmV5SUQifSIgLz4KICAgIDxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CgogICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgIDxoMT4kVGV4dHsiRWRpdCBBbnN3ZXIifTogJERhdGF7IkFuc3dlciJ9IDwvaDE+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgPGEgY2xhc3M9IkNhbmNlbENsb3NlUG9wdXAiIGhyZWY9IiMiPiRUZXh0eyJDYW5jZWwgJiBjbG9zZSB3aW5kb3cifTwvYT4KICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1RdWVzdGlvbkVkaXQ7UXVlc3Rpb25JRD0kRGF0YXsiUXVlc3Rpb25JRCJ9O1N1cnZleUlEPSREYXRheyJTdXJ2ZXlJRCJ9Ij4kVGV4dHsiZ28gYmFjayB0byBlZGl0IHF1ZXN0aW9uIn08L2E+CiAgICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJFZGl0IEFuc3dlciJ9PC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQW5zd2VyIiBjbGFzcz0iTWFuZGF0b3J5Ij48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiQW5zd2VyIn06PC9sYWJlbD4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI2MCIgaWQ9IkFuc3dlciIgbmFtZT0iQW5zd2VyIiB2YWx1ZT0iJFFEYXRheyJBbnN3ZXIifSIgY2xhc3M9IlZhbGlkYXRlX1JlcXVpcmVkICREYXRheyJBbnN3ZXJTZXJ2ZXJFcnJvciJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQW5zd2VyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkFuc3dlclNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9IlByaW1hcnkiIHZhbHVlPSIkVGV4dHsiU2F2ZSJ9Ij4kVGV4dHsiU2F2ZSJ9PC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9mb3JtPgo8IS0tIGR0bDpibG9jazpBbnN3ZXJFZGl0IC0tPgo=
IyAtLQojIFB1YmxpY1N1cnZleS5kdGwgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIFB1YmxpY1N1cnZleQojIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogUHVibGljU3VydmV5LmR0bCx2IDEuMjIgMjAxMS8wMi8wMyAxNzo0NzoxMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6UHVibGljU3VydmV5IC0tPgo8ZGl2IGNsYXNzPSJDb250ZW50IEFSSUFSb2xlTWFpbiIgaWQ9Ik1haW5Cb3giPgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDI+JFRleHR7IlN1cnZleSJ9OiAkRGF0YXsiVGl0bGUifTwvaDI+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJTdXJ2ZXlCbG9jayI+CiAgICAgICAgPGRpdiBjbGFzcz0iU3VydmV5QmxvY2tIZWFkZXIiPgogICAgICAgICAgICAkVGV4dHsiSW50cm9kdWN0aW9uIn0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgJERhdGF7IkludHJvZHVjdGlvbiJ9CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIgLz4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJQdWJsaWNTdXJ2ZXlWb3RlIiAvPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlB1YmxpY1N1cnZleUtleSIgdmFsdWU9IiRRRGF0YXsiUHVibGljU3VydmV5S2V5In0iIC8+CiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJTdXJ2ZXkiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJTdXJ2ZXlCbG9ja0hlYWRlciI+CiAgICAgICAgICAgICAgICAkVGV4dHsiUGxlYXNlIGFuc3dlciB0aGUgbmV4dCBxdWVzdGlvbnMifQogICAgICAgICAgICA8L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOlB1YmxpY1F1ZXN0aW9ucyAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iUXVlc3Rpb25Db250YWluZXIiPgo8IS0tIGR0bDpibG9jazpQdWJsaWNBbnN3ZXJZZXNObyAtLT4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJRdWVzdGlvbiI+ICREYXRheyJRdWVzdGlvbiJ9IDwvZGl2PgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBpZD0iUHVibGljU3VydmV5Vm90ZTEkUURhdGF7IlF1ZXN0aW9uSUQifVllcyIgbmFtZT0iUHVibGljU3VydmV5Vm90ZTFbJFFEYXRheyJRdWVzdGlvbklEIn1dIiB2YWx1ZT0iWWVzIiAvPgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJBbnN3ZXIiIGZvcj0iUHVibGljU3VydmV5Vm90ZTEkUURhdGF7IlF1ZXN0aW9uSUQifVllcyI+JFRleHR7IlllcyJ9PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJQdWJsaWNTdXJ2ZXlWb3RlMSRRRGF0YXsiUXVlc3Rpb25JRCJ9Tm8iIG5hbWU9IlB1YmxpY1N1cnZleVZvdGUxWyRRRGF0YXsiUXVlc3Rpb25JRCJ9XSIgdmFsdWU9Ik5vIiAvPgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJBbnN3ZXIiIGZvcj0iUHVibGljU3VydmV5Vm90ZTEkUURhdGF7IlF1ZXN0aW9uSUQifU5vIj4kVGV4dHsiTm8ifTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlB1YmxpY0Fuc3dlclllc05vIC0tPgoKPCEtLSBkdGw6YmxvY2s6UHVibGljQW5zd2VyUmFkaW8gLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJRdWVzdGlvbiI+ICREYXRheyJRdWVzdGlvbiJ9IDwvZGl2Pgo8IS0tIGR0bDpibG9jazpQdWJsaWNBbnN3ZXJSYWRpb2IgLS0+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIGlkPSJQdWJsaWNTdXJ2ZXlWb3RlMiRRRGF0YXsiUXVlc3Rpb25JRCJ9JFFEYXRheyJBbnN3ZXJJRCJ9IiBuYW1lPSJQdWJsaWNTdXJ2ZXlWb3RlMlskUURhdGF7IlF1ZXN0aW9uSUQifV0iIHZhbHVlPSIkUURhdGF7IkFuc3dlcklEIn0iIC8+CiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9IkFuc3dlciIgZm9yPSJQdWJsaWNTdXJ2ZXlWb3RlMiRRRGF0YXsiUXVlc3Rpb25JRCJ9JFFEYXRheyJBbnN3ZXJJRCJ9Ij4kUURhdGF7IkFuc3dlciJ9PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHVibGljQW5zd2VyUmFkaW9iIC0tPgo8IS0tIGR0bDpibG9jazpQdWJsaWNBbnN3ZXJSYWRpbyAtLT4KCjwhLS0gZHRsOmJsb2NrOlB1YmxpY0Fuc3dlckNoZWNrYm94IC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUXVlc3Rpb24iPiAkRGF0YXsiUXVlc3Rpb24ifSA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHVibGljQW5zd2VyQ2hlY2tib3hiIC0tPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iUHVibGljU3VydmV5Vm90ZTMkUURhdGF7IkFuc3dlcklEIn0iIG5hbWU9IlB1YmxpY1N1cnZleVZvdGUzWyRRRGF0YXsiQW5zd2VySUQifV0iIHZhbHVlPSJZZXMiLz4KICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iQW5zd2VyIiBmb3I9IlB1YmxpY1N1cnZleVZvdGUzJFFEYXRheyJBbnN3ZXJJRCJ9Ij4kUURhdGF7IkFuc3dlciJ9PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHVibGljQW5zd2VyQ2hlY2tib3hiIC0tPgo8IS0tIGR0bDpibG9jazpQdWJsaWNBbnN3ZXJDaGVja2JveCAtLT4KCjwhLS0gZHRsOmJsb2NrOlB1YmxpY0Fuc3dlclRleHRhcmVhIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUXVlc3Rpb24iPiAkRGF0YXsiUXVlc3Rpb24ifSA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UmljaFRleHQtLT4KICAgICAgICAgICAgICAgICRJbmNsdWRleyJDdXN0b21lclJpY2hUZXh0RWRpdG9yIn0KPCEtLSBkdGw6YmxvY2s6UmljaFRleHQtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJpY2hUZXh0QW5zd2VyJFFEYXRheyJBbnN3ZXJJRCJ9Ij4KICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgdGl0bGU9IiREYXRheyJRdWVzdGlvbiJ9IiBpZD0iUmljaFRleHQkUURhdGF7IlF1ZXN0aW9uSUQifSIgbmFtZT0iUHVibGljU3VydmV5Vm90ZTRbJFFEYXRheyJRdWVzdGlvbklEIn1dIiBjbGFzcz0iUmljaFRleHQgRG9udFByaW50IiByb3dzPSIxNSIgY29scz0iJENvbmZpZ3siVGlja2V0OjpGcm9udGVuZDo6VGV4dEFyZWFOb3RlIn0iPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHVibGljQW5zd2VyVGV4dGFyZWEgLS0+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpQdWJsaWNRdWVzdGlvbnMgLS0+CiAgICAgICAgPC9maWVsZHNldD4KICAgICAgICA8ZGl2IGNsYXNzPSJBY3Rpb25Sb3ciIGlkPSJCb3R0b21BY3Rpb25Sb3ciPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiRmluaXNoIn0iPiAkVGV4dHsiRmluaXNoIn0gPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICA8L2Zvcm0+CjwvZGl2Pgo8IS0tIGR0bDpibG9jazpQdWJsaWNTdXJ2ZXkgLS0+Cgo8IS0tIGR0bDpibG9jazpQdWJsaWNTdXJ2ZXlNZXNzYWdlIC0tPgo8ZGl2IGlkPSJNYWluQm94IiBjbGFzcz0iVGlja2V0Q29tcG9zZSBBUklBUm9sZU1haW4iPgogICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICA8aDI+ICRUZXh0eyIkRGF0YXsiTWVzc2FnZVR5cGUifSJ9IDwvaDI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgIDxoND4gJFRleHR7IiREYXRheyJNZXNzYWdlSGVhZGVyIn0ifSA8L2g0PgogICAgICAgICAgICA8cCBjbGFzcz0iU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAkVGV4dHsiJERhdGF7Ik1lc3NhZ2UifSJ9CiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpTaG93QW5zd2Vyc0J1dHRvbiAtLT4KICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iU2hvd1ZvdGVEYXRhIiAvPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUHVibGljU3VydmV5S2V5IiB2YWx1ZT0iJFFEYXRheyJQdWJsaWNTdXJ2ZXlLZXkifSIgLz4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiA+JFRleHR7IlNob3cgbXkgYW5zd2VycyJ9PC9idXR0b24+CiAgICAgICAgICAgIDwvZm9ybT4KPCEtLSBkdGw6YmxvY2s6U2hvd0Fuc3dlcnNCdXR0b24gLS0+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlB1YmxpY1N1cnZleU1lc3NhZ2UgLS0+Cgo8IS0tIGR0bDpibG9jazpQdWJsaWNTdXJ2ZXlWb3RlRGF0YSAtLT4KPGRpdiBjbGFzcz0iQ29udGVudCBBUklBUm9sZU1haW4iIGlkPSJNYWluQm94Ij4KICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgPGgyPlRoZXNlIGFyZSB5b3VyIGFuc3dlcnM6PC9oMj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iU3VydmV5QmxvY2siPgogICAgICAgIDxkaXYgY2xhc3M9IlN1cnZleUJsb2NrSGVhZGVyIj4KICAgICAgICAgICAgJFRleHR7IlN1cnZleSBUaXRsZSJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgIDxoMj4kVGV4dHsiU3VydmV5In06ICREYXRheyJUaXRsZSJ9PC9oMj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IlN1cnZleUJsb2NrIj4KICAgICAgICA8ZGl2IGNsYXNzPSJTdXJ2ZXlCbG9ja0hlYWRlciI+CiAgICAgICAgICAgICRUZXh0eyJJbnRyb2R1Y3Rpb24ifQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAkRGF0YXsiSW50cm9kdWN0aW9uIn0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgIDxmaWVsZHNldCBjbGFzcz0iU3VydmV5Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJTdXJ2ZXlCbG9ja0hlYWRlciI+CiAgICAgICAgICAgICRUZXh0eyJUaGVzZSBhcmUgeW91ciBhbnN3ZXJzLiJ9CiAgICAgICAgPC9kaXY+Cgo8IS0tIGR0bDpibG9jazpQdWJsaWNTdXJ2ZXlWb3RlUXVlc3Rpb24gLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iUXVlc3Rpb25Db250YWluZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJRdWVzdGlvbiI+JFFEYXRheyJRdWVzdGlvbiJ9OjwvZGl2Pgo8IS0tIGR0bDpibG9jazpQdWJsaWNTdXJ2ZXlWb3RlQW5zd2VyIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJBbnN3ZXIiPgogICAgICAgICAgICAgICAgJERhdGF7IkFuc3dlciJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlB1YmxpY1N1cnZleVZvdGVBbnN3ZXIgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHVibGljU3VydmV5Vm90ZVF1ZXN0aW9uIC0tPgogICAgPC9maWVsZHNldD4KPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlB1YmxpY1N1cnZleVZvdGVEYXRhIC0tPgo=
IyAtLQojIEFnZW50U3VydmV5T3ZlcnZpZXdTbWFsbC5kdGwgLSBodG1sIGZvciBjaGFuZ2Ugb3ZlcnZpZXcgdGFibGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEFnZW50U3VydmV5T3ZlcnZpZXdTbWFsbC5kdGwsdiAxLjQgMjAxMS8wNC8xMSAyMTowOToyNSBtYiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICBDb3JlLlVJLkFjdGlvblJvdy5Jbml0KCk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgoKPGRpdiBpZD0iT3ZlcnZpZXdCb2R5IiBjbGFzcz0iT3ZlcnZpZXcgRml4ZWRIZWFkZXIiPgo8IS0tIGR0bDpibG9jazpOb0RhdGFGb3VuZE1zZyAtLT4KICAgIDxkaXYgaWQ9IkVtcHR5TWVzc2FnZVNtYWxsIj4KICAgICAgICAkVGV4dHsiTm8gZGF0YSBmb3VuZC4ifQogICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk5vRGF0YUZvdW5kTXNnIC0tPgoKICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0ibWF0cml4Ij4KICAgICAgICA8dGFibGUgaWQ9IkZpeGVkVGFibGUiIGNsYXNzPSJUYWJsZVNtYWxsIiBzdW1tYXJ5PSJBIGdlbmVyaWMgU3VydmV5IHRhYmxlIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgPHRyPgo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXJIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJOdW1iZXIgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PU51bWJlcjtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IiRDb25maWd7IlN1cnZleTo6SG9vayJ9In08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTnVtYmVySGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRUaXRsZUhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlRpdGxlICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJMaW5rU29ydCJ9O1NvcnRCeT1UaXRsZTtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IlRpdGxlIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkVGl0bGVIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZEludHJvZHVjdGlvbkhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkludHJvZHVjdGlvbiAkUURhdGF7IkNTUyJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTskRGF0YXsiTGlua1NvcnQifTtTb3J0Qnk9SW50cm9kdWN0aW9uO09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiSW50cm9kdWN0aW9uIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkSW50cm9kdWN0aW9uSGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmREZXNjcmlwdGlvbkhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkRlc2NyaXB0aW9uICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJMaW5rU29ydCJ9O1NvcnRCeT1EZXNjcmlwdGlvbjtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IkRlc2NyaXB0aW9uIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkRGVzY3JpcHRpb25IZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvblNlbmRlckhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ik5vdGlmaWNhdGlvblNlbmRlciAkUURhdGF7IkNTUyJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTskRGF0YXsiTGlua1NvcnQifTtTb3J0Qnk9Tm90aWZpY2F0aW9uU2VuZGVyO09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiTm90aWZpY2F0aW9uIFNlbmRlciJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvblNlbmRlckhlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTm90aWZpY2F0aW9uU3ViamVjdEhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ik5vdGlmaWNhdGlvblN1YmplY3QgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PU5vdGlmaWNhdGlvblN1YmplY3Q7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJOb3RpZmljYXRpb24gU3ViamVjdCJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvblN1YmplY3RIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvbkJvZHlIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJOb3RpZmljYXRpb25Cb2R5ICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJMaW5rU29ydCJ9O1NvcnRCeT1Ob3RpZmljYXRpb25Cb2R5O09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiTm90aWZpY2F0aW9uIEJvZHkifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmROb3RpZmljYXRpb25Cb2R5SGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRTdGF0dXNIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJTdGF0dXMgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PVN0YXR1cztPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IlN0YXR1cyJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZFN0YXR1c0hlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3JlYXRlVGltZUhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNyZWF0ZVRpbWUgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PUNyZWF0ZVRpbWU7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJDcmVhdGVkIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3JlYXRlVGltZUhlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3JlYXRlQnlIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDcmVhdGVCeSAkUURhdGF7IkNTUyJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTskRGF0YXsiTGlua1NvcnQifTtTb3J0Qnk9Q3JlYXRlQnk7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJDcmVhdGVkIGJ5In08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3JlYXRlQnlIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENoYW5nZVRpbWVIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJDaGFuZ2VUaW1lICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJMaW5rU29ydCJ9O1NvcnRCeT1DaGFuZ2VUaW1lO09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiQ2hhbmdlZCJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENoYW5nZVRpbWVIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENoYW5nZUJ5SGVhZGVyIC0tPgogICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0iQ2hhbmdlQnkgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PUNoYW5nZUJ5O09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiQ2hhbmdlZCBCeSJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENoYW5nZUJ5SGVhZGVyIC0tPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpSZWNvcmQgLS0+CiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9Ik1hc3RlckFjdGlvbiI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlckxpbmtTdGFydCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1BZ2VudFN1cnZleVpvb207U3VydmV5SUQ9JExRRGF0YXsiU3VydmV5SUQifSIgdGl0bGU9IiRMUURhdGF7IlN1cnZleU51bWJlciJ9IiBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlckxpbmtTdGFydCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiU3VydmV5TnVtYmVyIn0KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTnVtYmVyTGlua0VuZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXJMaW5rRW5kIC0tPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkVGl0bGUgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkUURhdGF7IlRpdGxlIn0iPiRRRGF0YXsiVGl0bGUiLCI0MCJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkVGl0bGUgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZEludHJvZHVjdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRRRGF0YXsiSW50cm9kdWN0aW9uIn0iPiRRRGF0YXsiSW50cm9kdWN0aW9uIiwiNDAifTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZEludHJvZHVjdGlvbiAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkRGVzY3JpcHRpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkUURhdGF7IkRlc2NyaXB0aW9uIn0iPiRRRGF0YXsiRGVzY3JpcHRpb24iLCI0MCJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkRGVzY3JpcHRpb24gLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvblNlbmRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRRRGF0YXsiTm90aWZpY2F0aW9uU2VuZGVyIn0iPiRRRGF0YXsiTm90aWZpY2F0aW9uU2VuZGVyIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmROb3RpZmljYXRpb25TZW5kZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvblN1YmplY3QgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkUURhdGF7Ik5vdGlmaWNhdGlvblN1YmplY3QifSI+JFFEYXRheyJOb3RpZmljYXRpb25TdWJqZWN0IiwiNDAifTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvblN1YmplY3QgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvbkJvZHkgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkUURhdGF7Ik5vdGlmaWNhdGlvbkJvZHkifSI+JFFEYXRheyJOb3RpZmljYXRpb25Cb2R5IiwiNDAifTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvbkJvZHkgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZFN0YXR1cyAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRUZXh0eyIkRGF0YXsiU3RhdHVzIn0ifSI+JFRleHR7IiREYXRheyJTdGF0dXMifSJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkU3RhdHVzIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDcmVhdGVUaW1lIC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iJFRpbWVMb25neyIkUURhdGF7IkNyZWF0ZVRpbWUifSJ9Ij4kVGltZUxvbmd7IiRRRGF0YXsiQ3JlYXRlVGltZSJ9In08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDcmVhdGVUaW1lIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDcmVhdGVCeSAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRRRGF0YXsiQ3JlYXRlVXNlckxvZ2luIn0gJFFEYXRheyJDcmVhdGVMZWZ0UGFyZW50aGVzaXMifSRRRGF0YXsiQ3JlYXRlVXNlckZpcnN0bmFtZSJ9ICRRRGF0YXsiQ3JlYXRlVXNlckxhc3RuYW1lIn0kUURhdGF7IkNyZWF0ZVJpZ2h0UGFyZW50aGVzaXMifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IkNyZWF0ZVVzZXJMb2dpbiIsIjE1In0gJFFEYXRheyJDcmVhdGVMZWZ0UGFyZW50aGVzaXMifSRRdW90ZXsiJERhdGF7IkNyZWF0ZVVzZXJGaXJzdG5hbWUifSIsICIxNSJ9ICRRdW90ZXsiJERhdGF7IkNyZWF0ZVVzZXJMYXN0bmFtZSJ9IiwiMTUifSRRRGF0YXsiQ3JlYXRlUmlnaHRQYXJlbnRoZXNpcyJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZENyZWF0ZUJ5IC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDaGFuZ2VUaW1lIC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iJFRpbWVMb25neyIkUURhdGF7IkNoYW5nZVRpbWUifSJ9Ij4kVGltZUxvbmd7IiRRRGF0YXsiQ2hhbmdlVGltZSJ9In08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDaGFuZ2VUaW1lIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDaGFuZ2VCeSAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRRRGF0YXsiQ2hhbmdlVXNlckxvZ2luIn0gJFFEYXRheyJDaGFuZ2VMZWZ0UGFyZW50aGVzaXMifSRRRGF0YXsiQ2hhbmdlVXNlckZpcnN0bmFtZSJ9ICRRRGF0YXsiQ2hhbmdldFVzZXJMYXN0bmFtZSJ9JFFEYXRheyJDaGFuZ2VSaWdodFBhcmVudGhlc2lzIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJDaGFuZ2VVc2VyTG9naW4iLCIxNSJ9ICRRRGF0YXsiQ2hhbmdlTGVmdFBhcmVudGhlc2lzIn0kUXVvdGV7IiREYXRheyJDaGFuZ2VVc2VyRmlyc3RuYW1lIn0iLCAiMTUifSAkUXVvdGV7IiREYXRheyJDaGFuZ2VVc2VyTGFzdG5hbWUifSIsIjE1In0kUURhdGF7IkNoYW5nZVJpZ2h0UGFyZW50aGVzaXMifQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDaGFuZ2VCeSAtLT4KICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlJlY29yZCAtLT4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPgogICAgPC9mb3JtPgo8L2Rpdj4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgQ29yZS5VSS5Jbml0VGFibGVIZWFkKCQoJyNGaXhlZFRhYmxlIHRoZWFkJyksICQoJyNGaXhlZFRhYmxlIHRib2R5JykpOwogICAgQ29yZS5VSS5TdGF0aWNUYWJsZUNvbnRyb2woJCgnI092ZXJ2aWV3Q29udHJvbCcpLmFkZCgkKCcjT3ZlcnZpZXdCb2R5JykpKTsKICAgICQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9ICQodGhpcykuZmluZCgnLk1hc3RlckFjdGlvbkxpbmsnKS5hdHRyKCdocmVmJyk7CiAgICB9KTsKICAgICQod2luZG93KS5yZXNpemUoZnVuY3Rpb24oKSB7CiAgICAgICAgQ29yZS5VSS5BZGp1c3RUYWJsZUhlYWQoJCgnI092ZXJ2aWV3SGVhZGVyIHRoZWFkJyksICQoJyNPdmVydmlld0JvZHkgdGJvZHknKSk7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+Cg==
IyAtLQojIEFnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXIuZHRsIC0gaHRtbCBmb3IgY2hhbmdlIG92ZXJ2aWV3IHRhYmxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZ2VudFN1cnZleU92ZXJ2aWV3TmF2QmFyLmR0bCx2IDEuMyAyMDExLzA0LzEzIDEwOjQ0OjE1IG1iIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyIC0tPgo8ZGl2IGNsYXNzPSJPdmVydmlld0JveCBBUklBUm9sZU1haW4gJFFEYXRheyJWaWV3In0iPgogICAgPGgxPiRRRGF0YXsiVGl0bGVOYW1lIn06ICRRRGF0YXsiVGl0bGVWYWx1ZSJ9PC9oMT4KCiAgICAkRGF0YXsiRGF0YUluVGhlTWlkZGxlIn0KCiAgICA8ZGl2IGNsYXNzPSJPdmVydmlld0NvbnRyb2wiIGlkPSJPdmVydmlld0NvbnRyb2wiPgogICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhckZpbHRlciAtLT4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iVGFicyI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbSAtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWQgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJBY3RpdmUgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkZpbHRlckxpbmsifUZpbHRlcj0kTFFEYXRheyJGaWx0ZXIifSI+JFRleHR7IiREYXRheyJOYW1lIn0ifTxzcGFuPiRRRGF0YXsiQ291bnQifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWQgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkTm90IC0tPgogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkZpbHRlckxpbmsifUZpbHRlcj0kTFFEYXRheyJGaWx0ZXIifSI+JFRleHR7IiREYXRheyJOYW1lIn0ifTxzcGFuPiRRRGF0YXsiQ291bnQifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWROb3QgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNwbGl0IC0tPgogICAgICAgICAgICAgICAgICAgIC0KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU3BsaXQgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbSAtLT4KICAgICAgICAgICAgICAgIDwvdWw+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVyIC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclBhZ2VCYWNrIC0tPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJUYWJzIj4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJTdXJ2ZXlTZWFyY2giIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtCYWNrIn0iPiRUZXh0eyJDaGFuZ2Ugc2VhcmNoIG9wdGlvbnMifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNTdXJ2ZXlTZWFyY2gnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuQWdlbnQuU2VhcmNoLk9wZW5TZWFyY2hEaWFsb2coICdBZ2VudFN1cnZleVNlYXJjaCcsICckUURhdGF7IlByb2ZpbGUifScgKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclBhZ2VCYWNrIC0tPgoKPCEtLSBkdGw6YmxvY2s6Q29udGV4dFNldHRpbmdzIC0tPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJDb250ZXh0RnVuY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IkNvbnRleHRTZXR0aW5ncyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGlkPSJTaG93Q29udGV4dFNldHRpbmdzRGlhbG9nIiB0aXRsZT0iJFRleHR7IkNvbnRleHQgU2V0dGluZ3MifSI+PHNwYW4+JFRleHR7IkNvbnRleHQgU2V0dGluZ3MifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICAgICAgPGRpdiBpZD0iQ29udGV4dFNldHRpbmdzRGlhbG9nQ29udGFpbmVyIiBjbGFzcz0iSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGlkPSJDb250ZXh0U2V0dGluZ3NEaWFsb2ciPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSJBZ2VudFByZWZlcmVuY2VzIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlVwZGF0ZSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJHcm91cCIgdmFsdWU9IiRRRGF0YXsiR3JvdXAifSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJSZWRpcmVjdFVSTCIgdmFsdWU9IiRRRGF0YXsiUmVxdWVzdGVkVVJMIn0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iJFFEYXRheyJQcmVmZXJlbmNlc0tleSJ9Ij4kVGV4dHsiTWF4LiBzaG93biBTdXJ2ZXlzIHBlciBwYWdlIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiUGFnZVNob3duU3RyaW5nIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgIDwvZGl2PgoKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgLy8gYmluZCB0aGUgQ29udGV4dFNldHRpbmdzRGlhbG9nQ29udGFpbmVyCiAgICAkKCcjU2hvd0NvbnRleHRTZXR0aW5nc0RpYWxvZycpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coJCgnI0NvbnRleHRTZXR0aW5nc0RpYWxvZ0NvbnRhaW5lcicpLCAnJEpTVGV4dHsiU2V0dGluZ3MifScsICcyMCUnLCAnQ2VudGVyJywgdHJ1ZSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIExhYmVsOiAnJEpTVGV4dHsiU3VibWl0In0nLAogICAgICAgICAgICAgICAgICAgIFR5cGU6ICdTdWJtaXQnLAogICAgICAgICAgICAgICAgICAgIENsYXNzOiAnUHJpbWFyeScKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXQogICAgICAgICk7CiAgICAgICAgRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICBFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjwhLS0gZHRsOmJsb2NrOkNvbnRleHRTZXR0aW5ncyAtLT4KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJBY3Rpb25Sb3ciPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iT3ZlcnZpZXdBY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICAkRGF0YXsiQWN0aW9uUm93In0KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Ik92ZXJ2aWV3Wm9vbSI+Cgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclZpZXdNb2RlIC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclZpZXdNb2RlU2VsZWN0ZWQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iQWN0aXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSIkUURhdGF7Ik5hbWUifSIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtGaWx0ZXI9JExRRGF0YXsiRmlsdGVyIn07Vmlldz0kTFFEYXRheyJWaWV3In07JERhdGF7IkxpbmtGaWx0ZXIifSIgdGl0bGU9IiRUZXh0eyIkRGF0YXsiTmFtZSJ9In0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbWFnZU1vZGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTmFtZVNob3J0Ij4kVGV4dHsiJERhdGF7Ik5hbWVTaG9ydCJ9In08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJOYW1lTG9uZyI+JFRleHR7IiREYXRheyJOYW1lIn0ifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyVmlld01vZGVTZWxlY3RlZCAtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJWaWV3TW9kZU5vdFNlbGVjdGVkIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iJFFEYXRheyJOYW1lIn0iIG5hbWU9Ik92ZXJ2aWV3Q29udHJvbCIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtGaWx0ZXI9JExRRGF0YXsiRmlsdGVyIn07Vmlldz0kTFFEYXRheyJWaWV3In07JERhdGF7IkxpbmtGaWx0ZXIifSIgdGl0bGU9IiRUZXh0eyIkRGF0YXsiTmFtZSJ9In0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJJbWFnZU1vZGUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTmFtZVNob3J0Ij4kVGV4dHsiJERhdGF7Ik5hbWVTaG9ydCJ9In08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJOYW1lTG9uZyI+JFRleHR7IiREYXRheyJOYW1lIn0ifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyVmlld01vZGVOb3RTZWxlY3RlZCAtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJWaWV3TW9kZSAtLT4KICAgICAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJQYWdpbmF0aW9uIj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJQYWdlTmF2QmFyIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiUmVzdWx0TG9uZyJ9CiAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJTaXRlTmF2QmFyTG9uZyJ9CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyUGFnZU5hdkJhciAtLT4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXJMZWZ0Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgojIHNvcnQgb3JkZXIgYmFyIGlmIG5lZWRlZAogICAgICAgICAgICAgICAgJERhdGF7IlNvcnRPcmRlckJhciJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhciAtLT4K
Ly8gLS0KLy8gU3VydmV5LkFnZW50LlN1cnZleVpvb20uanMgLSBwcm92aWRlcyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciBTdXJ2ZXlab29tCi8vIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy9cbiI7Ci8vIC0tCi8vICRJZDogU3VydmV5LkFnZW50LlN1cnZleVpvb20uanMsdiAxLjMgMjAxMS8wMi8wMyAyMjo0NjoxNSBkeiBFeHAgJAovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgU3VydmV5ID0gU3VydmV5IHx8IHt9OwpTdXJ2ZXkuQWdlbnQgPSBTdXJ2ZXkuQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBTdXJ2ZXkuQWdlbnQuU3VydmV5Wm9vbQogKiBAZGVzY3JpcHRpb24KICogICAgICBUaGlzIG5hbWVzcGFjZSBjb250YWlucyB0aGUgc3BlY2lhbCBtb2R1bGUgZnVuY3Rpb25zIGZvciBTdXJ2ZXlab29tLgogKi8KU3VydmV5LkFnZW50LlN1cnZleVpvb20gPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtqUXVlcnlPYmplY3R9ICRJZnJhbWUgVGhlIGlmcmFtZSB3aGljaCBzaG91bGQgYmUgYXV0by1oZWlnaHRlZAogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucwogICAgICovCiAgICBUYXJnZXROUy5JZnJhbWVBdXRvSGVpZ2h0ID0gZnVuY3Rpb24gKCRJZnJhbWUpIHsKICAgICAgICBpZiAoaXNKUXVlcnlPYmplY3QoJElmcmFtZSkpIHsKICAgICAgICAgICAgdmFyIE5ld0hlaWdodCA9ICRJZnJhbWUuY29udGVudHMoKS5oZWlnaHQoKTsKICAgICAgICAgICAgaWYgKCFOZXdIZWlnaHQgfHwgaXNOYU4oTmV3SGVpZ2h0KSkgewogICAgICAgICAgICAgICAgTmV3SGVpZ2h0ID0gQ29yZS5Db25maWcuR2V0KCdTdXJ2ZXkuSFRNTFJpY2hUZXh0SGVpZ2h0RGVmYXVsdCcpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKE5ld0hlaWdodCA+IENvcmUuQ29uZmlnLkdldCgnU3VydmV5LkhUTUxSaWNoVGV4dEhlaWdodE1heCcpKSB7CiAgICAgICAgICAgICAgICAgICAgTmV3SGVpZ2h0ID0gQ29yZS5Db25maWcuR2V0KCdTdXJ2ZXkuSFRNTFJpY2hUZXh0SGVpZ2h0TWF4Jyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJElmcmFtZS5oZWlnaHQoTmV3SGVpZ2h0ICsgJ3B4Jyk7CiAgICAgICAgfQogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oU3VydmV5LkFnZW50LlN1cnZleVpvb20gfHwge30pKTsK
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEB2ZXJzaW9uICAgICAkUmV2aXNpb246IDEuOCAkCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRGVmYXVsdCBTZXR0aW5ncwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gU3VydmV5IEdyYXBoCiAqLwoKZmllbGRzZXQuU3VydmV5R3JhcGhzIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luLWJvdHRvbTogMjBweDsKfQoKZmllbGRzZXQuU3VydmV5R3JhcGhzIC5RdWVzdGlvbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgd2lkdGg6IDI1JTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKfQoKZmllbGRzZXQuU3VydmV5R3JhcGhzIC5BbnN3ZXIgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaW5lLWhlaWdodDogMS4zZW07CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNGQUZBRkE7CiAgICB3aWR0aDogMjUlOwogICAgbWFyZ2luLWJvdHRvbTogNXB4Owp9CgpkaXYuU3VydmV5R3JhcGggewogICAgZmxvYXQ6IGxlZnQ7CiAgICB3aWR0aDogNTAlOwogICAgaGVpZ2h0OiAyMnB4OwogICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICBwYWRkaW5nLWJvdHRvbTogM3B4Owp9CgpkaXYuU3VydmV5R3JhcGhDb250YWluZXIgewogICAgd2lkdGg6IDk1JTsKICAgIGhlaWdodDogMjJweDsKfQoKZGl2LlN1cnZleUdyYXBoQmFyIHsKICAgIGhlaWdodDogMjJweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNGMkIxM0U7Cn0KCnAuU3VydmV5R3JhcGhMZXllbmQgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaW5lLWhlaWdodDogMS4zZW07CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI0ZBRkFGQTsKICAgIHdpZHRoOiAxMCU7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBoZWlnaHQ6IDIycHg7Cn0KCi5TdWJMYWJlbCB7CiAgICB3aWR0aDogMzUlOwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBmbG9hdDogbGVmdDsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgouU3ViRmllbGQgewogICAgbWFyZ2luLWxlZnQ6IDM1JTsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgphLkFycm93VXAsCmEuQXJyb3dVcERpc2FibGVkLAphLkFycm93RG93biwKYS5BcnJvd0Rvd25EaXNhYmxlZCB7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMTZweDsKICAgIHBhZGRpbmc6IDFweDsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBtYXJnaW4tYm90dG9tOiAxcHg7CiAgICBib3JkZXItc3R5bGU6IG5vbmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgphLkFycm93VXA6YWN0aXZlLAphLkFycm93RG93bjphY3RpdmUgewogICAgbWFyZ2luLXRvcDogMXB4OwogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKYS5BcnJvd1VwRGlzYWJsZWQ6YWN0aXZlLAphLkFycm93RG93bkRpc2FibGVkOmFjdGl2ZSB7CiAgICBtYXJnaW4tdG9wOiAwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAxcHg7Cn0KCmEuQXJyb3dVcCB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2ljb25zL3N1cnZleV9hcnJvd191cC5wbmcpOwp9CgphLkFycm93VXBEaXNhYmxlZCB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2ljb25zL3N1cnZleV9hcnJvd191cF9kaXNhYmxlZC5wbmcpOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgphLkFycm93RG93biB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2ljb25zL3N1cnZleV9hcnJvd19kb3duLnBuZykgbm8tcmVwZWF0IDAgMDsKfQoKYS5BcnJvd0Rvd25EaXNhYmxlZCB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2ljb25zL3N1cnZleV9hcnJvd19kb3duX2Rpc2FibGVkLnBuZyk7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCmEuQXJyb3dVcCBzcGFuLAphLkFycm93VXBEaXNhYmxlZCBzcGFuLAphLkFycm93RG93biBzcGFuLAphLkFycm93RG93bkRpc2FibGVkIHNwYW4sCmEuU2VlRGV0YWlscyBzcGFuIHsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBkaXNwbGF5OiBub25lOwp9CgphLlNlZURldGFpbHMgewogICAgaGVpZ2h0OiAxNXB4OwogICAgd2lkdGg6IDE1cHg7CiAgICBwYWRkaW5nOiAxcHg7CiAgICBtYXJnaW4tdG9wOiAwOwogICAgbWFyZ2luLWJvdHRvbTogMXB4OwogICAgYm9yZGVyLXN0eWxlOiBub25lOwogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGJhY2tncm91bmQ6IHVybCguLi9pbWcvaWNvbnMvc3VydmV5X3NlZV9kZXRhaWxzLnBuZyk7Cn0KCmxhYmVsLlRleHRhcmVhLApkaXYuVGV4dGFyZWEgewogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIG1hcmdpbi10b3A6IDEwcHg7Cn0KCi5GaWVsZCB1bCBsaXsKICAgIG1hcmdpbi1sZWZ0OiAzMHB4OwogICAgbGlzdC1zdHlsZTogZGlzYzsKfQoKLkZpZWxkIG9sIGxpewogICAgbWFyZ2luLWxlZnQ6IDMwcHg7CiAgICBsaXN0LXN0eWxlOiBkZWNpbWFsOwp9Cn0=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEB2ZXJzaW9uICAgICAkUmV2aXNpb246IDEuMSAkCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqIEBjc3MtZm9yICAgICBJRTcKICovCgovKioKICogQHBhY2thZ2UgICAgIFNraW4gIkRlZmF1bHQiCiAqIEBzZWN0aW9uICAgICBBZ2VudAogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7Cgpmb3JtLkFjdGlvbkZvcm0gewogICAgbWFyZ2luLXRvcDogNHB4Owp9CgpkaXYuRmllbGQgewogICBtYXJnaW4tdG9wOiA0cHg7Cn0KCn0gLyogZW5kIEBtZWRpYSAqLw==
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEN1c3RvbWVyIEZyb250ZW5kCiAqIEB2ZXJzaW9uICAgICAkUmV2aXNpb246IDEuNSAkCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTdXJ2ZXkgLSBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgQ3VzdG9tZXIKICovCgpkaXYuU3VydmV5QmxvY2sgewogICAgbWFyZ2luOiA4cHggMCAxM3B4OwogICAgcGFkZGluZy1ib3R0b206IDVweDsKICAgIGJhY2tncm91bmQ6ICNGOEY5Rjk7CiAgICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudChjZW50ZXIgdG9wICwgI0ZGRiwgI0Y4RjlGOSk7CiAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCNGRkYpLCB0bygjRjhGOUY5KSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjRUFFRUVFOwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKICAgIHdpZHRoOiA3MzhweDsKfQoKLlN1cnZleUJsb2NrSGVhZGVyIHsKICAgIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KGNlbnRlciB0b3AgLCAjRjlGOUY5LCAjRUNFRUVFKSByZXBlYXQgc2Nyb2xsIDAgMCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQ0NDQ0NDOwogICAgY29sb3I6ICMzMzMzMzM7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiA0cHggOXB4IDNweCA5cHg7CiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjRkZGRkZGOwp9CgpmaWVsZHNldC5TdXJ2ZXkgewogICAgd2lkdGg6IDczOHB4Owp9CgpkaXYuQWN0aW9uUm93IHsKICAgIHdpZHRoOiA3MjBweDsKfQoKZGl2LkludHJvIC5Db250ZW50ewogICAgYm9yZGVyLXRvcDogMDsKfQoKZGl2LlF1ZXN0aW9uewogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNDOUM5Qzk7CiAgICBjb2xvcjogIzMzMzMzMzsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIG1hcmdpbi1sZWZ0OiA0MHB4OwogICAgbWFyZ2luLXRvcDogMTVweDsKICAgIHdpZHRoOiA1MjBweDsKICAgIHBhZGRpbmc6IDRweCA5cHggM3B4IDlweDsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNFQ0VFRUU7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgpsYWJlbC5BbnN3ZXIgewogICAgYmFja2dyb3VuZDpub25lOwogICAgYm9yZGVyOiBub25lOwogICAgd2lkdGg6IDM2NXB4OwogICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgIG1hcmdpbi10b3A6IDNweDsKICAgIHRleHQtYWxpZ246bGVmdDsKfQoKZmllbGRzZXQgaW5wdXQsCmRpdi5BbnN3ZXIgewogICAgZmxvYXQ6bGVmdDsKfQoKZmllbGRzZXQgaW5wdXQsCmZpZWxkc2V0IHRleHRhcmVhLApkaXYuQW5zd2VyIHsKICAgIG1hcmdpbjogN3B4IDAgN3B4IDc1cHg7Cn0KCi5SaWNoVGV4dEFuc3dlciB7CiAgICBtYXJnaW46IDdweCAwIDdweCA3NXB4Owp9CgpkaXYuQW5zd2VyIHsKICAgIHBhZGRpbmc6MHB4Owp9CgouU3VydmV5QnV0dG9uIHsKICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjVweDsKICAgIC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo1cHg7CiAgICAtbW96LWJveC1zaGFkb3c6MCAwIDNweCAjRjZGOUY5OwogICAgYm9yZGVyLWNvbG9yOi1tb3otdXNlLXRleHQtY29sb3IgI0Q2RDZENiAjRDZENkQ2OwogICAgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjRDZENkQ2OwogICAgYm9yZGVyLXN0eWxlOm5vbmUgc29saWQgc29saWQ7CiAgICBib3JkZXItd2lkdGg6bWVkaXVtIDFweCAxcHg7CiAgICBib3R0b206LTIycHg7CiAgICBjb2xvcjojOTk5OTk5OwogICAgZGlzcGxheTpub25lOwogICAgaGVpZ2h0OjEwcHg7CiAgICBtYXJnaW46MCAxM3B4OwogICAgcGFkZGluZzo0cHggOHB4IDdweCAyNHB4OwogICAgcG9zaXRpb246YWJzb2x1dGU7Cn0K
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEN1c3RvbWVyIEZyb250ZW5kCiAqIEB2ZXJzaW9uICAgICAkUmV2aXNpb246IDEuMSAkCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTdXJ2ZXkgLSBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgQ3VzdG9tZXIKICovCgpsYWJlbC5BbnN3ZXIgewogICAgcGFkZGluZy10b3A6IDVweDsKfQoKZGl2LlF1ZXN0aW9uQ29udGFpbmVyIHsKICAgIG1hcmdpbi1sZWZ0OiA0MHB4Owp9Cg==
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZlJREFUeNqkUztLA0EQnr3bvEhhI9FC09gJInJiZbAQREHUWhTtbK8ULEWwFVLZaJE/YKWFgn2SQgxBgjYSIoYkEsxxuec6c/FxCXmAGZjbmdmZ7+a1TAgBw5AEQxL3K7OnjxAMhyEQCkEgGARJllfJ7jrOjWWaYBkGmM0mPBzOdAdoIyF2MFD9lkfxmxqYgT/Ysix1fzOukHp59apCq1epgT0QFGya6u56XMnnG0C8vTahkI3u+gJ4wYah7m1NKcWiBrregFqtArlcCTaWxhW66wRpKwEdEjTW5EUmS/riXEzhXMB9upSFdMnzYYwl/KXwjgwOsHEgXBds285oQgYHAQ1dB875PJMkmkz/Jjq2DbqmeXJFDoHDwAMwUI9Eo/0BtHod9EbjVy/zKDgugIkARHSy52uUFroDFM9WgI9NQ2T5qJUBj2AJfwD63QnY73mUznuPkRy022MwcfNsJnlMMtlawYMXadItP8Wst1yhmmz9SVQLBbTRUn0iv1CrfpyZ/zXiiOgYQY72WHDq5QfGuF0B/kNfAgwAlIbWNoRkTzIAAAAASUVORK5CYII=
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