Survey
1.2.91
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
Build for Survey 2.0.0 beta1.
A customer survey tool.
Ein Kundenumfragen Werkzeug.
Una herramienta de encuestas a clientes.
3.0.x
<br>
<b>WELCOME</b>
<br>
<br>
You are about to install the OTRS package Survey.<br>
<br>
<br>
<b>ATTENTION</b>
<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>
<b>WILLKOMMEN</b>
<br>
<br>
Sie sind im Begriff das OTRS-Paket Survey zu installieren.<br>
<br>
<br>
<b>ACHTUNG</b>
<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>
<b>ATTENTION</b>
<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>
<b>ACHTUNG</b>
<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>
<b>WELCOME</b>
<br>
<br>
You are about to upgrade the OTRS package Survey.<br>
<br>
<br>
</b>ATTENTION</b>
<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>
<b>WILLKOMMEN</b>
<br>
<br>
Sie sind im Begriff das OTRS-Paket Survey zu aktualisieren.<br>
<br>
<br>
<b>ACHTUNG</b>
<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>
2011-01-20 18:46:11
opms.otrs.com
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjEuMCIgaW5pdD0iQXBwbGljYXRpb24iPgogICAgPENWUz4kSWQ6IFN1cnZleS54bWwsdiAxLjIyIDIwMTEvMDEvMjAgMTc6MjA6MjEgZHogRXhwICQ8L0NWUz4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudFN1cnZleSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPkFsbCBwYXJhbWV0ZXJzIGZvciB0aGUgU3VydmV5IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+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+U3VydmV5LkFnZW50LkRlZmF1bHQuSUU3LmNzczwvQ1NTX0lFNz4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3Igc3VydmV5IHpvb20gaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkEgbW9kdWxlIHRvIGVkaXQgc3VydmV5IHF1ZXN0aW9ucy48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPExvYWRlcj4KICAgICAgICAgICAgICAgICAgICA8Q1NTPlN1cnZleS5BZ2VudC5EZWZhdWx0LmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxDU1NfSUU3PlN1cnZleS5BZ2VudC5EZWZhdWx0LklFNy5jc3M8L0NTU19JRTc+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQdWJsaWNGcm9udGVuZDo6TW9kdWxlIyMjUHVibGljU3VydmV5IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBQdWJsaWNTdXJ2ZXkgb2JqZWN0IGluIHRoZSBwdWJsaWMgU3VydmV5IGFyZWEuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OlB1YmxpYzo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UHVibGljIFN1cnZleS48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+U3VydmV5PC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlPlN1cnZleTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+U3VydmV5LkN1c3RvbWVyLkRlZmF1bHQuY3NzPC9DU1M+CiAgICAgICAgICAgICAgICAgICAgPENTU19JRTc+U3VydmV5LkN1c3RvbWVyLkRlZmF1bHQuSUU3LmNzczwvQ1NTX0lFNz4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN1cnZleTo6U2VuZFBlcmlvZCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EYXlzIHN0YXJ0aW5nIGZyb20gdGhlIGxhdGVzdCBjdXN0b21lciBzdXJ2ZXkgZW1haWwgYmV0d2VlbiBubyBjdXN0b21lciBzdXJ2ZXkgZW1haWwgaXMgc2VudCwgKCAwIG1lYW5zIEFsd2F5cyBzZW5kIGl0ICkgLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPjMwMDwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN1cnZleTo6Tm90aWZpY2F0aW9uU2VuZGVyIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgc2VuZGVyIGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPnF1YWxpdHlAZXhhbXBsZS5jb208L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJTdXJ2ZXk6Ok5vdGlmaWNhdGlvblN1YmplY3QiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzdWJqZWN0IGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPkhlbHAgdXMgd2l0aCB5b3VyIGZlZWRiYWNrITwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN1cnZleTo6Tm90aWZpY2F0aW9uQm9keSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBib2R5IGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8VGV4dEFyZWE+RGVhciBDdXN0b21lciwKCnRoYW5rcyBmb3IgdXNpbmcgb3VyIHNlcnZpY2UuIEhlbHAgdXMgdG8gaW1wcm92ZSB1cyBhbmQgb3VyIHNlcnZpY2VzLgoKR2l2ZSB1cyBmZWVkYmFjayB3aGF0IHdlIGNhbiBkbzoKCiZsdDtPVFJTX0NPTkZJR19IdHRwVHlwZSZndDs6Ly8mbHQ7T1RSU19DT05GSUdfRlFETiZndDsvJmx0O09UUlNfQ09ORklHX1NjcmlwdEFsaWFzJmd0O3B1YmxpYy5wbD9BY3Rpb249UHVibGljU3VydmV5O1B1YmxpY1N1cnZleUtleT0mbHQ7T1RSU19QdWJsaWNTdXJ2ZXlLZXkmZ3Q7CgpUaGFua3MgZm9yIHlvdXIgaGVscCEKCllvdXIgT1RSUy1UZWFtCiAgICAgICAgICAgIDwvVGV4dEFyZWE+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iU3VydmV5OjpTZW5kTm9TdXJ2ZXlSZWdFeHAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uICBUcmFuc2xhdGFibGU9IjEiPklmIHRoaXMgcmVnZXggbWF0Y2hlcywgbm8gY3VzdG9tZXIgc3VydmV5IHdpbGwgYmUgc2VudC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4oTUFJTEVSLURBRU1PTnxwb3N0bWFzdGVyfGFidXNlKUAuKz9cLi4rPzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlRpY2tldDo6RXZlbnRNb2R1bGVQb3N0IyMjOTktU3VydmV5U2VuZFJlcXVlc3QiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGlja2V0IGV2ZW50IG1vZHVsZSB0byBzZW5kIGF1dG9tYXRpY2FsbHkgc3VydmV5IGVtYWlsIHJlcXVlc3RzIHRvIGN1c3RvbWVycyBpZiBhIHRpY2tldCBnZXRzIGNsb3NlZC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OlRpY2tldDo6RXZlbnQ6OlN1cnZleVNlbmRSZXF1ZXN0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJFdmVudCI+KEFydGljbGVDcmVhdGV8VGlja2V0U3RhdGVVcGRhdGUpPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iU3VydmV5OjpGcm9udGVuZDo6T3ZlcnZpZXcjIyNTbWFsbCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIGFuIG92ZXJ2aWV3IG1vZHVsZSB0byBzaG93IHRoZSBzbWFsbCB2aWV3IG9mIGEgc3VydmV5IGxpc3QuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpTdXJ2ZXlPdmVydmlldzwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpTdXJ2ZXlPdmVydmlld1NtYWxsPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5TbWFsbDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUGFnZVNob3duIj4yNTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSW1hZ2UiPm92ZXJ2aWV3c21hbGwucG5nPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJJbWFnZVNlbGVjdGVkIj5vdmVydmlld3NtYWxsLXNlbGVjdGVkLnBuZzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN1cnZleTo6RnJvbnRlbmQ6OkFnZW50U3VydmV5IyMjU2hvd0NvbHVtbnMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgc2hvd24gY29sdW1ucyBpbiB0aGUgc3VydmV5IG92ZXJ2aWV3LiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgY29sdW1uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlN1cnZleTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6Vmlld1N1cnZleU92ZXJ2aWV3PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik51bWJlciI+MTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiPjE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkludHJvZHVjdGlvbiI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPjA8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5vdGlmaWNhdGlvblNlbmRlciI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTm90aWZpY2F0aW9uU3ViamVjdCI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTm90aWZpY2F0aW9uQm9keSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU3RhdHVzIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDcmVhdGVUaW1lIj4xPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJDcmVhdGVCeSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlVGltZSI+MDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2hhbmdlQnkiPjA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJTdXJ2ZXk6Okhvb2siIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhlIGlkZW50aWZpZXIgZm9yIGEgc3VydmV5LCBlLmcuIFN1cnZleSMsIE15U3VydmV5Iy4gVGhlIGRlZmF1bHQgaXMgU3VydmV5Iy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5TdXJ2ZXk8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpTdXJ2ZXk8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPlN1cnZleSM8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQcmVmZXJlbmNlc0dyb3VwcyMjI1N1cnZleU92ZXJ2aWV3U21hbGxQYWdlU2hvd24iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UGFyYW1ldGVycyBmb3IgdGhlIHBhZ2VzIChpbiB3aGljaCB0aGUgc3VydmV5cyBhcmUgc2hvd24pIG9mIHRoZSBzbWFsbCBzdXJ2ZXkgb3ZlcnZpZXcuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+U3VydmV5PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpQcmVmZXJlbmNlczwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpQcmVmZXJlbmNlc0dlbmVyaWM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbHVtbiI+T3RoZXIgU2V0dGluZ3M8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIiBUcmFuc2xhdGFibGU9IjEiPlN1cnZleSBPdmVydmlldyAiU21hbGwiIExpbWl0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiIFRyYW5zbGF0YWJsZT0iMSI+U3VydmV5IGxpbWl0IHBlciBwYWdlIGZvciBTdXJ2ZXkgT3ZlcnZpZXcgIlNtYWxsIjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMTAiPjEwPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjE1Ij4xNTwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIyMCI+MjA8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMjUiPjI1PC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjMwIj4zMDwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIzNSI+MzU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEYXRhU2VsZWN0ZWQiPjI1PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJQcmVmS2V5Ij5Vc2VyU3VydmV5T3ZlcnZpZXdTbWFsbFBhZ2VTaG93bjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJpbyI+ODAwMDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aXZlIj4wPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPgo=
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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==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9jel9BZ2VudFN1cnZleS5wbSAtIHRoZSBjemVjaCBsYW5ndWFnZSBmb3IgQWdlbnRTdXJ2ZXkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgQ29weXJpZ2h0IChDKSAyMDEwIE8yQlMuY29tLCBzIHIuby4gSmFrdWIgSGFudXMKIyAtLQojICRJZDogY3pfU3VydmV5LnBtLHYgMS4xIDIwMTEvMDEvMjAgMTc6MjA6MjEgZHogRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6Y3pfQWdlbnRTdXJ2ZXk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjEgJCkgWzFdOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSd9ICAgID0gJ1Byxa96a3VtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9ucyd9ID0gJ0RvdGF6eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbid9ICA9ICdEb3Rheic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaW5pc2gnfSAgICA9ICdVa29uxI1pdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydmaW5pc2hlZCd9ICA9ICd1a29uxI1lbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBTdXJ2ZXktS2V5IGlzIGludmFsaWQhJ30KICAgICAgICA9ICdUZW50byBrbMOtxI0gamUgbmV2aG9kbsO9IHBybyBwcsWvemt1bSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhhbmsgeW91IGZvciB5b3VyIGZlZWRiYWNrLid9CiAgICAgICAgPSAnRMSba3VqZW1lIFbDoW0gemEgenDEm3Rub3UgdmF6YnUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVlZCB0byBzZWxlY3QgcXVlc3Rpb246J30gID0gJ051dG5vIHZ5YnJhdCBkb3RhejonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5J30gPSAnUHLFr3prdW0sJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzZXQgbmV3IHN0YXR1cyEgTm8gcXVlc3Rpb25zIGRlZmluZWQuJ30KICAgICAgICA9ICdOZWx6ZSBuYXN0YXZpdCBub3bDvSBzdGF2ISBOZWpzb3UgZGVmaW5vdsOhbnkgZG90YXp5Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2V0IG5ldyBzdGF0dXMhIFF1ZXN0aW9ucyBpbmNvbXBsZXRlLid9CiAgICAgICAgPSAnTmVsemUgbmFzdGF2aXQgbm92w70gc3RhdiEgRG90YXp5IG5lanNvdSBrb21wbGV0bsOtLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0dXMgY2hhbmdlZC4nfSA9ICdOb3bDvSBha3Rpdm7DrSBzdGF2ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2UgU3RhdHVzJ30gICAgID0gJ1ptxJtueSBzdGF2dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW50IHJlcXVlc3RzJ30gICA9ICdaYXNsw6FueSBwb8W+YWRhdmt5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY2VpdmVkIHN1cnZleXMnfSAgICA9ICdPYmRyxb5lbnkgaGxhc3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYW5zd2VyZWQnfSAgICAgICAgICA9ICdPZHBvdsSbZGxpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J25vdCBhbnN3ZXJlZCd9ICAgICAgPSAnTmVvZHBvdsSbZGxpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleXMnfSAgICAgICAgICAgPSAnUHLFr3prdW15JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQnfSAgICAgICAgICAgPSAnTmVwbGF0bsOpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludHJvZHVjdGlvbid9ICAgICAgPSAnw5p2b2QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJuYWwnfSAgICAgICAgICA9ICdJbnRlcm7DrSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbnMnfSAgICAgICAgID0gJ0RvdGF6eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydRdWVzdGlvbid9ICAgICAgICAgID0gJ0RvdGF6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bvc2libGUgQW5zd2Vycyd9ICAgPSAnUMWZw61wYWRuw6kgb2Rwb3bEm2R5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1llc05vJ30gICAgICAgICAgICAgPSAnQW5vIGFuZWJvIE5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpc3QnfSAgICAgICAgICAgICAgPSAnc2V6bmFtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RleHRhcmVhJ30gICAgICAgICAgPSAndGV4dG92w6kgcG9sZSc7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ydV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBydV9TdXJ2ZXkucG0sdiAxLjEgMjAxMS8wMS8yMCAxNzoyMDoyMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpydV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+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+eydTdXJ2ZXkgWm9vbSBNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBsaW1pdCBwZXIgcGFnZSBmb3IgU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgc3VydmV5LCBlLmcuIFN1cnZleSMsIE15U3VydmV5Iy4gVGhlIGRlZmF1bHQgaXMgU3VydmV5Iy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGV2ZW50IG1vZHVsZSB0byBzZW5kIGF1dG9tYXRpY2FsbHkgc3VydmV5IGVtYWlsIHJlcXVlc3RzIHRvIGN1c3RvbWVycyBpZiBhIHRpY2tldCBnZXRzIGNsb3NlZC4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ubF9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBubF9TdXJ2ZXkucG0sdiAxLjEgMjAxMS8wMS8yMCAxNzoyMDoyMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpubF9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+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+eydTdXJ2ZXkgWm9vbSBNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBsaW1pdCBwZXIgcGFnZSBmb3IgU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgc3VydmV5LCBlLmcuIFN1cnZleSMsIE15U3VydmV5Iy4gVGhlIGRlZmF1bHQgaXMgU3VydmV5Iy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGV2ZW50IG1vZHVsZSB0byBzZW5kIGF1dG9tYXRpY2FsbHkgc3VydmV5IGVtYWlsIHJlcXVlc3RzIHRvIGN1c3RvbWVycyBpZiBhIHRpY2tldCBnZXRzIGNsb3NlZC4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kYV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBkYV9TdXJ2ZXkucG0sdiAxLjEgMjAxMS8wMS8yMCAxNzoyMDoyMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpkYV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW5zd2VyJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU2VuZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTdWJqZWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBCb2R5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIEJ5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW50IHJlcXVlc3RzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY2VpdmVkIHN1cnZleXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBHZW5lcmFsIEluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUmVzdWx0cyBHcmFwaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdGF0IHJlc3VsdHMuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYW5zd2VyIHRoZSBuZXh0IHF1ZXN0aW9ucyd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgU3VydmV5IE1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBtb2R1bGUgdG8gZWRpdCBzdXJ2ZXkgcXVlc3Rpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmUgeW91ciBvd24gbG9nIHRleHQgZm9yIFBHUC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tIHRleHQgZm9yIHRoZSBwYWdlIHNob3duIHRvIGN1c3RvbWVycyB0aGF0IGhhdmUgbm8gdGlja2V0cyB5ZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgc3RhcnRpbmcgZnJvbSB0aGUgbGF0ZXN0IGN1c3RvbWVyIHN1cnZleSBlbWFpbCBiZXR3ZWVuIG5vIGN1c3RvbWVyIHN1cnZleSBlbWFpbCBpcyBzZW50LCAoIDAgbWVhbnMgQWx3YXlzIHNlbmQgaXQgKSAuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYm9keSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZW5kZXIgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3ViamVjdCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHN1cnZleSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGZyb250LWVuZCAoSFRNTCkgdGhlbWUgdG8gYmUgdXNlZCBieSB0aGUgYWdlbnRzIGFuZCBjdXN0b21lcnMuIFRoZSBkZWZhdWx0IHRoZW1lcyBhcmUgU3RhbmRhcmQgYW5kIExpdGUuIElmIHlvdSBsaWtlLCB5b3UgY2FuIGFkZCB5b3VyIG93biB0aGVtZS4gUGxlYXNlIHJlZmVyIHRoZSBhZG1pbmlzdHJhdG9yIG1hbnVhbCBsb2NhdGVkIGF0IGh0dHA6Ly9kb2Mub3Rycy5vcmcvLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMSBmb3IgYXJ0aWNsZXMgdG8gYWRkIGEgbmV3IGFydGljbGUgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTAgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEyIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTMgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNCBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE1IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTYgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMyBmb3IgYXJ0aWNsZXMgdG8gYWRkIGEgbmV3IGFydGljbGUgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMyBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA1IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDcgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA4IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgOSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbW9kdWxlIHVzZWQgdG8gc3RvcmUgdGhlIHNlc3Npb24gZGF0YS4gV2l0aCAiREIiIHRoZSBmcm9udGVuZCBzZXJ2ZXIgY2FuIGJlIHNwbGl0dGVkIGZyb20gdGhlIGRiIHNlcnZlci4gIkZTIiBpcyBmYXN0ZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIHN1cnZleSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3Igc3VydmV5IHpvb20gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIFB1YmxpY1N1cnZleSBvYmplY3QgaW4gdGhlIHB1YmxpYyBTdXJ2ZXkgYXJlYS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhpcyByZWdleCBtYXRjaGVzLCBubyBjdXN0b21lciBzdXJ2ZXkgd2lsbCBiZSBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBzdXJ2ZXlzIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIHN1cnZleSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljIFN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoaXMgdG8geWVzIGlmIHlvdSB0cnVzdCBpbiBhbGwgeW91ciBwdWJsaWMgYW5kIHByaXZhdGUgcGdwIGtleXMsIGV2ZW4gaWYgdGhleSBhcmUgbm90IGNlcnRpZmllZCB3aXRoIGEgdHJ1c3RlZCBzaWduYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGNvbmZpZ3VyYXRpb24gbGV2ZWwgb2YgdGhlIGFkbWluaXN0cmF0b3IuIERlcGVuZGluZyBvbiB0aGUgY29uZmlnIGxldmVsLCBzb21lIHN5c2NvbmZpZyBvcHRpb25zIHdpbGwgYmUgbm90IHNob3duLiBUaGUgY29uZmlnIGxldmVscyBhcmUgaW4gaW4gYXNjZW5kaW5nIG9yZGVyOiBFeHBlcnQsIEFkdmFuY2VkLCBCZWdpbm5lci4gVGhlIGhpZ2hlciB0aGUgY29uZmlnIGxldmVsIGlzIChlLmcuIEJlZ2lubmVyIGlzIHRoZSBoaWdoZXN0KSwgdGhlIGxlc3MgbGlrZWx5IGlzIGl0IHRoYXQgdGhlIHVzZXIgY2FuIGFjY2lkZW50YWxseSBjb25maWd1cmUgdGhlIHN5c3RlbSBpbiBhIHdheSB0aGF0IGl0IGlzIG5vdCB1c2FibGUgYW55IG1vcmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRpbWUgdXNlIGNvbXBsZXRlIGRlc2NyaXB0aW9uIChkYXlzLCBob3VycywgbWludXRlcyksIGlmIHNldCB0byAiWWVzIjsgb3IganVzdCBmaXJzdCBsZXR0ZXIgKGQsIGgsIG0pLCBpZiBzZXQgdG8gIk5vIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFpvb20gTW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgbGltaXQgcGVyIHBhZ2UgZm9yIFN1cnZleSBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHN1cnZleSwgZS5nLiBTdXJ2ZXkjLCBNeVN1cnZleSMuIFRoZSBkZWZhdWx0IGlzIFN1cnZleSMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBldmVudCBtb2R1bGUgdG8gc2VuZCBhdXRvbWF0aWNhbGx5IHN1cnZleSBlbWFpbCByZXF1ZXN0cyB0byBjdXN0b21lcnMgaWYgYSB0aWNrZXQgZ2V0cyBjbG9zZWQuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9mcl9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBmcl9TdXJ2ZXkucG0sdiAxLjEgMjAxMS8wMS8yMCAxNzoyMDoyMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpmcl9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+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+eydUaWNrZXQgZXZlbnQgbW9kdWxlIHRvIHNlbmQgYXV0b21hdGljYWxseSBzdXJ2ZXkgZW1haWwgcmVxdWVzdHMgdG8gY3VzdG9tZXJzIGlmIGEgdGlja2V0IGdldHMgY2xvc2VkLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBkZV9TdXJ2ZXkucG0sdiAxLjEgMjAxMS8wMS8yMCAxNzoyMDoyMCBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpkZV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+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+eydUaWNrZXQgZXZlbnQgbW9kdWxlIHRvIHNlbmQgYXV0b21hdGljYWxseSBzdXJ2ZXkgZW1haWwgcmVxdWVzdHMgdG8gY3VzdG9tZXJzIGlmIGEgdGlja2V0IGdldHMgY2xvc2VkLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ydV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBydV9TdXJ2ZXkucG0sdiAxLjEgMjAxMS8wMS8yMCAxNzoyMDoyMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpydV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+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+eydTdXJ2ZXkgWm9vbSBNb2R1bGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBsaW1pdCBwZXIgcGFnZSBmb3IgU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlIGlkZW50aWZpZXIgZm9yIGEgc3VydmV5LCBlLmcuIFN1cnZleSMsIE15U3VydmV5Iy4gVGhlIGRlZmF1bHQgaXMgU3VydmV5Iy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGV2ZW50IG1vZHVsZSB0byBzZW5kIGF1dG9tYXRpY2FsbHkgc3VydmV5IGVtYWlsIHJlcXVlc3RzIHRvIGN1c3RvbWVycyBpZiBhIHRpY2tldCBnZXRzIGNsb3NlZC4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kYV9TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBkYV9TdXJ2ZXkucG0sdiAxLjEgMjAxMS8wMS8yMCAxNzoyMDoyMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpkYV9TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdGF0cyBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW5kIFRpbWUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVm90ZSBUaW1lJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RldGFpbHMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dvIEJhY2snfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBRdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUeXBlIHRoZSBxdWVzdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBxdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUG9zc2libGUgQW5zd2VycyBGb3InfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQW5zd2VyJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRTdXJ2ZXlPdmVydmlld1NtYWxsCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gU2VuZGVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTdWJqZWN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBCb2R5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcmVhdGVkIEJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgVGltZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaGFuZ2VkIEJ5J30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZW50IHJlcXVlc3RzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY2VpdmVkIHN1cnZleXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBHZW5lcmFsIEluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbnMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGV0YWlscyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUmVzdWx0cyBHcmFwaCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBzdGF0IHJlc3VsdHMuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBQdWJsaWNTdXJ2ZXkKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYW5zd2VyIHRoZSBuZXh0IHF1ZXN0aW9ucyd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgU3VydmV5IE1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBtb2R1bGUgdG8gZWRpdCBzdXJ2ZXkgcXVlc3Rpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maWd1cmUgeW91ciBvd24gbG9nIHRleHQgZm9yIFBHUC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VzdG9tIHRleHQgZm9yIHRoZSBwYWdlIHNob3duIHRvIGN1c3RvbWVycyB0aGF0IGhhdmUgbm8gdGlja2V0cyB5ZXQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgc3RhcnRpbmcgZnJvbSB0aGUgbGF0ZXN0IGN1c3RvbWVyIHN1cnZleSBlbWFpbCBiZXR3ZWVuIG5vIGN1c3RvbWVyIHN1cnZleSBlbWFpbCBpcyBzZW50LCAoIDAgbWVhbnMgQWx3YXlzIHNlbmQgaXQgKSAuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgYm9keSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZW5kZXIgZm9yIHRoZSBub3RpZmljYXRpb24gZW1haWwgdG8gY3VzdG9tZXJzIGFib3V0IG5ldyBzdXJ2ZXkuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3ViamVjdCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHN1cnZleSBsaXN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBkZWZhdWx0IGZyb250LWVuZCAoSFRNTCkgdGhlbWUgdG8gYmUgdXNlZCBieSB0aGUgYWdlbnRzIGFuZCBjdXN0b21lcnMuIFRoZSBkZWZhdWx0IHRoZW1lcyBhcmUgU3RhbmRhcmQgYW5kIExpdGUuIElmIHlvdSBsaWtlLCB5b3UgY2FuIGFkZCB5b3VyIG93biB0aGVtZS4gUGxlYXNlIHJlZmVyIHRoZSBhZG1pbmlzdHJhdG9yIG1hbnVhbCBsb2NhdGVkIGF0IGh0dHA6Ly9kb2Mub3Rycy5vcmcvLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMSBmb3IgYXJ0aWNsZXMgdG8gYWRkIGEgbmV3IGFydGljbGUgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTAgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxMSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDEyIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTMgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAxNCBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDE1IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMTYgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyIGZvciBhcnRpY2xlcyB0byBhZGQgYSBuZXcgYXJ0aWNsZSBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciAyIGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMyBmb3IgYXJ0aWNsZXMgdG8gYWRkIGEgbmV3IGFydGljbGUgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgMyBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDQgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA1IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgNiBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgZnJlZSBrZXkgZmllbGQgbnVtYmVyIDcgZm9yIHRpY2tldHMgdG8gYWRkIGEgbmV3IHRpY2tldCBhdHRyaWJ1dGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIGZyZWUga2V5IGZpZWxkIG51bWJlciA4IGZvciB0aWNrZXRzIHRvIGFkZCBhIG5ldyB0aWNrZXQgYXR0cmlidXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBmcmVlIGtleSBmaWVsZCBudW1iZXIgOSBmb3IgdGlja2V0cyB0byBhZGQgYSBuZXcgdGlja2V0IGF0dHJpYnV0ZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgbW9kdWxlIHVzZWQgdG8gc3RvcmUgdGhlIHNlc3Npb24gZGF0YS4gV2l0aCAiREIiIHRoZSBmcm9udGVuZCBzZXJ2ZXIgY2FuIGJlIHNwbGl0dGVkIGZyb20gdGhlIGRiIHNlcnZlci4gIkZTIiBpcyBmYXN0ZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHNob3duIGNvbHVtbnMgaW4gdGhlIHN1cnZleSBvdmVydmlldy4gVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3Igc3VydmV5IHpvb20gaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIFB1YmxpY1N1cnZleSBvYmplY3QgaW4gdGhlIHB1YmxpYyBTdXJ2ZXkgYXJlYS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhpcyByZWdleCBtYXRjaGVzLCBubyBjdXN0b21lciBzdXJ2ZXkgd2lsbCBiZSBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBzdXJ2ZXlzIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIHN1cnZleSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljIFN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoaXMgdG8geWVzIGlmIHlvdSB0cnVzdCBpbiBhbGwgeW91ciBwdWJsaWMgYW5kIHByaXZhdGUgcGdwIGtleXMsIGV2ZW4gaWYgdGhleSBhcmUgbm90IGNlcnRpZmllZCB3aXRoIGEgdHJ1c3RlZCBzaWduYXR1cmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldHMgdGhlIGNvbmZpZ3VyYXRpb24gbGV2ZWwgb2YgdGhlIGFkbWluaXN0cmF0b3IuIERlcGVuZGluZyBvbiB0aGUgY29uZmlnIGxldmVsLCBzb21lIHN5c2NvbmZpZyBvcHRpb25zIHdpbGwgYmUgbm90IHNob3duLiBUaGUgY29uZmlnIGxldmVscyBhcmUgaW4gaW4gYXNjZW5kaW5nIG9yZGVyOiBFeHBlcnQsIEFkdmFuY2VkLCBCZWdpbm5lci4gVGhlIGhpZ2hlciB0aGUgY29uZmlnIGxldmVsIGlzIChlLmcuIEJlZ2lubmVyIGlzIHRoZSBoaWdoZXN0KSwgdGhlIGxlc3MgbGlrZWx5IGlzIGl0IHRoYXQgdGhlIHVzZXIgY2FuIGFjY2lkZW50YWxseSBjb25maWd1cmUgdGhlIHN5c3RlbSBpbiBhIHdheSB0aGF0IGl0IGlzIG5vdCB1c2FibGUgYW55IG1vcmUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3dzIHRpbWUgdXNlIGNvbXBsZXRlIGRlc2NyaXB0aW9uIChkYXlzLCBob3VycywgbWludXRlcyksIGlmIHNldCB0byAiWWVzIjsgb3IganVzdCBmaXJzdCBsZXR0ZXIgKGQsIGgsIG0pLCBpZiBzZXQgdG8gIk5vIi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFpvb20gTW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgbGltaXQgcGVyIHBhZ2UgZm9yIFN1cnZleSBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHN1cnZleSwgZS5nLiBTdXJ2ZXkjLCBNeVN1cnZleSMuIFRoZSBkZWZhdWx0IGlzIFN1cnZleSMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBldmVudCBtb2R1bGUgdG8gc2VuZCBhdXRvbWF0aWNhbGx5IHN1cnZleSBlbWFpbCByZXF1ZXN0cyB0byBjdXN0b21lcnMgaWYgYSB0aWNrZXQgZ2V0cyBjbG9zZWQuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9lc19TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBlc19TdXJ2ZXkucG0sdiAxLjEgMjAxMS8wMS8yMCAxNzoyMDoyMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplc19TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICdDcmVhciBOdWV2YSBFbmN1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnRyb2R1Y3Rpb24nfSA9ICdJbnRyb2R1Y2Np824nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50ZXJuYWwgRGVzY3JpcHRpb24nfSA9ICdEZXNjcmlwY2nzbiBJbnRlcm5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnRWRpdGFyIEVuY3Vlc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJ0luZm9ybWFjafNuIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3RhdHMgT3ZlcnZpZXcnfSA9ICdyZXP6bWVuIEVzdGFkaXN0aWNhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1ZXN0cyBUYWJsZSd9ID0gJ1RhYmxhIGRlIFNvbGljaXR1ZGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbmQgVGltZSd9ID0gJ1RpZW1wbyBkZSBFbnbtbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWb3RlIFRpbWUnfSA9ICdUaWVtcG8gZGUgVm90byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXRhaWxzJ30gPSAnRGV0YWxsZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gcXVlc3Rpb25zIHNhdmVkIGZvciB0aGlzIHN1cnZleS4nfSA9ICdObyBoYXkgcHJlZ3VudGFzIGFsbWFjZW5hZGFzIHBhcmEgZXN0YSBlbmN1ZXN0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFN0YXQgRGV0YWlscyd9ID0gJ0RldGFsbGVzIGRlIEVzdGFkaXN0aWNhcyBkZSBFbmN1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3J30gPSAncmVncmVzYXIgYSByZXP6bWVuIGRlIGVzdGFkaXN0aWNhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHbyBCYWNrJ30gPSAnUmVncmVzYXInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IEVkaXQgUXVlc3Rpb25zJ30gPSAnRWRpdGFyIFByZWd1bnRhcyBkZSBFc3RhZO1zdGljYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgUXVlc3Rpb24nfSA9ICdBZ3JlZ2FyIFByZWd1bnRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R5cGUgdGhlIHF1ZXN0aW9uJ30gPSAnRXNjcmliYSBsYSBwcmVndW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgUXVlc3Rpb25zJ30gPSAnUHJlZ3VudGFzIGRlIEVzdGFkaXN0aWNhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1F1ZXN0aW9uJ30gPSAnUHJlZ3VudGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbid9ID0gJ0VkaXRhciBQcmVndW50YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydnbyBiYWNrIHRvIHF1ZXN0aW9ucyd9ID0gJ3JlZ3Jlc2FyIGEgcHJlZ3VudGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Bvc3NpYmxlIEFuc3dlcnMgRm9yJ30gPSAnUG9zaWJsZXMgcmVzcHVlc3RhcyBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBBbnN3ZXInfSA9ICdBZ3JlZ2FyIFJlc3B1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIGRvZXNuXCd0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLid9ID0gCiAgICAgICAgJ0VzdGEgcHJlZ3VudGEgbm8gdGllbmUgdmFyaWFzIHJlc3B1ZXN0YXMsIHVuIGFyZWEgZGUgdGV4dG8gc2Vy4SBtb3N0cmFkYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IEFuc3dlcid9ID0gJ0VkaXRhciBSZXNwdWVzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnZ28gYmFjayB0byBlZGl0IHF1ZXN0aW9uJ30gPSAndm9sdmVyIGEgZWRpdGFyIHByZWd1bnRhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3TmF2QmFyCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb250ZXh0IFNldHRpbmdzJ30gPSAnQ29uZmlndXJhY2lvbmVzIGRlIENvbnRleHRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSd9ID0gJ051bWVybyBt4XhpbW8gZGUgZW5jdWVzdGFzIG1vc3RyYWRhcyBwb3IgcOFnaW5hJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleU92ZXJ2aWV3U21hbGwKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTZW5kZXInfSA9ICdSZW1pdGVudGUgZGUgTm90aWZpY2FjaW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdGlmaWNhdGlvbiBTdWJqZWN0J30gPSAnQXN1bnRvIGRlIE5vdGlmaWNhY2nzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3RpZmljYXRpb24gQm9keSd9ID0gJ0N1ZXJwbyBkZSBOb3RpZmljYWNp824nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlZCBUaW1lJ30gPSAnVGllbXBvIGRlIENyZWFjafNuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyZWF0ZWQgQnknfSA9ICdDcmVhZG8gcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NoYW5nZWQgVGltZSd9ID0gJ1RpZW1wbyBkZSBtb2RpZmljYWNp824nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hhbmdlZCBCeSd9ID0gJ01vZGlmaWNhY28gcG9yJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjafNuIGRlIEVuY3Vlc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbnQgcmVxdWVzdHMnfSA9ICdTb2xpY2l0dWRlcyBlbnZpYWRhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNlaXZlZCBzdXJ2ZXlzJ30gPSAnU29saWNpdHVkZXMgcmVjaWJpZGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgR2VuZXJhbCBJbmZvJ30gPSAnRWRpdGFyIGluZm9ybWFjafNuIEdlbmVyYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBRdWVzdGlvbnMnfSA9ICdFZGl0YXIgUHJlZ3VudGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N0YXRzIERldGFpbHMnfSA9ICdEZXRhbGxlIGRlIEVzdGFk7XN0aWNhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgRGV0YWlscyd9ID0gJ0RldGFsbGVzIGRlIEVuY3Vlc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBSZXN1bHRzIEdyYXBoJ30gPSAnR3JhZmljYSBkZSBSZXN1bHRhZG9zIGRlIEVuY3Vlc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHN0YXQgcmVzdWx0cy4nfSA9ICdObyBoYXkgZ3JhZmljYXMgZGUgcmVzdWx0YWRvcy4nOwoKICAgICMgVGVtcGxhdGU6IFB1YmxpY1N1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5J30gPSAnRW5jdWVzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGFuc3dlciB0aGUgbmV4dCBxdWVzdGlvbnMnfSA9ICdQb3IgZmF2b3IgY29udGVzdGUgbGFzIHNpZ3VpZW50ZXMgcHJlZ3VudGFzJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBTdXJ2ZXkgTW9kdWxlLid9ID0gJ1VuIE3zZHVsbyBkZSBFbmN1ZXN0YXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSBtb2R1bGUgdG8gZWRpdCBzdXJ2ZXkgcXVlc3Rpb25zLid9ID0gJ1VuIG3zZHVsbyBwYXJhIGVkaXRhciBsYXMgcHJlZ3VudGFzIGRlIHVuYSBlbmN1ZXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIHN0YXJ0aW5nIGZyb20gdGhlIGxhdGVzdCBjdXN0b21lciBzdXJ2ZXkgZW1haWwgYmV0d2VlbiBubyBjdXN0b21lciBzdXJ2ZXkgZW1haWwgaXMgc2VudCwgKCAwIG1lYW5zIEFsd2F5cyBzZW5kIGl0ICkgLid9ID0gCiAgICAgICAgJ0RpYXMgY29tZW56YW5kbyBkZXNkZSBsYSD6bHRpbWEgZW4gY3Vlc3RhIGVudmlhZGEgYWwgY2xpZW50ZSAoIDAgc2lnbmlmaWNhIGVudmlhbGEgc2llbXByZSApIC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBib2R5IGZvciB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRvIGN1c3RvbWVycyBhYm91dCBuZXcgc3VydmV5Lid9ID0gCiAgICAgICAgJ0N1ZXJwbyBkZWZhdWx0IHBhcmEgZWwgZW1haWwgZGUgbm90aWZpY2FjafNuIGEgbG9zIGNsaWVudGVzIHNvYnJlIGxhIGVuY3Vlc3RhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNlbmRlciBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9IAogICAgICAgICdSZW1pdGVudGUgZGVmYXVsdCBwYXJhIGVsIGVtYWlsIGRlIG5vdGlmaWNhY2nzbiBhIGxvcyBjbGllbnRlcyBzb2JyZSBsYSBlbmN1ZXN0YS4gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3ViamVjdCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbCB0byBjdXN0b21lcnMgYWJvdXQgbmV3IHN1cnZleS4nfSA9IAogICAgICAgICdBc3VudG8gZGVmYXVsdCBwYXJhIGVsIGVtYWlsIGRlIG5vdGlmaWNhY2nzbiBhIGxvcyBjbGllbnRlcyBzb2JyZSBsYSBlbmN1ZXN0YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBhbiBvdmVydmlldyBtb2R1bGUgdG8gc2hvdyB0aGUgc21hbGwgdmlldyBvZiBhIHN1cnZleSBsaXN0Lid9ID0gCiAgICAgICAgJ0RlZmluZSB1bmEgbfNkdWxvIHJlc3VtZW4gcGFyYSBtb3N0cmFyIGxhIHZpc3RhIHBlcXVl8WEgZGUgbGEgbGlzdGEgZGUgZW5jdWVzdGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBzaG93biBjb2x1bW5zIGluIHRoZSBzdXJ2ZXkgb3ZlcnZpZXcuIFRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3Qgb24gdGhlIHBvc2l0aW9uIG9mIHRoZSBjb2x1bW4uJ30gPSAKICAgICAgICAnRGVmaW5lIGxhcyBjb2x1bW5hcyBtb3N0cmFkYXMgZW4gbGEgdmlzdGEgXCdSZXN1bWVuIGRlIEVzdGFkaXN0aWNhc1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHN1cnZleSB6b29tIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAKICAgICAgICAnUmVnaXN0cm8gZGUgbfNkdWxvIGZyb250ZW5kIFN1cnZleVpvb20gZW4gbGEgaW50ZXJmYWNlIGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBQdWJsaWNTdXJ2ZXkgb2JqZWN0IGluIHRoZSBwdWJsaWMgU3VydmV5IGFyZWEuJ30gPSAKICAgICAgICAnUmVnaXN0cm8gZGUgbfNkdWxvIGZyb250ZW5kIFB1YmxpY1N1cnZleSBlbiBsYSBpbnRlcmZhY2UgcPpibGljYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgdGhpcyByZWdleCBtYXRjaGVzLCBubyBjdXN0b21lciBzdXJ2ZXkgd2lsbCBiZSBzZW50Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgcGFnZXMgKGluIHdoaWNoIHRoZSBzdXJ2ZXlzIGFyZSBzaG93bikgb2YgdGhlIHNtYWxsIHN1cnZleSBvdmVydmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHVibGljIFN1cnZleS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IE92ZXJ2aWV3ICJTbWFsbCIgTGltaXQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VydmV5IFpvb20gTW9kdWxlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdXJ2ZXkgbGltaXQgcGVyIHBhZ2UgZm9yIFN1cnZleSBPdmVydmlldyAiU21hbGwiJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZSBpZGVudGlmaWVyIGZvciBhIHN1cnZleSwgZS5nLiBTdXJ2ZXkjLCBNeVN1cnZleSMuIFRoZSBkZWZhdWx0IGlzIFN1cnZleSMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpY2tldCBldmVudCBtb2R1bGUgdG8gc2VuZCBhdXRvbWF0aWNhbGx5IHN1cnZleSBlbWFpbCByZXF1ZXN0cyB0byBjdXN0b21lcnMgaWYgYSB0aWNrZXQgZ2V0cyBjbG9zZWQuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9iZ19TdXJ2ZXkucG0gLSB0cmFuc2xhdGlvbiBmaWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBiZ19TdXJ2ZXkucG0sdiAxLjEgMjAxMS8wMS8yMCAxNzoyMDoyMCBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpiZ19TdXJ2ZXk7Cgp1c2Ugc3RyaWN0OwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFN1cnZleQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JlYXRlIE5ldyBTdXJ2ZXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW50cm9kdWN0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludGVybmFsIERlc2NyaXB0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1cnZleSBFZGl0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dlbmVyYWwgSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+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+eydUaWNrZXQgZnJlZSB0ZXh0IG9wdGlvbnMgc2hvd24gaW4gdGhlIHRpY2tldCBtZXNzYWdlIHNjcmVlbiBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLiBQb3NzaWJsZSBzZXR0aW5nczogMCA9IERpc2FibGVkLCAxID0gRW5hYmxlZCwgMiA9IEVuYWJsZWQgYW5kIHJlcXVpcmVkLiBOT1RFLiBJZiB5b3Ugd2FudCB0byBkaXNwbGF5IHRoZXNlIGZpZWxkcyBhbHNvIGluIHRoZSB0aWNrZXQgem9vbSBvZiB0aGUgY3VzdG9tZXIgaW50ZXJmYWNlLCB5b3UgaGF2ZSB0byBlbmFibGUgdGhlbSBpbiBDdXN0b21lclRpY2tldFpvb20jIyNBdHRyaWJ1dGVzVmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGlja2V0IGZyZWUgdGltZSBvcHRpb25zIHNob3duIGluIHRoZSB0aWNrZXQgbWVzc2FnZSBzY3JlZW4gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZS4gUG9zc2libGUgc2V0dGluZ3M6IDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQsIDIgPSBFbmFibGVkIGFuZCByZXF1aXJlZC4gTk9URS4gSWYgeW91IHdhbnQgdG8gZGlzcGxheSB0aGVzZSBmaWVsZHMgYWxzbyBpbiB0aGUgdGlja2V0IHpvb20gb2YgdGhlIGN1c3RvbWVyIGludGVyZmFjZSwgeW91IGhhdmUgdG8gZW5hYmxlIHRoZW0gaW4gQ3VzdG9tZXJUaWNrZXRab29tIyMjQXR0cmlidXRlc1ZpZXcuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vU3VydmV5LnBtIC0gYWxsIHN1cnZleSBmdW50aW9ucwojIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogU3VydmV5LnBtLHYgMS41NyAyMDExLzAxLzE3IDE2OjUzOjM1IGR6IEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTdXJ2ZXk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRGlnZXN0OjpNRDU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyOwp1c2UgS2VybmVsOjpTeXN0ZW06OkVtYWlsOwp1c2UgS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlsczsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ7CnVzZSBNYWlsOjpBZGRyZXNzOwoKdXNlIHZhcnMgcXcoQElTQSAkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjU3ICQpIFsxXTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6U3VydmV5IC0gc3VydmV5IGxpYgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgc3VydmV5IGZ1bmN0aW9ucy4gRS4gZy4gdG8gYWRkIHN1cnZleSBvciBhbmQgZnVuY3Rpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6Q29uZmlnOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpFbmNvZGU7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkxvZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6REI7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok1haW47CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OlVzZXI7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OlN1cnZleTsKCiAgICBteSAkQ29uZmlnT2JqZWN0ID0gS2VybmVsOjpDb25maWctPm5ldygpOwogICAgbXkgJEVuY29kZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpFbmNvZGUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICk7CiAgICBteSAkTG9nT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+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+ICRQYXJhbXtTdXJ2ZXlJRH0sCiAgICApOwoKICAgICMgYWRkZWQgQ3JlYXRlQnkKICAgIG15ICVDcmVhdGVVc2VySW5mbyA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgIFVzZXJJRCA9PiAkRGF0YXtDcmVhdGVCeX0sCiAgICAgICAgQ2FjaGVkID0+IDEsCiAgICApOwogICAgJERhdGF7Q3JlYXRlVXNlckxvZ2lufSAgICAgPSAkQ3JlYXRlVXNlckluZm97VXNlckxvZ2lufTsKICAgICREYXRhe0NyZWF0ZVVzZXJGaXJzdG5hbWV9ID0gJENyZWF0ZVVzZXJJbmZve1VzZXJGaXJzdG5hbWV9OwogICAgJERhdGF7Q3JlYXRlVXNlckxhc3RuYW1lfSAgPSAkQ3JlYXRlVXNlckluZm97VXNlckxhc3RuYW1lfTsKCiAgICAjIGFkZGVkIENoYW5nZUJ5CiAgICBteSAlQ2hhbmdlVXNlckluZm8gPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5HZXRVc2VyRGF0YSgKICAgICAgICBVc2VySUQgPT4gJERhdGF7Q2hhbmdlQnl9LAogICAgICAgIENhY2hlZCA9PiAxLAogICAgKTsKICAgICREYXRhe0NoYW5nZVVzZXJMb2dpbn0gICAgID0gJENoYW5nZVVzZXJJbmZve1VzZXJMb2dpbn07CiAgICAkRGF0YXtDaGFuZ2VVc2VyRmlyc3RuYW1lfSA9ICRDaGFuZ2VVc2VySW5mb3tVc2VyRmlyc3RuYW1lfTsKICAgICREYXRhe0NoYW5nZVVzZXJMYXN0bmFtZX0gID0gJENoYW5nZVVzZXJJbmZve1VzZXJMYXN0bmFtZX07CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBTdXJ2ZXlTdGF0dXNTZXQoKQoKdG8gc2V0IGEgbmV3IHN1cnZleSBzdGF0dXMgKFZhbGlkLCBJbnZhbGlkLCBNYXN0ZXIpCgogICAgJFN0YXR1c1NldCA9ICRTdXJ2ZXlPYmplY3QtPlN1cnZleVN0YXR1c1NldCgKICAgICAgICBTdXJ2ZXlJRCAgPT4gMTIzLAogICAgICAgIE5ld1N0YXR1cyA9PiAnTWFzdGVyJwogICAgKTsKCj1jdXQKCnN1YiBTdXJ2ZXlTdGF0dXNTZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU3VydmV5SUQgTmV3U3RhdHVzKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17TmV3U3RhdHVzfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte05ld1N0YXR1c30gKTsKICAgICRQYXJhbXtTdXJ2ZXlJRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtTdXJ2ZXlJRH0sICdJbnRlZ2VyJyApOwoKICAgICMgZ2V0IGN1cnJlbnQgc3RhdHVzCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAiU0VMRUNUIHN0YXR1cyBGUk9NIHN1cnZleSBXSEVSRSBpZCA9ICRQYXJhbXtTdXJ2ZXlJRH0iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFN0YXR1cyA9ICcnOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU3RhdHVzID0gJFJvd1swXTsKICAgIH0KCiAgICAjIHRoZSBjdXJlbnQgc3RhdHVzCiAgICBpZiAoICRTdGF0dXMgZXEgJ05ldycgfHwgJFN0YXR1cyBlcSAnSW52YWxpZCcgKSB7CgogICAgICAgICMgZ2V0IHRoZSBxdWVzdGlvbiBpZHMKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gIlNFTEVDVCBpZCBGUk9NIHN1cnZleV9xdWVzdGlvbiBXSEVSRSBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IiwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICBteSAkUXVlc3Q7CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJFF1ZXN0ID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAnTm9RdWVzdGlvbicgaWYgISRRdWVzdDsKCiAgICAgICAgIyBnZXQgYWxsIHF1ZXN0aW9ucyAodHlwZSByYWRpbyBhbmQgY2hlY2tib3gpCiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkIEZST00gc3VydmV5X3F1ZXN0aW9uIgogICAgICAgICAgICAgICAgLiAiIFdIRVJFIHN1cnZleV9pZCA9ICRQYXJhbXtTdXJ2ZXlJRH0gQU5EICIKICAgICAgICAgICAgICAgIC4gIihxdWVzdGlvbl90eXBlID0gJ1JhZGlvJyBPUiBxdWVzdGlvbl90eXBlID0gJ0NoZWNrYm94JykiLAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIG15IEBRdWVzdGlvbklEczsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICBwdXNoKCBAUXVlc3Rpb25JRHMsICRSb3dbMF0gKTsKICAgICAgICB9CiAgICAgICAgZm9yIG15ICRPbmVJRCAoQFF1ZXN0aW9uSURzKSB7CgogICAgICAgICAgICAjIGdldCBhbGwgYW5zd2VyIGlkcyBvZiBhIHF1ZXN0aW9uCiAgICAgICAgICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICAgICAgU1FMICAgPT4gIlNFTEVDVCBDT1VOVChpZCkgRlJPTSBzdXJ2ZXlfYW5zd2VyIFdIRVJFIHF1ZXN0aW9uX2lkID0gJE9uZUlEIiwKICAgICAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICAgICAgbXkgJENvdW50ZXI7CiAgICAgICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICAgICAkQ291bnRlciA9ICRSb3dbMF07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAnSW5jb21wbGV0ZVF1ZXN0aW9uJyBpZiAkQ291bnRlciA8IDI7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBuZXcgc3RhdHVzCiAgICAgICAgaWYgKCAkUGFyYW17TmV3U3RhdHVzfSBlcSAnTWFzdGVyJyApIHsKICAgICAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5IFNFVCBzdGF0dXMgPSAnVmFsaWQnIFdIRVJFIHN0YXR1cyA9ICdNYXN0ZXInIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgaWYgKCAkUGFyYW17TmV3U3RhdHVzfSBlcSAnVmFsaWQnIHx8ICRQYXJhbXtOZXdTdGF0dXN9IGVxICdNYXN0ZXInICkgewogICAgICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXkgU0VUIHN0YXR1cyA9ICckUGFyYW17TmV3U3RhdHVzfScgIgogICAgICAgICAgICAgICAgICAgIC4gIldIRVJFIGlkID0gJFBhcmFte1N1cnZleUlEfSIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybiAnU3RhdHVzU2V0JzsKICAgICAgICB9CiAgICB9CiAgICBlbHNpZiAoICRTdGF0dXMgZXEgJ1ZhbGlkJyApIHsKCiAgICAgICAgIyBzZXQgc3RhdHVzIE1hc3RlcgogICAgICAgIGlmICggJFBhcmFte05ld1N0YXR1c30gZXEgJ01hc3RlcicgKSB7CiAgICAgICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleSBTRVQgc3RhdHVzID0gJ1ZhbGlkJyBXSEVSRSBzdGF0dXMgPSAnTWFzdGVyJyIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleSBTRVQgc3RhdHVzID0gJ01hc3RlcicgV0hFUkUgaWQgPSAkUGFyYW17U3VydmV5SUR9IiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICdTdGF0dXNTZXQnOwogICAgICAgIH0KCiAgICAgICAgIyBzZXQgc3RhdHVzIEludmFsaWQKICAgICAgICBlbHNpZiAoICRQYXJhbXtOZXdTdGF0dXN9IGVxICdJbnZhbGlkJyApIHsKICAgICAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5IFNFVCBzdGF0dXMgPSAnSW52YWxpZCcgV0hFUkUgaWQgPSAkUGFyYW17U3VydmV5SUR9IiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuICdTdGF0dXNTZXQnOwogICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJFN0YXR1cyBlcSAnTWFzdGVyJyApIHsKCiAgICAgICAgIyBzZXQgc3RhdHVzIFZhbGlkCiAgICAgICAgaWYgKCAkUGFyYW17TmV3U3RhdHVzfSBlcSAnVmFsaWQnIHx8ICRQYXJhbXtOZXdTdGF0dXN9IGVxICdJbnZhbGlkJyApIHsKICAgICAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5IFNFVCBzdGF0dXMgPSAnJFBhcmFte05ld1N0YXR1c30nICIKICAgICAgICAgICAgICAgICAgICAuICJXSEVSRSBpZCA9ICRQYXJhbXtTdXJ2ZXlJRH0iLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm4gJ1N0YXR1c1NldCc7CiAgICAgICAgfQogICAgfQp9Cgo9aXRlbSBTdXJ2ZXlTYXZlKCkKCnRvIHVwZGF0ZSBhbiBleGlzdGluZyBzdXJ2ZXkKCiAgICAkU3VydmV5T2JqZWN0LT5TdXJ2ZXlTYXZlKAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gMSwKICAgICAgICBTdXJ2ZXlJRCAgICAgICAgICAgID0+IDQsCiAgICAgICAgVGl0bGUgICAgICAgICAgICAgICA9PiAnQSBUaXRsZScsCiAgICAgICAgSW50cm9kdWN0aW9uICAgICAgICA9PiAnVGhlIGludHJvZHVjdGlvbiBvZiB0aGUgc3VydmV5JywKICAgICAgICBEZXNjcmlwdGlvbiAgICAgICAgID0+ICdUaGUgaW50ZXJuYWwgZGVzY3JpcHRpb24gb2YgdGhlIHN1cnZleScsCiAgICAgICAgTm90aWZpY2F0aW9uU2VuZGVyICA9PiAncXVhbGl0eUBleGFtcGxlLmNvbScsCiAgICAgICAgTm90aWZpY2F0aW9uU3ViamVjdCA9PiAnSGVscCB1cyB3aXRoIHlvdXIgZmVlZGJhY2shJywKICAgICAgICBOb3RpZmljYXRpb25Cb2R5ICAgID0+ICdEZWFyIGN1c3RvbWVyLi4uJywKICAgICAgICBRdWV1ZXMgICAgICAgICAgICAgID0+IFsyLCA1LCA5XSwgICMgKG9wdGlvbmFsKSBzdXJ2ZXkgaXMgdmFsaWQgZm9yIHRoZXNlIHF1ZXVlcwogICAgKTsKCj1jdXQKCnN1YiBTdXJ2ZXlTYXZlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKAogICAgICAgIHF3KAogICAgICAgIFVzZXJJRCBTdXJ2ZXlJRCBUaXRsZSBJbnRyb2R1Y3Rpb24gRGVzY3JpcHRpb24KICAgICAgICBOb3RpZmljYXRpb25TZW5kZXIgTm90aWZpY2F0aW9uU3ViamVjdCBOb3RpZmljYXRpb25Cb2R5CiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBxdWV1ZXMKICAgIGlmICggJFBhcmFte1F1ZXVlc30gJiYgcmVmICRQYXJhbXtRdWV1ZXN9IG5lICdBUlJBWScgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdRdWV1ZXMgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UuJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlCiAgICAkUGFyYW17UXVldWVzfSB8fD0gW107CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAoCiAgICAgICAgcXcoCiAgICAgICAgVGl0bGUgSW50cm9kdWN0aW9uIERlc2NyaXB0aW9uCiAgICAgICAgTm90aWZpY2F0aW9uU2VuZGVyIE5vdGlmaWNhdGlvblN1YmplY3QgTm90aWZpY2F0aW9uQm9keQogICAgICAgICkKICAgICAgICApCiAgICB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9ICk7CiAgICB9CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgU3VydmV5SUQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICAjIHVwZGF0ZSB0aGUgc3VydmV5CiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXkgU0VUICIKICAgICAgICAgICAgLiAidGl0bGUgPSAnJFBhcmFte1RpdGxlfScsICIKICAgICAgICAgICAgLiAiaW50cm9kdWN0aW9uID0gJyRQYXJhbXtJbnRyb2R1Y3Rpb259JywgIgogICAgICAgICAgICAuICJkZXNjcmlwdGlvbiA9ICckUGFyYW17RGVzY3JpcHRpb259JywgIgogICAgICAgICAgICAuICJub3RpZmljYXRpb25fc2VuZGVyID0gJyRQYXJhbXtOb3RpZmljYXRpb25TZW5kZXJ9JywgIgogICAgICAgICAgICAuICJub3RpZmljYXRpb25fc3ViamVjdCA9ICckUGFyYW17Tm90aWZpY2F0aW9uU3ViamVjdH0nLCAiCiAgICAgICAgICAgIC4gIm5vdGlmaWNhdGlvbl9ib2R5ID0gJyRQYXJhbXtOb3RpZmljYXRpb25Cb2R5fScsICIKICAgICAgICAgICAgLiAiY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgIgogICAgICAgICAgICAuICJjaGFuZ2VfYnkgPSAkUGFyYW17VXNlcklEfSAiCiAgICAgICAgICAgIC4gIldIRVJFIGlkID0gJFBhcmFte1N1cnZleUlEfSIsCiAgICApOwoKICAgICMgaW5zZXJ0IG5ldyBzdXJ2ZXktcXVldWUgcmVsYXRpb25zCiAgICByZXR1cm4gJFNlbGYtPlN1cnZleVF1ZXVlU2F2ZSgKICAgICAgICBTdXJ2ZXlJRCA9PiAkUGFyYW17U3VydmV5SUR9LAogICAgICAgIFF1ZXVlSURzID0+ICRQYXJhbXtRdWV1ZXN9LAogICAgKTsKfQoKPWl0ZW0gU3VydmV5TmV3KCkKCnRvIGFkZCBhIG5ldyBzdXJ2ZXkKCiAgICBteSAkU3VydmV5SUQgPSAkU3VydmV5T2JqZWN0LT5TdXJ2ZXlOZXcoCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAogICAgICAgIFRpdGxlICAgICAgICAgICAgICAgPT4gJ0EgVGl0bGUnLAogICAgICAgIEludHJvZHVjdGlvbiAgICAgICAgPT4gJ1RoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIHN1cnZleScsCiAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICA9PiAnVGhlIGludGVybmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBzdXJ2ZXknLAogICAgICAgIE5vdGlmaWNhdGlvblNlbmRlciAgPT4gJ3F1YWxpdHlAZXhhbXBsZS5jb20nLAogICAgICAgIE5vdGlmaWNhdGlvblN1YmplY3QgPT4gJ0hlbHAgdXMgd2l0aCB5b3VyIGZlZWRiYWNrIScsCiAgICAgICAgTm90aWZpY2F0aW9uQm9keSAgICA9PiAnRGVhciBjdXN0b21lci4uLicsCiAgICAgICAgUXVldWVzICAgICAgICAgICAgICA9PiBbMiwgNSwgOV0sICAjIChvcHRpb25hbCkgc3VydmV5IGlzIHZhbGlkIGZvciB0aGVzZSBxdWV1ZXMKICAgICk7Cgo9Y3V0CgpzdWIgU3VydmV5TmV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKAogICAgICAgIHF3KAogICAgICAgIFVzZXJJRCBUaXRsZSBJbnRyb2R1Y3Rpb24gRGVzY3JpcHRpb24KICAgICAgICBOb3RpZmljYXRpb25TZW5kZXIgTm90aWZpY2F0aW9uU3ViamVjdCBOb3RpZmljYXRpb25Cb2R5CiAgICAgICAgKQogICAgICAgICkKICAgIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAoCiAgICAgICAgcXcoCiAgICAgICAgVGl0bGUgSW50cm9kdWN0aW9uIERlc2NyaXB0aW9uCiAgICAgICAgTm90aWZpY2F0aW9uU2VuZGVyIE5vdGlmaWNhdGlvblN1YmplY3QgTm90aWZpY2F0aW9uQm9keQogICAgICAgICkKICAgICAgICApCiAgICB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9ICk7CiAgICB9CiAgICAkUGFyYW17VXNlcklEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1VzZXJJRH0sICdJbnRlZ2VyJyApOwoKICAgICMgaW5zZXJ0IGEgbmV3IHN1cnZleQogICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiSU5TRVJUIElOVE8gc3VydmV5ICh0aXRsZSwgaW50cm9kdWN0aW9uLCBkZXNjcmlwdGlvbiwiCiAgICAgICAgICAgIC4gIiBub3RpZmljYXRpb25fc2VuZGVyLCBub3RpZmljYXRpb25fc3ViamVjdCwgbm90aWZpY2F0aW9uX2JvZHksIgogICAgICAgICAgICAuICIgc3RhdHVzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5IgogICAgICAgICAgICAuICIpIFZBTFVFUyAoIgogICAgICAgICAgICAuICInJFBhcmFte1RpdGxlfScsICIKICAgICAgICAgICAgLiAiJyRQYXJhbXtJbnRyb2R1Y3Rpb259JywgIgogICAgICAgICAgICAuICInJFBhcmFte0Rlc2NyaXB0aW9ufScsICIKICAgICAgICAgICAgLiAiJyRQYXJhbXtOb3RpZmljYXRpb25TZW5kZXJ9JywgIgogICAgICAgICAgICAuICInJFBhcmFte05vdGlmaWNhdGlvblN1YmplY3R9JywgIgogICAgICAgICAgICAuICInJFBhcmFte05vdGlmaWNhdGlvbkJvZHl9JywgIgogICAgICAgICAgICAuICInTmV3JywgIgogICAgICAgICAgICAuICJjdXJyZW50X3RpbWVzdGFtcCwgIgogICAgICAgICAgICAuICIkUGFyYW17VXNlcklEfSwgIgogICAgICAgICAgICAuICJjdXJyZW50X3RpbWVzdGFtcCwgIgogICAgICAgICAgICAuICIkUGFyYW17VXNlcklEfSkiLAogICAgKTsKCiAgICAjIGdldCB0aGUgaWQgb2YgdGhlIHN1cnZleQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQgRlJPTSBzdXJ2ZXkgV0hFUkUgIgogICAgICAgICAgICAuICJ0aXRsZSA9ICckUGFyYW17VGl0bGV9JyBBTkQgIgogICAgICAgICAgICAuICJpbnRyb2R1Y3Rpb24gPSAnJFBhcmFte0ludHJvZHVjdGlvbn0nIEFORCAiCiAgICAgICAgICAgIC4gImRlc2NyaXB0aW9uID0gJyRQYXJhbXtEZXNjcmlwdGlvbn0nICIKICAgICAgICAgICAgLiAiT1JERVIgQlkgaWQgREVTQyIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkU3VydmV5SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRTdXJ2ZXlJRCA9ICRSb3dbMF07CiAgICB9CgogICAgIyBzZXQgdGhlIHN1cnZleSBudW1iZXIKICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXkgU0VUICIKICAgICAgICAgICAgLiAic3VydmV5bnVtYmVyID0gJyIKICAgICAgICAgICAgLiAoICRTdXJ2ZXlJRCArIDEwMDAwICkgLiAiJyAiCiAgICAgICAgICAgIC4gIldIRVJFIGlkID0gJFN1cnZleUlEIgogICAgKTsKCiAgICByZXR1cm4gJFN1cnZleUlEIGlmICEkUGFyYW17UXVldWVzfTsKICAgIHJldHVybiAkU3VydmV5SUQgaWYgcmVmICRQYXJhbXtRdWV1ZXN9IG5lICdBUlJBWSc7CgogICAgIyBpbnNlcnQgbmV3IHN1cnZleS1xdWV1ZSByZWxhdGlvbnMKICAgICRTZWxmLT5TdXJ2ZXlRdWV1ZVNhdmUoCiAgICAgICAgU3VydmV5SUQgPT4gJFN1cnZleUlELAogICAgICAgIFF1ZXVlSURzID0+ICRQYXJhbXtRdWV1ZXN9LAogICAgKTsKCiAgICByZXR1cm4gJFN1cnZleUlEOwp9Cgo9aXRlbSBRdWVzdGlvbkxpc3QoKQoKdG8gZ2V0IGEgYXJyYXkgbGlzdCBvZiBhbGwgcXVlc3Rpb24gaXRlbXMKCiAgICBteSBATGlzdCA9ICRTdXJ2ZXlPYmplY3QtPlF1ZXN0aW9uTGlzdCgKICAgICAgICBTdXJ2ZXlJRCA9PiAxCiAgICApOwoKPWN1dAoKc3ViIFF1ZXN0aW9uTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U3VydmV5SUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTdXJ2ZXlJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtTdXJ2ZXlJRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtTdXJ2ZXlJRH0sICdJbnRlZ2VyJyApOwoKICAgICMgZ2V0IGFsbCBxdWVzdGlvbnMgb2YgYSBzdXJ2ZXkKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkLCBzdXJ2ZXlfaWQsIHF1ZXN0aW9uLCBxdWVzdGlvbl90eXBlICIKICAgICAgICAgICAgLiAiIEZST00gc3VydmV5X3F1ZXN0aW9uIFdIRVJFIHN1cnZleV9pZCA9ICRQYXJhbXtTdXJ2ZXlJRH0gT1JERVIgQlkgcG9zaXRpb24iLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBteSAlRGF0YTsKICAgICAgICAkRGF0YXtRdWVzdGlvbklEfSA9ICRSb3dbMF07CiAgICAgICAgJERhdGF7U3VydmV5SUR9ICAgPSAkUm93WzFdOwogICAgICAgICREYXRhe1F1ZXN0aW9ufSAgID0gJFJvd1syXTsKICAgICAgICAkRGF0YXtUeXBlfSAgICAgICA9ICRSb3dbM107CgogICAgICAgIHB1c2ggQExpc3QsIFwlRGF0YTsKICAgIH0KCiAgICByZXR1cm4gQExpc3Q7Cn0KCj1pdGVtIFF1ZXN0aW9uQWRkKCkKCnRvIGFkZCBhIG5ldyBxdWVzdGlvbiB0byBhIHN1cnZleQoKICAgICRTdXJ2ZXlPYmplY3QtPlF1ZXN0aW9uQWRkKAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgIFN1cnZleUlEID0+IDEwLAogICAgICAgIFF1ZXN0aW9uID0+ICdUaGUgUXVlc3Rpb24nLAogICAgICAgIFR5cGUgPT4gJ1JhZGlvJywKICAgICk7Cgo9Y3V0CgpzdWIgUXVlc3Rpb25BZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIFN1cnZleUlEIFF1ZXN0aW9uIFR5cGUpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUXVlc3Rpb24gVHlwZSkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0gKTsKICAgIH0KICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBTdXJ2ZXlJRCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0sICdJbnRlZ2VyJyApOwogICAgfQoKICAgIHJldHVybiBpZiAhJFBhcmFte1F1ZXN0aW9ufTsKCiAgICAjIGluc2VydCBhIG5ldyBxdWVzdGlvbgogICAgcmV0dXJuICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIklOU0VSVCBJTlRPIHN1cnZleV9xdWVzdGlvbiAoc3VydmV5X2lkLCBxdWVzdGlvbiwgcXVlc3Rpb25fdHlwZSwgIgogICAgICAgICAgICAuICJwb3NpdGlvbiwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgVkFMVUVTICgiCiAgICAgICAgICAgIC4gIiRQYXJhbXtTdXJ2ZXlJRH0sICIKICAgICAgICAgICAgLiAiJyRQYXJhbXtRdWVzdGlvbn0nLCAiCiAgICAgICAgICAgIC4gIickUGFyYW17VHlwZX0nLCAyNTUsICIKICAgICAgICAgICAgLiAiY3VycmVudF90aW1lc3RhbXAsICIKICAgICAgICAgICAgLiAiJFBhcmFte1VzZXJJRH0sICIKICAgICAgICAgICAgLiAiY3VycmVudF90aW1lc3RhbXAsICIKICAgICAgICAgICAgLiAiJFBhcmFte1VzZXJJRH0pIiwKICAgICk7Cn0KCj1pdGVtIFF1ZXN0aW9uRGVsZXRlKCkKCnRvIGRlbGV0ZSBhIHF1ZXN0aW9uIGZyb20gYSBzdXJ2ZXkKCiAgICAkU3VydmV5T2JqZWN0LT5RdWVzdGlvbkRlbGV0ZSgKICAgICAgICBTdXJ2ZXlJRCA9PiAxLAogICAgICAgIFF1ZXN0aW9uSUQgPT4gMTAsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXN0aW9uRGVsZXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFN1cnZleUlEIFF1ZXN0aW9uSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFN1cnZleUlEIFF1ZXN0aW9uSUQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICAjIGRlbGV0ZSBhbGwgYW5zd2VycyBvZiBhIHF1ZXN0aW9uCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzdXJ2ZXlfYW5zd2VyIFdIRVJFIHF1ZXN0aW9uX2lkID0gJFBhcmFte1F1ZXN0aW9uSUR9IiwKICAgICk7CgogICAgIyBkZWxldGUgdGhlIHF1ZXN0aW9uCiAgICByZXR1cm4gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiREVMRVRFIEZST00gc3VydmV5X3F1ZXN0aW9uIFdIRVJFICIKICAgICAgICAgICAgLiAiaWQgPSAkUGFyYW17UXVlc3Rpb25JRH0gQU5EICIKICAgICAgICAgICAgLiAic3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSIsCiAgICApOwp9Cgo9aXRlbSBRdWVzdGlvblNvcnQoKQoKdG8gc29ydCBhbGwgcXVlc3Rpb25zIGZyb20gYSBzdXJ2ZXkKCiAgICAkU3VydmV5T2JqZWN0LT5RdWVzdGlvblNvcnQoCiAgICAgICAgU3VydmV5SUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgUXVlc3Rpb25Tb3J0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtTdXJ2ZXlJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFN1cnZleUlEIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17U3VydmV5SUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17U3VydmV5SUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGdldCBhbGwgcXVlc3Rpb24gb2YgYSBzdXJ2ZXkgKHNvcnRlZCBieSBwb3NpdGlvbikKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkIEZST00gc3VydmV5X3F1ZXN0aW9uIgogICAgICAgICAgICAuICIgV0hFUkUgc3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSBPUkRFUiBCWSBwb3NpdGlvbiIsCiAgICApOwoKICAgIG15IEBMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBMaXN0LCAkUm93WzBdOwogICAgfQoKICAgIG15ICRDb3VudGVyID0gMTsKICAgIGZvciBteSAkUXVlc3Rpb25JRCAoQExpc3QpIHsKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleV9xdWVzdGlvbiBTRVQgcG9zaXRpb24gPSAkQ291bnRlciBXSEVSRSBpZCA9ICRRdWVzdGlvbklEIiwKICAgICAgICApOwogICAgfQogICAgY29udGludWUgewogICAgICAgICRDb3VudGVyKys7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFF1ZXN0aW9uVXAoKQoKdG8gbW92ZSBhIHF1ZXN0aW9uIHVwCgogICAgJFN1cnZleU9iamVjdC0+UXVlc3Rpb25VcCgKICAgICAgICBTdXJ2ZXlJRCA9PiAxLAogICAgICAgIFF1ZXN0aW9uSUQgPT4gNCwKICAgICk7Cgo9Y3V0CgpzdWIgUXVlc3Rpb25VcCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTdXJ2ZXlJRCBRdWVzdGlvbklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTdXJ2ZXlJRCBRdWVzdGlvbklEKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgIyBnZXQgcG9zaXRpb24KICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIHBvc2l0aW9uIEZST00gc3VydmV5X3F1ZXN0aW9uIgogICAgICAgICAgICAuICIgV0hFUkUgaWQgPSAkUGFyYW17UXVlc3Rpb25JRH0gQU5EIHN1cnZleV9pZCA9ICRQYXJhbXtTdXJ2ZXlJRH0iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFBvc2l0aW9uID0gMDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFBvc2l0aW9uID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gaWYgJFBvc2l0aW9uIDwgMjsKCiAgICBteSAkUG9zaXRpb25VcCA9ICRQb3NpdGlvbiAtIDE7CgogICAgIyBnZXQgcXVlc3Rpb24KICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkIEZST00gc3VydmV5X3F1ZXN0aW9uIgogICAgICAgICAgICAuICIgV0hFUkUgc3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSBBTkQgcG9zaXRpb24gPSAkUG9zaXRpb25VcCIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkUXVlc3Rpb25JRERvd247CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRRdWVzdGlvbklERG93biA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIGlmICEkUXVlc3Rpb25JRERvd247CgogICAgIyB1cGRhdGUgcG9zaXRpb24KICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXlfcXVlc3Rpb24gU0VUICIKICAgICAgICAgICAgLiAicG9zaXRpb24gPSAkUG9zaXRpb24gIgogICAgICAgICAgICAuICJXSEVSRSBpZCA9ICRRdWVzdGlvbklERG93biIsCiAgICApOwoKICAgICMgdXBkYXRlIHBvc2l0aW9uCiAgICByZXR1cm4gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleV9xdWVzdGlvbiBTRVQgIgogICAgICAgICAgICAuICJwb3NpdGlvbiA9ICRQb3NpdGlvblVwICIKICAgICAgICAgICAgLiAiV0hFUkUgaWQgPSAkUGFyYW17UXVlc3Rpb25JRH0iLAogICAgKTsKfQoKPWl0ZW0gUXVlc3Rpb25Eb3duKCkKCnRvIG1vdmUgYSBxdWVzdGlvbiBkb3duCgogICAgJFN1cnZleU9iamVjdC0+UXVlc3Rpb25Eb3duKAogICAgICAgIFN1cnZleUlEID0+IDEsCiAgICAgICAgUXVlc3Rpb25JRCA9PiA0LAogICAgKTsKCj1jdXQKCnN1YiBRdWVzdGlvbkRvd24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU3VydmV5SUQgUXVlc3Rpb25JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU3VydmV5SUQgUXVlc3Rpb25JRCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0sICdJbnRlZ2VyJyApOwogICAgfQoKICAgICMgZ2V0IHBvc2l0aW9uCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBwb3NpdGlvbiBGUk9NIHN1cnZleV9xdWVzdGlvbiIKICAgICAgICAgICAgLiAiIFdIRVJFIGlkID0gJFBhcmFte1F1ZXN0aW9uSUR9IEFORCBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRQb3NpdGlvbjsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFBvc2l0aW9uID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gaWYgISRQb3NpdGlvbjsKCiAgICBteSAkUG9zaXRpb25Eb3duID0gJFBvc2l0aW9uICsgMTsKCiAgICAjIGdldCBxdWVzdGlvbgogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQgRlJPTSBzdXJ2ZXlfcXVlc3Rpb24iCiAgICAgICAgICAgIC4gIiBXSEVSRSBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IEFORCBwb3NpdGlvbiA9ICRQb3NpdGlvbkRvd24iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFF1ZXN0aW9uSURVcDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFF1ZXN0aW9uSURVcCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIGlmICEkUXVlc3Rpb25JRFVwOwoKICAgICMgdXBkYXRlIHBvc2l0aW9uCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5X3F1ZXN0aW9uIFNFVCAiCiAgICAgICAgICAgIC4gInBvc2l0aW9uID0gJFBvc2l0aW9uICIKICAgICAgICAgICAgLiAiV0hFUkUgaWQgPSAkUXVlc3Rpb25JRFVwIiwKICAgICk7CgogICAgIyB1cGRhdGUgcG9zaXRpb24KICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5X3F1ZXN0aW9uIFNFVCAiCiAgICAgICAgICAgIC4gInBvc2l0aW9uID0gJFBvc2l0aW9uRG93biAiCiAgICAgICAgICAgIC4gIldIRVJFIGlkID0gJFBhcmFte1F1ZXN0aW9uSUR9IiwKICAgICk7Cn0KCj1pdGVtIFF1ZXN0aW9uR2V0KCkKCnRvIGdldCBhbGwgYXR0cmlidXRlcyBvZiBhIHF1ZXN0aW9uCgogICAgbXkgJVF1ZXN0aW9uID0gJFN1cnZleU9iamVjdC0+UXVlc3Rpb25HZXQoCiAgICAgICAgUXVlc3Rpb25JRCA9PiAxMjMKICAgICk7Cgo9Y3V0CgpzdWIgUXVlc3Rpb25HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1F1ZXN0aW9uSUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBRdWVzdGlvbklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1F1ZXN0aW9uSUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17UXVlc3Rpb25JRH0sICdJbnRlZ2VyJyApOwoKICAgICMgZ2V0IHF1ZXN0aW9uCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgc3VydmV5X2lkLCBxdWVzdGlvbiwgcXVlc3Rpb25fdHlwZSwgcG9zaXRpb24sICIKICAgICAgICAgICAgLiAiY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSAiCiAgICAgICAgICAgIC4gIkZST00gc3VydmV5X3F1ZXN0aW9uIFdIRVJFIGlkID0gJFBhcmFte1F1ZXN0aW9uSUR9IiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXtRdWVzdGlvbklEfSA9ICRSb3dbMF07CiAgICAgICAgJERhdGF7U3VydmV5SUR9ICAgPSAkUm93WzFdOwogICAgICAgICREYXRhe1F1ZXN0aW9ufSAgID0gJFJvd1syXTsKICAgICAgICAkRGF0YXtUeXBlfSAgICAgICA9ICRSb3dbM107CiAgICAgICAgJERhdGF7UG9zaXRpb259ICAgPSAkUm93WzRdOwogICAgICAgICREYXRhe0NyZWF0ZVRpbWV9ID0gJFJvd1s1XTsKICAgICAgICAkRGF0YXtDcmVhdGVCeX0gICA9ICRSb3dbNl07CiAgICAgICAgJERhdGF7Q2hhbmdlVGltZX0gPSAkUm93WzddOwogICAgICAgICREYXRhe0NoYW5nZUJ5fSAgID0gJFJvd1s4XTsKICAgIH0KCiAgICByZXR1cm4gJURhdGE7Cn0KCj1pdGVtIFF1ZXN0aW9uU2F2ZSgpCgp0byB1cGRhdGUgYW4gZXhpc3RpbmcgcXVlc3Rpb24KCiAgICAkU3VydmV5T2JqZWN0LT5RdWVzdGlvblNhdmUoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgUXVlc3Rpb25JRCA9PiA0LAogICAgICAgIFN1cnZleUlEID0+IDMsCiAgICAgICAgUXVlc3Rpb24gPT4gJ1RoZSBRdWVzdGlvbicsCiAgICApOwoKPWN1dAoKc3ViIFF1ZXN0aW9uU2F2ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgUXVlc3Rpb25JRCBTdXJ2ZXlJRCBRdWVzdGlvbikpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUXVlc3Rpb24pKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9ICk7CiAgICB9CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgUXVlc3Rpb25JRCBTdXJ2ZXlJRCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0sICdJbnRlZ2VyJyApOwogICAgfQoKICAgICMgdXBkYXRlIHF1ZXN0aW9uCiAgICByZXR1cm4gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleV9xdWVzdGlvbiBTRVQgIgogICAgICAgICAgICAuICJxdWVzdGlvbiA9ICckUGFyYW17UXVlc3Rpb259JywgIgogICAgICAgICAgICAuICJjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCAiCiAgICAgICAgICAgIC4gImNoYW5nZV9ieSA9ICRQYXJhbXtVc2VySUR9ICIKICAgICAgICAgICAgLiAiV0hFUkUgaWQgPSAkUGFyYW17UXVlc3Rpb25JRH0gIgogICAgICAgICAgICAuICJBTkQgc3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSIsCiAgICApOwp9Cgo9aXRlbSBRdWVzdGlvbkNvdW50KCkKCnRvIGNvdW50IGFsbCBxdWVzdGlvbnMgb2YgYSBzdXJ2ZXkKCiAgICBteSAkQ291bnRRdWVzdGlvbiA9ICRTdXJ2ZXlPYmplY3QtPlF1ZXN0aW9uQ291bnQoCiAgICAgICAgU3VydmV5SUQgPT4gMTIzCiAgICApOwoKPWN1dAoKc3ViIFF1ZXN0aW9uQ291bnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1N1cnZleUlEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU3VydmV5SUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17U3VydmV5SUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17U3VydmV5SUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGNvdW50IHF1ZXN0aW9ucwogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gIlNFTEVDVCBDT1VOVChpZCkgRlJPTSBzdXJ2ZXlfcXVlc3Rpb24gV0hFUkUgc3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQ291bnRRdWVzdGlvbjsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJENvdW50UXVlc3Rpb24gPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkQ291bnRRdWVzdGlvbjsKfQoKPWl0ZW0gQW5zd2VyTGlzdCgpCgp0byBnZXQgYSBhcnJheSBsaXN0IG9mIGFsbCBhbnN3ZXIgaXRlbXMKCiAgICBteSBATGlzdCA9ICRTdXJ2ZXlPYmplY3QtPkFuc3dlckxpc3QoCiAgICAgICAgUXVlc3Rpb25JRCA9PiAxCiAgICApOwoKPWN1dAoKc3ViIEFuc3dlckxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1F1ZXN0aW9uSUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBRdWVzdGlvbklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1F1ZXN0aW9uSUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17UXVlc3Rpb25JRH0sICdJbnRlZ2VyJyApOwoKICAgICMgZ2V0IGFuc3dlciBsaXN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgcXVlc3Rpb25faWQsIGFuc3dlciAiCiAgICAgICAgICAgIC4gIiBGUk9NIHN1cnZleV9hbnN3ZXIgV0hFUkUgcXVlc3Rpb25faWQgPSAkUGFyYW17UXVlc3Rpb25JRH0gT1JERVIgQlkgcG9zaXRpb24iLAogICAgKTsKCiAgICAjIGZldGNodCB0aGUgcmVzdWx0CiAgICBteSBATGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJURhdGE7CiAgICAgICAgJERhdGF7QW5zd2VySUR9ICAgPSAkUm93WzBdOwogICAgICAgICREYXRhe1F1ZXN0aW9uSUR9ID0gJFJvd1sxXTsKICAgICAgICAkRGF0YXtBbnN3ZXJ9ICAgICA9ICRSb3dbMl07CgogICAgICAgIHB1c2ggQExpc3QsIFwlRGF0YTsKICAgIH0KCiAgICByZXR1cm4gQExpc3Q7Cn0KCj1pdGVtIEFuc3dlckFkZCgpCgp0byBhZGQgYSBuZXcgYW5zd2VyIHRvIGEgcXVlc3Rpb24KCiAgICAkU3VydmV5T2JqZWN0LT5BbnN3ZXJBZGQoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgUXVlc3Rpb25JRCA9PiAxMCwKICAgICAgICBBbnN3ZXIgPT4gJ1RoZSBBbnN3ZXInLAogICAgKTsKCj1jdXQKCnN1YiBBbnN3ZXJBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVXNlcklEIFF1ZXN0aW9uSUQgQW5zd2VyKSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEFuc3dlcikpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0gKTsKICAgIH0KICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBRdWVzdGlvbklEKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgcmV0dXJuIGlmICEkUGFyYW17QW5zd2VyfTsKCiAgICAjIGluc2VydCBhbnN3ZXIKICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJJTlNFUlQgSU5UTyBzdXJ2ZXlfYW5zd2VyIChxdWVzdGlvbl9pZCwgYW5zd2VyLCBwb3NpdGlvbiwgIgogICAgICAgICAgICAuICJjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KSBWQUxVRVMgKCIKICAgICAgICAgICAgLiAiJFBhcmFte1F1ZXN0aW9uSUR9LCAiCiAgICAgICAgICAgIC4gIickUGFyYW17QW5zd2VyfScsIDI1NSwgIgogICAgICAgICAgICAuICJjdXJyZW50X3RpbWVzdGFtcCwgIgogICAgICAgICAgICAuICIkUGFyYW17VXNlcklEfSwgIgogICAgICAgICAgICAuICJjdXJyZW50X3RpbWVzdGFtcCwgIgogICAgICAgICAgICAuICIkUGFyYW17VXNlcklEfSkiLAogICAgKTsKfQoKPWl0ZW0gQW5zd2VyRGVsZXRlKCkKCnRvIGRlbGV0ZSBhIGFuc3dlciBmcm9tIGEgcXVlc3Rpb24KCiAgICAkU3VydmV5T2JqZWN0LT5BbnN3ZXJEZWxldGUoCiAgICAgICAgUXVlc3Rpb25JRCA9PiAxMCwKICAgICAgICBBbnN3ZXJJRCA9PiA0LAogICAgKTsKCj1jdXQKCnN1YiBBbnN3ZXJEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUXVlc3Rpb25JRCBBbnN3ZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUXVlc3Rpb25JRCBBbnN3ZXJJRCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0sICdJbnRlZ2VyJyApOwogICAgfQoKICAgICMgZGVsZXRlIGFuc3dlcgogICAgcmV0dXJuICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIkRFTEVURSBGUk9NIHN1cnZleV9hbnN3ZXIgV0hFUkUgIgogICAgICAgICAgICAuICJpZCA9ICRQYXJhbXtBbnN3ZXJJRH0gQU5EIHF1ZXN0aW9uX2lkID0gJFBhcmFte1F1ZXN0aW9uSUR9IiwKICAgICk7Cn0KCj1pdGVtIEFuc3dlclNvcnQoKQoKdG8gc29ydCBhbGwgYW5zd2VycyBmcm9tIGEgcXVlc3Rpb24KCiAgICAkU3VydmV5T2JqZWN0LT5BbnN3ZXJTb3J0KAogICAgICAgIFF1ZXN0aW9uSUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQW5zd2VyU29ydCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17UXVlc3Rpb25JRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFF1ZXN0aW9uSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17UXVlc3Rpb25JRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtRdWVzdGlvbklEfSwgJ0ludGVnZXInICk7CgogICAgIyBnZXQgYW5zd2VyIGxpc3QKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkIEZST00gc3VydmV5X2Fuc3dlciIKICAgICAgICAgICAgLiAiIFdIRVJFIHF1ZXN0aW9uX2lkID0gJFBhcmFte1F1ZXN0aW9uSUR9IE9SREVSIEJZIHBvc2l0aW9uIiwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBATGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBATGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICBteSAkQ291bnRlciA9IDE7CiAgICBmb3IgbXkgJEFuc3dlcklEIChATGlzdCkgewoKICAgICAgICAjIHVwZGF0ZSBwb3NpdGlvbgogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5X2Fuc3dlciBTRVQgcG9zaXRpb24gPSAkQ291bnRlciBXSEVSRSBpZCA9ICRBbnN3ZXJJRCIsCiAgICAgICAgKTsKICAgIH0KICAgIGNvbnRpbnVlIHsKICAgICAgICAkQ291bnRlcisrOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBBbnN3ZXJVcCgpCgp0byBtb3ZlIGEgYW5zd2VyIHVwCgogICAgJFN1cnZleU9iamVjdC0+QW5zd2VyVXAoCiAgICAgICAgUXVlc3Rpb25JRCA9PiA0LAogICAgICAgIEFuc3dlcklEID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFuc3dlclVwIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFF1ZXN0aW9uSUQgQW5zd2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFF1ZXN0aW9uSUQgQW5zd2VySUQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICAjIGdldCBwb3NpdGlvbgogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgcG9zaXRpb24gRlJPTSBzdXJ2ZXlfYW5zd2VyIgogICAgICAgICAgICAuICIgV0hFUkUgaWQgPSAkUGFyYW17QW5zd2VySUR9IEFORCBxdWVzdGlvbl9pZCA9ICRQYXJhbXtRdWVzdGlvbklEfSIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkUG9zaXRpb247CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRQb3NpdGlvbiA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIGlmICRQb3NpdGlvbiA8IDI7CgogICAgbXkgJFBvc2l0aW9uVXAgPSAkUG9zaXRpb24gLSAxOwoKICAgICMgZ2V0IGFuc3dlcgogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQgRlJPTSBzdXJ2ZXlfYW5zd2VyIgogICAgICAgICAgICAuICIgV0hFUkUgcXVlc3Rpb25faWQgPSAkUGFyYW17UXVlc3Rpb25JRH0gQU5EIHBvc2l0aW9uID0gJFBvc2l0aW9uVXAiLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJEFuc3dlcklERG93bjsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEFuc3dlcklERG93biA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIGlmICEkQW5zd2VySUREb3duOwoKICAgICMgdXBkYXRlIHBvc2l0aW9uCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5X2Fuc3dlciBTRVQgcG9zaXRpb24gPSAkUG9zaXRpb24gV0hFUkUgaWQgPSAkQW5zd2VySUREb3duIiwKICAgICk7CgogICAgIyB1cGRhdGUgcG9zaXRpb24KICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5X2Fuc3dlciBTRVQgIgogICAgICAgICAgICAuICJwb3NpdGlvbiA9ICRQb3NpdGlvblVwICIKICAgICAgICAgICAgLiAiV0hFUkUgaWQgPSAkUGFyYW17QW5zd2VySUR9IiwKICAgICk7Cn0KCj1pdGVtIEFuc3dlckRvd24oKQoKdG8gbW92ZSBhIGFuc3dlciBkb3duCgogICAgJFN1cnZleU9iamVjdC0+QW5zd2VyRG93bigKICAgICAgICBRdWVzdGlvbklEID0+IDQsCiAgICAgICAgQW5zd2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgQW5zd2VyRG93biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhRdWVzdGlvbklEIEFuc3dlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhRdWVzdGlvbklEIEFuc3dlcklEKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSwgJ0ludGVnZXInICk7CiAgICB9CgogICAgIyBnZXQgcG9zaXRpb24KICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIHBvc2l0aW9uIEZST00gc3VydmV5X2Fuc3dlciIKICAgICAgICAgICAgLiAiIFdIRVJFIGlkID0gJFBhcmFte0Fuc3dlcklEfSBBTkQgcXVlc3Rpb25faWQgPSAkUGFyYW17UXVlc3Rpb25JRH0iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFBvc2l0aW9uOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUG9zaXRpb24gPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBpZiAhJFBvc2l0aW9uOwoKICAgIG15ICRQb3NpdGlvbkRvd24gPSAkUG9zaXRpb24gKyAxOwoKICAgICMgZ2V0IGFuc3dlcgogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQgRlJPTSBzdXJ2ZXlfYW5zd2VyIgogICAgICAgICAgICAuICIgV0hFUkUgcXVlc3Rpb25faWQgPSAkUGFyYW17UXVlc3Rpb25JRH0gQU5EIHBvc2l0aW9uID0gJFBvc2l0aW9uRG93biIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQW5zd2VySURVcDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEFuc3dlcklEVXAgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBpZiAhJEFuc3dlcklEVXA7CgogICAgIyB1cGRhdGUgcG9zaXRpb24KICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIlVQREFURSBzdXJ2ZXlfYW5zd2VyIFNFVCBwb3NpdGlvbiA9ICRQb3NpdGlvbiBXSEVSRSBpZCA9ICRBbnN3ZXJJRFVwIiwKICAgICk7CgogICAgIyB1cGRhdGUgcG9zaXRpb24KICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc3VydmV5X2Fuc3dlciBTRVQgIgogICAgICAgICAgICAuICJwb3NpdGlvbiA9ICRQb3NpdGlvbkRvd24gIgogICAgICAgICAgICAuICJXSEVSRSBpZCA9ICRQYXJhbXtBbnN3ZXJJRH0iLAogICAgKTsKfQoKPWl0ZW0gQW5zd2VyR2V0KCkKCnRvIGdldCBhbGwgYXR0cmlidXRlcyBvZiBhIGFuc3dlcgoKICAgIG15ICVBbnN3ZXIgPSAkU3VydmV5T2JqZWN0LT5BbnN3ZXJHZXQoCiAgICAgICAgQW5zd2VySUQgPT4gMTIzCiAgICApOwoKPWN1dAoKc3ViIEFuc3dlckdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17QW5zd2VySUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBRdWVzdGlvbklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte0Fuc3dlcklEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte0Fuc3dlcklEfSwgJ0ludGVnZXInICk7CgogICAgIyBnZXQgYW5zd2VyCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4KICAgICAgICAgICAgIlNFTEVDVCBpZCwgcXVlc3Rpb25faWQsIGFuc3dlciwgcG9zaXRpb24sIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkgIgogICAgICAgICAgICAuICJGUk9NIHN1cnZleV9hbnN3ZXIgV0hFUkUgaWQgPSAkUGFyYW17QW5zd2VySUR9IiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXtBbnN3ZXJJRH0gICA9ICRSb3dbMF07CiAgICAgICAgJERhdGF7UXVlc3Rpb25JRH0gPSAkUm93WzFdOwogICAgICAgICREYXRhe0Fuc3dlcn0gICAgID0gJFJvd1syXTsKICAgICAgICAkRGF0YXtQb3NpdGlvbn0gICA9ICRSb3dbM107CiAgICAgICAgJERhdGF7Q3JlYXRlVGltZX0gPSAkUm93WzRdOwogICAgICAgICREYXRhe0NyZWF0ZUJ5fSAgID0gJFJvd1s1XTsKICAgICAgICAkRGF0YXtDaGFuZ2VUaW1lfSA9ICRSb3dbNl07CiAgICAgICAgJERhdGF7Q2hhbmdlQnl9ICAgPSAkUm93WzddOwogICAgfQoKICAgIHJldHVybiAlRGF0YTsKfQoKPWl0ZW0gQW5zd2VyU2F2ZSgpCgp0byB1cGRhdGUgYW4gZXhpc3RpbmcgYW5zd2VyCgogICAgJFN1cnZleU9iamVjdC0+QW5zd2VyU2F2ZSgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICBBbnN3ZXJJRCA9PiA2LAogICAgICAgIFF1ZXN0aW9uSUQgPT4gNCwKICAgICAgICBBbnN3ZXIgPT4gJ1RoZSBBbnN3ZXInLAogICAgKTsKCj1jdXQKCnN1YiBBbnN3ZXJTYXZlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFVzZXJJRCBBbnN3ZXJJRCBRdWVzdGlvbklEIEFuc3dlcikpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhBbnN3ZXIpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9ICk7CiAgICB9CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhVc2VySUQgQW5zd2VySUQgUXVlc3Rpb25JRCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRBcmd1bWVudH0sICdJbnRlZ2VyJyApOwogICAgfQoKICAgIHJldHVybiBpZiAhJFBhcmFte0Fuc3dlcn07CgogICAgIyB1cGRhdGUgYW5zd2VyCiAgICByZXR1cm4gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleV9hbnN3ZXIgU0VUICIKICAgICAgICAgICAgLiAiYW5zd2VyID0gJyRQYXJhbXtBbnN3ZXJ9JywgIgogICAgICAgICAgICAuICJjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCAiCiAgICAgICAgICAgIC4gImNoYW5nZV9ieSA9ICRQYXJhbXtVc2VySUR9ICIKICAgICAgICAgICAgLiAiV0hFUkUgaWQgPSAkUGFyYW17QW5zd2VySUR9ICIKICAgICAgICAgICAgLiAiQU5EIHF1ZXN0aW9uX2lkID0gJFBhcmFte1F1ZXN0aW9uSUR9IiwKICAgICk7Cn0KCj1pdGVtIEFuc3dlckNvdW50KCkKCnRvIGNvdW50IGFsbCBhbnN3ZXJzIG9mIGEgcXVlc3Rpb24KCiAgICBteSAkQ291bnRBbnN3ZXIgPSAkU3VydmV5T2JqZWN0LT5BbnN3ZXJDb3VudCgKICAgICAgICBRdWVzdGlvbklEID0+IDEyMwogICAgKTsKCj1jdXQKCnN1YiBBbnN3ZXJDb3VudCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17UXVlc3Rpb25JRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFF1ZXN0aW9uSUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17UXVlc3Rpb25JRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtRdWVzdGlvbklEfSwgJ0ludGVnZXInICk7CgogICAgIyBjb3VudCBhbnN3ZXJzCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAiU0VMRUNUIENPVU5UKGlkKSBGUk9NIHN1cnZleV9hbnN3ZXIgV0hFUkUgcXVlc3Rpb25faWQgPSAkUGFyYW17UXVlc3Rpb25JRH0iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJENvdW50QW5zd2VyOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ291bnRBbnN3ZXIgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkQ291bnRBbnN3ZXI7Cn0KCj1pdGVtIFZvdGVMaXN0KCkKCnRvIGdldCBhIGFycmF5IGxpc3Qgb2YgYWxsIHZvdGUgaXRlbXMKCiAgICBteSBATGlzdCA9ICRTdXJ2ZXlPYmplY3QtPlZvdGVMaXN0KAogICAgICAgIFN1cnZleUlEID0+IDEKICAgICk7Cgo9Y3V0CgpzdWIgVm90ZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1N1cnZleUlEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU3VydmV5SUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17U3VydmV5SUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17U3VydmV5SUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGdldCB2b3RlIGxpc3QKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkLCB0aWNrZXRfaWQsIHNlbmRfdGltZSwgdm90ZV90aW1lICIKICAgICAgICAgICAgLiAiRlJPTSBzdXJ2ZXlfcmVxdWVzdCBXSEVSRSBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9ICIKICAgICAgICAgICAgLiAiQU5EIHZhbGlkX2lkID0gMCBPUkRFUiBCWSB2b3RlX3RpbWUgREVTQyIsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQExpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG15ICVEYXRhOwogICAgICAgICREYXRhe1JlcXVlc3RJRH0gPSAkUm93WzBdOwogICAgICAgICREYXRhe1RpY2tldElEfSAgPSAkUm93WzFdOwogICAgICAgICREYXRhe1NlbmRUaW1lfSAgPSAkUm93WzJdOwogICAgICAgICREYXRhe1ZvdGVUaW1lfSAgPSAkUm93WzNdOwoKICAgICAgICBwdXNoIEBMaXN0LCBcJURhdGE7CiAgICB9CgogICAgcmV0dXJuIEBMaXN0Owp9Cgo9aXRlbSBWb3RlR2V0KCkKCnRvIGdldCBhbGwgYXR0cmlidXRlcyBvZiBhIHZvdGUKCiAgICBteSBAVm90ZSA9ICRTdXJ2ZXlPYmplY3QtPlZvdGVHZXQoCiAgICAgICAgUmVxdWVzdElEID0+IDEzLAogICAgICAgIFF1ZXN0aW9uSUQgPT4gMjMKICAgICk7Cgo9Y3V0CgpzdWIgVm90ZUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhSZXF1ZXN0SUQgUXVlc3Rpb25JRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUmVxdWVzdElEIFF1ZXN0aW9uSUQpKSB7CiAgICAgICAgJFBhcmFteyRBcmd1bWVudH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskQXJndW1lbnR9LCAnSW50ZWdlcicgKTsKICAgIH0KCiAgICAjIGdldCB2b3RlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgdm90ZV92YWx1ZSBGUk9NIHN1cnZleV92b3RlIgogICAgICAgICAgICAuICIgV0hFUkUgcmVxdWVzdF9pZCA9ICRQYXJhbXtSZXF1ZXN0SUR9IEFORCBxdWVzdGlvbl9pZCA9ICRQYXJhbXtRdWVzdGlvbklEfSIsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQExpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG15ICVEYXRhOwogICAgICAgICREYXRhe1JlcXVlc3RJRH0gPSAkUm93WzBdOwogICAgICAgICREYXRhe1ZvdGVWYWx1ZX0gPSAkUm93WzFdIHx8ICctJzsKCiAgICAgICAgcHVzaCBATGlzdCwgXCVEYXRhOwogICAgfQoKICAgIHJldHVybiBATGlzdDsKfQoKPWl0ZW0gQ291bnRWb3RlKCkKCnRvIGNvdW50IGFsbCB2b3RlcyBvZiBhIHN1cnZleQoKICAgIG15ICRDb3VudFZvdGUgPSAkU3VydmV5T2JqZWN0LT5Db3VudFZvdGUoCiAgICAgICAgUXVlc3Rpb25JRCA9PiAxMjMsCiAgICAgICAgVm90ZVZhbHVlID0+ICdUaGUgVmFsdWUnLAogICAgKTsKCj1jdXQKCnN1YiBDb3VudFZvdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUXVlc3Rpb25JRCBWb3RlVmFsdWUpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgJFBhcmFte1ZvdGVWYWx1ZX0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtWb3RlVmFsdWV9ICk7CiAgICAkUGFyYW17UXVlc3Rpb25JRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtRdWVzdGlvbklEfSwgJ0ludGVnZXInICk7CgogICAgIyBjb3VudCB2b3RlcwogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgQ09VTlQodm90ZV92YWx1ZSkgRlJPTSBzdXJ2ZXlfdm90ZSBXSEVSRSAiCiAgICAgICAgICAgIC4gInF1ZXN0aW9uX2lkID0gJFBhcmFte1F1ZXN0aW9uSUR9IEFORCB2b3RlX3ZhbHVlID0gJyRQYXJhbXtWb3RlVmFsdWV9JyIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQ291bnRWb3RlOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ291bnRWb3RlID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJENvdW50Vm90ZTsKfQoKPWl0ZW0gQ291bnRSZXF1ZXN0KCkKCnRvIGNvdW50IGFsbCByZXF1ZXN0cyBvZiBhIHN1cnZleQoKICAgIG15ICRDb3VudFJlcXVlc3QgPSAkU3VydmV5T2JqZWN0LT5Db3VudFJlcXVlc3QoCiAgICAgICAgUXVlc3Rpb25JRCA9PiAxMjMsCiAgICAgICAgVmFsaWRJRCA9PiAwLCAgICAgICAjICgwfDF8YWxsKQogICAgKTsKCj1jdXQKCnN1YiBDb3VudFJlcXVlc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU3VydmV5SUQgVmFsaWRJRCkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17U3VydmV5SUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17U3VydmV5SUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGNvdW50IHJlcXVlc3RzCiAgICBteSAkU1FMID0gIlNFTEVDVCBDT1VOVChpZCkgRlJPTSBzdXJ2ZXlfcmVxdWVzdCBXSEVSRSBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IjsKCiAgICAjIGFkZCB2YWxpZCBwYXJ0CiAgICBpZiAoICEkUGFyYW17VmFsaWRJRH0gKSB7CiAgICAgICAgJFNRTCAuPSAiIEFORCB2YWxpZF9pZCA9IDAiOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17VmFsaWRJRH0gZXEgMSApIHsKICAgICAgICAkU1FMIC49ICIgQU5EIHZhbGlkX2lkID0gMSI7CiAgICB9CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICRTUUwsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQ291bnRSZXF1ZXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkQ291bnRSZXF1ZXN0ID0gJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gJENvdW50UmVxdWVzdDsKfQoKPWl0ZW0gRWxlbWVudEV4aXN0cygpCgpleGlzdHMgYW4gc3VydmV5LSwgcXVlc3Rpb24tLCBhbnN3ZXItIG9yIHJlcXVlc3QtZWxlbWVudAoKICAgIG15ICRDb3VudFJlcXVlc3QgPSAkU3VydmV5T2JqZWN0LT5FbGVtZW50RXhpc3RzKAogICAgICAgIElEID0+IDEyMywgICAgICAgICAgICMgU3VydmV5SUQsIFF1ZXN0aW9uSUQsIEFuc3dlcklELCBSZXF1ZXN0SUQKICAgICAgICBFbGVtZW50ID0+ICdTdXJ2ZXknICAjIFN1cnZleSwgUXVlc3Rpb24sIEFuc3dlciwgUmVxdWVzdAogICAgKTsKCj1jdXQKCnN1YiBFbGVtZW50RXhpc3RzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEVsZW1lbnRJRCBFbGVtZW50KSkgewogICAgICAgIGlmICggIWRlZmluZWQgJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtFbGVtZW50fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte0VsZW1lbnR9ICk7CiAgICAkUGFyYW17RWxlbWVudElEfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte0VsZW1lbnRJRH0sICdJbnRlZ2VyJyApOwoKICAgIG15ICVMb29rdXBUYWJsZSA9ICgKICAgICAgICBTdXJ2ZXkgICA9PiAnc3VydmV5JywKICAgICAgICBRdWVzdGlvbiA9PiAnc3VydmV5X3F1ZXN0aW9uJywKICAgICAgICBBbnN3ZXIgICA9PiAnc3VydmV5X2Fuc3dlcicsCiAgICAgICAgUmVxdWVzdCAgPT4gJ3N1cnZleV9yZXF1ZXN0JywKICAgICk7CgogICAgIyBjb3VudCBlbGVtZW50CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAiU0VMRUNUIENPVU5UKGlkKSBGUk9NICRMb29rdXBUYWJsZXskUGFyYW17RWxlbWVudH19IFdIRVJFIGlkID0gJFBhcmFte0VsZW1lbnRJRH0iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJEVsZW1lbnRFeGlzdHMgPSAnTm8nOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBpZiAoICRSb3dbMF0gKSB7CiAgICAgICAgICAgICRFbGVtZW50RXhpc3RzID0gJ1llcyc7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkRWxlbWVudEV4aXN0czsKfQoKPWl0ZW0gUmVxdWVzdFNlbmQoKQoKdG8gc2VuZCBhIHJlcXVlc3QgdG8gYSBjdXN0b21lciAoaWYgbWFzdGVyIHN1cnZleSBpcyBzZXQpCgogICAgJFN1cnZleU9iamVjdC0+UmVxdWVzdFNlbmQoCiAgICAgICAgVGlja2V0SUQgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBSZXF1ZXN0U2VuZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VGlja2V0SUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBUaWNrZXRJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIFB1YmxpY1N1cnZleUtleQogICAgbXkgJG1kNSA9IERpZ2VzdDo6TUQ1LT5uZXcoKTsKICAgICRtZDUtPmFkZCggJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpIC4gaW50KCByYW5kKDk5OTk5OTk5OSkgKSApOwogICAgbXkgJFB1YmxpY1N1cnZleUtleSA9ICRtZDUtPmhleGRpZ2VzdDsKCiAgICAjIGZpbmQgbWFzdGVyIHN1cnZleQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gIlNFTEVDVCBpZCBGUk9NIHN1cnZleSBXSEVSRSBzdGF0dXMgPSAnTWFzdGVyJyIsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkU3VydmV5SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRTdXJ2ZXlJRCA9ICRSb3dbMF07CiAgICB9CgogICAgIyByZXR1cm4sIG5vIG1hc3RlciBzdXJ2ZXkgZm91bmQKICAgIHJldHVybiBpZiAhJFN1cnZleUlEOwoKICAgICMgZ2V0IHRoZSBzdXJ2ZXkKICAgIG15ICVTdXJ2ZXkgPSAkU2VsZi0+U3VydmV5R2V0KAogICAgICAgIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCwKICAgICk7CiAgICBteSAkU3ViamVjdCA9ICRTdXJ2ZXl7Tm90aWZpY2F0aW9uU3ViamVjdH07CiAgICBteSAkQm9keSAgICA9ICRTdXJ2ZXl7Tm90aWZpY2F0aW9uQm9keX07CgogICAgIyBmaXggbmV3IGxpbmVzCiAgICAkQm9keSA9fiBzLyhcblxyfFxyXHJcbnxcclxuKS9cbi9nOwoKICAgICMgdGlja2V0IGRhdGEKICAgIG15ICVUaWNrZXQgPSAkU2VsZi0+e1RpY2tldE9iamVjdH0tPlRpY2tldEdldCgKICAgICAgICBUaWNrZXRJRCA9PiAkUGFyYW17VGlja2V0SUR9LAogICAgKTsKCiAgICAjIGNoZWNrIGlmIHRpY2tldCBpcyBpbiBhIHNlbmQgcXVldWUKICAgIGlmICggJFN1cnZleXtRdWV1ZXN9ICYmIHJlZiAkU3VydmV5e1F1ZXVlc30gZXEgJ0FSUkFZJyAmJiBAeyAkU3VydmV5e1F1ZXVlc30gfSApIHsKICAgICAgICBteSAkRm91bmQ7CgogICAgICAgIFFVRVVFOgogICAgICAgIGZvciBteSAkUXVldWVJRCAoIEB7ICRTdXJ2ZXl7UXVldWVzfSB9ICkgewogICAgICAgICAgICBuZXh0IFFVRVVFIGlmICRUaWNrZXR7UXVldWVJRH0gIT0gJFF1ZXVlSUQ7CiAgICAgICAgICAgICRGb3VuZCA9IDE7CiAgICAgICAgICAgIGxhc3QgUVVFVUU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaWYgISRGb3VuZDsKICAgIH0KCiAgICBmb3IgbXkgJERhdGEgKCBrZXlzICVUaWNrZXQgKSB7CiAgICAgICAgaWYgKCBkZWZpbmVkICRUaWNrZXR7JERhdGF9ICkgewogICAgICAgICAgICAkU3ViamVjdCA9fiBzLzxPVFJTX1RJQ0tFVF8kRGF0YT4vJFRpY2tldHskRGF0YX0vZ2k7CiAgICAgICAgICAgICRCb2R5ICAgID1+IHMvPE9UUlNfVElDS0VUXyREYXRhPi8kVGlja2V0eyREYXRhfS9naTsKICAgICAgICB9CiAgICB9CgogICAgIyBjbGVhbnVwCiAgICAkU3ViamVjdCA9fiBzLzxPVFJTX1RJQ0tFVF8uKz8+Ly0vZ2k7CiAgICAkQm9keSAgICA9fiBzLzxPVFJTX1RJQ0tFVF8uKz8+Ly0vZ2k7CgogICAgIyByZXBsYWNlIGNvbmZpZyBvcHRpb25zCiAgICAkU3ViamVjdCA9fiBzezxPVFJTX0NPTkZJR18oLis/KT59eyRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCQxKX1lZ3g7CiAgICAkQm9keSAgICA9fiBzezxPVFJTX0NPTkZJR18oLis/KT59eyRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCQxKX1lZ3g7CgogICAgIyBjbGVhbnVwCiAgICAkU3ViamVjdCA9fiBzLzxPVFJTX0NPTkZJR18uKz8+Ly0vZ2k7CiAgICAkQm9keSAgICA9fiBzLzxPVFJTX0NPTkZJR18uKz8+Ly0vZ2k7CgogICAgIyBnZXQgY3VzdG9tZXIgZGF0YSBhbmQgcmVwbGFjZSBpdCB3aXRoIDxPVFJTX0NVU1RPTUVSX0RBVEFfLi4uCiAgICBteSAlQ3VzdG9tZXJVc2VyOwogICAgaWYgKCAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSApIHsKICAgICAgICAlQ3VzdG9tZXJVc2VyID0gJFNlbGYtPntDdXN0b21lclVzZXJPYmplY3R9LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgICAgICAgICBVc2VyID0+ICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgcmVwbGFjZSBjdXN0b21lciBzdHVmZiB3aXRoIHRhZ3MKICAgICAgICBmb3IgbXkgJERhdGEgKCBrZXlzICVDdXN0b21lclVzZXIgKSB7CiAgICAgICAgICAgIG5leHQgaWYgISRDdXN0b21lclVzZXJ7JERhdGF9OwoKICAgICAgICAgICAgJFN1YmplY3QgPX4gcy88T1RSU19DVVNUT01FUl9EQVRBXyREYXRhPi8kQ3VzdG9tZXJVc2VyeyREYXRhfS9naTsKICAgICAgICAgICAgJEJvZHkgICAgPX4gcy88T1RSU19DVVNUT01FUl9EQVRBXyREYXRhPi8kQ3VzdG9tZXJVc2VyeyREYXRhfS9naTsKICAgICAgICB9CiAgICB9CgogICAgIyBjbGVhbnVwIGFsbCBub3QgbmVlZGVkIDxPVFJTX0NVU1RPTUVSX0RBVEFfIHRhZ3MKICAgICRTdWJqZWN0ID1+IHMvPE9UUlNfQ1VTVE9NRVJfREFUQV8uKz8+Ly0vZ2k7CiAgICAkQm9keSAgICA9fiBzLzxPVFJTX0NVU1RPTUVSX0RBVEFfLis/Pi8tL2dpOwoKICAgICMgcmVwbGFjZSBrZXkKICAgICRTdWJqZWN0ID1+IHMvPE9UUlNfUHVibGljU3VydmV5S2V5Pi8kUHVibGljU3VydmV5S2V5L2dpOwogICAgJEJvZHkgICAgPX4gcy88T1RSU19QdWJsaWNTdXJ2ZXlLZXk+LyRQdWJsaWNTdXJ2ZXlLZXkvZ2k7CgogICAgbXkgJFRvU3RyaW5nID0gJEN1c3RvbWVyVXNlcntVc2VyRW1haWx9OwoKICAgIGlmICggISRUb1N0cmluZyApIHsKICAgICAgICBteSAlQXJ0aWNsZSA9ICRTZWxmLT57VGlja2V0T2JqZWN0fS0+QXJ0aWNsZUxhc3RDdXN0b21lckFydGljbGUoCiAgICAgICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICRBcnRpY2xle1NlbmRlclR5cGV9IGVxICdhZ2VudCcgKSB7CiAgICAgICAgICAgICRUb1N0cmluZyA9ICRBcnRpY2xle1RvfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRUb1N0cmluZyA9ICRBcnRpY2xle0Zyb219OwogICAgICAgIH0KICAgIH0KCiAgICAjIHBhcnNlIHRoZSB0byBzdHJpbmcKICAgIG15ICRUbzsKICAgIGZvciBteSAkVG9QYXJzZXIgKCBNYWlsOjpBZGRyZXNzLT5wYXJzZSgkVG9TdHJpbmcpICkgewogICAgICAgICRUbyA9ICRUb1BhcnNlci0+YWRkcmVzcygpOwogICAgfQoKICAgICMgcmV0dXJuIGlmIG5vIHRvIGlzIGZvdW5kCiAgICByZXR1cm4gaWYgISRUbzsKCiAgICAjIGNoZWNrIGlmIGl0J3MgYSB2YWxpZCBlbWFpbCBhZGRlZHNzIChtaW4gaXMgbmVlZGVkKQogICAgcmV0dXJuIGlmICRUbyAhfiAvQC87CgogICAgIyBjb252ZXJ0IHRvIGxvd2VyIGNhc2VzCiAgICAkVG8gPSBsYyAkVG87CgogICAgIyBjaGVjayBpZiBub3Qgc3VydmV5IHNob3VsZCBiZSBzZW5kCiAgICBteSAkU2VuZE5vU3VydmV5UmVnRXhwID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1N1cnZleTo6U2VuZE5vU3VydmV5UmVnRXhwJyk7CgogICAgcmV0dXJuIGlmICRTZW5kTm9TdXJ2ZXlSZWdFeHAgJiYgJFRvID1+IC8kU2VuZE5vU3VydmV5UmVnRXhwL2k7CgogICAgIyBxdW90ZQogICAgJFRvID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCRUbyk7CgogICAgIyBjaGVjayBpZiBhIHN1cnZleSBpcyBzZW50IGluIHRoZSBsYXN0IHRpbWUKICAgIG15ICRTZW5kUGVyaW9kID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1N1cnZleTo6U2VuZFBlcmlvZCcpOwogICAgaWYgKCRTZW5kUGVyaW9kKSB7CiAgICAgICAgbXkgJExhc3RTZW50VGltZSA9IDA7CgogICAgICAgICMgZ2V0IHNlbmQgdGltZQogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gIlNFTEVDVCBzZW5kX3RpbWUgRlJPTSBzdXJ2ZXlfcmVxdWVzdCBXSEVSRSBMT1dFUihzZW5kX3RvKSA9ICckVG8nICIKICAgICAgICAgICAgICAgIC4gIk9SREVSIEJZIHNlbmRfdGltZSBERVNDIiwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkTGFzdFNlbnRUaW1lID0gJFJvd1swXTsKICAgICAgICB9CiAgICAgICAgaWYgKCRMYXN0U2VudFRpbWUpIHsKICAgICAgICAgICAgbXkgJE5vdyA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKTsKICAgICAgICAgICAgJExhc3RTZW50VGltZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKCBTdHJpbmcgPT4gJExhc3RTZW50VGltZSApOwoKICAgICAgICAgICAgcmV0dXJuIGlmICggJExhc3RTZW50VGltZSArICRTZW5kUGVyaW9kICogNjAgKiA2MCAqIDI0ICkgPiAkTm93OwogICAgICAgIH0KICAgIH0KCiAgICAjIGluc2VydCByZXF1ZXN0CiAgICAkUGFyYW17VGlja2V0SUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17VGlja2V0SUR9LCAnSW50ZWdlcicgKTsKICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gIklOU0VSVCBJTlRPIHN1cnZleV9yZXF1ZXN0ICIKICAgICAgICAgICAgLiAiICh0aWNrZXRfaWQsIHN1cnZleV9pZCwgdmFsaWRfaWQsIHB1YmxpY19zdXJ2ZXlfa2V5LCBzZW5kX3RvLCBzZW5kX3RpbWUpICIKICAgICAgICAgICAgLiAiIFZBTFVFUyAoJFBhcmFte1RpY2tldElEfSwgJFN1cnZleUlELCAxLCAnIgogICAgICAgICAgICAuICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSgkUHVibGljU3VydmV5S2V5KSAuICInLCAiCiAgICAgICAgICAgIC4gIickVG8nLCBjdXJyZW50X3RpbWVzdGFtcCkiLAogICAgKTsKCiAgICAjIGxvZyBhY3Rpb24gb24gdGlja2V0CiAgICAkU2VsZi0+e1RpY2tldE9iamVjdH0tPkhpc3RvcnlBZGQoCiAgICAgICAgVGlja2V0SUQgICAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgQ3JlYXRlVXNlcklEID0+IDEsCiAgICAgICAgSGlzdG9yeVR5cGUgID0+ICdNaXNjJywKICAgICAgICBOYW1lICAgICAgICAgPT4gIlNlbnQgY3VzdG9tZXIgc3VydmV5IHRvICckVG8nLiIsCiAgICApOwoKICAgICMgZ2V0IGNoYXJzZXQKICAgIG15ICRDaGFyc2V0ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0RlZmF1bHRDaGFyc2V0JykgfHwgJ3VmdC04JzsKCiAgICAjIGNvbnZlcnQgYm9keSB0byBodG1sCiAgICAkQm9keSA9ICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fS0+VG9IVE1MKAogICAgICAgIFN0cmluZyA9PiAkQm9keSwKICAgICk7CgogICAgIyBwcmVwYXJlIGh0bWwgbGlua3MKICAgICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fS0+TGlua1F1b3RlKAogICAgICAgIFN0cmluZyA9PiBcJEJvZHksCiAgICApOwoKICAgICMgY29tcGxldGUgaHRtbCBkb2N1bWVudAogICAgJEJvZHkgPSAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0tPkRvY3VtZW50Q29tcGxldGUoCiAgICAgICAgU3RyaW5nICA9PiAkQm9keSwKICAgICAgICBDaGFyc2V0ID0+ICRDaGFyc2V0LAogICAgKTsKCiAgICAjIHNlbmQgc3VydmV5CiAgICByZXR1cm4gJFNlbGYtPntTZW5kbWFpbE9iamVjdH0tPlNlbmQoCiAgICAgICAgRnJvbSAgICAgPT4gJFN1cnZleXtOb3RpZmljYXRpb25TZW5kZXJ9LAogICAgICAgIFRvICAgICAgID0+ICRUbywKICAgICAgICBTdWJqZWN0ICA9PiAkU3ViamVjdCwKICAgICAgICBNaW1lVHlwZSA9PiAndGV4dC9odG1sJywKICAgICAgICBDaGFyc2V0ICA9PiAkQ2hhcnNldCwKICAgICAgICBCb2R5ICAgICA9PiAkQm9keSwKICAgICk7Cn0KCj1pdGVtIFB1YmxpY1N1cnZleUdldCgpCgp0byBnZXQgYWxsIHB1YmxpYyBhdHRyaWJ1dGVzIG9mIGEgc3VydmV5CgogICAgbXkgJVB1YmxpY1N1cnZleSA9ICRTdXJ2ZXlPYmplY3QtPlB1YmxpY1N1cnZleUdldCgKICAgICAgICAgICAgUHVibGljU3VydmV5S2V5ID0+ICdBdzVkZTNYZjVxQScsCiAgICAgICAgICAgIEludmFsaWQgICAgICAgICA9PiAxLCAjIG9wdGlvbmFsIHRvIGtub3cgaWYgb25lIGtleSB3YXMgYWxyZWFkeSB1c2VkLgogICAgKTsKCj1jdXQKCnN1YiBQdWJsaWNTdXJ2ZXlHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17UHVibGljU3VydmV5S2V5fSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU3VydmV5SUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17UHVibGljU3VydmV5S2V5fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1B1YmxpY1N1cnZleUtleX0gKTsKCiAgICBteSAkVmFsaWRJRCA9ICdBTkQgdmFsaWRfaWQgPSAxJzsKCiAgICAjIGlmIG5vdCBpbnZhbGlkIHNob3cganVzdCB2YWxpZCBrZXlzCiAgICBpZiAoICRQYXJhbXtJbnZhbGlkfSApIHsKICAgICAgICAkVmFsaWRJRCA9ICdBTkQgdmFsaWRfaWQgPSAwJzsKICAgIH0KCiAgICAjIGdldCByZXF1ZXN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBzdXJ2ZXlfaWQgRlJPTSBzdXJ2ZXlfcmVxdWVzdCAiCiAgICAgICAgICAgIC4gIldIRVJFIHB1YmxpY19zdXJ2ZXlfa2V5ID0gJyRQYXJhbXtQdWJsaWNTdXJ2ZXlLZXl9JyAkVmFsaWRJRCAiLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFN1cnZleUlEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU3VydmV5SUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAoKSBpZiAhJFN1cnZleUlEOwoKICAgICMgZ2V0IHN1cnZleQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgaWQsIHN1cnZleW51bWJlciwgdGl0bGUsIGludHJvZHVjdGlvbiAiCiAgICAgICAgICAgIC4gIkZST00gc3VydmV5IFdIRVJFIGlkID0gJFN1cnZleUlEIEFORCAoc3RhdHVzID0gJ01hc3RlcicgT1Igc3RhdHVzID0gJ1ZhbGlkJykiLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICREYXRhe1N1cnZleUlEfSAgICAgPSAkUm93WzBdOwogICAgICAgICREYXRhe1N1cnZleU51bWJlcn0gPSAkUm93WzFdOwogICAgICAgICREYXRhe1RpdGxlfSAgICAgICAgPSAkUm93WzJdOwogICAgICAgICREYXRhe0ludHJvZHVjdGlvbn0gPSAkUm93WzNdOwogICAgfQoKICAgIHJldHVybiAlRGF0YTsKfQoKPWl0ZW0gUHVibGljQW5zd2VyU2F2ZSgpCgp0byBzYXZlIGEgcHVibGljIHZvdGUKCiAgICAkU3VydmV5T2JqZWN0LT5QdWJsaWNBbnN3ZXJTYXZlKAogICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAnYVZrZEU4MkR3MnF3NmVyQ2RhJywKICAgICAgICBRdWVzdGlvbklEID0+IDQsCiAgICAgICAgVm90ZVZhbHVlID0+ICdUaGUgVmFsdWUnLAogICAgKTsKCj1jdXQKCnN1YiBQdWJsaWNBbnN3ZXJTYXZlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFB1YmxpY1N1cnZleUtleSBRdWVzdGlvbklEIFZvdGVWYWx1ZSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHF1b3RlCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhQdWJsaWNTdXJ2ZXlLZXkgVm90ZVZhbHVlKSkgewogICAgICAgICRQYXJhbXskQXJndW1lbnR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17JEFyZ3VtZW50fSApOwogICAgfQogICAgJFBhcmFte1F1ZXN0aW9uSUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17UXVlc3Rpb25JRH0sICdJbnRlZ2VyJyApOwoKICAgICMgZ2V0IHJlcXVlc3QKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkICIKICAgICAgICAgICAgLiAiIEZST00gc3VydmV5X3JlcXVlc3QgV0hFUkUgcHVibGljX3N1cnZleV9rZXkgPSAnJFBhcmFte1B1YmxpY1N1cnZleUtleX0nIEFORCB2YWxpZF9pZCA9IDEiLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFJlcXVlc3RJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFJlcXVlc3RJRCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIGlmICEkUmVxdWVzdElEOwoKICAgICMgaW5zZXJ0IHZvdGUKICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJJTlNFUlQgSU5UTyBzdXJ2ZXlfdm90ZSAocmVxdWVzdF9pZCwgcXVlc3Rpb25faWQsIHZvdGVfdmFsdWUsIGNyZWF0ZV90aW1lKSBWQUxVRVMgKCIKICAgICAgICAgICAgLiAiJFJlcXVlc3RJRCwgIgogICAgICAgICAgICAuICIkUGFyYW17UXVlc3Rpb25JRH0sICIKICAgICAgICAgICAgLiAiJyRQYXJhbXtWb3RlVmFsdWV9JywgIgogICAgICAgICAgICAuICJjdXJyZW50X3RpbWVzdGFtcCkiLAogICAgKTsKfQoKPWl0ZW0gUHVibGljU3VydmV5SW52YWxpZFNldCgpCgp0byBzZXQgYSByZXF1ZXN0IGludmFsaWQKCiAgICAkU3VydmV5T2JqZWN0LT5QdWJsaWNTdXJ2ZXlJbnZhbGlkU2V0KAogICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAnYVZrZEU4MkR3MnF3NmVyQ2RhJywKICAgICk7Cgo9Y3V0CgpzdWIgUHVibGljU3VydmV5SW52YWxpZFNldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17UHVibGljU3VydmV5S2V5fSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU3VydmV5SUQhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcXVvdGUKICAgICRQYXJhbXtQdWJsaWNTdXJ2ZXlLZXl9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17UHVibGljU3VydmV5S2V5fSApOwoKICAgICMgZ2V0IHJlcXVlc3QKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIGlkICIKICAgICAgICAgICAgLiAiIEZST00gc3VydmV5X3JlcXVlc3QgV0hFUkUgcHVibGljX3N1cnZleV9rZXkgPSAnJFBhcmFte1B1YmxpY1N1cnZleUtleX0nIiwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRSZXF1ZXN0SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRSZXF1ZXN0SUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBpZiAhJFJlcXVlc3RJRDsKCiAgICAjIHVwZGF0ZSByZXF1ZXN0CiAgICByZXR1cm4gJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAiVVBEQVRFIHN1cnZleV9yZXF1ZXN0IFNFVCAiCiAgICAgICAgICAgIC4gInZhbGlkX2lkID0gMCwgIgogICAgICAgICAgICAuICJ2b3RlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCAiCiAgICAgICAgICAgIC4gIldIRVJFIGlkID0gJFJlcXVlc3RJRCIsCiAgICApOwp9Cgo9aXRlbSBTdXJ2ZXlRdWV1ZVNhdmUoKQoKYWRkIGEgc3VydmV5X3F1ZXVlIHJlbGF0aW9uCgpteSAkUmVzdWx0ID0gJFN1cnZleU9iamVjdC0+U3VydmV5UXVldWVTYXZlKAogICAgU3VydmV5SUQgPT4gMywKICAgIFF1ZXVlSURzID0+IFsxLCA3XSwKKTsKCj1jdXQKCnN1YiBTdXJ2ZXlRdWV1ZVNhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU3VydmV5SUQgUXVldWVJRHMpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKCBQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICJOZWVkICRBcmd1bWVudCEiICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBxdW90ZQogICAgZm9yIG15ICRRdWV1ZUlEICggQHsgJFBhcmFte1F1ZXVlSURzfSB9ICkgewogICAgICAgICRRdWV1ZUlEID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUXVldWVJRCwgJ0ludGVnZXInICk7CiAgICB9CiAgICAkUGFyYW17U3VydmV5SUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17U3VydmV5SUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIHJlbW92ZSBhbGwgZXhpc3RpbmcgcmVsYXRpb25zCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBzdXJ2ZXlfcXVldWUgV0hFUkUgc3VydmV5X2lkID0gJFBhcmFte1N1cnZleUlEfSIsCiAgICApOwoKICAgICMgYWRkIGFsbCBzdXJ2ZXlfcXVldWUgcmVsYXRpb25zIHRvIGRhdGFiYXNlCiAgICBmb3IgbXkgJFF1ZXVlSUQgKCBAeyAkUGFyYW17UXVldWVJRHN9IH0gKSB7CgogICAgICAgICMgYWRkIHN1cnZleV9xdWV1ZSByZWxhdGlvbiB0byBkYXRhYmFzZQogICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICBTUUwgPT4gIklOU0VSVCBJTlRPIHN1cnZleV9xdWV1ZSIKICAgICAgICAgICAgICAgIC4gIiAoc3VydmV5X2lkLCBxdWV1ZV9pZCkgVkFMVUVTIgogICAgICAgICAgICAgICAgLiAiICgkUGFyYW17U3VydmV5SUR9LCAkUXVldWVJRCkiLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFN1cnZleVF1ZXVlR2V0KCkKCmdldCBhIHN1cnZleV9xdWV1ZSByZWxhdGlvbiBhcyBhbiBhcnJheSByZWZlcmVuY2UKCm15ICRRdWV1ZXNSZWYgPSAkU3VydmV5T2JqZWN0LT5TdXJ2ZXlRdWV1ZUdldCgKICAgIFN1cnZleUlEID0+IDMsCik7Cgo9Y3V0CgpzdWIgU3VydmV5UXVldWVHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1N1cnZleUlEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgU3VydmV5SUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHF1b3RlCiAgICAkUGFyYW17U3VydmV5SUR9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17U3VydmV5SUR9LCAnSW50ZWdlcicgKTsKCiAgICAjIGdldCBxdWV1ZSBpZHMgZnJvbSBkYXRhYmFzZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgcXVldWVfaWQgRlJPTSBzdXJ2ZXlfcXVldWUiCiAgICAgICAgICAgIC4gIiBXSEVSRSBzdXJ2ZXlfaWQgPSAkUGFyYW17U3VydmV5SUR9IE9SREVSIEJZIHF1ZXVlX2lkIEFTQyIsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQFF1ZXVlTGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAUXVldWVMaXN0LCAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiBcQFF1ZXVlTGlzdDsKfQoKPWl0ZW0gU3VydmV5U2VhcmNoKCkKCnNlYXJjaCBpbiBzdXJ2ZXlzCgogICAgbXkgQElEcyA9ICRTdXJ2ZXlPYmplY3QtPlN1cnZleVNlYXJjaCgKCiAgICAgICAgTnVtYmVyICAgICAgICAgICAgICA9PiAnKjEzNConLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVGl0bGUgICAgICAgICAgICAgICA9PiAnKnNvbWUgdGl0bGUqJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgSW50cm9kdWN0aW9uICAgICAgICA9PiAnKnNvbWUgaW50cm9kdWN0aW9uKicsICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgRGVzY3JpcHRpb24gICAgICAgICA9PiAnKnNvbWUgZGVzcmlwdGlvbionLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgTm90aWZpY2F0aW9uU2VuZGVyICA9PiAnKnVzZXJAZG9tYWluKicsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgTm90aWZpY2F0aW9uU3ViamVjdCA9PiAnKnNvbWUgbm90aWZpY2F0aW9uIHN1YmplY3QqJywgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgTm90aWZpY2F0aW9uQm9keSAgICA9PiAnKnNvbWUgbm90aWZpY2F0aW9uIGJvZHkqJywgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgICMgaXMgc2VhcmNoaW5nIGluIE51bWJlciwgVGl0bGUsIEludHJvZHVjdGlvbiwgRGVzY3JpcHRpb24sIE5vdGlmaWNhdGlvblNlbmRlciwKICAgICAgICAjIE5vdGlmaWNhdGlvblN1YmplY3QgYW5kIE5vdGlmaWNhdGlvbkJvZHkKICAgICAgICBXaGF0ICAgPT4gJypzb21lIHRleHQqJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKCiAgICAgICAgU3RhdHVzID0+ICcqc29tZSBzdGF0dXMqJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpCgogICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJ3MuY3JlYXRlX3RpbWUnLAogICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJ3MuY3JlYXRlX2J5JywKICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICdzLmNoYW5nZV90aW1lJywKICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICdzLmNoYW5nZV9ieScsCgogICAgICAgIE9yZGVyQnkgPT4gWyAnU3VydmV5SUQnLCAnVGl0bGUnIF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgICMgZGVmYXVsdDogWyAnU3VydmV5SUQnIF0sCiAgICAgICAgIyAoKVN1cnZleUlELCBOdW1iZXIsIFRpdGxlLCBJbnRyb2R1Y3Rpb24sIERlc2NyaXB0aW9uLAogICAgICAgICMgTm90aWZpY2F0aW9uU2VuZGVyLCBOb3RpZmljYXRpb25TdWJqZWN0LCBOb3RpZmljYXRpb25Cb2R5LAogICAgICAgICMgU3RhdHVzLCBDcmVhdGVUaW1lLCBDcmVhdGVCeSwgQ2hhbmdlVGltZSwgQ2hhbmdlQnkpCgogICAgICAgICMgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgT3JkZXJCeToKICAgICAgICAjIFRoZSBPcmRlckJ5RGlyZWN0aW9uIGNhbiBiZSBzcGVjaWZpZWQgZm9yIGVhY2ggT3JkZXJCeSBhdHRyaWJ1dGUuCiAgICAgICAgIyBUaGUgcGFpcmluZyBpcyBtYWRlIGJ5IHRoZSBhcnJheSBpbmRpY2VzLgoKICAgICAgICBPcmRlckJ5RGlyZWN0aW9uID0+IFsgJ0Rvd24nLCAnVXAnIF0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICAjIGRlZmF1bHQ6IFsgJ0Rvd24nIF0KICAgICAgICAjIChEb3duIHwgVXApCgogICAgICAgIExpbWl0ICAgICA9PiAxNTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBTdXJ2ZXlTZWFyY2ggewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFVzZXJJRCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgdmVyaWZ5IHRoYXQgYWxsIHBhc3NlZCBhcnJheSBwYXJhbWV0ZXJzIGNvbnRhaW4gYW4gYXJyYXlyZWYKICAgIEFSR1VNRU5UOgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoT3JkZXJCeSBPcmRlckJ5RGlyZWN0aW9uKSkgewoKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSB8fD0gW107CgogICAgICAgICAgICBuZXh0IEFSR1VNRU5UOwogICAgICAgIH0KCiAgICAgICAgaWYgKCByZWYgJFBhcmFteyRBcmd1bWVudH0gbmUgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIiRBcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZGVmaW5lIG9yZGVyIHRhYmxlCiAgICBteSAlT3JkZXJCeVRhYmxlID0gKAoKICAgICAgICAjIFN1cnZleSBpdGVtIGF0dHJpYnV0ZXMKICAgICAgICBTdXJ2ZXlJRCAgICAgICAgICAgID0+ICdzLmlkJywKICAgICAgICBOdW1iZXIgICAgICAgICAgICAgID0+ICdzLnN1cnZleW51bWJlcicsCiAgICAgICAgVGl0bGUgICAgICAgICAgICAgICA9PiAncy50aXRsZScsCiAgICAgICAgSW50cm9kdWN0aW9uICAgICAgICA9PiAncy5pbnRyb2R1Y3Rpb24nLAogICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgPT4gJ3MuZGVzY3JpcHRpb24nLAogICAgICAgIE5vdGlmaWNhdGlvblNlbmRlciAgPT4gJ3Mubm90aWZpY2F0aW9uX3NlbmRlcicsCiAgICAgICAgTm90aWZpY2F0aW9uU3ViamVjdCA9PiAncy5ub3RpZmljYXRpb25fc3ViamVjdCcsCiAgICAgICAgTm90aWZpY2F0aW9uQm9keSAgICA9PiAncy5ub3RpZmljYXRpb25fYm9keScsCiAgICAgICAgU3RhdHVzICAgICAgICAgICAgICA9PiAncy5zdGF0dXMnLAogICAgICAgIENyZWF0ZVRpbWUgICAgICAgICAgPT4gJ3MuY3JlYXRlX3RpbWUnLAogICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gJ3MuY3JlYXRlX2J5JywKICAgICAgICBDaGFuZ2VUaW1lICAgICAgICAgID0+ICdzLmNoYW5nZV90aW1lJywKICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICdzLmNoYW5nZV9ieScsCiAgICApOwoKICAgICMgY2hlY2sgaWYgT3JkZXJCeSBjb250YWlucyBvbmx5IHVuaXF1ZSB2YWxpZCB2YWx1ZXMKICAgIG15ICVPcmRlckJ5U2VlbjsKICAgIGZvciBteSAkT3JkZXJCeSAoIEB7ICRQYXJhbXtPcmRlckJ5fSB9ICkgewoKICAgICAgICBpZiAoICEkT3JkZXJCeSB8fCAhJE9yZGVyQnlUYWJsZXskT3JkZXJCeX0gfHwgJE9yZGVyQnlTZWVueyRPcmRlckJ5fSApIHsKCiAgICAgICAgICAgICMgZm91bmQgYW4gZXJyb3IKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk9yZGVyQnkgY29udGFpbnMgaW52YWxpZCB2YWx1ZSAnJE9yZGVyQnknICIKICAgICAgICAgICAgICAgICAgICAuICdvciB0aGUgdmFsdWUgaXMgdXNlZCBtb3JlIHRoYW4gb25jZSEnLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAjIHJlbWVtYmVyIHRoZSB2YWx1ZSB0byBjaGVjayBpZiBpdCBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlCiAgICAgICAgJE9yZGVyQnlTZWVueyRPcmRlckJ5fSA9IDE7CgogICAgfQoKICAgICMgY2hlY2sgaWYgT3JkZXJCeURpcmVjdGlvbiBhcnJheSBjb250YWlucyBvbmx5ICdVcCcgb3IgJ0Rvd24nCiAgICBESVJFQ1RJT046CiAgICBmb3IgbXkgJERpcmVjdGlvbiAoIEB7ICRQYXJhbXtPcmRlckJ5RGlyZWN0aW9ufSB9ICkgewoKICAgICAgICAjIG9ubHkgJ1VwJyBvciAnRG93bicgYWxsb3dlZAogICAgICAgIG5leHQgRElSRUNUSU9OIGlmICREaXJlY3Rpb24gZXEgJ1VwJzsKICAgICAgICBuZXh0IERJUkVDVElPTiBpZiAkRGlyZWN0aW9uIGVxICdEb3duJzsKCiAgICAgICAgIyBmb3VuZCBhbiBlcnJvcgogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiT3JkZXJCeURpcmVjdGlvbiBjYW4gb25seSBjb250YWluICdVcCcgb3IgJ0Rvd24nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBhc3NlbWJsZSB0aGUgT1JERVIgQlkgY2xhdXNlCiAgICBteSBAU1FMT3JkZXJCeTsKICAgIG15ICRDb3VudCA9IDA7CiAgICBmb3IgbXkgJE9yZGVyQnkgKCBAeyAkUGFyYW17T3JkZXJCeX0gfSApIHsKCiAgICAgICAgIyBzZXQgdGhlIGRlZmF1bHQgb3JkZXIgZGlyZWN0aW9uCiAgICAgICAgbXkgJERpcmVjdGlvbiA9ICdERVNDJzsKCiAgICAgICAgIyBhZGQgdGhlIGdpdmVuIG9yZGVyIGRpcmVjdGlvbgogICAgICAgIGlmICggJFBhcmFte09yZGVyQnlEaXJlY3Rpb259LT5bJENvdW50XSApIHsKICAgICAgICAgICAgaWYgKCAkUGFyYW17T3JkZXJCeURpcmVjdGlvbn0tPlskQ291bnRdIGVxICdVcCcgKSB7CiAgICAgICAgICAgICAgICAkRGlyZWN0aW9uID0gJ0FTQyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUGFyYW17T3JkZXJCeURpcmVjdGlvbn0tPlskQ291bnRdIGVxICdEb3duJyApIHsKICAgICAgICAgICAgICAgICREaXJlY3Rpb24gPSAnREVTQyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgYWRkIFNRTAogICAgICAgIHB1c2ggQFNRTE9yZGVyQnksICIkT3JkZXJCeVRhYmxleyRPcmRlckJ5fSAkRGlyZWN0aW9uIjsKICAgIH0KICAgIGNvbnRpbnVlIHsKICAgICAgICAkQ291bnQrKzsKICAgIH0KCiAgICAjIGlmIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCB0aGUgb3JkZXJpbmcgaXMgbm90IGRldGVybWluZWQKICAgICMgd2UgYWRkIGFuIGRlc2NlbmRpbmcgb3JkZXJpbmcgYnkgaWQKICAgIGlmICggIWdyZXAgeyAkXyBlcSAnU3VydmV5SUQnIH0gKCBAeyAkUGFyYW17T3JkZXJCeX0gfSApICkgewogICAgICAgIHB1c2ggQFNRTE9yZGVyQnksICIkT3JkZXJCeVRhYmxle1N1cnZleUlEfSBERVNDIjsKICAgIH0KCiAgICAjIHNxbAogICAgbXkgJFNRTCA9ICdTRUxFQ1Qgcy5pZCAnCiAgICAgICAgLiAnRlJPTSBzdXJ2ZXkgcyAnOwoKICAgICMgZXh0ZW5kZWQgU1FMCiAgICBteSAkRXh0ID0gJyc7CgogICAgIyBmdWxsdGV4dCBzZWFyY2gKICAgIGlmICggJFBhcmFte1doYXR9ICYmICRQYXJhbXtXaGF0fSBuZSAnKicgKSB7CgogICAgICAgICMgZGVmaW5lIHRoZSBzZWFyY2ggZmllbGRzIGZvciBmdWxsdGV4dCBzZWFyY2gKICAgICAgICBteSBAU2VhcmNoRmllbGRzID0gKAogICAgICAgICAgICAncy5zdXJ2ZXludW1iZXInLAogICAgICAgICAgICAncy50aXRsZScsCiAgICAgICAgICAgICdzLmludHJvZHVjdGlvbicsCiAgICAgICAgICAgICdzLmRlc2NyaXB0aW9uJywKICAgICAgICAgICAgJ3Mubm90aWZpY2F0aW9uX3NlbmRlcicsCiAgICAgICAgICAgICdzLm5vdGlmaWNhdGlvbl9zdWJqZWN0JywKICAgICAgICAgICAgJ3Mubm90aWZpY2F0aW9uX2JvZHknLAogICAgICAgICAgICAncy5zdGF0dXMnLAogICAgICAgICk7CgogICAgICAgICMgYWRkIHRoZSBTUUwgZm9yIHRoZSBmdWxsdGV4dCBzZWFyY2gKICAgICAgICAkRXh0IC49ICRTZWxmLT57REJPYmplY3R9LT5RdWVyeUNvbmRpdGlvbigKICAgICAgICAgICAgS2V5ICAgICAgICAgID0+IFxAU2VhcmNoRmllbGRzLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgPT4gJFBhcmFte1doYXR9LAogICAgICAgICAgICBTZWFyY2hQcmVmaXggPT4gJyonLAogICAgICAgICAgICBTZWFyY2hTdWZmaXggPT4gJyonLAogICAgICAgICk7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHRoZSBudW1iZXIKICAgIGlmICggJFBhcmFte051bWJlcn0gKSB7CiAgICAgICAgJFBhcmFte051bWJlcn0gPX4gcy9cKi8lL2c7CiAgICAgICAgJFBhcmFte051bWJlcn0gPX4gcy8lJS8lL2c7CiAgICAgICAgJFBhcmFte051bWJlcn0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtOdW1iZXJ9LCAnTGlrZScgKTsKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dCAuPSAiIExPV0VSKHMubnVtYmVyKSBMSUtFIExPV0VSKCciIC4gJFBhcmFte051bWJlcn0gLiAiJykgJFNlbGYtPntMaWtlRXNjYXBlU3RyaW5nfSI7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHRoZSB0aXRsZQogICAgaWYgKCAkUGFyYW17VGl0bGV9ICkgewogICAgICAgICRQYXJhbXtUaXRsZX0gPSAiXCUkUGFyYW17VGl0bGV9XCUiOwogICAgICAgICRQYXJhbXtUaXRsZX0gPX4gcy9cKi8lL2c7CiAgICAgICAgJFBhcmFte1RpdGxlfSA9fiBzLyUlLyUvZzsKICAgICAgICAkUGFyYW17VGl0bGV9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17VGl0bGV9LCAnTGlrZScgKTsKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dCAuPSAiIExPV0VSKHMudGl0bGUpIExJS0UgTE9XRVIoJyIgLiAkUGFyYW17VGl0bGV9IC4gIicpICRTZWxmLT57TGlrZUVzY2FwZVN0cmluZ30iOwogICAgfQoKICAgICMgc2VhcmNoIGZvciB0aGUgaW50cm9kdWN0aW9uCiAgICBpZiAoICRQYXJhbXtJbnRyb2R1Y3Rpb259ICkgewogICAgICAgICRQYXJhbXtJbnRyb2R1Y3Rpb259ID0gIlwlJFBhcmFte0ludHJvZHVjdGlvbn1cJSI7CiAgICAgICAgJFBhcmFte0ludHJvZHVjdGlvbn0gPX4gcy9cKi8lL2c7CiAgICAgICAgJFBhcmFte0ludHJvZHVjdGlvbn0gPX4gcy8lJS8lL2c7CiAgICAgICAgJFBhcmFte0ludHJvZHVjdGlvbn0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtJbnRyb2R1Y3Rpb259LCAnTGlrZScgKTsKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dAogICAgICAgICAgICAuPSAiIExPV0VSKHMuaW50cm9kdWN0aW9uKSBMSUtFIExPV0VSKCciCiAgICAgICAgICAgIC4gJFBhcmFte0ludHJvZHVjdGlvbn0KICAgICAgICAgICAgLiAiJykgJFNlbGYtPntMaWtlRXNjYXBlU3RyaW5nfSI7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHRoZSBkZXNjcmlwdGlvbgogICAgaWYgKCAkUGFyYW17RGVzY3JpcHRpb259ICkgewogICAgICAgICRQYXJhbXtEZXNjcmlwdGlvbn0gPSAiXCUkUGFyYW17RGVzY3JpcHRpb259XCUiOwogICAgICAgICRQYXJhbXtEZXNjcmlwdGlvbn0gPX4gcy9cKi8lL2c7CiAgICAgICAgJFBhcmFte0Rlc2NyaXB0aW9ufSA9fiBzLyUlLyUvZzsKICAgICAgICAkUGFyYW17RGVzY3JpcHRpb259ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17RGVzY3JpcHRpb259LCAnTGlrZScgKTsKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dAogICAgICAgICAgICAuPSAiIExPV0VSKHMuZGVzY3JpcHRpb24pIExJS0UgTE9XRVIoJyIKICAgICAgICAgICAgLiAkUGFyYW17RGVzY3JpcHRpb259CiAgICAgICAgICAgIC4gIicpICRTZWxmLT57TGlrZUVzY2FwZVN0cmluZ30iOwogICAgfQoKICAgICMgc2VhcmNoIGZvciB0aGUgbm90aWZpY2F0aW9uIHNlbmRlcgogICAgaWYgKCAkUGFyYW17Tm90aWZpY2F0aW9uU2VuZGVyfSApIHsKICAgICAgICAkUGFyYW17Tm90aWZpY2F0aW9uU2VuZGVyfSA9ICJcJSRQYXJhbXtOb3RpZmljYXRpb25TZW5kZXJ9XCUiOwogICAgICAgICRQYXJhbXtOb3RpZmljYXRpb25TZW5kZXJ9ID1+IHMvXCovJS9nOwogICAgICAgICRQYXJhbXtOb3RpZmljYXRpb25TZW5kZXJ9ID1+IHMvJSUvJS9nOwogICAgICAgICRQYXJhbXtOb3RpZmljYXRpb25TZW5kZXJ9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17Tm90aWZpY2F0aW9uU2VuZGVyfSwgJ0xpa2UnICk7CiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQKICAgICAgICAgICAgLj0gIiBMT1dFUihzLm5vdGlmaWNhdGlvbl9zZW5kZXIpIExJS0UgTE9XRVIoJyIKICAgICAgICAgICAgLiAkUGFyYW17Tm90aWZpY2F0aW9uU2VuZGVyfQogICAgICAgICAgICAuICInKSAkU2VsZi0+e0xpa2VFc2NhcGVTdHJpbmd9IjsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgdGhlIG5vdGlmaWNhdGlvbiBzdWJqZWN0CiAgICBpZiAoICRQYXJhbXtOb3RpZmljYXRpb25TdWJqZWN0fSApIHsKICAgICAgICAkUGFyYW17Tm90aWZpY2F0aW9uU3ViamVjdH0gPSAiXCUkUGFyYW17Tm90aWZpY2F0aW9uU3ViamVjdH1cJSI7CiAgICAgICAgJFBhcmFte05vdGlmaWNhdGlvblN1YmplY3R9ID1+IHMvXCovJS9nOwogICAgICAgICRQYXJhbXtOb3RpZmljYXRpb25TdWJqZWN0fSA9fiBzLyUlLyUvZzsKICAgICAgICAkUGFyYW17Tm90aWZpY2F0aW9uU3ViamVjdH0KICAgICAgICAgICAgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtOb3RpZmljYXRpb25TdWJqZWN0fSwgJ0xpa2UnICk7CiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQKICAgICAgICAgICAgLj0gIiBMT1dFUihzLm5vdGlmaWNhdGlvbl9zdWJqZWN0KSBMSUtFIExPV0VSKCciCiAgICAgICAgICAgIC4gJFBhcmFte05vdGlmaWNhdGlvblN1YmplY3R9CiAgICAgICAgICAgIC4gIicpICRTZWxmLT57TGlrZUVzY2FwZVN0cmluZ30iOwogICAgfQoKICAgICMgc2VhcmNoIGZvciB0aGUgbm90aWZpY2F0aW9uIGJvZHkKICAgIGlmICggJFBhcmFte05vdGlmaWNhdGlvbkJvZHl9ICkgewogICAgICAgICRQYXJhbXtOb3RpZmljYXRpb25Cb2R5fSA9ICJcJSRQYXJhbXtOb3RpZmljYXRpb25Cb2R5fVwlIjsKICAgICAgICAkUGFyYW17Tm90aWZpY2F0aW9uQm9keX0gPX4gcy9cKi8lL2c7CiAgICAgICAgJFBhcmFte05vdGlmaWNhdGlvbkJvZHl9ID1+IHMvJSUvJS9nOwogICAgICAgICRQYXJhbXtOb3RpZmljYXRpb25Cb2R5fSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte05vdGlmaWNhdGlvbkJvZHl9LCAnTGlrZScgKTsKICAgICAgICBpZiAoJEV4dCkgewogICAgICAgICAgICAkRXh0IC49ICcgQU5EJzsKICAgICAgICB9CiAgICAgICAgJEV4dAogICAgICAgICAgICAuPSAiIExPV0VSKHMubm90aWZpY2F0aW9uX2JvZHkpIExJS0UgTE9XRVIoJyIKICAgICAgICAgICAgLiAkUGFyYW17Tm90aWZpY2F0aW9uQm9keX0KICAgICAgICAgICAgLiAiJykgJFNlbGYtPntMaWtlRXNjYXBlU3RyaW5nfSI7CiAgICB9CgogICAgIyBzZWFyY2ggZm9yIHRoZSBzdGF0dXMKICAgIGlmICggJFBhcmFte1N0YXR1c30gKSB7CiAgICAgICAgJFBhcmFte1N0YXR1c30gPSAiXCUkUGFyYW17U3RhdHVzfVwlIjsKICAgICAgICAkUGFyYW17U3RhdHVzfSA9fiBzL1wqLyUvZzsKICAgICAgICAkUGFyYW17U3RhdHVzfSA9fiBzLyUlLyUvZzsKICAgICAgICAkUGFyYW17U3RhdHVzfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFte1N0YXR1c30sICdMaWtlJyApOwogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0IC49ICIgTE9XRVIocy5zdGF0dXMpIExJS0UgTE9XRVIoJyIgLiAkUGFyYW17U3RhdHVzfSAuICInKSAkU2VsZi0+e0xpa2VFc2NhcGVTdHJpbmd9IjsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgdGhlIGNyZWF0ZSBieQogICAgaWYgKCAkUGFyYW17Q3JlYXRlQnl9ICkgewogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0IC49ICIgcy5jcmVhdGVfYnkgPSAiIC4gJFBhcmFte0NyZWF0ZUJ5fTsKICAgIH0KCiAgICAjIHNlYXJjaCBmb3IgdGhlIGNyZWF0ZSBieQogICAgaWYgKCAkUGFyYW17Q2hhbmdlQnl9ICkgewogICAgICAgIGlmICgkRXh0KSB7CiAgICAgICAgICAgICRFeHQgLj0gJyBBTkQnOwogICAgICAgIH0KICAgICAgICAkRXh0IC49ICIgcy5jcmVhdGVfYnkgPSAiIC4gJFBhcmFte0NoYW5nZUJ5fTsKICAgIH0KCiAgICAjIHNldCB0aW1lIHBhcmFtcwogICAgbXkgJVRpbWVQYXJhbXMgPSAoCgogICAgICAgICMgdGltZXMgaW4gY2hhbmdlX2l0ZW0KICAgICAgICBDcmVhdGVUaW1lTmV3ZXJEYXRlID0+ICdzLmNyZWF0ZV90aW1lID49JywKICAgICAgICBDcmVhdGVUaW1lT2xkZXJEYXRlID0+ICdzLmNyZWF0ZV90aW1lIDw9JywKICAgICAgICBDaGFuZ2VUaW1lTmV3ZXJEYXRlID0+ICdzLmNoYW5nZV90aW1lID49JywKICAgICAgICBDaGFuZ2VUaW1lT2xkZXJEYXRlID0+ICdzLmNoYW5nZV90aW1lIDw9JywKICAgICk7CgogICAgIyBjaGVjayBhbmQgYWRkIHRpbWUgcGFyYW1zIHRvIFdIRVJFCiAgICBUSU1FUEFSQU06CiAgICBmb3IgbXkgJFRpbWVQYXJhbSAoIGtleXMgJVRpbWVQYXJhbXMgKSB7CgogICAgICAgIG5leHQgVElNRVBBUkFNIGlmICEkUGFyYW17JFRpbWVQYXJhbX07CgogICAgICAgICMgY2hlY2sgZm9ybWF0CiAgICAgICAgaWYgKCAkUGFyYW17JFRpbWVQYXJhbX0gIX4gbXsgXEEgXGRcZFxkXGQtXGRcZC1cZFxkIFxzIFxkXGQ6XGRcZDpcZFxkIFx6IH14bXMgKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJUaGUgcGFyYW1ldGVyICRUaW1lUGFyYW0gaGFzIGFuIGludmFsaWQgZGF0ZSBmb3JtYXQhIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRQYXJhbXskVGltZVBhcmFtfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRUaW1lUGFyYW19ICk7CgogICAgICAgICMgYWRkIHRpbWUgcGFyYW1ldGVyIHRvIFdIRVJFCiAgICAgICAgaWYgKCRFeHQpIHsKICAgICAgICAgICAgJEV4dCAuPSAnIEFORCc7CiAgICAgICAgfQogICAgICAgICRFeHQgLj0gIiRUaW1lUGFyYW1zeyRUaW1lUGFyYW19ICckUGFyYW17JFRpbWVQYXJhbX0nIjsKICAgIH0KCiAgICAjIGFkZCBXSEVSRSBzdGF0ZW1lbnQKICAgIGlmICgkRXh0KSB7CiAgICAgICAgJEV4dCA9ICcgV0hFUkUgJyAuICRFeHQ7CiAgICB9CgogICAgIyBhZGQgR1JPVVAgQlkKICAgICRFeHQKICAgICAgICAuPSAnIEdST1VQIEJZIHMuaWQgJzsKCiAgICAjIGFkZCB0aGUgT1JERVIgQlkgY2xhdXNlCiAgICBpZiAoQFNRTE9yZGVyQnkpIHsKICAgICAgICAkRXh0IC49ICdPUkRFUiBCWSAnOwogICAgICAgICRFeHQgLj0gam9pbiAnLCAnLCBAU1FMT3JkZXJCeTsKICAgICAgICAkRXh0IC49ICcgJzsKICAgIH0KCiAgICAjIGFkZCBleHRlbmRlZCBTUUwKICAgICRTUUwgLj0gJEV4dDsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAkU1FMLAogICAgICAgIExpbWl0ID0+ICRQYXJhbXtMaW1pdH0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQExpc3Q7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHB1c2ggQExpc3QsICRSb3dbMF07CiAgICB9CiAgICByZXR1cm4gQExpc3Q7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoaHR0cDovL290cnMub3JnLykuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9aGVhZDEgVkVSU0lPTgoKJFJldmlzaW9uOiAxLjU3ICQgJERhdGU6IDIwMTEvMDEvMTcgMTY6NTM6MzUgJAoKPWN1dAo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vVGlja2V0L0V2ZW50L1N1cnZleVNlbmRSZXF1ZXN0LnBtIC0gc2VuZCBzdXJ2ZXkgcmVxdWVzdHMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IFN1cnZleVNlbmRSZXF1ZXN0LnBtLHYgMS4xNCAyMDEwLzA1LzIxIDEyOjQ5OjUyIG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkV2ZW50OjpTdXJ2ZXlTZW5kUmVxdWVzdDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6U3VydmV5OwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS4xNCAkKSBbMV07CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhDb25maWdPYmplY3QgVGlja2V0T2JqZWN0IExvZ09iamVjdCBVc2VyT2JqZWN0IERCT2JqZWN0IE1haW5PYmplY3QgVGltZU9iamVjdCBFbmNvZGVPYmplY3QpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQogICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OlN1cnZleS0+bmV3KCAleyRTZWxmfSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhUaWNrZXRJRCBFdmVudCBDb25maWcpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHRpY2tldCBkYXRhCiAgICBteSAlVGlja2V0ID0gJFNlbGYtPntUaWNrZXRPYmplY3R9LT5UaWNrZXRHZXQoCiAgICAgICAgVGlja2V0SUQgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICk7CgogICAgcmV0dXJuIDEgaWYgJFRpY2tldHtTdGF0ZVR5cGV9IG5lICdjbG9zZWQnOwoKICAgICMgc2VuZCBhbHNvIHN1cnZleSByZXF1ZXN0IG9uIHRpY2tldCBjcmVhdGlvbiAob24gZmlyc3QgYXJ0aWNsZSkKICAgIGlmICggJFBhcmFte0V2ZW50fSBlcSAnQXJ0aWNsZUNyZWF0ZScgKSB7CgogICAgICAgIG15IEBBcnRpY2xlSW5kZXggPSAkU2VsZi0+e1RpY2tldE9iamVjdH0tPkFydGljbGVJbmRleCgKICAgICAgICAgICAgVGlja2V0SUQgPT4gJFBhcmFte1RpY2tldElEfSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gMSBpZiBzY2FsYXIgQEFydGljbGVJbmRleCAhPSAxOwogICAgfQoKICAgICMgc2VuZCByZXF1ZXN0CiAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlJlcXVlc3RTZW5kKAogICAgICAgIFRpY2tldElEID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIFN1cnZleS50IC0gU3VydmV5IHRlc3RzCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBTdXJ2ZXkudCx2IDEuMTcgMjAxMS8wMS8xNCAxNTo1NjoyOSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIHF3KCRTZWxmKTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyOwp1c2UgS2VybmVsOjpTeXN0ZW06OkVtYWlsOwp1c2UgS2VybmVsOjpTeXN0ZW06OlN1cnZleTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VXNlcjsKCiMgY3JlYXRlIGxvY2FsIG9iamVjdHMKbXkgJFVzZXJPYmplY3QgICA9IEtlcm5lbDo6U3lzdGVtOjpVc2VyLT5uZXcoICV7JFNlbGZ9ICk7Cm15ICRUaWNrZXRPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6VGlja2V0LT5uZXcoICV7JFNlbGZ9ICk7CgpteSAkU3VydmV5T2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlN1cnZleS0+bmV3KAogICAgQ29uZmlnT2JqZWN0ID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fSwKICAgIExvZ09iamVjdCAgICA9PiAkU2VsZi0+e0xvZ09iamVjdH0sCiAgICBUaW1lT2JqZWN0ICAgPT4gJFNlbGYtPntUaW1lT2JqZWN0fSwKICAgIERCT2JqZWN0ICAgICA9PiAkU2VsZi0+e0RCT2JqZWN0fSwKICAgIE1haW5PYmplY3QgICA9PiAkU2VsZi0+e01haW5PYmplY3R9LAogICAgRW5jb2RlT2JqZWN0ID0+ICRTZWxmLT57RW5jb2RlT2JqZWN0fSwKICAgIFVzZXJPYmplY3QgICA9PiAkVXNlck9iamVjdCwKKTsKCiMgc2F2ZSBvcmlnaW5hbCBzZW5kbWFpbCBjb25maWcKbXkgJFNlbmRtYWlsTW9kdWxlID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1NlbmRtYWlsTW9kdWxlJyk7CgojIHNldCBjb25maWcgdG8gbm90IHNlbmQgZW1haWxzCiRTZWxmLT57Q29uZmlnT2JqZWN0fS0+U2V0KAogICAgS2V5ICAgPT4gJ1NlbmRtYWlsTW9kdWxlJywKICAgIFZhbHVlID0+ICdLZXJuZWw6OlN5c3RlbTo6RW1haWw6OkRvTm90U2VuZEVtYWlsJywKKTsKCiMgY2xlYW51cCBzeXN0ZW0KJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgU1FMID0+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+IFsKICAgICAgICAgICAgMCwKICAgICAgICAgICAgMCwKICAgICAgICBdLAogICAgfSwKKTsKCmZvciBteSAkVGVzdCAoQFRlc3RzKSB7CiAgICBpZiAoICRUZXN0LT57J1N1cnZleTo6U2VuZFBlcmlvZCd9ICkgewogICAgICAgICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+U2V0KAogICAgICAgICAgICBLZXkgICA9PiAnU3VydmV5OjpTZW5kUGVyaW9kJywKICAgICAgICAgICAgVmFsdWUgPT4gJFRlc3QtPnsnU3VydmV5OjpTZW5kUGVyaW9kJ30sCiAgICAgICAgKTsKICAgIH0KICAgIGlmICggJFRlc3QtPntTbGVlcH0gKSB7CiAgICAgICAgc2xlZXAgJFRlc3QtPntTbGVlcH07CiAgICB9CiAgICBteSAkVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRDcmVhdGUoCiAgICAgICAgJXsgJFRlc3QtPntUaWNrZXR9IH0sCiAgICApOwogICAgbXkgJEFydGljbGVJRCA9ICRUaWNrZXRPYmplY3QtPkFydGljbGVDcmVhdGUoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICV7ICRUZXN0LT57QXJ0aWNsZX0gfSwKICAgICk7CgogICAgIyBzZW5kIHN1cnZleSBmaXJzdCB0aW1lCiAgICBteSAoICRIZWFkZXJSZWYsICRCb2R5UmVmICkgPSAkU3VydmV5T2JqZWN0LT5SZXF1ZXN0U2VuZCgKICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICApOwoKICAgICMgY2hlY2sgaWYgc3VydmV5IGdvdCBzZW50CiAgICBpZiAoICRUZXN0LT57UmVzdWx0fS0+WzBdICkgewogICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAkeyRIZWFkZXJSZWZ9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBSZXF1ZXN0U2VuZCgpIC0gc3VydmV5IGdvdCBzZW50IiwKICAgICAgICApOwoKICAgICAgICAkeyRIZWFkZXJSZWZ9ID1+IG17IF4gU3ViamVjdDogWyBdICggLis/ICkgXG4gXFMrOiBbIF0gfXhtczsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICQxLAogICAgICAgICAgICAnSGVscCB1cyB3aXRoIHlvdXIgZmVlZGJhY2shID0/VVRGLTg/UT89QzM9ODQ9QzM9OTY9QzM9OUM/PScsCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IFRlc3Qgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGVtYWlsIHN1YmplY3QiLAogICAgICAgICk7CgogICAgICAgICMgZGVmaW5lIG1haWwgYm9keQogICAgICAgIG15ICRNYWlsYm9keTEgPSAiVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4uLgoKLS0tLS0tLS0tLS0tPV9NRVNTQUdFSUQKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVwidXRmLThcIgpDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQoKRGVhciBjdXN0b21lci4uLiA9QzM9QTQ9QzM9QjY9QzM9QkM9CgotLS0tLS0tLS0tLS09X01FU1NBR0VJRApDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1cInV0Zi04XCIKQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKCjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9M0RcIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9M0RcInRleHQvaHRtbDsgY2hhcnNldD0KPTNEdXRmLThcIi8+PC9oZWFkPjxib2R5IHN0eWxlPTNEXCJmb250LWZhbWlseTpHZW5ldmEsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2U9CnJpZjsgZm9udC1zaXplOiAxMnB4O1wiPkRlYXIgY3VzdG9tZXIuLi4gPUMzPUE0PUMzPUI2PUMzPUJDPC9ib2R5PjwvaHRtbD49CgotLS0tLS0tLS0tLS09X01FU1NBR0VJRC0tCiI7CgogICAgICAgICMgY29weSBtYWlsIGJvZHkKICAgICAgICBteSAkTWFpbGJvZHkyID0gJHskQm9keVJlZn07CgogICAgICAgICMgcHJlcGFyZSBtYWlsIGJvZHkKICAgICAgICAkTWFpbGJvZHkyID1+IHN7IFxkezgsMTJ9IC0gXGR7Myw2fSAtIFxkezEsM30gfXtNRVNTQUdFSUR9eG1zZzsKCiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkTWFpbGJvZHkyLAogICAgICAgICAgICAkTWFpbGJvZHkxLAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBUZXN0IHNwZWNpYWwgY2hhcmFjdGVycyBpbiBlbWFpbCBib2R5IiwKICAgICAgICApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAkeyRIZWFkZXJSZWZ9LAogICAgICAgICAgICAiJFRlc3QtPntOYW1lfSBSZXF1ZXN0U2VuZCgpIC0gbm8gc3VydmV5IGdvdCBzZW50IiwKICAgICAgICApOwogICAgfQoKICAgICMgc2VuZCBzdXJ2ZXkgc2Vjb25kIHRpbWUKICAgICggJEhlYWRlclJlZiwgJEJvZHlSZWYgKSA9ICRTdXJ2ZXlPYmplY3QtPlJlcXVlc3RTZW5kKAogICAgICAgIFRpY2tldElEID0+ICRUaWNrZXRJRCwKICAgICk7CgogICAgIyBjaGVjayBpZiBzdXJ2ZXkgZ290IHNlbnQKICAgIGlmICggJFRlc3QtPntSZXN1bHR9LT5bMV0gKSB7CiAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICR7JEhlYWRlclJlZn0sCiAgICAgICAgICAgICIkVGVzdC0+e05hbWV9IDIgUmVxdWVzdFNlbmQoKSAtIHN1cnZleSBnb3Qgc2VudCIsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgJHskSGVhZGVyUmVmfSwKICAgICAgICAgICAgIiRUZXN0LT57TmFtZX0gMiBSZXF1ZXN0U2VuZCgpIC0gbm8gc3VydmV5IGdvdCBzZW50IiwKICAgICAgICApOwogICAgfQoKICAgIG15ICREZWxldGUgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXREZWxldGUoCiAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICApOwp9CgojIGNsZWFudXAgc3lzdGVtCiRTZWxmLT57REJPYmplY3R9LT5EbygKICAgIFNRTCA9PiAiREVMRVRFIEZST00gc3VydmV5X3JlcXVlc3QgV0hFUkUgc2VuZF90byBMSUtFICdcJVxAdW5pdHRlc3QuY29tXCUnIiwKKTsKCiMgcmVzdG9yZSBvcmlnaW5hbCBzZW5kbWFpbCBjb25maWcKJFNlbGYtPntDb25maWdPYmplY3R9LT5TZXQoCiAgICBLZXkgICA9PiAnU2VuZG1haWxNb2R1bGUnLAogICAgVmFsdWUgPT4gJFNlbmRtYWlsTW9kdWxlLAopOwoKMTsK
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9MYXlvdXRTdXJ2ZXkucG0gLSBwcm92aWRlcyBnZW5lcmljIEhUTUwgb3V0cHV0IGZvciBTdXJ2ZXkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IExheW91dFN1cnZleS5wbSx2IDEuMSAyMDExLzAxLzA3IDEzOjE3OjAwIGNyIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXRTdXJ2ZXk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dDsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OKTsKJFZFUlNJT04gPSBxdygkUmV2aXNpb246IDEuMSAkKSBbMV07Cgo9b3ZlciA0Cgo9aXRlbSBTdXJ2ZXlMaXN0U2hvdygpCgpSZXR1cm5zIGEgbGlzdCBvZiBzdXJ2ZXlzIGxpc3Qgd2l0aCBwYWdpbmF0aW9uLgoKVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIEw8S2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dFRpY2tldDo6VGlja2V0TGlzdFNob3coKT4KaW4gRjxLZXJuZWwvT3V0cHV0L0hUTUwvTGF5b3V0VGlja2V0LnBtPi4KCiAgICBteSAkT3V0cHV0ID0gJExheW91dE9iamVjdC0+U3VydmV5TGlzdFNob3coCiAgICAgICAgU3VydmV5SURzICA9PiAkU3VydmV5SURzUmVmLCAgICAgICAgICAgICAgICAgICAgICAjIHRvdGFsIGxpc3Qgb2Ygc3VydmV5cyBpZHMsIHRoYXQgY2FuIGJlIGxpc3RlZAogICAgICAgIFRvdGFsICAgICAgPT4gc2NhbGFyIEB7ICRTdXJ2ZXlJRHNSZWYgfSwgICAgICAgICAgIyB0b3RhbCBudW1iZXIgb2YgbGlzdCBpdGVtcywgY2hhbmdlcyBpbiB0aGlzIGNhc2UKICAgICAgICBWaWV3ICAgICAgID0+ICRTZWxmLT57Vmlld30sICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwsIHRoZSBkZWZhdWx0IHZhbHVlIGlzICdTbWFsbCcKICAgICAgICBGaWx0ZXIgICAgID0+ICdBbGwnLAogICAgICAgIEZpbHRlcnMgICAgPT4gXCVOYXZCYXJGaWx0ZXIsCiAgICAgICAgRmlsdGVyTGluayA9PiAkTGlua0ZpbHRlciwKICAgICAgICBUaXRsZU5hbWUgID0+ICdPdmVydmlldzogU3VydmV5JywKICAgICAgICBUaXRsZVZhbHVlID0+ICRTZWxmLT57RmlsdGVyfSwKICAgICAgICBFbnYgICAgICAgID0+ICRTZWxmLAogICAgICAgIExpbmtQYWdlICAgPT4gJExpbmtQYWdlLAogICAgKTsKCj1jdXQKCnN1YiBTdXJ2ZXlMaXN0U2hvdyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdGFrZSBvYmplY3QgcmVmIHRvIGxvY2FsLCByZW1vdmUgaXQgZnJvbSAlUGFyYW0gKHByZXZlbnQgbWVtb3J5IGxlYWspCiAgICBteSAkRW52ID0gZGVsZXRlICRQYXJhbXtFbnZ9OwoKICAgICMgbG9va3VwIGxhdGVzdCB1c2VkIHZpZXcgbW9kZQogICAgaWYgKCAhJFBhcmFte1ZpZXd9ICYmICRTZWxmLT57ICdVc2VyU3VydmV5T3ZlcnZpZXcnIC4gJEVudi0+e0FjdGlvbn0gfSApIHsKICAgICAgICAkUGFyYW17Vmlld30gPSAkU2VsZi0+eyAnVXNlclN1cnZleU92ZXJ2aWV3JyAuICRFbnYtPntBY3Rpb259IH07CiAgICB9CgogICAgIyBzZXQgZnJvbnRlbmQKICAgIG15ICRGcm9udGVuZCA9ICRQYXJhbXtGcm9udGVuZH0gfHwgJ0FnZW50JzsKCiAgICAjIHNldCBkZWZhdXQgdmlldyBtb2RlIHRvICdzbWFsbCcKICAgIG15ICRWaWV3ID0gJFBhcmFte1ZpZXd9IHx8ICdTbWFsbCc7CgogICAgIyBzdG9yZSBsYXRlc3QgdmlldyBtb2RlCiAgICAkU2VsZi0+e1Nlc3Npb25PYmplY3R9LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgICAgICAgPT4gJ1VzZXJTdXJ2ZXlPdmVydmlldycgLiAkRW52LT57QWN0aW9ufSwKICAgICAgICBWYWx1ZSAgICAgPT4gJFZpZXcsCiAgICApOwoKICAgICMgZ2V0IGJhY2tlbmQgZnJvbSBjb25maWcKICAgIG15ICRCYWNrZW5kcyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdTdXJ2ZXk6OkZyb250ZW5kOjpPdmVydmlldycpOwogICAgaWYgKCAhJEJhY2tlbmRzICkgewogICAgICAgIHJldHVybiAkRW52LT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnTmVlZCBjb25maWcgb3B0aW9uIFN1cnZleTo6RnJvbnRlbmQ6Ok92ZXJ2aWV3JywKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgZm9yIGhhc2gtcmVmCiAgICBpZiAoIHJlZiAkQmFja2VuZHMgbmUgJ0hBU0gnICkgewogICAgICAgIHJldHVybiAkRW52LT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigKICAgICAgICAgICAgTWVzc2FnZSA9PiAnQ29uZmlnIG9wdGlvbiBTdXJ2ZXk6OkZyb250ZW5kOjpPdmVydmlldyBuZWVkcyB0byBiZSBhIEhBU0ggcmVmIScsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIGZvciBjb25maWcga2V5CiAgICBpZiAoICEkQmFja2VuZHMtPnskVmlld30gKSB7CiAgICAgICAgcmV0dXJuICRFbnYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKAogICAgICAgICAgICBNZXNzYWdlID0+ICJObyBjb25maWcgb3B0aW9uIGZvdW5kIGZvciB0aGUgdmlldyAnJFZpZXcnISIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIG5hdiBiYXIKICAgIG15ICRTdGFydEhpdCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSgKICAgICAgICBQYXJhbSA9PiAnU3RhcnRIaXQnLAogICAgKSB8fCAxOwoKICAgICMgZ2V0IHBlcnNvbmFsIHBhZ2Ugc2hvd24gY291bnQKICAgIG15ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleSA9ICdVc2VyU3VydmV5T3ZlcnZpZXcnIC4gJFZpZXcgLiAnUGFnZVNob3duJzsKICAgIG15ICRQYWdlU2hvd24gICAgICAgICAgICAgICA9ICRTZWxmLT57JFBhZ2VTaG93blByZWZlcmVuY2VzS2V5fSB8fCAxMDsKICAgIG15ICRHcm91cCAgICAgICAgICAgICAgICAgICA9ICdTdXJ2ZXlPdmVydmlldycgLiAkVmlldyAuICdQYWdlU2hvd24nOwoKICAgICMgY2hlY2sgc3RhcnQgb3B0aW9uLCBpZiBoaWdoZXIgdGhlbiBlbGVtZW50cyBhdmFpbGFibGUsIHNldAogICAgIyBpdCB0byB0aGUgbGFzdCBvdmVydmlldyBwYWdlIChUaGFua3MgdG8gU3RlZmFuIFNjaG1pZHQhKQogICAgaWYgKCAkU3RhcnRIaXQgPiAkUGFyYW17VG90YWx9ICkgewogICAgICAgIG15ICRQYWdlcyA9IGludCggKCAkUGFyYW17VG90YWx9IC8gJFBhZ2VTaG93biApICsgMC45OTk5OSApOwogICAgICAgICRTdGFydEhpdCA9ICggKCAkUGFnZXMgLSAxICkgKiAkUGFnZVNob3duICkgKyAxOwogICAgfQoKICAgICMgZ2V0IGRhdGEgc2VsZWN0aW9uCiAgICBteSAlRGF0YTsKICAgIG15ICRDb25maWcgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUHJlZmVyZW5jZXNHcm91cHMnKTsKICAgIGlmICggJENvbmZpZyAmJiAkQ29uZmlnLT57JEdyb3VwfSAmJiAkQ29uZmlnLT57JEdyb3VwfS0+e0RhdGF9ICkgewogICAgICAgICVEYXRhID0gJXsgJENvbmZpZy0+eyRHcm91cH0tPntEYXRhfSB9OwogICAgfQoKICAgICMgc2V0IHBhZ2UgbGltaXQgYW5kIGJ1aWxkIHBhZ2UgbmF2CiAgICBteSAkTGltaXQgPSAkUGFyYW17TGltaXR9IHx8IDIwXzAwMDsKICAgIG15ICVQYWdlTmF2ID0gJEVudi0+e0xheW91dE9iamVjdH0tPlBhZ2VOYXZCYXIoCiAgICAgICAgTGltaXQgICAgID0+ICRMaW1pdCwKICAgICAgICBTdGFydEhpdCAgPT4gJFN0YXJ0SGl0LAogICAgICAgIFBhZ2VTaG93biA9PiAkUGFnZVNob3duLAogICAgICAgIEFsbEhpdHMgICA9PiAkUGFyYW17VG90YWx9IHx8IDAsCiAgICAgICAgQWN0aW9uICAgID0+ICdBY3Rpb249JyAuICRFbnYtPntMYXlvdXRPYmplY3R9LT57QWN0aW9ufSwKICAgICAgICBMaW5rICAgICAgPT4gJFBhcmFte0xpbmtQYWdlfSwKICAgICk7CgogICAgIyBidWlsZCBzaG93biBzdXJ2ZXlzIHBlciBwYWdlCiAgICAkUGFyYW17UmVxdWVzdGVkVVJMfSAgICA9ICJBY3Rpb249JFNlbGYtPntBY3Rpb259IjsKICAgICRQYXJhbXtHcm91cH0gICAgICAgICAgID0gJEdyb3VwOwogICAgJFBhcmFte1ByZWZlcmVuY2VzS2V5fSAgPSAkUGFnZVNob3duUHJlZmVyZW5jZXNLZXk7CiAgICAkUGFyYW17UGFnZVNob3duU3RyaW5nfSA9ICRTZWxmLT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBOYW1lICAgICAgID0+ICRQYWdlU2hvd25QcmVmZXJlbmNlc0tleSwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYWdlU2hvd24sCiAgICAgICAgRGF0YSAgICAgICA9PiBcJURhdGEsCiAgICApOwoKICAgICMgYnVpbGQgbmF2YmFyIGNvbnRlbnQKICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhcicsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAjIGJhY2sgbGluawogICAgaWYgKCAkUGFyYW17TGlua0JhY2t9ICkgewogICAgICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJQYWdlQmFjaycsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGZpbHRlcnMKICAgIGlmICggJFBhcmFte0ZpbHRlcnN9ICkgewoKICAgICAgICAjIGdldCBnaXZlbiBmaWx0ZXJzCiAgICAgICAgbXkgQE5hdkJhckZpbHRlcnM7CiAgICAgICAgZm9yIG15ICRQcmlvICggc29ydCBrZXlzICV7ICRQYXJhbXtGaWx0ZXJzfSB9ICkgewogICAgICAgICAgICBwdXNoIEBOYXZCYXJGaWx0ZXJzLCAkUGFyYW17RmlsdGVyc30tPnskUHJpb307CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIGZpbHRlciBjb250ZW50CiAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhckZpbHRlcicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgbG9vcCBvdmVyIGZpbHRlcnMKICAgICAgICBteSAkQ291bnQgPSAwOwogICAgICAgIGZvciBteSAkRmlsdGVyIChATmF2QmFyRmlsdGVycykgewoKICAgICAgICAgICAgIyBpbmNyZW1lbnQgZmlsdGVyIGNvdW50IGFuZCBidWlsZCBmaWx0ZXIgaXRlbQogICAgICAgICAgICAkQ291bnQrKzsKICAgICAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAleyRGaWx0ZXJ9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZmlsdGVyIGlzIHNlbGVjdGVkCiAgICAgICAgICAgIGlmICggJEZpbHRlci0+e0ZpbHRlcn0gZXEgJFBhcmFte0ZpbHRlcn0gKSB7CiAgICAgICAgICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJGaWx0ZXJJdGVtU2VsZWN0ZWQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JEZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkTm90JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICAgICAleyRGaWx0ZXJ9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGxvb3Agb3ZlciBjb25maWd1cmVkIGJhY2tlbmRzCiAgICBmb3IgbXkgJEJhY2tlbmQgKCBrZXlzICV7JEJhY2tlbmRzfSApIHsKCiAgICAgICAgIyBidWlsZCBuYXZiYXIgdmlldyBtb2RlCiAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclZpZXdNb2RlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAleyAkQmFja2VuZHMtPnskQmFja2VuZH0gfSwKICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkUGFyYW17RmlsdGVyfSwKICAgICAgICAgICAgICAgIFZpZXcgICA9PiAkQmFja2VuZCwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGN1cnJlbnQgdmlldyBpcyBjb25maWd1cmVkIGluIGJhY2tlbmQKICAgICAgICBpZiAoICRWaWV3IGVxICRCYWNrZW5kICkgewogICAgICAgICAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld05hdkJhclZpZXdNb2RlU2VsZWN0ZWQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgICV7ICRCYWNrZW5kcy0+eyRCYWNrZW5kfSB9LAogICAgICAgICAgICAgICAgICAgIEZpbHRlciA9PiAkUGFyYW17RmlsdGVyfSwKICAgICAgICAgICAgICAgICAgICBWaWV3ICAgPT4gJEJhY2tlbmQsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJWaWV3TW9kZU5vdFNlbGVjdGVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAleyAkQmFja2VuZHMtPnskQmFja2VuZH0gfSwKICAgICAgICAgICAgICAgICAgICBGaWx0ZXIgPT4gJFBhcmFte0ZpbHRlcn0sCiAgICAgICAgICAgICAgICAgICAgVmlldyAgID0+ICRCYWNrZW5kLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiBwYWdlIG5hdiBpcyBhdmFpbGFibGUKICAgIGlmICglUGFnZU5hdikgewogICAgICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXJQYWdlTmF2QmFyJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhZ2VOYXYsCiAgICAgICAgKTsKCiAgICAgICAgIyBkb24ndCBzaG93IGNvbnRleHQgc2V0dGluZ3MgaW4gQUpBWCBjYXNlIChlLiBnLiBpbiBjdXN0b21lciB0aWNrZXQgaGlzdG9yeSksCiAgICAgICAgIyAgIGJlY2F1c2UgdGhlIHN1Ym1pdCB3aXRoIHBhZ2UgcmVsb2FkIHdpbGwgbm90IHdvcmsgdGhlcmUKICAgICAgICBpZiAoICEkUGFyYW17QUpBWH0gKSB7CiAgICAgICAgICAgICRFbnYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NvbnRleHRTZXR0aW5ncycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFnZU5hdiwKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGJ1aWxkIGh0bWwgY29udGVudAogICAgbXkgJE91dHB1dE5hdkJhciA9ICRFbnYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFN1cnZleU92ZXJ2aWV3TmF2QmFyJywKICAgICAgICBEYXRhICAgICAgICAgPT4geyVQYXJhbX0sCiAgICApOwoKICAgICMgY3JlYXRlIG91dHB1dAogICAgbXkgJE91dHB1dFJhdyA9ICcnOwogICAgaWYgKCAhJFBhcmFte091dHB1dH0gKSB7CiAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPlByaW50KAogICAgICAgICAgICBPdXRwdXQgPT4gXCRPdXRwdXROYXZCYXIsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRPdXRwdXRSYXcgLj0gJE91dHB1dE5hdkJhcjsKICAgIH0KCiAgICAjIGxvYWQgbW9kdWxlCiAgICBpZiAoICEkU2VsZi0+e01haW5PYmplY3R9LT5SZXF1aXJlKCAkQmFja2VuZHMtPnskVmlld30tPntNb2R1bGV9ICkgKSB7CiAgICAgICAgcmV0dXJuICRFbnYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCk7CiAgICB9CgogICAgIyBjaGVjayBmb3IgYmFja2VuZCBvYmplY3QKICAgIG15ICRPYmplY3QgPSAkQmFja2VuZHMtPnskVmlld30tPntNb2R1bGV9LT5uZXcoICV7JEVudn0gKTsKICAgIHJldHVybiBpZiAhJE9iamVjdDsKCiAgICAjIHJ1biBtb2R1bGUKICAgIG15ICRPdXRwdXQgPSAkT2JqZWN0LT5SdW4oCiAgICAgICAgJVBhcmFtLAogICAgICAgIExpbWl0ICAgICA9PiAkTGltaXQsCiAgICAgICAgU3RhcnRIaXQgID0+ICRTdGFydEhpdCwKICAgICAgICBQYWdlU2hvd24gPT4gJFBhZ2VTaG93biwKICAgICAgICBBbGxIaXRzICAgPT4gJFBhcmFte1RvdGFsfSB8fCAwLAogICAgICAgIEZyb250ZW5kICA9PiAkRnJvbnRlbmQsCiAgICApOwoKICAgICMgY3JlYXRlIG91dHB1dAogICAgaWYgKCAhJFBhcmFte091dHB1dH0gKSB7CiAgICAgICAgJEVudi0+e0xheW91dE9iamVjdH0tPlByaW50KAogICAgICAgICAgICBPdXRwdXQgPT4gXCRPdXRwdXQsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRPdXRwdXRSYXcgLj0gJE91dHB1dDsKICAgIH0KCiAgICAjIGNyZWF0ZSBvdmVydmlldyBuYXYgYmFyCiAgICAkRW52LT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXInLAogICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICApOwoKICAgICMgcmV0dXJuIGNvbnRlbnQgaWYgYXZhaWxhYmxlCiAgICByZXR1cm4gJE91dHB1dFJhdzsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1oZWFkMSBWRVJTSU9OCgokUmV2aXNpb246IDEuMSAkICREYXRlOiAyMDExLzAxLzA3IDEzOjE3OjAwICQKCj1jdXQK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50U3VydmV5LnBtIC0gYSBzdXJ2ZXkgbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZ2VudFN1cnZleS5wbSx2IDEuNDcgMjAxMS8wMS8xOSAyMzoyODoxMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50U3VydmV5OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpTdXJ2ZXk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS40NyAkKSBbMV07CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IGNvbW1vbiBvYmplY3RzCiAgICAleyRTZWxmfSA9ICVQYXJhbTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBDb25maWdPYmplY3QpKSB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9ICAgID0gS2VybmVsOjpTeXN0ZW06OlN1cnZleS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzLT5uZXcoJVBhcmFtKTsKCiAgICAjIGdldCBjb25maWcgb2YgZnJvbnRlbmQgbW9kdWxlCiAgICAkU2VsZi0+e0NvbmZpZ30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiU3VydmV5OjpGcm9udGVuZDo6JFNlbGYtPntBY3Rpb259Iik7CgogICAgIyBnZXQgZGVmYXVsdCBwYXJhbWV0ZXJzCiAgICAkU2VsZi0+e0ZpbHRlcn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdGaWx0ZXInICkgfHwgJyc7CiAgICAkU2VsZi0+e1ZpZXd9ICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdWaWV3JyApICAgfHwgJyc7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dDsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN1cnZleSBlZGl0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU3VydmV5RWRpdCcgKSB7CiAgICAgICAgbXkgJFN1cnZleUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5SUQiICk7CgogICAgICAgICMgY2hlY2sgaWYgc3VydmV5IGV4aXN0cwogICAgICAgIGlmICgKICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5FbGVtZW50RXhpc3RzKCBFbGVtZW50SUQgPT4gJFN1cnZleUlELCBFbGVtZW50ID0+ICdTdXJ2ZXknICkgbmUKICAgICAgICAgICAgJ1llcycKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fQogICAgICAgICAgICAgICAgLT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj1BZ2VudFN1cnZleSIgKTsKICAgICAgICB9CgogICAgICAgIG15ICVTdXJ2ZXkgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleUdldCggU3VydmV5SUQgPT4gJFN1cnZleUlEICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+X1N1cnZleUFkZE1hc2soCiAgICAgICAgICAgICVTdXJ2ZXksCiAgICAgICAgKTsKCiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzdXJ2ZXkgc2F2ZQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1N1cnZleVNhdmUnICkgewoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAkU3VydmV5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKCiAgICAgICAgaWYgKCAhJFN1cnZleUlEICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCByZXF1aWVyZWQgZm9ybSBlbGVtZW50cyBhbmQgZXJyb3JzCiAgICAgICAgbXkgJVNlcnZlckVycm9yOwogICAgICAgIG15ICVGb3JtRWxlbWVudHM7CiAgICAgICAgZm9yIG15ICRJdGVtICgKICAgICAgICAgICAgcXcoIFRpdGxlIEludHJvZHVjdGlvbiBEZXNjcmlwdGlvbiBOb3RpZmljYXRpb25TZW5kZXIgTm90aWZpY2F0aW9uU3ViamVjdCBOb3RpZmljYXRpb25Cb2R5ICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEZvcm1FbGVtZW50c3skSXRlbX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICIkSXRlbSIgKTsKCiAgICAgICAgICAgIGlmICggISRGb3JtRWxlbWVudHN7JEl0ZW19ICkgewogICAgICAgICAgICAgICAgJFNlcnZlckVycm9yeyAiJEl0ZW0iIC4gJ1NlcnZlckVycm9yJyB9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgQHsgJEZvcm1FbGVtZW50c3tRdWV1ZXN9IH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0QXJyYXkoIFBhcmFtID0+ICJRdWV1ZXMiICk7CgogICAgICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0Zyb250ZW5kOjpSaWNoVGV4dCcpICkgewogICAgICAgICAgICAkRm9ybUVsZW1lbnRze0ludHJvZHVjdGlvbn0gICAgID0gIlwkaHRtbC90ZXh0XCQgJEZvcm1FbGVtZW50c3tJbnRyb2R1Y3Rpb259IjsKICAgICAgICAgICAgJEZvcm1FbGVtZW50c3tOb3RpZmljYXRpb25Cb2R5fSA9ICJcJGh0bWwvdGV4dFwkICRGb3JtRWxlbWVudHN7Tm90aWZpY2F0aW9uQm9keX0iOwogICAgICAgICAgICAkRm9ybUVsZW1lbnRze0Rlc2NyaXB0aW9ufSAgICAgID0gIlwkaHRtbC90ZXh0XCQgJEZvcm1FbGVtZW50c3tEZXNjcmlwdGlvbn0iOwogICAgICAgIH0KCiAgICAgICAgIyBzYXZlIGlmIG5vIGVycm9ycwogICAgICAgIGlmICggISVTZXJ2ZXJFcnJvciApIHsKICAgICAgICAgICAgbXkgJFNhdmVSZXN1bHQgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleVNhdmUoCiAgICAgICAgICAgICAgICAlRm9ybUVsZW1lbnRzLAogICAgICAgICAgICAgICAgU3VydmV5SUQgPT4gJFN1cnZleUlELAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UG9wdXBDbG9zZSgKICAgICAgICAgICAgICAgIFVSTCA9PiAiQWN0aW9uPUFnZW50U3VydmV5Wm9vbTtTdXJ2ZXlJRD0kU3VydmV5SUQ7IiwKICAgICAgICAgICAgKTsKCiAgICAgICAgfQoKICAgICAgICAjIHJlbG9hZCBmb3JtIGlmIGVycm9yCiAgICAgICAgcmV0dXJuICRTZWxmLT5fU3VydmV5QWRkTWFzaygKICAgICAgICAgICAgRm9ybUVsZW1lbnRzID0+IFwlRm9ybUVsZW1lbnRzLAogICAgICAgICAgICBTZXJ2ZXJFcnJvciAgPT4gXCVTZXJ2ZXJFcnJvciwKICAgICAgICAgICAgU3VydmV5SUQgICAgID0+ICRTdXJ2ZXlJRCwKICAgICAgICApOwoKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN1cnZleSBhZGQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTdXJ2ZXlBZGQnICkgewogICAgICAgIHJldHVybiAkU2VsZi0+X1N1cnZleUFkZE1hc2s7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzdXJ2ZXkgbmV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU3VydmV5TmV3JyApIHsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJFN1cnZleUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5SUQiICk7CgogICAgICAgICMgZ2V0IHJlcXVpZXJlZCBmb3JtIGVsZW1lbnRzIGFuZCBlcnJvcnMKICAgICAgICBteSAlU2VydmVyRXJyb3I7CiAgICAgICAgbXkgJUZvcm1FbGVtZW50czsKICAgICAgICBmb3IgbXkgJEl0ZW0gKAogICAgICAgICAgICBxdyggVGl0bGUgSW50cm9kdWN0aW9uIERlc2NyaXB0aW9uIE5vdGlmaWNhdGlvblNlbmRlciBOb3RpZmljYXRpb25TdWJqZWN0IE5vdGlmaWNhdGlvbkJvZHkgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkRm9ybUVsZW1lbnRzeyRJdGVtfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIiRJdGVtIiApOwoKICAgICAgICAgICAgaWYgKCAhJEZvcm1FbGVtZW50c3skSXRlbX0gKSB7CiAgICAgICAgICAgICAgICAkU2VydmVyRXJyb3J7ICIkSXRlbSIgLiAnU2VydmVyRXJyb3InIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBAeyAkRm9ybUVsZW1lbnRze1F1ZXVlc30gfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRBcnJheSggUGFyYW0gPT4gIlF1ZXVlcyIgKTsKCiAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJvbnRlbmQ6OlJpY2hUZXh0JykgKSB7CiAgICAgICAgICAgICRGb3JtRWxlbWVudHN7SW50cm9kdWN0aW9ufSAgICAgPSAiXCRodG1sL3RleHRcJCAkRm9ybUVsZW1lbnRze0ludHJvZHVjdGlvbn0iOwogICAgICAgICAgICAkRm9ybUVsZW1lbnRze05vdGlmaWNhdGlvbkJvZHl9ID0gIlwkaHRtbC90ZXh0XCQgJEZvcm1FbGVtZW50c3tOb3RpZmljYXRpb25Cb2R5fSI7CiAgICAgICAgICAgICRGb3JtRWxlbWVudHN7RGVzY3JpcHRpb259ICAgICAgPSAiXCRodG1sL3RleHRcJCAkRm9ybUVsZW1lbnRze0Rlc2NyaXB0aW9ufSI7CiAgICAgICAgfQoKICAgICAgICAjIHNhdmUgaWYgbm8gZXJyb3JzCiAgICAgICAgaWYgKCAhJVNlcnZlckVycm9yICkgewogICAgICAgICAgICBteSAkU3VydmV5SUQgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleU5ldygKICAgICAgICAgICAgICAgICVGb3JtRWxlbWVudHMsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50U3VydmV5Wm9vbTtTdXJ2ZXlJRD0kU3VydmV5SUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyByZWxvYWQgZm9ybSBpZiBlcnJvcgogICAgICAgIHJldHVybiAkU2VsZi0+X1N1cnZleUFkZE1hc2soCiAgICAgICAgICAgIEZvcm1FbGVtZW50cyA9PiBcJUZvcm1FbGVtZW50cywKICAgICAgICAgICAgU2VydmVyRXJyb3IgID0+IFwlU2VydmVyRXJyb3IsCiAgICAgICAgKTsKCiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzdXJ2ZXkgc3RhdHVzCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU3VydmV5U3RhdHVzJyApIHsKICAgICAgICBteSAkU3VydmV5SUQgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU3VydmV5SUQiICk7CiAgICAgICAgbXkgJE5ld1N0YXR1cyA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIk5ld1N0YXR1cyIgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzdXJ2ZXkgZXhpc3RzCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkVsZW1lbnRFeGlzdHMoIEVsZW1lbnRJRCA9PiAkU3VydmV5SUQsIEVsZW1lbnQgPT4gJ1N1cnZleScgKSBuZQogICAgICAgICAgICAnWWVzJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBhIG5ldyBzdGF0dXMKICAgICAgICBteSAkU3RhdHVzU2V0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5TdXJ2ZXlTdGF0dXNTZXQoCiAgICAgICAgICAgIFN1cnZleUlEICA9PiAkU3VydmV5SUQsCiAgICAgICAgICAgIE5ld1N0YXR1cyA9PiAkTmV3U3RhdHVzLAogICAgICAgICk7CiAgICAgICAgbXkgJE1lc3NhZ2UgPSAnJzsKICAgICAgICBpZiAoIGRlZmluZWQoJFN0YXR1c1NldCkgJiYgJFN0YXR1c1NldCBlcSAnTm9RdWVzdGlvbicgKSB7CiAgICAgICAgICAgICRNZXNzYWdlID0gJztNZXNzYWdlPU5vUXVlc3Rpb24nOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoIGRlZmluZWQoJFN0YXR1c1NldCkgJiYgJFN0YXR1c1NldCBlcSAnSW5jb21wbGV0ZVF1ZXN0aW9uJyApIHsKICAgICAgICAgICAgJE1lc3NhZ2UgPSAnO01lc3NhZ2U9SW5jb21wbGV0ZVF1ZXN0aW9uJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCBkZWZpbmVkKCRTdGF0dXNTZXQpICYmICRTdGF0dXNTZXQgZXEgJ1N0YXR1c1NldCcgKSB7CiAgICAgICAgICAgICRNZXNzYWdlID0gJztNZXNzYWdlPVN0YXR1c1NldCc7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50U3VydmV5Wm9vbTtTdXJ2ZXlJRD0kU3VydmV5SUQkTWVzc2FnZSIsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN0YXRzCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU3RhdHMnICkgewogICAgICAgIG15ICRTdXJ2ZXlJRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlN1cnZleUlEIiApOwoKICAgICAgICAjIGNoZWNrIGlmIHN1cnZleSBleGlzdHMKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgICAgICdZZXMnCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgICAgICB9CiAgICAgICAgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKAogICAgICAgICAgICBUaXRsZSA9PiAnU3RhdHMgT3ZlcnZpZXcnLAogICAgICAgICAgICBUeXBlICA9PiAnU21hbGwnLAogICAgICAgICk7CgogICAgICAgIG15ICVTdXJ2ZXkgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleUdldCggU3VydmV5SUQgPT4gJFN1cnZleUlEICk7CgogICAgICAgICMgcHJpbnQgdGhlIG1haW4gdGFibGUuCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnU3RhdHMnLAogICAgICAgICAgICBEYXRhID0+IHslU3VydmV5fSwKICAgICAgICApOwogICAgICAgIG15IEBMaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5Wb3RlTGlzdCggU3VydmV5SUQgPT4gJFN1cnZleUlEICk7CiAgICAgICAgZm9yIG15ICRWb3RlIChATGlzdCkgewogICAgICAgICAgICAkVm90ZS0+e1N1cnZleUlEfSA9ICRTdXJ2ZXlJRDsKICAgICAgICAgICAgbXkgJVRpY2tldCA9ICRTZWxmLT57VGlja2V0T2JqZWN0fS0+VGlja2V0R2V0KCBUaWNrZXRJRCA9PiAkVm90ZS0+e1RpY2tldElEfSApOwogICAgICAgICAgICAkVm90ZS0+e1RpY2tldE51bWJlcn0gPSAkVGlja2V0e1RpY2tldE51bWJlcn07CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdTdGF0c1ZvdGUnLAogICAgICAgICAgICAgICAgRGF0YSA9PiAkVm90ZSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFN1cnZleScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICAgICApOwoKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN0YXRzIGRldGFpbAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+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+ICRGb3JtRWxlbWVudHN7Tm90aWZpY2F0aW9uU2VuZGVyfQogICAgICAgICAgICAgICAgfHwgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1N1cnZleTo6Tm90aWZpY2F0aW9uU2VuZGVyJyksCiAgICAgICAgICAgIE5vdGlmaWNhdGlvblN1YmplY3QgPT4gJEZvcm1FbGVtZW50c3tOb3RpZmljYXRpb25TdWJqZWN0fQogICAgICAgICAgICAgICAgfHwgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1N1cnZleTo6Tm90aWZpY2F0aW9uU3ViamVjdCcpLAogICAgICAgICAgICAlU2VydmVyRXJyb3IsCiAgICAgICAgICAgICVGb3JtRWxlbWVudHMsCiAgICAgICAgfSwKICAgICk7CgogICAgIyByaWNoIHRleHQgZWxlbWVudHMKICAgIG15ICVTdXJ2ZXlFbGVtZW50czsKCiAgICAkU3VydmV5RWxlbWVudHN7SW50cm9kdWN0aW9ufSA9ICRGb3JtRWxlbWVudHN7SW50cm9kdWN0aW9ufSB8fAogICAgICAgICRQYXJhbXtJbnRyb2R1Y3Rpb259OwoKICAgICRTdXJ2ZXlFbGVtZW50c3tOb3RpZmljYXRpb25Cb2R5fSA9ICRGb3JtRWxlbWVudHN7Tm90aWZpY2F0aW9uQm9keX0gfHwKICAgICAgICAkUGFyYW17Tm90aWZpY2F0aW9uQm9keX0gfHwKICAgICAgICAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU3VydmV5OjpOb3RpZmljYXRpb25Cb2R5Jyk7CgogICAgJFN1cnZleUVsZW1lbnRze0Rlc2NyaXB0aW9ufSA9ICRGb3JtRWxlbWVudHN7RGVzY3JpcHRpb259IHx8CiAgICAgICAgJFBhcmFte0Rlc2NyaXB0aW9ufSB8fAogICAgICAgICcnOwoKICAgICMgbG9hZCByaWNoIHRleHQgZWRpdG9yCiAgICBteSAkUmljaFRleHRFZGl0b3IgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJvbnRlbmQ6OlJpY2hUZXh0Jyk7CiAgICBpZiAoJFJpY2hUZXh0RWRpdG9yKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAiJEJsb2NrIiAuICdSaWNoVGV4dCcgKTsKICAgIH0KCiAgICAjIGNvbnZlcnQgcmVxdWlyZWQgZWxlbWVudHMgdG8gUlRFCiAgICBmb3IgbXkgJFN1cnZleUZpZWxkICgga2V5cyAlU3VydmV5RWxlbWVudHMgKSB7CiAgICAgICAgbmV4dCBpZiAhJFN1cnZleUVsZW1lbnRzeyRTdXJ2ZXlGaWVsZH07CgogICAgICAgICMgY2xlYW4gaHRtbAogICAgICAgIG15ICRIVE1MQ29udGVudCA9CiAgICAgICAgICAgICRTdXJ2ZXlFbGVtZW50c3skU3VydmV5RmllbGR9ID1+IHN7XEFcJGh0bWxcL3RleHRcJFxzKC4qKX17JDF9eG1zOwoKICAgICAgICBpZiAoICEkSFRNTENvbnRlbnQgJiYgJFJpY2hUZXh0RWRpdG9yICkgewogICAgICAgICAgICAkU3VydmV5RWxlbWVudHN7JFN1cnZleUZpZWxkfSA9CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkU3VydmV5RWxlbWVudHN7JFN1cnZleUZpZWxkfSwKICAgICAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRIVE1MQ29udGVudCAmJiAhJFJpY2hUZXh0RWRpdG9yICkgewogICAgICAgICAgICAkU3VydmV5RWxlbWVudHN7JFN1cnZleUZpZWxkfSA9CiAgICAgICAgICAgICAgICAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0tPlRvQXNjaWkoIFN0cmluZyA9PiAkU3VydmV5RWxlbWVudHN7JFN1cnZleUZpZWxkfSApOwogICAgICAgIH0KICAgIH0KCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gIiRCbG9jayIgLiAnSW50cm9kdWN0aW9uJywKICAgICAgICBEYXRhID0+IHsgSW50cm9kdWN0aW9uID0+ICRTdXJ2ZXlFbGVtZW50c3tJbnRyb2R1Y3Rpb259LCB9LAogICAgKTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gIiRCbG9jayIgLiAnTm90aWZpY2F0aW9uQm9keScsCiAgICAgICAgRGF0YSA9PiB7IE5vdGlmaWNhdGlvbkJvZHkgPT4gJFN1cnZleUVsZW1lbnRze05vdGlmaWNhdGlvbkJvZHl9LCB9LAogICAgKTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gIiRCbG9jayIgLiAnSW50ZXJuYWxEZXNjcmlwdGlvbicsCiAgICAgICAgRGF0YSA9PiB7IERlc2NyaXB0aW9uID0+ICRTdXJ2ZXlFbGVtZW50c3tEZXNjcmlwdGlvbn0sIH0sCiAgICApOwoKICAgICMgZ2VuZXJhdGVzIGdlbmVyaWMgZXJyb3JzIGZvciBqYXZhc2NyaXB0CiAgICBmb3IgbXkgJE5lZWRlZEl0ZW0gKAogICAgICAgIHF3KCBUaXRsZSBJbnRyb2R1Y3Rpb24gRGVzY3JpcHRpb24gTm90aWZpY2F0aW9uU2VuZGVyIE5vdGlmaWNhdGlvblN1YmplY3QgTm90aWZpY2F0aW9uQm9keSApCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJEJsb2NrIC4gJ0dlbmVyaWNFcnJvcicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgSXRlbU5hbWUgPT4gJE5lZWRlZEl0ZW0gLiAnRXJyb3InLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgZm9yIG15ICRJdGVtICgga2V5cyAlU2VydmVyRXJyb3IgKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAkQmxvY2sgLiAnR2VuZXJpY1NlcnZlckVycm9yJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBJdGVtTmFtZSA9PiAkSXRlbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRTdXJ2ZXknICk7CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCBUeXBlID0+ICRUeXBlICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KMTsK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50U3VydmV5RWRpdFF1ZXN0aW9ucy5wbSAtIGEgc3VydmV5IG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogQWdlbnRTdXJ2ZXlFZGl0UXVlc3Rpb25zLnBtLHYgMS43IDIwMTEvMDEvMTggMTc6NDg6MTggZHogRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlN1cnZleTsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OKTsKJFZFUlNJT04gPSBxdygkUmV2aXNpb246IDEuNyAkKSBbMV07CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IGNvbW1vbiBvYmplY3RzCiAgICAleyRTZWxmfSA9ICVQYXJhbTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBDb25maWdPYmplY3QpKSB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+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+ICdTdXJ2ZXlEZWxldGVDb2x1bW4nICk7CiAgICAgICAgaWYgKCBzY2FsYXIgQExpc3QgKSB7CgogICAgICAgICAgICBteSAkQ291bnRlciA9IDA7CgogICAgICAgICAgICBmb3IgbXkgJFF1ZXN0aW9uIChATGlzdCkgewogICAgICAgICAgICAgICAgbXkgJEFuc3dlckNvdW50ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5BbnN3ZXJDb3VudCgKICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBteSAkQ2xhc3M7CiAgICAgICAgICAgICAgICBteSAkQ2xhc3NVcDsKICAgICAgICAgICAgICAgIG15ICRDbGFzc0Rvd247CgogICAgICAgICAgICAgICAgaWYgKCAhJENvdW50ZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgJENsYXNzVXAgPSAnRGlzYWJsZWQnLAogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggJENvdW50ZXIgPT0gJCNMaXN0ICkgewogICAgICAgICAgICAgICAgICAgICRDbGFzc0Rvd24gPSAnRGlzYWJsZWQnLAogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1JhZGlvJyB8fCAkUXVlc3Rpb24tPntUeXBlfSBlcSAnQ2hlY2tib3gnICkgewogICAgICAgICAgICAgICAgICAgIGlmICggJEFuc3dlckNvdW50IDwgMiApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJENsYXNzID0gJ0Vycm9yJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTdXJ2ZXlRdWVzdGlvbnNSb3cnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAleyRRdWVzdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzICAgICA9PiAkQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzVXAgICA9PiAkQ2xhc3NVcCwKICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NEb3duID0+ICRDbGFzc0Rvd24sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N1cnZleVF1ZXN0aW9uc0RlbGV0ZUJ1dHRvbicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N1cnZleU5vUXVlc3Rpb25zU2F2ZWQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7IENvbHVtbnMgPT4gNSwgfQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAkQ291bnRlcjsKICAgICAgICBmb3IgbXkgJFF1ZXN0aW9uIChATGlzdCkgewoKICAgICAgICAgICAgbXkgJENsYXNzVXA7CiAgICAgICAgICAgIG15ICRDbGFzc0Rvd247CgogICAgICAgICAgICBpZiAoICEkQ291bnRlciApIHsKICAgICAgICAgICAgICAgICRDbGFzc1VwID0gJ0Rpc2FibGVkJywKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkQ291bnRlciAmJiAkQ291bnRlciA9PSAkI0xpc3QgKSB7CiAgICAgICAgICAgICAgICAkQ2xhc3NEb3duID0gJ0Rpc2FibGVkJywKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1N1cnZleVF1ZXN0aW9uc1NhdmVkJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICV7JFF1ZXN0aW9ufSwKICAgICAgICAgICAgICAgICAgICBDbGFzc1VwICAgPT4gJENsYXNzVXAsCiAgICAgICAgICAgICAgICAgICAgQ2xhc3NEb3duID0+ICRDbGFzc0Rvd24sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICB9CiAgICB9CgogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50U3VydmV5RWRpdFF1ZXN0aW9ucycsCiAgICAgICAgRGF0YSA9PiB7IFN1cnZleUlEID0+ICRQYXJhbXtTdXJ2ZXlJRH0gfSwKICAgICk7CgogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlciggVHlwZSA9PiAnU21hbGwnICk7CiAgICByZXR1cm4gJE91dHB1dDsKfQoKc3ViIF9NYXNrUXVlc3Rpb25FZGl0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJVNlcnZlckVycm9yOwogICAgaWYgKCAkUGFyYW17U2VydmVyRXJyb3J9ICkgewogICAgICAgICVTZXJ2ZXJFcnJvciA9ICV7ICRQYXJhbXtTZXJ2ZXJFcnJvcn0gfTsKICAgIH0KCiAgICBteSAkT3V0cHV0OwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKAogICAgICAgIFRpdGxlID0+ICdRdWVzdGlvbiBFZGl0JywKICAgICAgICBUeXBlICA9PiAnU21hbGwnLAogICAgKTsKICAgIG15ICVTdXJ2ZXkgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleUdldCggU3VydmV5SUQgPT4gJFBhcmFte1N1cnZleUlEfSApOwogICAgbXkgJVF1ZXN0aW9uID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvbkdldCggUXVlc3Rpb25JRCA9PiAkUGFyYW17UXVlc3Rpb25JRH0gKTsKCiAgICAjIHByaW50IHRoZSBtYWluIGJvZHkKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnUXVlc3Rpb25FZGl0JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVF1ZXN0aW9uLAogICAgICAgICAgICAlU2VydmVyRXJyb3IsCiAgICAgICAgfSwKICAgICk7CgogICAgaWYgKCAkUXVlc3Rpb257VHlwZX0gZXEgJ1llc05vJyApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdRdWVzdGlvbkVkaXRUYWJsZScgKTsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdRdWVzdGlvbkVkaXRZZXNubycgKTsKICAgIH0KICAgIGVsc2lmICggJFF1ZXN0aW9ue1R5cGV9IGVxICdSYWRpbycgfHwgJFF1ZXN0aW9ue1R5cGV9IGVxICdDaGVja2JveCcgKSB7CgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1F1ZXN0aW9uRWRpdFRhYmxlJyApOwoKICAgICAgICBteSAkVHlwZSA9ICRRdWVzdGlvbntUeXBlfTsKICAgICAgICBteSBATGlzdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyTGlzdCggUXVlc3Rpb25JRCA9PiAkUGFyYW17UXVlc3Rpb25JRH0gKTsKICAgICAgICBpZiAoIHNjYWxhciBATGlzdCApIHsKCiAgICAgICAgICAgIGlmICggJFN1cnZleXtTdGF0dXN9IGVxICdOZXcnICkgewoKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1F1ZXN0aW9uRWRpdFRhYmxlRGVsZXRlJyApOwoKICAgICAgICAgICAgICAgIG15ICRDb3VudGVyID0gMDsKICAgICAgICAgICAgICAgIGZvciBteSAkQW5zd2VyMiAoQExpc3QpIHsKICAgICAgICAgICAgICAgICAgICAkQW5zd2VyMi0+e1N1cnZleUlEfSA9ICRQYXJhbXtTdXJ2ZXlJRH07CgogICAgICAgICAgICAgICAgICAgIG15ICRDbGFzc1VwOwogICAgICAgICAgICAgICAgICAgIG15ICRDbGFzc0Rvd247CgogICAgICAgICAgICAgICAgICAgICMgZGlzYWJsZSB1cCBhY3Rpb24gb24gZmlyc3Qgcm93CiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJENvdW50ZXIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDbGFzc1VwID0gJ0Rpc2FibGVkJzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgZGlzYWJsZSBkb3duIGFjdGlvbiBvbiBsYXN0IHJvdwogICAgICAgICAgICAgICAgICAgIGlmICggJENvdW50ZXIgPT0gJCNMaXN0ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ2xhc3NEb3duID0gJ0Rpc2FibGVkJzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gIlF1ZXN0aW9uRWRpdCIgLiAkVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAleyRBbnN3ZXIyfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzVXAgICA9PiAkQ2xhc3NVcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzRG93biA9PiAkQ2xhc3NEb3duLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUXVlc3Rpb25FZGl0JyAuICRUeXBlIC4gJ0RlbGV0ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJEFuc3dlcjIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkQ291bnRlcisrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUXVlc3Rpb25FZGl0QWRkQW5zd2VyJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJVF1ZXN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAlU2VydmVyRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBteSAkQ291bnRlcjsKICAgICAgICAgICAgICAgIGZvciBteSAkQW5zd2VyMiAoQExpc3QpIHsKICAgICAgICAgICAgICAgICAgICAkQW5zd2VyMi0+e1N1cnZleUlEfSA9ICRQYXJhbXtTdXJ2ZXlJRH07CgogICAgICAgICAgICAgICAgICAgIG15ICRDbGFzc1VwOwogICAgICAgICAgICAgICAgICAgIG15ICRDbGFzc0Rvd247CgogICAgICAgICAgICAgICAgICAgIGlmICggISRDb3VudGVyICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ2xhc3NVcCA9ICdEaXNhYmxlZCcsCiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoICRDb3VudGVyICYmICRDb3VudGVyID09ICQjTGlzdCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJENsYXNzRG93biA9ICdEaXNhYmxlZCcsCiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICJRdWVzdGlvbkVkaXQiIC4gJFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJXskQW5zd2VyMn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc1VwICAgPT4gJENsYXNzVXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc0Rvd24gPT4gJENsYXNzRG93biwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICRDb3VudGVyKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdOb0Fuc3dlcnNTYXZlZCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBDb2x1bW5zID0+IDMsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnUXVlc3Rpb25FZGl0QWRkQW5zd2VyJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyVRdWVzdGlvbn0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkUXVlc3Rpb257VHlwZX0gZXEgJ1RleHRhcmVhJyApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdRdWVzdGlvbkVkaXRUZXh0QXJlYScgKTsKICAgIH0KICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnMnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKICAgIHJldHVybiAkT3V0cHV0Owp9CgpzdWIgX01hc2tBbnN3ZXJFZGl0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJVNlcnZlckVycm9yOwogICAgaWYgKCAkUGFyYW17U2VydmVyRXJyb3J9ICkgewogICAgICAgICVTZXJ2ZXJFcnJvciA9ICV7ICRQYXJhbXtTZXJ2ZXJFcnJvcn0gfTsKICAgIH0KCiAgICBteSAkT3V0cHV0OwogICAgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKAogICAgICAgIFRpdGxlID0+ICdBbnN3ZXIgRWRpdCcsCiAgICAgICAgVHlwZSAgPT4gJ1NtYWxsJywKICAgICk7CiAgICBteSAlQW5zd2VyID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5BbnN3ZXJHZXQoIEFuc3dlcklEID0+ICRQYXJhbXtBbnN3ZXJJRH0gKTsKICAgICRBbnN3ZXJ7U3VydmV5SUR9ID0gJFBhcmFte1N1cnZleUlEfTsKCiAgICAjIHByaW50IHRoZSBtYWluIHRhYmxlLgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdBbnN3ZXJFZGl0JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJUFuc3dlciwKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlU2VydmVyRXJyb3IsCiAgICAgICAgfSwKICAgICk7CgogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50U3VydmV5RWRpdFF1ZXN0aW9ucycsCiAgICAgICAgRGF0YSAgICAgICAgID0+IHslUGFyYW19LAogICAgKTsKCiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCBUeXBlID0+ICdTbWFsbCcgKTsKICAgIHJldHVybiAkT3V0cHV0OwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50U3VydmV5Wm9vbS5wbSAtIGEgc3VydmV5IG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogQWdlbnRTdXJ2ZXlab29tLnBtLHYgMS41IDIwMTEvMDEvMTkgMTk6MjE6MTQgZHogRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFN1cnZleVpvb207Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlN1cnZleTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHM7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjUgJCkgWzFdOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBjb21tb24gb2JqZWN0cwogICAgJXskU2VsZn0gPSAlUGFyYW07CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QgQ29uZmlnT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KICAgICRTZWxmLT57U3VydmV5T2JqZWN0fSAgICA9IEtlcm5lbDo6U3lzdGVtOjpTdXJ2ZXktPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkhUTUxVdGlscy0+bmV3KCVQYXJhbSk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJE91dHB1dDsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHN1cnZleSB6b29tCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkU3VydmV5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTdXJ2ZXlJRCIgKTsKICAgIG15ICRNZXNzYWdlICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIk1lc3NhZ2UiICk7CgogICAgIyBjaGVjayBpZiBzdXJ2ZXkgZXhpc3RzCiAgICBpZiAoCiAgICAgICAgISRTdXJ2ZXlJRCB8fAogICAgICAgICRTZWxmLT57U3VydmV5T2JqZWN0fS0+RWxlbWVudEV4aXN0cyggRWxlbWVudElEID0+ICRTdXJ2ZXlJRCwgRWxlbWVudCA9PiAnU3VydmV5JyApIG5lCiAgICAgICAgJ1llcycKICAgICAgICApCiAgICB7CiAgICAgICAgJE1lc3NhZ2UgPSAnO01lc3NhZ2U9Tm9TdXJ2ZXlJRCc7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoIE9QID0+ICJBY3Rpb249QWdlbnRTdXJ2ZXkkTWVzc2FnZSIgKTsKICAgIH0KCiAgICAjIG91dHB1dCBoZWFkZXIKICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVGl0bGUgPT4gJ1N1cnZleScgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBvdXRwdXQgbWVzYWdlcyBpZiBzdGF0dXMgd2FzIGNoYW5nZWQKICAgIGlmICggZGVmaW5lZCgkTWVzc2FnZSkgJiYgJE1lc3NhZ2UgZXEgJ05vUXVlc3Rpb24nICkgewogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgIEluZm8gICAgID0+ICdDYW5cJ3Qgc2V0IG5ldyBzdGF0dXMhIE5vIHF1ZXN0aW9ucyBkZWZpbmVkLicsCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggZGVmaW5lZCgkTWVzc2FnZSkgJiYgJE1lc3NhZ2UgZXEgJ0luY29tcGxldGVRdWVzdGlvbicgKSB7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJ0NhblwndCBzZXQgbmV3IHN0YXR1cyEgUXVlc3Rpb25zIGluY29tcGxldGUuJywKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCBkZWZpbmVkKCRNZXNzYWdlKSAmJiAkTWVzc2FnZSBlcSAnU3RhdHVzU2V0JyApIHsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KAogICAgICAgICAgICBQcmlvcml0eSA9PiAnTm90aWNlJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJ1N0YXR1cyBjaGFuZ2VkLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBhbGwgYXR0cmlidXRlcyBvZiB0aGUgc3VydmV5CiAgICBteSAlU3VydmV5ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5TdXJ2ZXlHZXQoIFN1cnZleUlEID0+ICRTdXJ2ZXlJRCApOwoKICAgICMgY2xlYW4gaHRtbCBhbmQgY29udmVydCB0aGUgdGV4dGFyZWFzIGluIGh0bWwgKFxuIC0tPjxicj4pCiAgICBmb3IgbXkgJFN1cnZleUZpZWxkIChxdyggSW50cm9kdWN0aW9uIERlc2NyaXB0aW9uICkpIHsKICAgICAgICBuZXh0IGlmICEkU3VydmV5eyRTdXJ2ZXlGaWVsZH07CgogICAgICAgICRTdXJ2ZXl7JFN1cnZleUZpZWxkfSA9fiBze1xBXCRodG1sXC90ZXh0XCRccyguKil9eyQxfXhtczsKCiAgICAgICAgJFN1cnZleXskU3VydmV5RmllbGR9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Bc2NpaTJIdG1sKAogICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkU3VydmV5eyRTdXJ2ZXlGaWVsZH0sCiAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBudW1iZXJzIG9mIHJlcXVlc3RzIGFuZCB2b3RlcwogICAgbXkgJFNlbmRSZXF1ZXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5Db3VudFJlcXVlc3QoCiAgICAgICAgU3VydmV5SUQgPT4gJFN1cnZleUlELAogICAgICAgIFZhbGlkSUQgID0+ICdhbGwnLAogICAgKTsKICAgIG15ICRSZXF1ZXN0Q29tcGxldGUgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkNvdW50UmVxdWVzdCgKICAgICAgICBTdXJ2ZXlJRCA9PiAkU3VydmV5SUQsCiAgICAgICAgVmFsaWRJRCAgPT4gMCwKICAgICk7CiAgICAkU3VydmV5e1NlbmRSZXF1ZXN0fSAgICAgPSAkU2VuZFJlcXVlc3Q7CiAgICAkU3VydmV5e1JlcXVlc3RDb21wbGV0ZX0gPSAkUmVxdWVzdENvbXBsZXRlOwoKICAgICMgZ2V0IHNlbGVjdGVkIHF1ZXVlcwogICAgbXkgJVF1ZXVlcyA9ICRTZWxmLT57UXVldWVPYmplY3R9LT5HZXRBbGxRdWV1ZXMoKTsKICAgIG15IEBRdWV1ZUxpc3QgPSBtYXAgeyAkUXVldWVzeyRffSB9IEB7ICRTdXJ2ZXl7UXVldWVzfSB9OwogICAgQFF1ZXVlTGlzdCA9IHNvcnQgeyBsYyAkYSBjbXAgbGMgJGIgfSBAUXVldWVMaXN0OwogICAgbXkgJFF1ZXVlTGlzdFN0cmluZyA9IGpvaW4gcXssIH0sIEBRdWV1ZUxpc3Q7CgogICAgbXkgJE5vUXVldWVNZXNzYWdlID0gJyc7CiAgICBpZiAoICEkUXVldWVMaXN0U3RyaW5nICkgewogICAgICAgICRRdWV1ZUxpc3RTdHJpbmcgPSAnLSBObyBxdWV1ZSBzZWxlY3RlZCAtJzsKICAgIH0KCiAgICAjIGNvbnZlcnQgdGV4dCBhcmVhIGZpZWxkcyB0byBhc2NpaQogICAgJFN1cnZleXtJbnRyb2R1Y3Rpb259ID0gJFNlbGYtPntIVE1MVXRpbHNPYmplY3R9LT5Ub0FzY2lpKCBTdHJpbmcgPT4gJFN1cnZleXtJbnRyb2R1Y3Rpb259ICk7CiAgICAkU3VydmV5e0Rlc2NyaXB0aW9ufSAgPSAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0tPlRvQXNjaWkoIFN0cmluZyA9PiAkU3VydmV5e0Rlc2NyaXB0aW9ufSApOwoKICAgICMgcHJpbnQgdGhlIG1haW4gdGFibGUuCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1N1cnZleVpvb20nLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlU3VydmV5LAogICAgICAgICAgICBOb1F1ZXVlTWVzc2FnZSAgPT4gJE5vUXVldWVNZXNzYWdlLAogICAgICAgICAgICBRdWV1ZUxpc3RTdHJpbmcgPT4gJFF1ZXVlTGlzdFN0cmluZywKICAgICAgICB9LAogICAgKTsKCiAgICAjIGRpc3BsYXkgc3RhdHMgaWYgc3RhdHVzIE1hc3RlciwgVmFsaWQgb3IgSW52YWxpZAogICAgaWYgKAogICAgICAgICRTdXJ2ZXl7U3RhdHVzfSAgICBlcSAnTWFzdGVyJwogICAgICAgIHx8ICRTdXJ2ZXl7U3RhdHVzfSBlcSAnVmFsaWQnCiAgICAgICAgfHwgJFN1cnZleXtTdGF0dXN9IGVxICdJbnZhbGlkJwogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+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
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL1B1YmxpY1N1cnZleS5wbSAtIGEgc3VydmV5IG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogUHVibGljU3VydmV5LnBtLHYgMS4yMiAyMDExLzAxLzE5IDIzOjI4OjExIGR6IEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6UHVibGljU3VydmV5OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpTdXJ2ZXk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6SFRNTFV0aWxzOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS4yMiAkKSBbMV07CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IGNvbW1vbiBvYmplY3RzCiAgICAleyRTZWxmfSA9ICVQYXJhbTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCBDb25maWdPYmplY3QgVXNlck9iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0gICAgPSBLZXJuZWw6OlN5c3RlbTo6U3VydmV5LT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57SFRNTFV0aWxzT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpIVE1MVXRpbHMtPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRPdXRwdXQ7CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBwdWJsaWMgc3VydmV5IHZvdGUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdQdWJsaWNTdXJ2ZXlWb3RlJyApIHsKICAgICAgICBteSAkUHVibGljU3VydmV5S2V5ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnUHVibGljU3VydmV5S2V5JyApOwogICAgICAgIG15ICVTdXJ2ZXkgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlB1YmxpY1N1cnZleUdldCggUHVibGljU3VydmV5S2V5ID0+ICRQdWJsaWNTdXJ2ZXlLZXkgKTsKICAgICAgICBpZiAoICRTdXJ2ZXl7U3VydmV5SUR9ICkgewogICAgICAgICAgICBteSBAUXVlc3Rpb25MaXN0ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5RdWVzdGlvbkxpc3QoIFN1cnZleUlEID0+ICRTdXJ2ZXl7U3VydmV5SUR9ICk7CiAgICAgICAgICAgIGZvciBteSAkUXVlc3Rpb24gKEBRdWVzdGlvbkxpc3QpIHsKICAgICAgICAgICAgICAgIGlmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1llc05vJyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkUHVibGljU3VydmV5Vm90ZTEgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oCiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtID0+ICJQdWJsaWNTdXJ2ZXlWb3RlMVskUXVlc3Rpb24tPntRdWVzdGlvbklEfV0iCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlB1YmxpY0Fuc3dlclNhdmUoCiAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5LAogICAgICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEICAgICAgPT4gJFF1ZXN0aW9uLT57UXVlc3Rpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFZvdGVWYWx1ZSAgICAgICA9PiAkUHVibGljU3VydmV5Vm90ZTEsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1JhZGlvJyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkUHVibGljU3VydmV5Vm90ZTIgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oCiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtID0+ICJQdWJsaWNTdXJ2ZXlWb3RlMlskUXVlc3Rpb24tPntRdWVzdGlvbklEfV0iCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlB1YmxpY0Fuc3dlclNhdmUoCiAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5LAogICAgICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEICAgICAgPT4gJFF1ZXN0aW9uLT57UXVlc3Rpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFZvdGVWYWx1ZSAgICAgICA9PiAkUHVibGljU3VydmV5Vm90ZTIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ0NoZWNrYm94JyApIHsKICAgICAgICAgICAgICAgICAgICBteSBAQW5zd2VyTGlzdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyTGlzdCgKICAgICAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb24tPntRdWVzdGlvbklEfQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRBbnN3ZXIgKEBBbnN3ZXJMaXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRQdWJsaWNTdXJ2ZXlWb3RlMyA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtID0+ICJQdWJsaWNTdXJ2ZXlWb3RlM1skQW5zd2VyLT57QW5zd2VySUR9XSIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAkUHVibGljU3VydmV5Vm90ZTMgJiYgJFB1YmxpY1N1cnZleVZvdGUzIGVxICdZZXMnICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5QdWJsaWNBbnN3ZXJTYXZlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXN0aW9uSUQgICAgICA9PiAkUXVlc3Rpb24tPntRdWVzdGlvbklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWb3RlVmFsdWUgICAgICAgPT4gJEFuc3dlci0+e0Fuc3dlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdUZXh0YXJlYScgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJFB1YmxpY1N1cnZleVZvdGU0ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKAogICAgICAgICAgICAgICAgICAgICAgICBQYXJhbSA9PiAiUHVibGljU3VydmV5Vm90ZTRbJFF1ZXN0aW9uLT57UXVlc3Rpb25JRH1dIgogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgcmljaCB0ZXh0IGlzIGVuYWJsZWQKICAgICAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQdWJsaWNTdXJ2ZXlWb3RlNCA9ICJcJGh0bWwvdGV4dFwkICRQdWJsaWNTdXJ2ZXlWb3RlNCI7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlB1YmxpY0Fuc3dlclNhdmUoCiAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5LAogICAgICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEICAgICAgPT4gJFF1ZXN0aW9uLT57UXVlc3Rpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFZvdGVWYWx1ZSAgICAgICA9PiAkUHVibGljU3VydmV5Vm90ZTQsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlB1YmxpY1N1cnZleUludmFsaWRTZXQoIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5ICk7CiAgICAgICAgfQogICAgICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkN1c3RvbWVySGVhZGVyKCBUaXRsZSA9PiAnU3VydmV5JyApOwoKICAgICAgICAjIHByaW50IHRoZSBtYWluIHRhYmxlLgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1B1YmxpY1N1cnZleU1lc3NhZ2UnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIE1lc3NhZ2VUeXBlICAgPT4gJ1N1cnZleSBJbmZvcm1hdGlvbicsCiAgICAgICAgICAgICAgICBNZXNzYWdlSGVhZGVyID0+ICdUaGFuayB5b3UgZm9yIHlvdXIgZmVlZGJhY2suJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgICAgICAgPT4gJ1RoZSBzdXJ2ZXkgaXMgZmluaXNoZWQuJywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ1B1YmxpY1N1cnZleScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2hvdyBzdXJ2ZXkKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIG15ICRQdWJsaWNTdXJ2ZXlLZXkgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdQdWJsaWNTdXJ2ZXlLZXknICk7CiAgICAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DdXN0b21lckhlYWRlciggVGl0bGUgPT4gJ1N1cnZleScgKTsKCiAgICBteSAkVXNlZFN1cnZleUtleSA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+UHVibGljU3VydmV5R2V0KAogICAgICAgIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5LAogICAgICAgIEludmFsaWQgICAgICAgICA9PiAxLAogICAgKTsKCiAgICBteSAlU3VydmV5ID0gJFNlbGYtPntTdXJ2ZXlPYmplY3R9LT5QdWJsaWNTdXJ2ZXlHZXQoIFB1YmxpY1N1cnZleUtleSA9PiAkUHVibGljU3VydmV5S2V5ICk7CgogICAgJFN1cnZleXtQdWJsaWNTdXJ2ZXlLZXl9ID0gJFB1YmxpY1N1cnZleUtleTsKCiAgICBpZiAoJFVzZWRTdXJ2ZXlLZXkpIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQdWJsaWNTdXJ2ZXlNZXNzYWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBNZXNzYWdlVHlwZSAgID0+ICdTdXJ2ZXkgSW5mb3JtYXRpb24nLAogICAgICAgICAgICAgICAgTWVzc2FnZUhlYWRlciA9PiAnVGhhbmsgeW91IGZvciB5b3VyIGZlZWRiYWNrLicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICAgICAgID0+ICdZb3UgaGF2ZSBhbHJlYWR5IGFuc3dlcmVkIHRoZSBzdXJ2ZXkuJywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCAkU3VydmV5e1N1cnZleUlEfSApIHsKCiAgICAgICAgIyBjbGVhbiBodG1sIGFuZCBwcm9jY2VzcyBpbnRyb2R1Y3Rpb24gdGV4dAogICAgICAgICRTdXJ2ZXl7SW50cm9kdWN0aW9ufSA9fiBze1xBXCRodG1sXC90ZXh0XCRccyguKil9eyQxfXhtczsKICAgICAgICAkU3VydmV5e0ludHJvZHVjdGlvbn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICRTdXJ2ZXl7SW50cm9kdWN0aW9ufSwKICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICApOwoKICAgICAgICAkU3VydmV5e0ludHJvZHVjdGlvbn0KICAgICAgICAgICAgPSAkU2VsZi0+e0hUTUxVdGlsc09iamVjdH0tPlRvQXNjaWkoIFN0cmluZyA9PiAkU3VydmV5e0ludHJvZHVjdGlvbn0gKTsKCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljU3VydmV5JywKICAgICAgICAgICAgRGF0YSA9PiB7JVN1cnZleX0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgQFF1ZXN0aW9uTGlzdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+UXVlc3Rpb25MaXN0KCBTdXJ2ZXlJRCA9PiAkU3VydmV5e1N1cnZleUlEfSApOwogICAgICAgIGZvciBteSAkUXVlc3Rpb24gKEBRdWVzdGlvbkxpc3QpIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnUHVibGljUXVlc3Rpb25zJyApOwogICAgICAgICAgICBpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdZZXNObycgKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1B1YmxpY0Fuc3dlclllc05vJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRRdWVzdGlvbiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUXVlc3Rpb24tPntUeXBlfSBlcSAnUmFkaW8nICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdQdWJsaWNBbnN3ZXJSYWRpbycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkUXVlc3Rpb24sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbXkgQEFuc3dlckxpc3QgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPkFuc3dlckxpc3QoCiAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb25JRCA9PiAkUXVlc3Rpb24tPntRdWVzdGlvbklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEFuc3dlciAoQEFuc3dlckxpc3QpIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdQdWJsaWNBbnN3ZXJSYWRpb2InLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRBbnN3ZXIsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRRdWVzdGlvbi0+e1R5cGV9IGVxICdDaGVja2JveCcgKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1B1YmxpY0Fuc3dlckNoZWNrYm94JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRRdWVzdGlvbiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBteSBAQW5zd2VyTGlzdCA9ICRTZWxmLT57U3VydmV5T2JqZWN0fS0+QW5zd2VyTGlzdCgKICAgICAgICAgICAgICAgICAgICBRdWVzdGlvbklEID0+ICRRdWVzdGlvbi0+e1F1ZXN0aW9uSUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGZvciBteSAkQW5zd2VyIChAQW5zd2VyTGlzdCkgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1B1YmxpY0Fuc3dlckNoZWNrYm94YicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJEFuc3dlciwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJFF1ZXN0aW9uLT57VHlwZX0gZXEgJ1RleHRhcmVhJyApIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHVibGljQW5zd2VyVGV4dGFyZWEnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJFF1ZXN0aW9uLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHJpY2ggdGV4dCBpcyBlbmFibGVkCiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0Jyb3dzZXJSaWNoVGV4dH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnUmljaFRleHQnICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQdWJsaWNTdXJ2ZXlNZXNzYWdlJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBNZXNzYWdlVHlwZSAgID0+ICdTdXJ2ZXkgRXJyb3IhJywKICAgICAgICAgICAgICAgIE1lc3NhZ2VIZWFkZXIgPT4gJ0ludmFsaWQgc3VydmV5IGtleS4nLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgICAgICdUaGUgaW5zZXJ0ZWQgc3VydmV5IGtleSBpcyBpbnZhbGlkLCBpZiB5b3UgZm9sbG93ZWQgYSBsaW5rIG1heWJlIHRoaXMgaXMgb2Jzb2xldGUgb3IgYnJva2VuLicsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdQdWJsaWNTdXJ2ZXknLAogICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q3VzdG9tZXJGb290ZXIoKTsKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9TdXJ2ZXlPdmVydmlld1NtYWxsLnBtLnBtCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBTdXJ2ZXlPdmVydmlld1NtYWxsLnBtLHYgMS4xIDIwMTEvMDEvMDcgMTM6MTc6MDAgY3IgRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlN1cnZleU92ZXJ2aWV3U21hbGw7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjEgJCkgWzFdOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IFVzZXJJRCBVc2VyT2JqZWN0IE1haW5PYmplY3QpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoUGFnZVNob3duIFN0YXJ0SGl0KSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbmVlZCBTdXJ2ZXlJRHMKICAgIGlmICggISRQYXJhbXtTdXJ2ZXlJRHN9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCB0aGUgU3VydmV5SURzIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzdG9yZSB0aGUgU3VydmV5SURzIGxvY2FsbHkKICAgIG15IEBJRHMgPSBAeyAkUGFyYW17U3VydmV5SURzfSB9OwoKICAgICMgY2hlY2sgU2hvd0NvbHVtbnMgcGFyYW1ldGVyCiAgICBteSBAU2hvd0NvbHVtbnM7CiAgICBpZiAoICRQYXJhbXtTaG93Q29sdW1uc30gJiYgcmVmICRQYXJhbXtTaG93Q29sdW1uc30gZXEgJ0FSUkFZJyApIHsKICAgICAgICBAU2hvd0NvbHVtbnMgPSBAeyAkUGFyYW17U2hvd0NvbHVtbnN9IH07CiAgICB9CgogICAgbXkgJE91dHB1dCA9ICcnOwoKICAgICMgc2hvdyBzdXJ2ZXlzIGlmIHRoZXJlIGFyZSBzb21lCiAgICBpZiAoQElEcykgewoKICAgICAgICAjIGJ1aWxkIGNvbHVtbiBoZWFkZXIgYmxvY2tzCiAgICAgICAgIyBjdXJyZW50bHkgc29ydGluZyBpcyBub3QgaW1wbGVtZW50ZWQgb24gc3VydmV5LCBsZWF2ZSB0aGUgY29kZSBmb3IgZnV0dXJlIGltcGxlbWVudGF0aW9uCiAgICAgICAgaWYgKEBTaG93Q29sdW1ucykgewogICAgICAgICAgICBmb3IgbXkgJENvbHVtbiAoQFNob3dDb2x1bW5zKSB7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgbmVlZGVkIHZhcmlhYmxlcwogICAgICAgICAgICAgICAgbXkgJENTUyA9ICcnOwogICAgICAgICAgICAgICAgbXkgJE9yZGVyQnk7CgogICAgICAgICAgICAgICAgIyBzZXQgdGhlIGNvcnJlY3QgU2V0IENTUyBjbGFzcyBhbmQgb3JkZXIgYnkgbGluawogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17U29ydEJ5fSAmJiAoICRQYXJhbXtTb3J0Qnl9IGVxICRDb2x1bW4gKSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRQYXJhbXtPcmRlckJ5fSAmJiAoICRQYXJhbXtPcmRlckJ5fSBlcSAnVXAnICkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRPcmRlckJ5ID0gJ0Rvd24nOwogICAgICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydERlc2NlbmRpbmcnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE9yZGVyQnkgPSAnVXAnOwogICAgICAgICAgICAgICAgICAgICAgICAkQ1NTIC49ICcgU29ydEFzY2VuZGluZyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJE9yZGVyQnkgPSAnVXAnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgb3V0cHV0IGVhY2ggaGVhZGVyCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlY29yZCcgLiAkQ29sdW1uIC4gJ0hlYWRlcicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgQ1NTICAgICA9PiAkQ1NTLAogICAgICAgICAgICAgICAgICAgICAgICBPcmRlckJ5ID0+ICRPcmRlckJ5LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAkQ291bnRlciA9IDA7CgogICAgICAgIElEOgogICAgICAgIGZvciBteSAkSUQgKEBJRHMpIHsKICAgICAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJENvdW50ZXIgPj0gJFBhcmFte1N0YXJ0SGl0fQogICAgICAgICAgICAgICAgJiYgJENvdW50ZXIgPCAoICRQYXJhbXtQYWdlU2hvd259ICsgJFBhcmFte1N0YXJ0SGl0fSApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGdldCBzdXJ2ZXkgZGF0YQogICAgICAgICAgICAgICAgbXkgJURhdGEgPSAkU2VsZi0+e1N1cnZleU9iamVjdH0tPlN1cnZleUdldCgKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgU3VydmV5SUQgPT4gJElELAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBuZXh0IElEIGlmICElRGF0YTsKCiAgICAgICAgICAgICAgICAjIGdldCB1c2VyIGRhdGEgZm9yIG5lZWRlZCB1c2VyIHR5cGVzCiAgICAgICAgICAgICAgICBVU0VSVFlQRToKICAgICAgICAgICAgICAgIGZvciBteSAkVXNlclR5cGUgKHF3KENyZWF0ZSBDaGFuZ2UpKSB7CiAgICAgICAgICAgICAgICAgICAgJERhdGF7ICRVc2VyVHlwZSAuICdMZWZ0UGFyZW50aGVzaXMnIH0gID0gJygnOwogICAgICAgICAgICAgICAgICAgICREYXRheyAkVXNlclR5cGUgLiAnUmlnaHRQYXJlbnRoZXNpcycgfSA9ICcpJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGJ1aWxkIHJlY29yZCBibG9jawogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgY29sdW1uIHJlY29yZCBibG9ja3MKICAgICAgICAgICAgICAgIGlmIChAU2hvd0NvbHVtbnMpIHsKICAgICAgICAgICAgICAgICAgICBDT0xVTU46CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKEBTaG93Q29sdW1ucykgewogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBzaG93IGxpbmtzIGlmIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUmVjb3JkJyAuICRDb2x1bW4gLiAnTGlua1N0YXJ0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWNvcmQnIC4gJENvbHVtbiAuICdMaW5rRW5kJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgaWYgdGhlcmUgYXJlIG5vIHN1cnZleXMgdG8gc2hvdywgYSBubyBkYXRhIGZvdW5kIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGluIHRoZSB0YWJsZQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFRvdGFsQ29sdW1ucyA9PiBzY2FsYXIgQFNob3dDb2x1bW5zLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CgogICAgIyB1c2UgdGVtcGxhdGUKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFN1cnZleU92ZXJ2aWV3U21hbGwnLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJFNlbGYtPntWaWV3VHlwZX0sCiAgICAgICAgICAgIENvbHVtbkNvdW50ID0+IHNjYWxhciBAU2hvd0NvbHVtbnMsCiAgICAgICAgfSwKICAgICk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIEFnZW50U3VydmV5LmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgQWdlbnRTdXJ2ZXkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEFnZW50U3VydmV5LmR0bCx2IDEuNDggMjAxMS8wMS8xOSAyMzoyODoxMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6U3VydmV5QWRkIC0tPgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckxhc3QiPgoKICAgIDxoMT4kVGV4dHsiQ3JlYXRlIE5ldyBTdXJ2ZXkifTwvaDE+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+JFRleHR7IlN1cnZleSBFZGl0In06ICRRRGF0YXsiU3VydmV5TnVtYmVyIn0gLSAkUURhdGF7IlRpdGxlIn08L2gxPgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIiBocmVmPSIjIj4kVGV4dHsiQ2FuY2VsICYgY2xvc2Ugd2luZG93In08L2E+CiAgICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkdlbmVyYWwgSW5mbyJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iVGl0bGUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJUaXRsZSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJUaXRsZSIgbmFtZT0iVGl0bGUiIHR5cGU9InRleHQiIGNsYXNzPSJXNzVwYyBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7IlRpdGxlU2VydmVyRXJyb3IifSIgdmFsdWU9IiRRRGF0YXsiVGl0bGUifSIgLz4KICAgICAgICAgICAgICAgIDwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFJpY2hUZXh0IC0tPgokSW5jbHVkZXsiUmljaFRleHRFZGl0b3IifQo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0UmljaFRleHQgLS0+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0SW50cm9kdWN0aW9uIC0tPgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iSW50cm9kdWN0aW9uIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiSW50cm9kdWN0aW9uIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJpY2hUZXh0RmllbGQiPgogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0iSW50cm9kdWN0aW9uIiBuYW1lPSJJbnRyb2R1Y3Rpb24iIG5hbWU9IkludHJvZHVjdGlvbiIgY2xhc3M9IlJpY2hUZXh0IFZhbGlkYXRlX1JlcXVpcmVkICRRRGF0YXsiSW50cm9kdWN0aW9uU2VydmVyRXJyb3IifSIgdGl0bGU9IlN1cnZleSBJbnRyb2R1Y3Rpb24iIHJvd3M9IjE1IiBjb2xzPSIkQ29uZmlneyJUaWNrZXQ6OkZyb250ZW5kOjpUZXh0QXJlYU5vdGUifSI+JERhdGF7IkludHJvZHVjdGlvbiJ9PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0SW50cm9kdWN0aW9uIC0tPgoKICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5vdGlmaWNhdGlvblNlbmRlciI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IlNlbmRlciJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJOb3RpZmljYXRpb25TZW5kZXIiIG5hbWU9Ik5vdGlmaWNhdGlvblNlbmRlciIgdHlwZT0idGV4dCIgY2xhc3M9Ilc3NXBjIFZhbGlkYXRlX1JlcXVpcmVkICRRRGF0YXsiTm90aWZpY2F0aW9uU2VuZGVyU2VydmVyRXJyb3IifSIgdmFsdWU9IiRRRGF0YXsiTm90aWZpY2F0aW9uU2VuZGVyIn0iIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJOb3RpZmljYXRpb25TdWJqZWN0Ij48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiU3ViamVjdCJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJOb3RpZmljYXRpb25TdWJqZWN0IiBuYW1lPSJOb3RpZmljYXRpb25TdWJqZWN0IiB0eXBlPSJ0ZXh0IiBjbGFzcz0iVzc1cGMgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJOb3RpZmljYXRpb25TdWJqZWN0U2VydmVyRXJyb3IifSIgdmFsdWU9IiRRRGF0YXsiTm90aWZpY2F0aW9uU3ViamVjdCJ9IiAvPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0Tm90aWZpY2F0aW9uQm9keSAtLT4KICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5vdGlmaWNhdGlvbkJvZHkiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJCb2R5In06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJpY2hUZXh0RmllbGQiPgogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD0iTm90aWZpY2F0aW9uQm9keSIgbmFtZT0iTm90aWZpY2F0aW9uQm9keSIgY2xhc3M9IlJpY2hUZXh0IFZhbGlkYXRlX1JlcXVpcmVkICRRRGF0YXsiTm90aWZpY2F0aW9uQm9keVNlcnZlckVycm9yIn0iIHRpdGxlPSJOb3RpZmljYXRpb24gQm9keSIgcm93cz0iMTUiIGNvbHM9IiRDb25maWd7IlRpY2tldDo6RnJvbnRlbmQ6OlRleHRBcmVhTm90ZSJ9Ij4kUURhdGF7Ik5vdGlmaWNhdGlvbkJvZHkifTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdE5vdGlmaWNhdGlvbkJvZHkgLS0+CgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iUXVldWVzIj4kVGV4dHsiUXVldWVzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAkRGF0YXsiUXVldWVTdHJpbmcifQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0SW50ZXJuYWxEZXNjcmlwdGlvbiAtLT4KICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkRlc2NyaXB0aW9uIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiSW50ZXJuYWwgRGVzY3JpcHRpb24ifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGlkPSJEZXNjcmlwdGlvbiIgbmFtZT0iRGVzY3JpcHRpb24iIGNsYXNzPSJSaWNoVGV4dCBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7IkRlc2NyaXB0aW9uU2VydmVyRXJyb3IifSIgdGl0bGU9IkludGVybmFsIERlc2NyaXB0aW9uIiByb3dzPSIxNSIgY29scz0iJENvbmZpZ3siVGlja2V0OjpGcm9udGVuZDo6VGV4dEFyZWFOb3RlIn0iPiRRRGF0YXsiRGVzY3JpcHRpb24ifTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdEludGVybmFsRGVzY3JpcHRpb24gLS0+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0R2VuZXJpY0Vycm9yIC0tPgogICAgICAgICAgICAgICAgPGRpdiBpZD0iJFFEYXRheyJJdGVtTmFtZSJ9IiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdEdlbmVyaWNFcnJvciAtLT4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRTZXJ2ZXJFcnJvciAtLT4KICAgICAgICAgICAgICAgIDxkaXYgaWQ9IiRRRGF0YXsiSXRlbU5hbWUifSIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRTZXJ2ZXJFcnJvciAtLT4KCiAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iRm9vdGVyIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlNhdmUifSI+JFRleHR7IlNhdmUifTwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZm9ybT4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdCAtLT4KCjwhLS0gZHRsOmJsb2NrOlN0YXRzIC0tPgo8ZGl2IGNsYXNzPSJMYXlvdXRQb3B1cCBBUklBUm9sZU1haW4iPgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDE+JFRleHR7IlN0YXRzIE92ZXJ2aWV3In0gOiAkRGF0YXsiU3VydmV5TnVtYmVyIn0gLSAkRGF0YXsiVGl0bGUifSA8L2gxPgogICAgICAgIDxwPgogICAgICAgICAgICA8YSBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCIgaHJlZj0iIyI+JFRleHR7IkNhbmNlbCAmIGNsb3NlIHdpbmRvdyJ9PC9hPgogICAgICAgIDwvcD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgIDxoMj48L2gyPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIFNwYWNpbmdCb3R0b21NZWRpdW0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJSZXF1ZXN0cyBUYWJsZSJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJTZW5kIFRpbWUifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiVm90ZSBUaW1lIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IlRpY2tldCJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJEZXRhaWxzIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOlN0YXRzTm9Wb3RlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iJERhdGF7IkNvbHVtbnMifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Ik5vIHF1ZXN0aW9ucyBzYXZlZCBmb3IgdGhpcyBzdXJ2ZXkuIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlN0YXRzTm9Wb3RlIC0tPgo8IS0tIGR0bDpibG9jazpTdGF0c1ZvdGUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGltZUxvbmd7IiREYXRheyJTZW5kVGltZSJ9In0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRpbWVMb25neyIkRGF0YXsiVm90ZVRpbWUifSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiVGlja2V0TnVtYmVyIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249U3RhdHNEZXRhaWw7U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9O1JlcXVlc3RJRD0kUURhdGF7IlJlcXVlc3RJRCJ9O1RpY2tldE51bWJlcj0kUURhdGF7IlRpY2tldE51bWJlciJ9IiBjbGFzcz0iU2VlRGV0YWlscyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlNlZSBEZXRhaWxzPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlN0YXRzVm90ZSAtLT4KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPgogICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCBQcmltYXJ5IiB2YWx1ZT0iJFRleHR7IkNsb3NlIHdpbmRvdyJ9Ij4kVGV4dHsiQ2xvc2Ugd2luZG93In08L2J1dHRvbj4KICAgIDwvZGl2Pgo8L2Rpdj4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgJCgnYS5IaXN0b3J5QmFjaycpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgaGlzdG9yeS5iYWNrKCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7CiAgICAkKCdidXR0b24uSGlzdG9yeUJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIGhpc3RvcnkuYmFjaygpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+Cgo8IS0tIGR0bDpibG9jazpTdGF0cyAtLT4KCjwhLS0gZHRsOmJsb2NrOlN0YXRzRGV0YWlsIC0tPgo8ZGl2IGNsYXNzPSJMYXlvdXRQb3B1cCBBUklBUm9sZU1haW4iPgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDE+JFRleHR7IlN1cnZleSBTdGF0IERldGFpbHMifSA6ICRUZXh0eyJUaWNrZXQifSMkRGF0YXsiVGlja2V0TnVtYmVyIn0gOiAkRGF0YXsiU3VydmV5TnVtYmVyIn0gLSAkRGF0YXsiVGl0bGUifSA6ICA8L2gxPgogICAgICAgIDxwPgogICAgICAgICAgICA8YSBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCIgaHJlZj0iIyI+JFRleHR7IkNhbmNlbCAmIGNsb3NlIHdpbmRvdyJ9PC9hPgogICAgICAgICAgICAkVGV4dHsib3IifQogICAgICAgICAgICA8YSBjbGFzcz0iSGlzdG9yeUJhY2siIGhyZWY9IiMiPiRUZXh0eyJnbyBiYWNrIHRvIHN0YXRzIG92ZXJ2aWV3In08L2E+CiAgICAgICAgPC9wPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgPGgyPjwvaDI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AgU3BhY2luZ0JvdHRvbU1lZGl1bSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkRldGFpbHMifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KPCEtLSBkdGw6YmxvY2s6U3RhdHNEZXRhaWxRdWVzdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9IiREYXRheyJDbGFzcyJ9Ij4kUURhdGF7IlF1ZXN0aW9uIn06PC9sYWJlbD4KPCEtLSBkdGw6YmxvY2s6U3RhdHNEZXRhaWxBbnN3ZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgJERhdGF7IkNsYXNzIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiQW5zd2VyIn0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlN0YXRzRGV0YWlsQW5zd2VyIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6U3RhdHNEZXRhaWxRdWVzdGlvbiAtLT4KICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJGb290ZXIiPgogICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTdGF0cyIgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VydmV5SUQiIHZhbHVlPSIkUURhdGF7IlN1cnZleUlEIn0iIC8+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iUHJpbWFyeSIgdmFsdWU9IiRUZXh0eyJHbyBCYWNrIn0iPiRUZXh0eyJHbyBCYWNrIn08L2J1dHRvbj4KICAgICAgICA8L2Zvcm0+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJ2EuSGlzdG9yeUJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIGhpc3RvcnkuYmFjaygpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwovL11dPjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPCEtLSBkdGw6YmxvY2s6U3RhdHNEZXRhaWwgLS0+Cg==
IyAtLQojIEFnZW50U3VydmV5Wm9vbS5kdGwgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIEFnZW50U3VydmV5CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZ2VudFN1cnZleVpvb20uZHRsLHYgMS4xMSAyMDExLzAxLzIwIDE3OjQyOjQ0IGR6IEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlab29tIC0tPgo8ZGl2IGNsYXNzPSJNYWluQm94IEFyaWFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSI+CiAgICAgICAgPGgxIHRpdGxlPSIkUURhdGF7IlRpdGxlIn0iID4kUURhdGF7IlN1cnZleU51bWJlciJ9IC0gJFFEYXRheyJUaXRsZSIsIjYwIn0gPC9oMT4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkxheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiU3VydmV5IEluZm9ybWF0aW9uIn08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJDcmVhdGVkIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4kVGltZVNob3J0eyIkRGF0YXsiQ3JlYXRlVGltZSJ9In08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiQ3JlYXRlZCBieSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IiRRdW90ZXsiJERhdGF7IkNyZWF0ZVVzZXJMb2dpbiJ9ICgkRGF0YXsiQ3JlYXRlVXNlckZpcnN0bmFtZSJ9ICREYXRheyJDcmVhdGVVc2VyTGFzdG5hbWUifSkifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUXVvdGV7IiREYXRheyJDcmVhdGVVc2VyTG9naW4ifSAoJERhdGF7IkNyZWF0ZVVzZXJGaXJzdG5hbWUifSAkRGF0YXsiQ3JlYXRlVXNlckxhc3RuYW1lIn0iLCIxOCJ9KQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiQ2hhbmdlZCJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgPiRUaW1lU2hvcnR7IiREYXRheyJDaGFuZ2VUaW1lIn0ifTwvcD4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiQ2hhbmdlZCBieSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSIgdGl0bGU9IiRRdW90ZXsiJERhdGF7IkNyZWF0ZVVzZXJMb2dpbiJ9ICgkRGF0YXsiQ3JlYXRlVXNlckZpcnN0bmFtZSJ9ICREYXRheyJDcmVhdGVVc2VyTGFzdG5hbWUifSkifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUXVvdGV7IiREYXRheyJDcmVhdGVVc2VyTG9naW4ifSAoJERhdGF7IkNyZWF0ZVVzZXJGaXJzdG5hbWUifSAkRGF0YXsiQ3JlYXRlVXNlckxhc3RuYW1lIn0pIiwiMTgifQogICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiU3RhdHVzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIiB0aXRsZT0iJFRleHR7IiREYXRheyJTdGF0dXMifSJ9Ij4kUXVvdGV7IiREYXRheyJTdGF0dXMifSIsIjE4In08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+ICRUZXh0eyJTZW50IHJlcXVlc3RzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4kUURhdGF7IlNlbmRSZXF1ZXN0In08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiUmVjZWl2ZWQgc3VydmV5cyJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+JFFEYXRheyJSZXF1ZXN0Q29tcGxldGUifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250cm9sUm93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFkZGl0aW9uYWxJbmZvcm1hdGlvbiI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIiBjbGFzcz0iSGlzdG9yeUJhY2siPiRUZXh0eyJCYWNrIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRTdXJ2ZXk7U3ViYWN0aW9uPVN1cnZleUVkaXQ7U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9IiBjbGFzcz0iQXNQb3B1cCI+JFRleHR7IkVkaXQgR2VuZXJhbCBJbmZvIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRTdXJ2ZXlFZGl0UXVlc3Rpb25zO1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifSIgY2xhc3M9IkFzUG9wdXAiPiRUZXh0eyJFZGl0IFF1ZXN0aW9ucyJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRTdGF0c0RldGFpbHMgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPUFnZW50U3VydmV5O1N1YmFjdGlvbj1TdGF0cztTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn0iIGNsYXNzPSJBc1BvcHVwIj4kVGV4dHsiU3RhdHMgRGV0YWlscyJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRTdGF0c0RldGFpbHMgLS0+CjwhLS0gZHRsOmJsb2NrOlN1cnZleVN0YXR1cyAtLT4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgY2xhc3M9IkFjdGlvbkZvcm0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWdlbnRTdXJ2ZXkiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTdXJ2ZXlTdGF0dXMiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdXJ2ZXlJRCIgdmFsdWU9IiRRRGF0YXsiU3VydmV5SUQifSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJOZXdTdGF0dXNTdHIifQogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6U3VydmV5U3RhdHVzIC0tPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiU3VydmV5IERldGFpbHMifTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIEZpeGVkTGFiZWxTbWFsbCI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7Ik51bWJlciJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4kUURhdGF7IlN1cnZleU51bWJlciJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiVGl0bGUifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCIgdGl0bGU9IiRRRGF0YXsiVGl0bGUifSI+JFFEYXRheyJUaXRsZSIsIjgwIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJUZXh0YXJlYSI+JFRleHR7IkludHJvZHVjdGlvbiJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFRleHRhcmVhIj4kRGF0YXsiSW50cm9kdWN0aW9uIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJRdWV1ZXMifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCIgdGl0bGU9IiRRRGF0YXsiUXVldWVMaXN0U3RyaW5nIn0iPiRRRGF0YXsiUXVldWVMaXN0U3RyaW5nIiwiODAifSAkUURhdGF7Ik5vUXVldWVNZXNzYWdlIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJUZXh0YXJlYSI+JFRleHR7IkludGVybmFsIERlc2NyaXB0aW9uIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgVGV4dGFyZWEiPiREYXRheyJEZXNjcmlwdGlvbiJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIFNwYWNpbmdCb3R0b21NZWRpdW0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+JFRleHR7IlN1cnZleSBSZXN1bHRzIEdyYXBoIn08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCjwhLS0gZHRsOmJsb2NrOk5vU3RhdFJlc3VsdHMgLS0+CiAgICAgICAgICAgICAgICAgICAgJFRleHR7Ik5vIHN0YXQgcmVzdWx0cy4ifQo8IS0tIGR0bDpibG9jazpOb1N0YXRSZXN1bHRzIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFN0YXRzIC0tPgoKPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFN0YXRzUXVlc3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJTcGFjaW5nVG9wIFN1cnZleUdyYXBocyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlF1ZXN0aW9uIiB0aXRsZT0iJERhdGF7IlF1ZXN0aW9uIn0iID4kUURhdGF7IlF1ZXN0aW9uIiwiMTAwIn06IDwvZGl2Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0U3RhdHNBbnN3ZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFuc3dlciI+JFRleHR7IiREYXRheyJBbnN3ZXIifSJ9PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTdXJ2ZXlHcmFwaCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTdXJ2ZXlHcmFwaENvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3VydmV5R3JhcGhCYXIiIHN0eWxlPSJ3aWR0aDokUURhdGF7IkFuc3dlclBlcmNlbnRUYWJsZSJ9JTsiPjwvZGl2ID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlN1cnZleUdyYXBoTGV5ZW5kIj4kUURhdGF7IkFuc3dlclBlcmNlbnQifSU8L3A+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRTdGF0c0Fuc3dlciAtLT4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlFZGl0U3RhdHNRdWVzdGlvbiAtLT4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleUVkaXRTdGF0cyAtLT4KCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJ3VsLkFjdGlvbnMgYS5Bc1BvcHVwJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBDb3JlLlVJLlBvcHVwLk9wZW5Qb3B1cCAoJCh0aGlzKS5hdHRyKCdocmVmJyksICdBY3Rpb24nKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKCiAgICAkKCd1bC5BY3Rpb25zIGEuSGlzdG9yeUJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIGhpc3RvcnkuYmFjaygpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwoKICAgICQoJyNOZXdTdGF0dXMnKS5iaW5kKCdjaGFuZ2UnLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2Zvcm0nKS5zdWJtaXQoKTsKICAgIH0pOwoKCi8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlab29tIC0tPgo=
IyAtLQojIEFnZW50U3VydmV5RWRpdFF1ZXN0aW9ucy5kdGwgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIEFnZW50U3VydmV5CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZ2VudFN1cnZleUVkaXRRdWVzdGlvbnMuZHRsLHYgMS44IDIwMTEvMDEvMTkgMTk6MjE6MTQgZHogRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFF1ZXN0aW9ucyAtLT4KPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgPGgxPiRUZXh0eyJTdXJ2ZXkgRWRpdCBRdWVzdGlvbnMifTogJFFEYXRheyJTdXJ2ZXlOdW1iZXIifSAtICRRRGF0YXsiVGl0bGUifTwvaDE+CiAgICAgICAgPHA+CiAgICAgICAgICAgIDxhIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIiBocmVmPSIjIj4kVGV4dHsiQ2FuY2VsICYgY2xvc2Ugd2luZG93In08L2E+CiAgICAgICAgPC9wPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleUFkZFF1ZXN0aW9uIC0tPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIFNwYWNpbmdCb3R0b21NZWRpdW0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJBZGQgUXVlc3Rpb24ifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9IlN1cnZleVF1ZXN0aW9ucyIgaWQ9IlN1cnZleVF1ZXN0aW9ucyIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlF1ZXN0aW9uQWRkIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1cnZleUlEIiB2YWx1ZT0iJFFEYXRheyJTdXJ2ZXlJRCJ9IiAvPgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iUXVlc3Rpb24iPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJUeXBlIHRoZSBxdWVzdGlvbiJ9OiZuYnNwOzwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iUXVlc3Rpb24iIG5hbWU9IlF1ZXN0aW9uIiBjbGFzcz0iVmFsaWRhdGVfUmVxdWlyZWQgJERhdGF7IlF1ZXN0aW9uRXJyb3JDbGFzcyJ9ICIgc2l6ZT0iNjAiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiU2VsZWN0aW9uVHlwZSJ9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUXVlc3Rpb25FcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUXVlc3Rpb25TZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IkFkZCJ9Ij4kVGV4dHsiQWRkIn08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlN1cnZleUFkZFF1ZXN0aW9uIC0tPgoKICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiU3VydmV5IFF1ZXN0aW9ucyJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJRdWVzdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJUeXBlIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IlVwIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IkRvd24ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RGVsZXRlQ29sdW1uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJEZWxldGUifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RGVsZXRlQ29sdW1uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlOb1F1ZXN0aW9uc1NhdmVkIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iJERhdGF7IkNvbHVtbnMifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Ik5vIHF1ZXN0aW9ucyBzYXZlZCBmb3IgdGhpcyBzdXJ2ZXkuIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlN1cnZleU5vUXVlc3Rpb25zU2F2ZWQgLS0+Cgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlRdWVzdGlvbnNTYXZlZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVF1ZXN0aW9uRWRpdDtTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07UXVlc3Rpb25JRD0kUURhdGF7IlF1ZXN0aW9uSUQifSIgPiRRRGF0YXsiUXVlc3Rpb24iLCI5MCJ9PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiJERhdGF7IlR5cGUifSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVF1ZXN0aW9uVXA7U3VydmV5SUQ9JFFEYXRheyJTdXJ2ZXlJRCJ9O1F1ZXN0aW9uSUQ9JFFEYXRheyJRdWVzdGlvbklEIn0iIGNsYXNzPSJBcnJvd1VwJERhdGF7IkNsYXNzVXAifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyJVcCJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249UXVlc3Rpb25Eb3duO1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifTtRdWVzdGlvbklEPSRRRGF0YXsiUXVlc3Rpb25JRCJ9IiBjbGFzcz0iQXJyb3dEb3duJERhdGF7IkNsYXNzRG93biJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IkRvd24ifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpTdXJ2ZXlRdWVzdGlvbnNTYXZlZCAtLT4KCjwhLS0gZHRsOmJsb2NrOlN1cnZleVF1ZXN0aW9uc1JvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVF1ZXN0aW9uRWRpdDtTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07UXVlc3Rpb25JRD0kUURhdGF7IlF1ZXN0aW9uSUQifSIgY2xhc3M9IiREYXRheyJDbGFzcyJ9Ij4kUURhdGF7IlF1ZXN0aW9uIiwiNzAifTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IiREYXRheyJUeXBlIn0ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1RdWVzdGlvblVwO1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifTtRdWVzdGlvbklEPSRRRGF0YXsiUXVlc3Rpb25JRCJ9IiBjbGFzcz0iQXJyb3dVcCREYXRheyJDbGFzc1VwIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiVXAifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVF1ZXN0aW9uRG93bjtTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07UXVlc3Rpb25JRD0kUURhdGF7IlF1ZXN0aW9uSUQifSIgY2xhc3M9IkFycm93RG93biREYXRheyJDbGFzc0Rvd24ifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyJEb3duIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6U3VydmV5UXVlc3Rpb25zRGVsZXRlQnV0dG9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJRdWVzdGlvbkRlbGV0ZSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VydmV5SUQiIHZhbHVlPSIkUURhdGF7IlN1cnZleUlEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlF1ZXN0aW9uSUQiIHZhbHVlPSIkUURhdGF7IlF1ZXN0aW9uSUQifSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJUcmFzaENhbiIgdmFsdWU9IiRUZXh0eyJEZWxldGUifSIgPiRUZXh0eyJEZWxldGUifTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlN1cnZleVF1ZXN0aW9uc0RlbGV0ZUJ1dHRvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6U3VydmV5UXVlc3Rpb25zUm93IC0tPgogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIFByaW1hcnkiIHZhbHVlPSIkVGV4dHsiQ2xvc2Ugd2luZG93In0iPiRUZXh0eyJDbG9zZSB3aW5kb3cifTwvYnV0dG9uPgogICAgPC9kaXY+CjwvZGl2Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCdhLkhpc3RvcnlCYWNrJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBoaXN0b3J5LmJhY2soKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKCiAgICAkKCdidXR0b24uQ2FuY2VsQ2xvc2VQb3B1cCcpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgaGlzdG9yeS5iYWNrKCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7CgovL11dPjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPCEtLSBkdGw6YmxvY2s6U3VydmV5RWRpdFF1ZXN0aW9ucyAtLT4KCgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXQgLS0+CjxkaXYgY2xhc3M9IkxheW91dFBvcHVwIEFSSUFSb2xlTWFpbiI+CiAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgIDxoMT4kVGV4dHsiRWRpdCBRdWVzdGlvbiJ9OiAkVGV4dHsiJERhdGF7IlF1ZXN0aW9uIn0ifTwvaDE+CiAgICAgICAgPHA+CiAgICAgICAgICAgIDxhIGNsYXNzPSJDYW5jZWxDbG9zZVBvcHVwIiBocmVmPSIjIj4kVGV4dHsiQ2FuY2VsICYgY2xvc2Ugd2luZG93In08L2E+CiAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3VydmV5SUQ9JERhdGF7IlN1cnZleUlEIn0iID4kVGV4dHsiZ28gYmFjayB0byBxdWVzdGlvbnMifTwvYT4KICAgICAgICA8L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiRWRpdCBRdWVzdGlvbiJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iU3VydmV5UXVlc3Rpb24iIGlkPSJTdXJ2ZXlRdWVzdGlvbiIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlF1ZXN0aW9uU2F2ZSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJRdWVzdGlvbklEIiB2YWx1ZT0iJFFEYXRheyJRdWVzdGlvbklEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VydmV5SUQiIHZhbHVlPSIkUURhdGF7IlN1cnZleUlEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJRdWVzdGlvbiIgY2xhc3M9Ik1hbmRhdG9yeSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IlF1ZXN0aW9uIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjYwIiBuYW1lPSJRdWVzdGlvbiIgaWQ9IlF1ZXN0aW9uIiB2YWx1ZT0iJFFEYXRheyJRdWVzdGlvbiJ9IiBjbGFzcz0iVmFsaWRhdGVfUmVxdWlyZWQgJERhdGF7IlF1ZXN0aW9uU2VydmVyRXJyb3IifSIgLz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJRdWVzdGlvbkVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJRdWVzdGlvblNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTYXZlIn0iPiRUZXh0eyJTYXZlIn08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIFNwYWNpbmdCb3R0b21NZWRpdW0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJQb3NzaWJsZSBBbnN3ZXJzIEZvciJ9OiAkUURhdGF7IlR5cGUifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0QWRkQW5zd2VyIC0tPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJBbnN3ZXJBZGQiIGlkPSJBbnN3ZXJBZGQiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJBbnN3ZXJBZGQiIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUXVlc3Rpb25JRCIgdmFsdWU9IiRRRGF0YXsiUXVlc3Rpb25JRCJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1cnZleUlEIiB2YWx1ZT0iJFFEYXRheyJTdXJ2ZXlJRCJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQW5zd2VyIiBjbGFzcz0iTWFuZGF0b3J5Ij48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiQWRkIEFuc3dlciJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iQW5zd2VyIiBuYW1lPSJBbnN3ZXIiIHNpemU9IjYwIiBjbGFzcz0iVmFsaWRhdGVfUmVxdWlyZWQgJERhdGF7IkFuc3dlclNlcnZlckVycm9yIn0gIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJBZGQifSI+JFRleHR7IkFkZCJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQW5zd2VyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkFuc3dlclNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdEFkZEFuc3dlciAtLT4KCjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdFRhYmxlIC0tPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiAkVGV4dHsiRGVzY3JpcHRpb24ifSA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiAkVGV4dHsiVXAifSA8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiAkVGV4dHsiRG93biJ9IDwvdGg+CjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdFRhYmxlRGVsZXRlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiAkVGV4dHsiRGVsZXRlIn0gPC90aD4KPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0VGFibGVEZWxldGUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOk5vQW5zd2Vyc1NhdmVkIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iJERhdGF7IkNvbHVtbnMifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Ik5vIHF1ZXN0aW9ucyBzYXZlZCBmb3IgdGhpcyBzdXJ2ZXkuIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk5vQW5zd2Vyc1NhdmVkIC0tPgoKPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0UmFkaW8gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1BbnN3ZXJFZGl0O1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifTtRdWVzdGlvbklEPSRRRGF0YXsiUXVlc3Rpb25JRCJ9O0Fuc3dlcklEPSRRRGF0YXsiQW5zd2VySUQifSI+ICRRRGF0YXsiQW5zd2VyIiwiOTAifSA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPUFuc3dlclVwO1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifTtRdWVzdGlvbklEPSRRRGF0YXsiUXVlc3Rpb25JRCJ9O0Fuc3dlcklEPSRRRGF0YXsiQW5zd2VySUQifSIgY2xhc3M9IkFycm93VXAkRGF0YXsiQ2xhc3NVcCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IlVwIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1BbnN3ZXJEb3duO1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifTtRdWVzdGlvbklEPSRRRGF0YXsiUXVlc3Rpb25JRCJ9O0Fuc3dlcklEPSRRRGF0YXsiQW5zd2VySUQifSIgY2xhc3M9IkFycm93RG93biREYXRheyJDbGFzc0Rvd24ifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyJEb3duIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0UmFkaW9EZWxldGUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkFuc3dlckRlbGV0ZSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VydmV5SUQiIHZhbHVlPSIkUURhdGF7IlN1cnZleUlEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlF1ZXN0aW9uSUQiIHZhbHVlPSIkUURhdGF7IlF1ZXN0aW9uSUQifSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQW5zd2VySUQiIHZhbHVlPSIkUURhdGF7IkFuc3dlcklEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iVHJhc2hDYW4iIHZhbHVlPSIkVGV4dHsiRGVsZXRlIn0iPiRUZXh0eyJEZWxldGUifTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdFJhZGlvRGVsZXRlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRSYWRpbyAtLT4KCjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdENoZWNrYm94IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249QW5zd2VyRWRpdDtTdXJ2ZXlJRD0kUURhdGF7IlN1cnZleUlEIn07UXVlc3Rpb25JRD0kUURhdGF7IlF1ZXN0aW9uSUQifTtBbnN3ZXJJRD0kUURhdGF7IkFuc3dlcklEIn0iPiRRRGF0YXsiQW5zd2VyIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPUFuc3dlclVwO1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifTtRdWVzdGlvbklEPSRRRGF0YXsiUXVlc3Rpb25JRCJ9O0Fuc3dlcklEPSRRRGF0YXsiQW5zd2VySUQifSIgY2xhc3M9IkFycm93VXAkRGF0YXsiQ2xhc3NVcCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IlVwIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1BbnN3ZXJEb3duO1N1cnZleUlEPSRRRGF0YXsiU3VydmV5SUQifTtRdWVzdGlvbklEPSRRRGF0YXsiUXVlc3Rpb25JRCJ9O0Fuc3dlcklEPSRRRGF0YXsiQW5zd2VySUQifSIgY2xhc3M9IkFycm93RG93biREYXRheyJDbGFzc0Rvd24ifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyJEb3duIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0Q2hlY2tib3hEZWxldGUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkFuc3dlckRlbGV0ZSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3VydmV5SUQiIHZhbHVlPSIkUURhdGF7IlN1cnZleUlEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlF1ZXN0aW9uSUQiIHZhbHVlPSIkUURhdGF7IlF1ZXN0aW9uSUQifSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQW5zd2VySUQiIHZhbHVlPSIkUURhdGF7IkFuc3dlcklEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IkRlbGV0ZSJ9IiBjbGFzcz0iVHJhc2hDYW4iID4gJFRleHR7IkRlbGV0ZSJ9IDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdENoZWNrYm94RGVsZXRlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRDaGVja2JveCAtLT4KCjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdFllc25vIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+ICRUZXh0eyJZZXMifSA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxhIGhyZWY9IiIgY2xhc3M9IkFycm93VXBEaXNhYmxlZCI+PHNwYW4+JFRleHR7IlVwIn08L3NwYW4+PC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgaHJlZj0iIiBjbGFzcz0iQXJyb3dEb3duRGlzYWJsZWQiPjxzcGFuPiRUZXh0eyJEb3duIn08L3NwYW4+PC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gJFRleHR7Ik5vIn0gPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSIiIGNsYXNzPSJBcnJvd1VwRGlzYWJsZWQiID48c3Bhbj4kVGV4dHsiVXAifTwvc3Bhbj48L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSIiIGNsYXNzPSJBcnJvd0Rvd25EaXNhYmxlZCIgPjxzcGFuPiRUZXh0eyJEb3duIn08L3NwYW4+PC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlF1ZXN0aW9uRWRpdFllc25vIC0tPgoKICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0VGFibGUgLS0+CgoKPCEtLSBkdGw6YmxvY2s6UXVlc3Rpb25FZGl0VGV4dEFyZWEgLS0+CiAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiVGhpcyBkb2Vzbid0IGhhdmUgc2V2ZXJhbCBhbnN3ZXJzLCBhIHRleHRhcmVhIHdpbGwgYmUgZGlzcGxheWVkLiJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0Pgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXRUZXh0QXJlYSAtLT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+CiAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1cnZleUlEIiB2YWx1ZT0iJFFEYXRheyJTdXJ2ZXlJRCJ9IiAvPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9IlByaW1hcnkiIHZhbHVlPSIkVGV4dHsiR28gQmFjayJ9Ij4kVGV4dHsiR28gQmFjayJ9PC9idXR0b24+CiAgICAgICAgPC9mb3JtPgogICAgPC9kaXY+CjwvZGl2Pgo8IS0tIGR0bDpibG9jazpRdWVzdGlvbkVkaXQgLS0+Cgo8IS0tIGR0bDpibG9jazpBbnN3ZXJFZGl0IC0tPgo8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9IkFuc3dlckVkaXQiIGlkPSJBbnN3ZXJFZGl0IiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIgLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkFuc3dlclNhdmUiIC8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBbnN3ZXJJRCIgdmFsdWU9IiRRRGF0YXsiQW5zd2VySUQifSIgLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlF1ZXN0aW9uSUQiIHZhbHVlPSIkUURhdGF7IlF1ZXN0aW9uSUQifSIgLz4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1cnZleUlEIiB2YWx1ZT0iJFFEYXRheyJTdXJ2ZXlJRCJ9IiAvPgogICAgPGRpdiBjbGFzcz0iTGF5b3V0UG9wdXAgQVJJQVJvbGVNYWluIj4KCiAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgPGgxPiRUZXh0eyJFZGl0IEFuc3dlciJ9OiAkRGF0YXsiQW5zd2VyIn0gPC9oMT4KICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQ2FuY2VsQ2xvc2VQb3B1cCIgaHJlZj0iIyI+JFRleHR7IkNhbmNlbCAmIGNsb3NlIHdpbmRvdyJ9PC9hPgogICAgICAgICAgICAgICAgJFRleHR7Im9yIn0KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVF1ZXN0aW9uRWRpdDtRdWVzdGlvbklEPSREYXRheyJRdWVzdGlvbklEIn07U3VydmV5SUQ9JERhdGF7IlN1cnZleUlEIn0iPiRUZXh0eyJnbyBiYWNrIHRvIGVkaXQgcXVlc3Rpb24ifTwvYT4KICAgICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIFNwYWNpbmdCb3R0b21NZWRpdW0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkVkaXQgQW5zd2VyIn08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJBbnN3ZXIiIGNsYXNzPSJNYW5kYXRvcnkiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJBbnN3ZXIifTo8L2xhYmVsPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjYwIiBpZD0iQW5zd2VyIiBuYW1lPSJBbnN3ZXIiIHZhbHVlPSIkUURhdGF7IkFuc3dlciJ9IiBjbGFzcz0iVmFsaWRhdGVfUmVxdWlyZWQgJERhdGF7IkFuc3dlclNlcnZlckVycm9yIn0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBbnN3ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQW5zd2VyU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IkZvb3RlciI+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iUHJpbWFyeSIgdmFsdWU9IiRUZXh0eyJTYXZlIn0iPiRUZXh0eyJTYXZlIn08L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Zvcm0+CjwhLS0gZHRsOmJsb2NrOkFuc3dlckVkaXQgLS0+Cg==
IyAtLQojIFB1YmxpY1N1cnZleS5kdGwgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIFB1YmxpY1N1cnZleQojIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogUHVibGljU3VydmV5LmR0bCx2IDEuMjAgMjAxMS8wMS8xOSAyMzoyODoxMSBkeiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6UHVibGljU3VydmV5IC0tPgo8ZGl2IGNsYXNzPSJDb250ZW50IEFSSUFSb2xlTWFpbiIgaWQ9Ik1haW5Cb3giPgogICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICA8aDI+JFRleHR7IlN1cnZleSJ9OiAkRGF0YXsiVGl0bGUifTwvaDI+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJJbnRybyI+CiAgICAgICAgPGRpdiBjbGFzcz0iU3ViSGVhZGVyIj4KICAgICAgICAgICAgJFRleHR7IkludHJvZHVjdGlvbiJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICREYXRheyJJbnRyb2R1Y3Rpb24ifQogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iUHVibGljU3VydmV5Vm90ZSIgLz4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJQdWJsaWNTdXJ2ZXlLZXkiIHZhbHVlPSIkUURhdGF7IlB1YmxpY1N1cnZleUtleSJ9IiAvPgogICAgICAgIDxmaWVsZHNldCBjbGFzcz0iU3VydmV5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3ViSGVhZGVyIj4KICAgICAgICAgICAgICAgICRUZXh0eyJQbGVhc2UgYW5zd2VyIHRoZSBuZXh0IHF1ZXN0aW9ucyJ9CiAgICAgICAgICAgIDwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6UHVibGljUXVlc3Rpb25zIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJRdWVzdGlvbkNvbnRhaW5lciI+CjwhLS0gZHRsOmJsb2NrOlB1YmxpY0Fuc3dlclllc05vIC0tPgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlF1ZXN0aW9uIj4gJERhdGF7IlF1ZXN0aW9uIn0gPC9kaXY+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlB1YmxpY1N1cnZleVZvdGUxWyRRRGF0YXsiUXVlc3Rpb25JRCJ9XSIgdmFsdWU9IlllcyIgLz4KICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iQW5zd2VyIj4kVGV4dHsiWWVzIn08L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iUHVibGljU3VydmV5Vm90ZTFbJFFEYXRheyJRdWVzdGlvbklEIn1dIiB2YWx1ZT0iTm8iIC8+CiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9IkFuc3dlciI+JFRleHR7Ik5vIn08L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpQdWJsaWNBbnN3ZXJZZXNObyAtLT4KCjwhLS0gZHRsOmJsb2NrOlB1YmxpY0Fuc3dlclJhZGlvIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUXVlc3Rpb24iPiAkRGF0YXsiUXVlc3Rpb24ifSA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHVibGljQW5zd2VyUmFkaW9iIC0tPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJQdWJsaWNTdXJ2ZXlWb3RlMlskUURhdGF7IlF1ZXN0aW9uSUQifV0iIHZhbHVlPSIkUURhdGF7IkFuc3dlcklEIn0iIC8+CiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9IkFuc3dlciI+JFFEYXRheyJBbnN3ZXIifTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlB1YmxpY0Fuc3dlclJhZGlvYiAtLT4KPCEtLSBkdGw6YmxvY2s6UHVibGljQW5zd2VyUmFkaW8gLS0+Cgo8IS0tIGR0bDpibG9jazpQdWJsaWNBbnN3ZXJDaGVja2JveCAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlF1ZXN0aW9uIj4gJERhdGF7IlF1ZXN0aW9uIn0gPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlB1YmxpY0Fuc3dlckNoZWNrYm94YiAtLT4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iUHVibGljU3VydmV5Vm90ZTNbJFFEYXRheyJBbnN3ZXJJRCJ9XSIgdmFsdWU9IlllcyIvPgogICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJBbnN3ZXIiPiRRRGF0YXsiQW5zd2VyIn08L2xhYmVsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpQdWJsaWNBbnN3ZXJDaGVja2JveGIgLS0+CjwhLS0gZHRsOmJsb2NrOlB1YmxpY0Fuc3dlckNoZWNrYm94IC0tPgoKPCEtLSBkdGw6YmxvY2s6UHVibGljQW5zd2VyVGV4dGFyZWEgLS0+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJRdWVzdGlvbiI+ICREYXRheyJRdWVzdGlvbiJ9IDwvZGl2Pgo8IS0tIGR0bDpibG9jazpSaWNoVGV4dC0tPgogICAgICAgICAgICAgICAgJEluY2x1ZGV7IkN1c3RvbWVyUmljaFRleHRFZGl0b3IifQo8IS0tIGR0bDpibG9jazpSaWNoVGV4dC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmljaFRleHRBbnN3ZXIiPgogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSB0aXRsZT0iJERhdGF7IlF1ZXN0aW9uIn0iIGlkPSJSaWNoVGV4dCIgbmFtZT0iUHVibGljU3VydmV5Vm90ZTRbJFFEYXRheyJRdWVzdGlvbklEIn1dIiBjbGFzcz0iUmljaFRleHQgRG9udFByaW50IiByb3dzPSIxNSIgY29scz0iJENvbmZpZ3siVGlja2V0OjpGcm9udGVuZDo6VGV4dEFyZWFOb3RlIn0iPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHVibGljQW5zd2VyVGV4dGFyZWEgLS0+CiAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpQdWJsaWNRdWVzdGlvbnMgLS0+CiAgICAgICAgPC9maWVsZHNldD4KICAgICAgICA8ZGl2IGNsYXNzPSJBY3Rpb25Sb3ciIGlkPSJCb3R0b21BY3Rpb25Sb3ciPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiRmluaXNoIn0iPiAkVGV4dHsiRmluaXNoIn0gPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICA8L2Zvcm0+CjwvZGl2Pgo8IS0tIGR0bDpibG9jazpQdWJsaWNTdXJ2ZXkgLS0+Cgo8IS0tIGR0bDpibG9jazpQdWJsaWNTdXJ2ZXlNZXNzYWdlIC0tPgo8ZGl2IGlkPSJNYWluQm94IiBjbGFzcz0iVGlja2V0Q29tcG9zZSBBUklBUm9sZU1haW4iPgogICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICA8aDI+ICRUZXh0eyIkRGF0YXsiTWVzc2FnZVR5cGUifSJ9IDwvaDI+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgIDxoND4gJFRleHR7IiREYXRheyJNZXNzYWdlSGVhZGVyIn0ifSA8L2g0PgogICAgICAgICAgICA8cCBjbGFzcz0iU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAkVGV4dHsiJERhdGF7Ik1lc3NhZ2UifSJ9CiAgICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHVibGljU3VydmV5TWVzc2FnZSAtLT4K
IyAtLQojIEFnZW50U3VydmV5T3ZlcnZpZXdTbWFsbC5kdGwgLSBodG1sIGZvciBjaGFuZ2Ugb3ZlcnZpZXcgdGFibGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEFnZW50U3VydmV5T3ZlcnZpZXdTbWFsbC5kdGwsdiAxLjIgMjAxMS8wMS8wOSAxODo0NjowOSBjciBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICBDb3JlLlVJLkFjdGlvblJvdy5Jbml0KCk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgoKPGRpdiBpZD0iT3ZlcnZpZXdCb2R5IiBjbGFzcz0iT3ZlcnZpZXcgRml4ZWRIZWFkZXIiPgo8IS0tIGR0bDpibG9jazpOb0RhdGFGb3VuZE1zZyAtLT4KICAgIDxkaXYgaWQ9IkVtcHR5TWVzc2FnZVNtYWxsIj4KICAgICAgICAkVGV4dHsiTm8gZGF0YSBmb3VuZC4ifQogICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk5vRGF0YUZvdW5kTXNnIC0tPgoKICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0ibWF0cml4Ij4KICAgICAgICA8dGFibGUgaWQ9IkZpeGVkVGFibGUiIGNsYXNzPSJUYWJsZVNtYWxsIiBzdW1tYXJ5PSJBIGdlbmVyaWMgU3VydmV5IHRhYmxlIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgPHRyPgo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXJIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJOdW1iZXIgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PU51bWJlcjtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JENvbmZpZ3siU3VydmV5OjpIb29rIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTnVtYmVySGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRUaXRsZUhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IlRpdGxlICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJMaW5rU29ydCJ9O1NvcnRCeT1UaXRsZTtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IlRpdGxlIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkVGl0bGVIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZEludHJvZHVjdGlvbkhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkludHJvZHVjdGlvbiAkUURhdGF7IkNTUyJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTskRGF0YXsiTGlua1NvcnQifTtTb3J0Qnk9SW50cm9kdWN0aW9uO09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiSW50cm9kdWN0aW9uIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkSW50cm9kdWN0aW9uSGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmREZXNjcmlwdGlvbkhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkRlc2NyaXB0aW9uICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJMaW5rU29ydCJ9O1NvcnRCeT1EZXNjcmlwdGlvbjtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IkRlc2NyaXB0aW9uIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC90aD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkRGVzY3JpcHRpb25IZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvblNlbmRlckhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ik5vdGlmaWNhdGlvblNlbmRlciAkUURhdGF7IkNTUyJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTskRGF0YXsiTGlua1NvcnQifTtTb3J0Qnk9Tm90aWZpY2F0aW9uU2VuZGVyO09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiTm90aWZpY2F0aW9uIFNlbmRlciJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvblNlbmRlckhlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTm90aWZpY2F0aW9uU3ViamVjdEhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9Ik5vdGlmaWNhdGlvblN1YmplY3QgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PU5vdGlmaWNhdGlvblN1YmplY3Q7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJOb3RpZmljYXRpb24gU3ViamVjdCJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvblN1YmplY3RIZWFkZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZE5vdGlmaWNhdGlvbkJvZHlIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJOb3RpZmljYXRpb25Cb2R5ICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJMaW5rU29ydCJ9O1NvcnRCeT1Ob3RpZmljYXRpb25Cb2R5O09yZGVyQnk9JExRRGF0YXsiT3JkZXJCeSJ9Ij4kVGV4dHsiTm90aWZpY2F0aW9uIEJvZHkifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmROb3RpZmljYXRpb25Cb2R5SGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRTdGF0dXNIZWFkZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJTdGF0dXMgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PVN0YXR1cztPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IlN0YXR1cyJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvdGg+CjwhLS0gZHRsOmJsb2NrOlJlY29yZFN0YXR1c0hlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3JlYXRlVGltZUhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNyZWF0ZVRpbWUgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PUNyZWF0ZVRpbWU7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJDcmVhdGVkIFRpbWUifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDcmVhdGVUaW1lSGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDcmVhdGVCeUhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNyZWF0ZUJ5ICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJMaW5rU29ydCJ9O1NvcnRCeT1DcmVhdGVCeTtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IkNyZWF0ZWQgQnkifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDcmVhdGVCeUhlYWRlciAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ2hhbmdlVGltZUhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5nZVRpbWUgJFFEYXRheyJDU1MifSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07JERhdGF7IkxpbmtTb3J0In07U29ydEJ5PUNoYW5nZVRpbWU7T3JkZXJCeT0kTFFEYXRheyJPcmRlckJ5In0iPiRUZXh0eyJDaGFuZ2VkIFRpbWUifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDaGFuZ2VUaW1lSGVhZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDaGFuZ2VCeUhlYWRlciAtLT4KICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9IkNoYW5nZUJ5ICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJMaW5rU29ydCJ9O1NvcnRCeT1DaGFuZ2VCeTtPcmRlckJ5PSRMUURhdGF7Ik9yZGVyQnkifSI+JFRleHR7IkNoYW5nZWQgQnkifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L3RoPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDaGFuZ2VCeUhlYWRlciAtLT4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkIC0tPgogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJNYXN0ZXJBY3Rpb24iPgo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkPgo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXJMaW5rU3RhcnQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRTdXJ2ZXlab29tO1N1cnZleUlEPSRMUURhdGF7IlN1cnZleUlEIn0iIHRpdGxlPSIkTFFEYXRheyJTdXJ2ZXlOdW1iZXIifSIgY2xhc3M9Ik1hc3RlckFjdGlvbkxpbmsiPgo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXJMaW5rU3RhcnQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IlN1cnZleU51bWJlciJ9CjwhLS0gZHRsOmJsb2NrOlJlY29yZE51bWJlckxpbmtFbmQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTnVtYmVyTGlua0VuZCAtLT4KICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmROdW1iZXIgLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZFRpdGxlIC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iJFFEYXRheyJUaXRsZSJ9Ij4kUURhdGF7IlRpdGxlIiwiNDAifTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZFRpdGxlIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRJbnRyb2R1Y3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkUURhdGF7IkludHJvZHVjdGlvbiJ9Ij4kUURhdGF7IkludHJvZHVjdGlvbiIsIjQwIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRJbnRyb2R1Y3Rpb24gLS0+CjwhLS0gZHRsOmJsb2NrOlJlY29yZERlc2NyaXB0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iJFFEYXRheyJEZXNjcmlwdGlvbiJ9Ij4kUURhdGF7IkRlc2NyaXB0aW9uIiwiNDAifTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZERlc2NyaXB0aW9uIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmROb3RpZmljYXRpb25TZW5kZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkUURhdGF7Ik5vdGlmaWNhdGlvblNlbmRlciJ9Ij4kUURhdGF7Ik5vdGlmaWNhdGlvblNlbmRlciJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkTm90aWZpY2F0aW9uU2VuZGVyIC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmROb3RpZmljYXRpb25TdWJqZWN0IC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iJFFEYXRheyJOb3RpZmljYXRpb25TdWJqZWN0In0iPiRRRGF0YXsiTm90aWZpY2F0aW9uU3ViamVjdCIsIjQwIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmROb3RpZmljYXRpb25TdWJqZWN0IC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmROb3RpZmljYXRpb25Cb2R5IC0tPgogICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB0aXRsZT0iJFFEYXRheyJOb3RpZmljYXRpb25Cb2R5In0iPiRRRGF0YXsiTm90aWZpY2F0aW9uQm9keSIsIjQwIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmROb3RpZmljYXRpb25Cb2R5IC0tPgo8IS0tIGR0bDpibG9jazpSZWNvcmRTdGF0dXMgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkVGV4dHsiJERhdGF7IlN0YXR1cyJ9In0iPiRUZXh0eyIkRGF0YXsiU3RhdHVzIn0ifTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlJlY29yZFN0YXR1cyAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3JlYXRlVGltZSAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRUaW1lTG9uZ3siJFFEYXRheyJDcmVhdGVUaW1lIn0ifSI+JFRpbWVMb25neyIkUURhdGF7IkNyZWF0ZVRpbWUifSJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3JlYXRlVGltZSAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ3JlYXRlQnkgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkUURhdGF7IkNyZWF0ZVVzZXJMb2dpbiJ9ICRRRGF0YXsiQ3JlYXRlTGVmdFBhcmVudGhlc2lzIn0kUURhdGF7IkNyZWF0ZVVzZXJGaXJzdG5hbWUifSAkUURhdGF7IkNyZWF0ZVVzZXJMYXN0bmFtZSJ9JFFEYXRheyJDcmVhdGVSaWdodFBhcmVudGhlc2lzIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJDcmVhdGVVc2VyTG9naW4iLCIxNSJ9ICRRRGF0YXsiQ3JlYXRlTGVmdFBhcmVudGhlc2lzIn0kUXVvdGV7IiREYXRheyJDcmVhdGVVc2VyRmlyc3RuYW1lIn0iLCAiMTUifSAkUXVvdGV7IiREYXRheyJDcmVhdGVVc2VyTGFzdG5hbWUifSIsIjE1In0kUURhdGF7IkNyZWF0ZVJpZ2h0UGFyZW50aGVzaXMifQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpSZWNvcmRDcmVhdGVCeSAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ2hhbmdlVGltZSAtLT4KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgdGl0bGU9IiRUaW1lTG9uZ3siJFFEYXRheyJDaGFuZ2VUaW1lIn0ifSI+JFRpbWVMb25neyIkUURhdGF7IkNoYW5nZVRpbWUifSJ9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ2hhbmdlVGltZSAtLT4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ2hhbmdlQnkgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHRpdGxlPSIkUURhdGF7IkNoYW5nZVVzZXJMb2dpbiJ9ICRRRGF0YXsiQ2hhbmdlTGVmdFBhcmVudGhlc2lzIn0kUURhdGF7IkNoYW5nZVVzZXJGaXJzdG5hbWUifSAkUURhdGF7IkNoYW5nZXRVc2VyTGFzdG5hbWUifSRRRGF0YXsiQ2hhbmdlUmlnaHRQYXJlbnRoZXNpcyJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiQ2hhbmdlVXNlckxvZ2luIiwiMTUifSAkUURhdGF7IkNoYW5nZUxlZnRQYXJlbnRoZXNpcyJ9JFF1b3RleyIkRGF0YXsiQ2hhbmdlVXNlckZpcnN0bmFtZSJ9IiwgIjE1In0gJFF1b3RleyIkRGF0YXsiQ2hhbmdlVXNlckxhc3RuYW1lIn0iLCIxNSJ9JFFEYXRheyJDaGFuZ2VSaWdodFBhcmVudGhlc2lzIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UmVjb3JkQ2hhbmdlQnkgLS0+CiAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpSZWNvcmQgLS0+CiAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgPC90YWJsZT4KICAgIDwvZm9ybT4KPC9kaXY+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIENvcmUuVUkuSW5pdFRhYmxlSGVhZCgkKCcjRml4ZWRUYWJsZSB0aGVhZCcpLCAkKCcjRml4ZWRUYWJsZSB0Ym9keScpKTsKICAgIENvcmUuVUkuU3RhdGljVGFibGVDb250cm9sKCQoJyNPdmVydmlld0NvbnRyb2wnKS5hZGQoJCgnI092ZXJ2aWV3Qm9keScpKSk7CiAgICAkKCcuTWFzdGVyQWN0aW9uJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAkKHRoaXMpLmZpbmQoJy5NYXN0ZXJBY3Rpb25MaW5rJykuYXR0cignaHJlZicpOwogICAgfSk7CiAgICAkKHdpbmRvdykucmVzaXplKGZ1bmN0aW9uKCkgewogICAgICAgIENvcmUuVUkuQWRqdXN0VGFibGVIZWFkKCQoJyNPdmVydmlld0hlYWRlciB0aGVhZCcpLCAkKCcjT3ZlcnZpZXdCb2R5IHRib2R5JykpOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo=
IyAtLQojIEFnZW50U3VydmV5T3ZlcnZpZXdOYXZCYXIuZHRsIC0gaHRtbCBmb3IgY2hhbmdlIG92ZXJ2aWV3IHRhYmxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZ2VudFN1cnZleU92ZXJ2aWV3TmF2QmFyLmR0bCx2IDEuMSAyMDExLzAxLzA3IDEzOjE3OjAwIGNyIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyIC0tPgo8ZGl2IGNsYXNzPSJPdmVydmlld0JveCBBUklBUm9sZU1haW4gJFFEYXRheyJWaWV3In0iPgogICAgPGgxPiRUZXh0eyIkRGF0YXsiVGl0bGVOYW1lIn0ifTogJFRleHR7IiREYXRheyJUaXRsZVZhbHVlIn0ifTwvaDE+CgogICAgJERhdGF7IkRhdGFJblRoZU1pZGRsZSJ9CgogICAgPGRpdiBjbGFzcz0iT3ZlcnZpZXdDb250cm9sIiBpZD0iT3ZlcnZpZXdDb250cm9sIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250cm9sUm93Ij4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJGaWx0ZXIgLS0+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IlRhYnMiPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhckZpbHRlckl0ZW0gLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkIC0tPgogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iQWN0aXZlICRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJGaWx0ZXJMaW5rIn1GaWx0ZXI9JExRRGF0YXsiRmlsdGVyIn0iPiRUZXh0eyIkRGF0YXsiTmFtZSJ9In08c3Bhbj4kUURhdGF7IkNvdW50In08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkIC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhckZpbHRlckl0ZW1TZWxlY3RlZE5vdCAtLT4KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IiRRRGF0YXsiQ1NTIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJGaWx0ZXJMaW5rIn1GaWx0ZXI9JExRRGF0YXsiRmlsdGVyIn0iPiRUZXh0eyIkRGF0YXsiTmFtZSJ9In08c3Bhbj4kUURhdGF7IkNvdW50In08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNlbGVjdGVkTm90IC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhckZpbHRlckl0ZW1TcGxpdCAtLT4KICAgICAgICAgICAgICAgICAgICAtCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyRmlsdGVySXRlbVNwbGl0IC0tPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhckZpbHRlckl0ZW0gLS0+CiAgICAgICAgICAgICAgICA8L3VsPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhckZpbHRlciAtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJQYWdlQmFjayAtLT4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iVGFicyI+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iU3VydmV5U2VhcmNoIiBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9OyREYXRheyJMaW5rQmFjayJ9Ij4kVGV4dHsiQ2hhbmdlIHNlYXJjaCBvcHRpb25zIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcjU3VydmV5U2VhcmNoJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBDb3JlLkFnZW50LlNlYXJjaC5PcGVuU2VhcmNoRGlhbG9nKCAnQWdlbnRTdXJ2ZXlTZWFyY2gnLCAnJFFEYXRheyJQcm9maWxlIn0nICk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJQYWdlQmFjayAtLT4KCjwhLS0gZHRsOmJsb2NrOkNvbnRleHRTZXR0aW5ncyAtLT4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQ29udGV4dEZ1bmN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJDb250ZXh0U2V0dGluZ3MiPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBpZD0iU2hvd0NvbnRleHRTZXR0aW5nc0RpYWxvZyIgdGl0bGU9IiRUZXh0eyJDb250ZXh0IFNldHRpbmdzIn0iPjxzcGFuPiRUZXh0eyJDb250ZXh0IFNldHRpbmdzIn08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkNvbnRleHRTZXR0aW5nc0RpYWxvZ0NvbnRhaW5lciIgY2xhc3M9IkhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBpZD0iQ29udGV4dFNldHRpbmdzRGlhbG9nIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWdlbnRQcmVmZXJlbmNlcyIvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJVcGRhdGUiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iR3JvdXAiIHZhbHVlPSIkUURhdGF7Ikdyb3VwIn0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUmVkaXJlY3RVUkwiIHZhbHVlPSIkUURhdGF7IlJlcXVlc3RlZFVSTCJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IiRRRGF0YXsiUHJlZmVyZW5jZXNLZXkifSI+JFRleHR7Ik1heC4gc2hvd24gU3VydmV5cyBwZXIgcGFnZSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IlBhZ2VTaG93blN0cmluZyJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIC8vIGJpbmQgdGhlIENvbnRleHRTZXR0aW5nc0RpYWxvZ0NvbnRhaW5lcgogICAgJCgnI1Nob3dDb250ZXh0U2V0dGluZ3NEaWFsb2cnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuVUkuRGlhbG9nLlNob3dDb250ZW50RGlhbG9nKCQoJyNDb250ZXh0U2V0dGluZ3NEaWFsb2dDb250YWluZXInKSwgJyRKU1RleHR7IlNldHRpbmdzIn0nLCAnMjAlJywgJ0NlbnRlcicsIHRydWUsCiAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBMYWJlbDogJyRKU1RleHR7IlN1Ym1pdCJ9JywKICAgICAgICAgICAgICAgICAgICBUeXBlOiAnU3VibWl0JywKICAgICAgICAgICAgICAgICAgICBDbGFzczogJ1ByaW1hcnknCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0KICAgICAgICApOwogICAgICAgIEV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8IS0tIGR0bDpibG9jazpDb250ZXh0U2V0dGluZ3MgLS0+CgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Ik92ZXJ2aWV3QWN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgJERhdGF7IkFjdGlvblJvdyJ9CiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJPdmVydmlld1pvb20iPgoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJWaWV3TW9kZSAtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXJWaWV3TW9kZVNlbGVjdGVkIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IkFjdGl2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iJFFEYXRheyJOYW1lIn0iIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07RmlsdGVyPSRMUURhdGF7IkZpbHRlciJ9O1ZpZXc9JExRRGF0YXsiVmlldyJ9OyREYXRheyJMaW5rRmlsdGVyIn0iIHRpdGxlPSIkVGV4dHsiJERhdGF7Ik5hbWUifSJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iSW1hZ2VNb2RlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ik5hbWVTaG9ydCI+JFRleHR7IiREYXRheyJOYW1lU2hvcnQifSJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTmFtZUxvbmciPiRUZXh0eyIkRGF0YXsiTmFtZSJ9In08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclZpZXdNb2RlU2VsZWN0ZWQgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyVmlld01vZGVOb3RTZWxlY3RlZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IiRRRGF0YXsiTmFtZSJ9IiBuYW1lPSJPdmVydmlld0NvbnRyb2wiIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07RmlsdGVyPSRMUURhdGF7IkZpbHRlciJ9O1ZpZXc9JExRRGF0YXsiVmlldyJ9OyREYXRheyJMaW5rRmlsdGVyIn0iIHRpdGxlPSIkVGV4dHsiJERhdGF7Ik5hbWUifSJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iSW1hZ2VNb2RlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ik5hbWVTaG9ydCI+JFRleHR7IiREYXRheyJOYW1lU2hvcnQifSJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iTmFtZUxvbmciPiRUZXh0eyIkRGF0YXsiTmFtZSJ9In08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclZpZXdNb2RlTm90U2VsZWN0ZWQgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyVmlld01vZGUgLS0+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iUGFnaW5hdGlvbiI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyUGFnZU5hdkJhciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IlJlc3VsdExvbmcifQogICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiU2l0ZU5hdkJhckxvbmcifQo8IS0tIGR0bDpibG9jazpPdmVydmlld05hdkJhclBhZ2VOYXZCYXIgLS0+CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KIyBzb3J0IG9yZGVyIGJhciBpZiBuZWVkZWQKICAgICAgICAgICAgICAgICREYXRheyJTb3J0T3JkZXJCYXIifQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXIgLS0+Cg==
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEB2ZXJzaW9uICAgICAkUmV2aXNpb246IDEuNiAkCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRGVmYXVsdCBTZXR0aW5ncwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gU3VydmV5IEdyYXBoCiAqLwoKZmllbGRzZXQuU3VydmV5R3JhcGhzIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luLWJvdHRvbTogMjBweDsKfQoKZmllbGRzZXQuU3VydmV5R3JhcGhzIC5RdWVzdGlvbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGxpbmUtaGVpZ2h0OiAxLjVlbTsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgd2lkdGg6IDI1JTsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKfQoKZmllbGRzZXQuU3VydmV5R3JhcGhzIC5BbnN3ZXIgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaW5lLWhlaWdodDogMS4zZW07CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwICNGQUZBRkE7CiAgICB3aWR0aDogMjUlOwogICAgbWFyZ2luLWJvdHRvbTogNXB4Owp9CgpkaXYuU3VydmV5R3JhcGggewogICAgZmxvYXQ6IGxlZnQ7CiAgICB3aWR0aDogNTAlOwogICAgaGVpZ2h0OiAyMnB4OwogICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICBwYWRkaW5nLWJvdHRvbTogM3B4Owp9CgpkaXYuU3VydmV5R3JhcGhDb250YWluZXIgewogICAgd2lkdGg6IDk1JTsKICAgIGhlaWdodDogMjJweDsKfQoKZGl2LlN1cnZleUdyYXBoQmFyIHsKICAgIGhlaWdodDogMjJweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNGMkIxM0U7Cn0KCnAuU3VydmV5R3JhcGhMZXllbmQgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaW5lLWhlaWdodDogMS4zZW07CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI0ZBRkFGQTsKICAgIHdpZHRoOiAxMCU7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICBoZWlnaHQ6IDIycHg7Cn0KCi5TdWJMYWJlbCB7CiAgICB3aWR0aDogMzUlOwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBmbG9hdDogbGVmdDsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgouU3ViRmllbGQgewogICAgbWFyZ2luLWxlZnQ6IDM1JTsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgphLkFycm93VXAsCmEuQXJyb3dVcERpc2FibGVkLAphLkFycm93RG93biwKYS5BcnJvd0Rvd25EaXNhYmxlZCB7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICB3aWR0aDogMTZweDsKICAgIHBhZGRpbmc6IDFweDsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBtYXJnaW4tYm90dG9tOiAxcHg7CiAgICBib3JkZXItc3R5bGU6IG5vbmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgphLkFycm93VXA6YWN0aXZlLAphLkFycm93RG93bjphY3RpdmUgewogICAgbWFyZ2luLXRvcDogMXB4OwogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKYS5BcnJvd1VwRGlzYWJsZWQ6YWN0aXZlLAphLkFycm93RG93bkRpc2FibGVkOmFjdGl2ZSB7CiAgICBtYXJnaW4tdG9wOiAwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAxcHg7Cn0KCmEuQXJyb3dVcCB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2ljb25zL2Fycm93X3VwLnBuZyk7Cn0KCmEuQXJyb3dVcERpc2FibGVkIHsKICAgIGJhY2tncm91bmQ6IHVybCguLi9pbWcvaWNvbnMvYXJyb3dfdXBfZGlzYWJsZWQucG5nKTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKYS5BcnJvd0Rvd24gewogICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9pY29ucy9hcnJvd19kb3duLnBuZykgbm8tcmVwZWF0IDAgMDsKfQoKYS5BcnJvd0Rvd25EaXNhYmxlZCB7CiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1nL2ljb25zL2Fycm93X2Rvd25fZGlzYWJsZWQucG5nKTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKYS5BcnJvd1VwIHNwYW4sCmEuQXJyb3dVcERpc2FibGVkIHNwYW4sCmEuQXJyb3dEb3duIHNwYW4sCmEuQXJyb3dEb3duRGlzYWJsZWQgc3BhbiwKYS5TZWVEZXRhaWxzIHNwYW4gewogICAgYmFja2dyb3VuZDogbm9uZTsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCmEuU2VlRGV0YWlscyB7CiAgICBoZWlnaHQ6IDE1cHg7CiAgICB3aWR0aDogMTVweDsKICAgIHBhZGRpbmc6IDFweDsKICAgIG1hcmdpbi10b3A6IDA7CiAgICBtYXJnaW4tYm90dG9tOiAxcHg7CiAgICBib3JkZXItc3R5bGU6IG5vbmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYmFja2dyb3VuZDogdXJsKC4uL2ltZy9pY29ucy9zZWVfZGV0YWlscy5wbmcpOwp9CgpsYWJlbC5UZXh0YXJlYSwKZGl2LlRleHRhcmVhIHsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICBtYXJnaW4tdG9wOiAxMHB4Owp9CgouRmllbGQgdWwgbGl7CiAgICBtYXJnaW4tbGVmdDogMzBweDsKICAgIGxpc3Qtc3R5bGU6IGRpc2M7Cn0KCi5GaWVsZCBvbCBsaXsKICAgIG1hcmdpbi1sZWZ0OiAzMHB4OwogICAgbGlzdC1zdHlsZTogZGVjaW1hbDsKfQp9
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEB2ZXJzaW9uICAgICAkUmV2aXNpb246IDEuMSAkCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqIEBjc3MtZm9yICAgICBJRTcKICovCgovKioKICogQHBhY2thZ2UgICAgIFNraW4gIkRlZmF1bHQiCiAqIEBzZWN0aW9uICAgICBBZ2VudAogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7Cgpmb3JtLkFjdGlvbkZvcm0gewogICAgbWFyZ2luLXRvcDogNHB4Owp9CgpkaXYuRmllbGQgewogICBtYXJnaW4tdG9wOiA0cHg7Cn0KCn0gLyogZW5kIEBtZWRpYSAqLw==
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEN1c3RvbWVyIEZyb250ZW5kCiAqIEB2ZXJzaW9uICAgICAkUmV2aXNpb246IDEuNCAkCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTdXJ2ZXkgLSBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgQ3VzdG9tZXIKICovCgpkaXYuSW50cm8gewogICAgbWFyZ2luOiA4cHggMCAxM3B4OwogICAgcGFkZGluZy1ib3R0b206IDVweDsKICAgIGJhY2tncm91bmQ6ICNGOEY5Rjk7CiAgICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudChjZW50ZXIgdG9wICwgI0ZGRiwgI0Y4RjlGOSk7CiAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCNGRkYpLCB0bygjRjhGOUY5KSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjRUFFRUVFOwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgLW1vei1ib3JkZXItcmFkaXVzOiA1cHg7CiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKICAgIHdpZHRoOiA3MzhweDsKfQoKLlN1YkhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudChjZW50ZXIgdG9wICwgI0Y5RjlGOSwgI0VDRUVFRSkgcmVwZWF0IHNjcm9sbCAwIDAgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0NDQ0NDQzsKICAgIGNvbG9yOiAjMzMzMzMzOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogNHB4IDlweCAzcHggOXB4OwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgI0ZGRkZGRjsKfQoKZmllbGRzZXQuU3VydmV5IHsKICAgIHdpZHRoOiA3MzhweDsKfQoKZGl2LkFjdGlvblJvdyB7CiAgICB3aWR0aDogNzIwcHg7Cn0KCmRpdi5JbnRybyAuQ29udGVudHsKICAgIGJvcmRlci10b3A6IDA7Cn0KCmRpdi5RdWVzdGlvbnsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQzlDOUM5OwogICAgY29sb3I6ICMzMzMzMzM7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICB3aWR0aDogNTIwcHg7CiAgICBwYWRkaW5nOiA0cHggOXB4IDNweCA5cHg7CiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCAjRUNFRUVFOwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKbGFiZWwuQW5zd2VyIHsKICAgIGJhY2tncm91bmQ6bm9uZTsKICAgIGJvcmRlcjogbm9uZTsKICAgIHdpZHRoOiAzNjVweDsKICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICBtYXJnaW4tdG9wOiAzcHg7CiAgICB0ZXh0LWFsaWduOmxlZnQ7Cn0KCmZpZWxkc2V0IGlucHV0IHsKICAgIGZsb2F0OmxlZnQ7Cn0KCmZpZWxkc2V0IGlucHV0LApmaWVsZHNldCB0ZXh0YXJlYSB7CiAgICBtYXJnaW46IDdweCAwIDdweCA3NXB4Owp9CgouUmljaFRleHRBbnN3ZXIgewogICAgbWFyZ2luOiA3cHggMCA3cHggNzVweDsKfQo=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEN1c3RvbWVyIEZyb250ZW5kCiAqIEB2ZXJzaW9uICAgICAkUmV2aXNpb246IDEuMSAkCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTdXJ2ZXkgLSBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgQ3VzdG9tZXIKICovCgpsYWJlbC5BbnN3ZXIgewogICAgcGFkZGluZy10b3A6IDVweDsKfQoKZGl2LlF1ZXN0aW9uQ29udGFpbmVyIHsKICAgIG1hcmdpbi1sZWZ0OiA0MHB4Owp9Cg==
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