TimeAccounting
2.2.91
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
First beta release for OTRS 3.3.
A Time Registration Module.
Ein Zeiterfassungsmodul.
3.3.x
2013-09-25 14:43:33
opms.otrs.com
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkFwcGxpY2F0aW9uIj4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudFRpbWVBY2NvdW50aW5nIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGltZUFjY291bnRpbmc8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD50aW1lX2FjY291bnRpbmc8L0dyb3VwPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+dGltZV9hY2NvdW50aW5nPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGltZSBhY2NvdW50aW5nLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5UaW1lQWNjb3VudGluZzwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxUaXRsZT5UaW1lQWNjb3VudGluZ1RpdGxlPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGltZSBhY2NvdW50aW5nLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+VGltZSBBY2NvdW50aW5nPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudFRpbWVBY2NvdW50aW5nO1N1YmFjdGlvbj1FZGl0PC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+VGltZUFjY291bnRpbmc8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5NZW51PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjYwMDA8L1ByaW8+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+SXRlbUFyZWE8L0Jsb2NrPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+dGltZV9hY2NvdW50aW5nPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk92ZXJ2aWV3PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5PdmVydmlldzwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRUaW1lQWNjb3VudGluZztTdWJhY3Rpb249T3ZlcnZpZXc8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+VGltZUFjY291bnRpbmc8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5Pm88L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4xMDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz50aW1lX2FjY291bnRpbmc8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RWRpdCB0aW1lIHJlY29yZDwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+RWRpdDwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRUaW1lQWNjb3VudGluZztTdWJhY3Rpb249RWRpdDwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5UaW1lQWNjb3VudGluZzwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+bjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjIwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgIDxHcm91cD50aW1lX2FjY291bnRpbmc8L0dyb3VwPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlByb2plY3QgdGltZSByZXBvcnRpbmc8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lPlJlcG9ydGluZzwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRUaW1lQWNjb3VudGluZztTdWJhY3Rpb249UmVwb3J0aW5nPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPlRpbWVBY2NvdW50aW5nPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz41MDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEdyb3VwPnRpbWVfYWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RWRpdCB0aW1lIGFjY291bnRpbmcgc2V0dGluZ3M8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lPlNldHRpbmdzPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudFRpbWVBY2NvdW50aW5nO1N1YmFjdGlvbj1TZXR0aW5nPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPlRpbWVBY2NvdW50aW5nPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz45MDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5UaW1lQWNjb3VudGluZy5EZWZhdWx0cy5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTPlRpbWVBY2NvdW50aW5nLlRhYmxlLmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PnRoaXJkcGFydHkvanF1ZXJ5LXVpLWJ1dHRvbi0xLjEwLjMvanF1ZXJ5LXVpLWJ1dHRvbi5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD50aGlyZHBhcnR5L2pxdWVyeS1jb21ib2JveC9qcXVlcnktY29tYm9ib3guanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+Q29yZS5VSS5Db21ib0JveC5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5UaW1lQWNjb3VudGluZy5BZ2VudC5Db25maXJtYXRpb25EaWFsb2cuanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+VGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzLmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PlRpbWVBY2NvdW50aW5nLkFnZW50LkRhdGVwaWNrZXIuanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6RGVmYXVsdFByb2plY3ROYW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgbmFtZSBmb3IgbmV3IHByb2plY3RzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj48L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6RGVmYXVsdFByb2plY3RTdGF0dXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzdGF0dXMgZm9yIG5ldyBwcm9qZWN0cy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPmludmFsaWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPnZhbGlkPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6RGVmYXVsdEFjdGlvbk5hbWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBuYW1lIGZvciBuZXcgYWN0aW9ucy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGltZUFjY291bnRpbmc6OkRlZmF1bHRBY3Rpb25TdGF0dXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzdGF0dXMgZm9yIG5ldyBhY3Rpb25zLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCI+aW52YWxpZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+dmFsaWQ8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlRpbWVBY2NvdW50aW5nOjpEZWZhdWx0VXNlcldlZWtseUhvdXJzIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgc2V0dGluZyBmb3IgdGhlIHN0YW5kYXJkIHdlZWtseSBob3Vycy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+NDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6RGVmYXVsdFVzZXJMZWF2ZURheXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzZXR0aW5nIGZvciBsZWF2ZSBkYXlzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4yMzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlRpbWVBY2NvdW50aW5nOjpEZWZhdWx0VXNlck92ZXJ0aW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgc2V0dGluZyBmb3Igb3ZlcnRpbWUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGltZUFjY291bnRpbmc8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPjA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6RGVmYXVsdFVzZXJEYXRlU3RhcnQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIHN0YXJ0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4yMDEzLTAxLTAxPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGltZUFjY291bnRpbmc6OkRlZmF1bHRVc2VyRGF0ZUVuZCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZhdWx0IHNldHRpbmcgZm9yIGRhdGUgZW5kLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4yMDEzLTEyLTMxPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGltZUFjY291bnRpbmc6OkRlZmF1bHRVc2VyRGVzY3JpcHRpb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzZXR0aW5nIGZvciBkZXNjcmlwdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+UHV0IHlvdXIgZGVzY3JpcHRpb24gaGVyZS48L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6RGVmYXVsdFVzZXJTdGF0dXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzdGF0dXMgZm9yIG5ldyB1c2Vycy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPmludmFsaWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPnZhbGlkPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6TWF4SW50ZXJ2YWxPZkluY29tcGxldGVEYXlzIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1heGltdW0gbnVtYmVyIG9mIHdvcmtpbmcgZGF5cyBhZnRlciB3aGljaCB0aGUgd29ya2luZyB1bml0cyBoYXZlIHRvIGJlIGluc2VydGVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj40PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGltZUFjY291bnRpbmc6Ok1heEludGVydmFsT2ZJbmNvbXBsZXRlRGF5c0JlZm9yZVdhcm5pbmciIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWF4aW11bSBudW1iZXIgb2Ygd29ya2luZyBkYXlzIHdpdGhvdXQgd29ya2luZyB1bml0cyBlbnRyeSBhZnRlciB3aGljaCBhIHdhcm5pbmcgd2lsbCBiZSBzaG93bi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+MjwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpOb3RpZnlNb2R1bGUjIyM4ODgtVGltZUFjY291bnRpbmciIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBub3RpZmljYXRpb24gbW9kdWxlIGdpdmVzIGEgd2FybmluZyBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGltZUFjY291bnRpbmc8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZU5vdGlmeTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpOb3RpZmljYXRpb25UaW1lQWNjb3VudGluZzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlRpbWVBY2NvdW50aW5nOjpNYXhBbGxvd2VkSW5zZXJ0RGF5cyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gb3IgaG93IG1hbnkgZGF5cyBhZ28geW91IGNhbiBpbnNlcnQgd29ya2luZyB1bml0cy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+MTA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6UmVkdWNlVGltZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UbyB1c2UgaWYgc29tZSBhY3Rpb25zIHJlZHVjZWQgdGhlIHdvcmtpbmcgaG91cnMgKGZvciBleGFtcGxlLCBpZiBvbmx5IGhhbGYgb2YgdGhlIHRyYXZlbGluZyB0aW1lIGlzIHBhaWQgS2V5ID0mZ3Q7IHRyYXZlbGluZzsgQ29udGVudCA9Jmd0OyA1MCkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGltZUFjY291bnRpbmc8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0idHJhdmVsaW5nIj41MDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlRpbWVBY2NvdW50aW5nOjpJbnB1dEhvdXJzV2l0aG91dFN0YXJ0RW5kVGltZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5TcGVjaWZpZXMgaWYgd29ya2luZyBob3VycyBjYW4gYmUgaW5zZXJ0ZWQgd2l0aG91dCBzdGFydCBhbmQgZW5kIHRpbWVzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iUHJlQXBwbGljYXRpb25Nb2R1bGUjIyNBZ2VudFRpbWVBY2NvdW50aW5nIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgbW9kdWxlIGZvcmNlcyBpbnNlcnRzIGluIFRpbWVBY2NvdW50aW5nLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj5LZXJuZWw6Ok1vZHVsZXM6OkFnZW50VGltZUFjY291bnRpbmc8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6UHJvamVjdDJSZW1hcmtSZWdFeHAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmaW5lcyB0aGUgcHJvamVjdHMgZm9yIHdoaWNoIGEgcmVtYXJrIGlzIHJlcXVpcmVkLiBJZiB0aGUgUmVnRXhwIG1hdGNoZXMgb24gdGhlIHByb2plY3QsIHlvdSBoYXZlIHRvIGluc2VydCBhIHJlbWFyayB0b28uIFRoZSBSZWdFeHAgdXNlIHRoZSBzbXggcGFyYW1ldGVyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj5eKD86IFBST0pFQ1RcIyB8IElORlJBOiB8IFBST0RVQ1Q6ICk8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6UHJvamVjdExpc3RDb25zdHJhaW50cyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5SZWd1bGFyIGV4cHJlc3Npb25zIGZvciBjb25zdHJhaW5pbmcgcHJvamVjdCBsaXN0IGFjY29yZGluZyB0byB1c2VyIGdyb3Vwcy4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBncm91cHMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGltZUFjY291bnRpbmc8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlRpbWVBY2NvdW50aW5nOjpBY3Rpb25MaXN0Q29uc3RyYWludHMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVndWxhciBleHByZXNzaW9ucyBmb3IgY29uc3RyYWluaW5nIGFjdGlvbiBsaXN0IGFjY29yZGluZyB0byBzZWxlY3RlZCBwcm9qZWN0LiBLZXkgY29udGFpbnMgcmVndWxhciBleHByZXNzaW9uIGZvciBwcm9qZWN0KHMpLCBjb250ZW50IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGFjdGlvbihzKS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGltZUFjY291bnRpbmc6OkVuYWJsZUF1dG9Db21wbGV0aW9uIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPklmIGVuYWJsZWQsIHRoZSBkcm9wZG93biBlbGVtZW50cyBpbiB0aGUgZWRpdCBzY3JlZW4gYXJlIGNoYW5nZWQgdG8gYXV0b2NvbXBsZXRpb24gZmllbGRzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGltZUFjY291bnRpbmc6OkFsbG93TWFzc0VudHJ5Rm9yVXNlciIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JZiBlbmFibGVkLCB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIGVudGVyICJvbiB2YWNhdGlvbiBsZWF2ZSIsICJvbiBzaWNrIGxlYXZlIiBhbmQgIm9uIG92ZXJ0aW1lIGxlYXZlIiB0byBtdWx0aXBsZSBkYXRlcyBhdCBvbmNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIwIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6OlRvb2xCYXJNb2R1bGUjIyMyMDEtVGltZUFjY291bnRpbmc6OkluY29tcGxldGVXb3JraW5nRGF5cyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5BZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cyBmb3IgdGhlIHVzZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGltZUFjY291bnRpbmc8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OlRvb2xCYXJNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6VG9vbEJhckluY29tcGxldGVXb3JraW5nRGF5czwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ3NzQ2xhc3MiPkluY29tcGxldGVXb3JraW5nRGF5czwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iSWNvbiI+aWNvbi10aW1lPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iU3RhdHM6OkR5bmFtaWNPYmplY3RSZWdpc3RyYXRpb24jIyNUaW1lQWNjb3VudGluZyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZXRlcm1pbmVzIGlmIHRoZSBzdGF0aXN0aWNzIG1vZHVsZSBtYXkgZ2VuZXJhdGUgdGltZSBhY2NvdW50aW5nIGluZm9ybWF0aW9uLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6U3RhdHM8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6U3RhdHM6OkR5bmFtaWM6OlRpbWVBY2NvdW50aW5nPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPgo=
77u/IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICdNw7ZjaHRlbiBTaWUgd2lya2xpY2ggZGVuIEVpbnRyYWcgZsO8ciBkZW4gYWt0dWVsbGVuIFRhZyBsw7ZzY2hlbj8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgUmVjb3JkJ30gPSAnWmVpdGVyZmFzc3VuZyBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3Qgc2V0dGluZ3MnfSA9ICdQcm9qZWt0a29uZmlndXJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIE5hdmlnYXRpb24nfSA9ICdEYXR1bXNhdXN3YWhsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXZpb3VzIGRheSd9ID0gJ1ZvcmhlcmlnZXIgVGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05leHQgZGF5J30gPSAnTsOkY2hzdGVyIFRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIHdpdGhvdXQgZW50cmllcyd9ID0gJ05pY2h0IGF1c2dlZsO8bGx0ZSBUYWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZpZWxkcyBhcmUgbWFya2VkIHdpdGggYSAiKiIuJ30gPSAnRmVsZGVyLCBkaWUgYXVzZ2Vmw7xsbHQgd2VyZGVuIG3DvHNzZW4sIHNpbmQgbWl0IGVpbmVtIFN0ZXJuICIqIiBnZWtlbm56ZWljaG5ldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgdG8gZmlsbCBpbiBzdGFydCBhbmQgZW5kIHRpbWUgb3IgYSB0aW1lIHBlcmlvZC4nfSA9ICdTaWUgbcO8c3NlbiBlaW5lIFN0YXJ0LSB1bmQgRW5kemVpdCBvZGVyIGVpbmUgWmVpdHNwYW5uZSBhbmdlYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrJ30gPSAnVMOkdGlna2VpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1hcmsnfSA9ICdBbm1lcmt1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSBOYXZpZ2F0aW9uJ30gPSAnRGF0dW1zbmF2aWdhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYWRkIGEgcmVtYXJrIHdpdGggbW9yZSB0aGFuIDggY2hhcmFjdGVycyEuJ30gPSAnQml0dGUgZ2ViZW4gU2llIGVpbmUgQW5tZXJrdW5nIG1pdCBtaW5kZXN0ZW5zIDggWmVpY2hlbiBMw6RuZ2UgZWluLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWdhdGl2ZSB0aW1lcyBhcmUgbm90IGFsbG93ZWQuJ30gPSAnTmVnYXRpdmUgQW5nYWJlbiBzaW5kIG5pY2h0IGVybGF1YnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGVhdGVkIGhvdXJzIGFyZSBub3QgYWxsb3dlZC4gU3RhcnQgdGltZSBtYXRjaGVzIGFub3RoZXIgaW50ZXJ2YWwuJ30gPSAnRGllc2UgU3RhcnR6ZWl0IHd1cmRlIGJlcmVpdHMgaW4gZWluZW0gYW5kZXJlbiBFaW50cmFnIGFuZ2VnZWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHRpbWUgbXVzdCBiZSBhZnRlciBzdGFydCB0aW1lLid9ID0gJ0RpZSBFbmR6ZWl0IG11c3MgbmFjaCBkZXIgU3RhcnR6ZWl0IHNlaW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGVhdGVkIGhvdXJzIGFyZSBub3QgYWxsb3dlZC4gRW5kIHRpbWUgbWF0Y2hlcyBhbm90aGVyIGludGVydmFsLid9ID0gJ0RpZXNlIEVuZHplaXQgd3VyZGUgYmVyZWl0cyBpbiBlaW5lbSBhbmRlcmVuIEVpbnRyYWcgYW5nZWdlYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgaXMgYmlnZ2VyIHRoYW4gdGhlIGludGVydmFsIGJldHdlZW4gc3RhcnQgYW5kIGVuZCB0aW1lcyEnfSA9ICdEaWUgYW5nZWdlYmVuZSBEYXVlciBpc3QgbMOkbmdlciBhbHMgZGllIFplaXQgendpc2NoZW4gU3RhcnQtIHVuZCBFbmR6ZWl0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHBlcmlvZCEgQSBkYXkgaGFzIG9ubHkgMjQgaG91cnMuJ30gPSAnVW5nw7xsdGlnZSBBbmdhYmUuIEVpbiBUYWcgaGF0IG51ciAyNCBTdHVuZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIHBlcmlvZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLid9ID0gJ0VpbmUgZ8O8bHRpZ2UgWmVpdGRhdWVyIG11c3MgZ3LDtsOfZXIgYWxzIE51bGwgc2Vpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBwZXJpb2QhIE5lZ2F0aXZlIHBlcmlvZHMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ1VuZ8O8bHRpZ2UgQW5nYWJlLiBOZWdhdGl2ZSBaZWl0c3Bhbm5lbiBzaW5kIG5pY2h0IG3DtmdsaWNoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgb25lIHJvdyd9ID0gJ0VpbmUgWmVpbGUgaGluenVmw7xnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG90YWwnfSA9ICdTdW1tZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbiB2YWNhdGlvbid9ID0gJ2ltIFVybGF1Yic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG9ubHkgc2VsZWN0IG9uZSBjaGVja2JveCBlbGVtZW50ISd9ID0gJ1NpZSBrw7ZubmVuIG51ciBlaW5lIENoZWNrYm94IG1hcmtpZXJlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gc2ljayBsZWF2ZSd9ID0gJ0Vya3Jhbmt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09uIG92ZXJ0aW1lIGxlYXZlJ30gPSAnw5xiZXJzdHVuZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIGl0ZW1zJ30gPSAnQWxsZSBFaW50csOkZ2UgYW56ZWlnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIFRpbWUgQWNjb3VudGluZyBFbnRyeSd9ID0gJ0VpbnRyYWcgbMO2c2NoZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlybSBpbnNlcnQnfSA9ICdFaW5nYWJlIGJlc3TDpHRpZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgd2hpbGUgeW91IHdlcmUgb24gc2ljayBsZWF2ZT8nfSA9ICdTaW5kIFNpZSBzaWNoZXIsIGRhc3MgU2llIGdlYXJiZWl0ZXQgaGFiZW4sIG9id29obCBTaWUgZXJrcmFua3Qgc2luZD8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiB2YWNhdGlvbj8nfSA9ICdTaW5kIFNpZSBzaWNoZXIsIGRhc3MgU2llIGdlYXJiZWl0ZXQgaGFiZW4sIG9id29obCBTaWUgaW0gVXJsYXViIHNpbmQ/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgd2hpbGUgeW91IHdlcmUgb24gb3ZlcnRpbWUgbGVhdmU/J30gPSAnU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSBnZWFyYmVpdGV0IGhhYmVuLCBvYndvaGwgU2llIMOcYmVyc3R1bmRlbiBnZW5vbW1lbiBoYWJlbj8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCBtb3JlIHRoYW4gMTYgaG91cnM/J30gPSAnU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSBtZWhyIGFscyAxNiBTdHVuZGVuIGdlYXJiZWl0ZXQgaGFiZW4/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nT3ZlcnZpZXcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgcmVwb3J0aW5nIG1vbnRobHkgb3ZlcnZpZXcnfSA9ICdNb25hdHPDvGJlcnNpY2h0IFplaXRlcmZhc3N1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKEhvdXJzKSd9ID0gJ8OcYmVyc3R1bmRlbiAoaW4gU3R1bmRlbiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKHRoaXMgbW9udGgpJ30gPSAnw5xiZXJzdHVuZGVuIChkaWVzZXIgTW9uYXQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0b3RhbCknfSA9ICfDnGJlcnN0dW5kZW4gKFN1bW1lKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgb3ZlcnRpbWUgbGVhdmUnfSA9ICfDnGJlcnN0dW5kZW4gKHZlcmJsZWliZW5kKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiAoRGF5cyknfSA9ICdVcmxhdWIgKGluIFRhZ2VuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiB0YWtlbiAodGhpcyBtb250aCknfSA9ICdVcmxhdWJzdGFnZSAoZGllc2VyIE1vbmF0KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiB0YWtlbiAodG90YWwpJ30gPSAnVXJsYXVic3RhZ2UgKFN1bW1lKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgdmFjYXRpb24nfSA9ICdVcmxhdWJzdGFnZSAodmVyYmxlaWJlbmQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgTGVhdmUgKERheXMpJ30gPSAnRXJrcmFua3QgKGluIFRhZ2VuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ0Vya3Jhbmt0IChkaWVzZXIgTW9uYXQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUgdGFrZW4gKHRvdGFsKSd9ID0gJ0Vya3Jhbmt0IChTdW1tZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJldmlvdXMgbW9udGgnfSA9ICdWb3JoZXJpZ2VyIE1vbmF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05leHQgbW9udGgnfSA9ICdOw6RjaHN0ZXIgTW9uYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5J30gPSAnVGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZWtkYXknfSA9ICdXb2NoZW50YWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya2luZyBIb3Vycyd9ID0gJ0FyYmVpdHNzdHVuZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvdGFsIHdvcmtlZCBob3Vycyd9ID0gJ0FyYmVpdHNzdHVuZGVuIChnZXNhbXQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXJcJ3MgcHJvamVjdCBvdmVydmlldyd9ID0gJ051dHplcmJlcmljaHRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIChtb250aGx5KSd9ID0gJ1N0dW5kZW4gKGltIE1vbmF0KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3VycyAoTGlmZXRpbWUpJ30gPSAnU3R1bmRlbiAoZ2VzYW10KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFuZCB0b3RhbCd9ID0gJ1N1bW1lJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nUHJvamVjdFJlcG9ydGluZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCByZXBvcnQnfSA9ICdQcm9qZWt0w7xiZXJzaWNodCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1JlcG9ydGluZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSByZXBvcnRpbmcnfSA9ICdaZWl0YmVyaWNodGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGggTmF2aWdhdGlvbid9ID0gJ0RhdHVtc2F1c3dhaGwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciByZXBvcnRzJ30gPSAnTnV0emVyYmVyaWNodGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGhseSB0b3RhbCd9ID0gJ3BybyBNb25hdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWZldGltZSB0b3RhbCd9ID0gJ1N1bW1lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lIGxlYXZlJ30gPSAnw5xiZXJzdHVuZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uJ30gPSAnVXJsYXViJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUnfSA9ICdFcmtyYW5rdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiByZW1haW5pbmcnfSA9ICdWZXJibGVpYmVuZGUgVXJsYXVic3RhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCByZXBvcnRzJ30gPSAnUHJvamVrdGJlcmljaHRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nU2V0dGluZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUaW1lIEFjY291bnRpbmcgUHJvamVjdCBTZXR0aW5ncyd9ID0gJ1plaXRlcmZhc3N1bmc6IEJlYXJiZWl0dW5nIGRlciBQcm9qZWt0a29uZmlndXJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgcHJvamVjdCd9ID0gJ1Byb2pla3QgaGluenVmw7xnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFByb2plY3QnfSA9ICdQcm9qZWt0IGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUHJvamVjdCBTZXR0aW5ncyd9ID0gJ1Byb2pla3Rrb25maWd1cmF0aW9uIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3Qgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICdFaW4gUHJvamVrdCBtaXQgZ2xlaWNoZW0gTmFtZW4gZXhpc3RpZXJ0IGJlcmVpdHMuIEJpdHRlIHfDpGhsZW4gU2llIGVpbmVuIGFuZGVyZW4gTmFtZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFNldHRpbmdzJ30gPSAnWmVpdGVyZmFzc3VuZ3NlaW5zdGVsbHVuZ2VuIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRhc2snfSA9ICdUw6R0aWdrZWl0IGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB1c2VyJ30gPSAnTmV1ZXIgQmVudXR6ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBQcm9qZWN0cyd9ID0gJ0ZpbHRlciBmw7xyIFByb2pla3RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgVGFza3MnfSA9ICdGaWx0ZXIgZsO8ciBUw6R0aWdrZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBVc2Vycyd9ID0gJ0ZpbHRlciBmw7xyIEJlbnV0emVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgTGlzdCd9ID0gJ1Byb2pla3RsaXN0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIExpc3QnfSA9ICdUw6R0aWdrZWl0c2xpc3RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBUYXNrJ30gPSAnVMOkdGlna2VpdCBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRhc2sgU2V0dGluZ3MnfSA9ICdUw6R0aWdrZWl0c2VpbnN0ZWxsdW5nZW4gYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSBpcyBhbHJlYWR5IGEgdGFzayB3aXRoIHRoaXMgbmFtZS4gUGxlYXNlLCBjaG9vc2UgYSBkaWZmZXJlbnQgb25lLid9ID0gJ0VpbmUgVMOkdGlna2VpdCBtaXQgZ2xlaWNoZW0gTmFtZW4gZXhpc3RpZXJ0IGJlcmVpdHMuIEJpdHRlIHfDpGhsZW4gU2llIGVpbmVuIGFuZGVyZW4gTmFtZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgTGlzdCd9ID0gJ0JlbnV0emVybGlzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFVzZXIgU2V0dGluZ3MnfSA9ICdFaW5zdGVsbHVuZ2VuIGbDvHIgbmV1ZW4gQmVudXR6ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBVc2VyIFNldHRpbmdzJ30gPSAnQmVudXR6ZXJlaW5zdGVsbHVuZ2VuIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudHMnfSA9ICdLb21tZW50YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgT3ZlcnRpbWUnfSA9ICfDnGJlcnN0dW5kZW4gYW56ZWlnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3cgcHJvamVjdCBjcmVhdGlvbid9ID0gJ1Byb2pla3QgZXJzdGVsbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBCZWdpbid9ID0gJ0RhdHVtIEJlZ2lubic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgRW5kJ30gPSAnRGF0dW0gRW5kZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIG9mIFZhY2F0aW9uJ30gPSAnVXJsYXVic3RhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgcGVyIFdlZWsnfSA9ICdXb2NoZW5zdHVuZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1dGhvcml6ZWQgT3ZlcnRpbWUnfSA9ICdhdXRvcmlzaWVydGUgw5xiZXJzdHVuZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBlbmQgbXVzdCBiZSBhZnRlciBwZXJpb2QgYmVnaW4uJ30gPSAnRGFzIEVuZGUgZGVyIFplaXRzcGFubmUgbXVzcyBuYWNoIGRlbSBBbmZhbmcgc2Vpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdGltZSBwZXJpb2RzIGZvdW5kLid9ID0gJ0tlaW5lIFplaXRzcGFubmUgZ2VmdW5kZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0aW1lIHBlcmlvZCd9ID0gJ1plaXRzcGFubmUgaGluenVmw7xnZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdWaWV3CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3IFRpbWUgUmVjb3JkJ30gPSAnRGF0ZW5zYXR6IGFuemVpZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZpZXcgb2YgJ30gPSAnQW5zaWNodCB2b24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSBuYXZpZ2F0aW9uJ30gPSAnQXVzd2FobCBEYXR1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkYXRhIGZvdW5kIGZvciB0aGlzIGRheS4nfSA9ICdLZWluIEVpbnRyYWcgZsO8ciBkaWVzZW4gVGFnIGdlZnVuZGVuLic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGluY29tcGxldGUgd29ya2luZyBkYXlzIGZvciB0aGUgdXNlci4nfSA9ICdNb2R1bCB6dW0gQW56ZWlnZW4gZGVyIEFuemFobCBkZXIgdW52b2xsc3TDpG5kaWdlbiBBcmJlaXRzdGFnZSBkZXMgQmVudXR6ZXJzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG5hbWUgZm9yIG5ldyBhY3Rpb25zLid9ID0gJ0luaXRpYWxlciBOYW1lIGVpbmVyIG5ldWVuIFTDpHRpZ2tlaXQgaW4gZGVyIFplaXRlcmZhc3N1bmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbmFtZSBmb3IgbmV3IHByb2plY3RzLid9ID0gJ0FuZmFuZ3NzdGF0dXMgZWluZXMgbmV1ZW4gUHJvamVrdHMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGF0ZSBlbmQuJ30gPSAnRW5kZGF0dW0gZsO8ciBkaWUgRWluZ2FiZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGF0ZSBzdGFydC4nfSA9ICdTdGFydGRhdHVtIGbDvHIgZGllIEVpbmdhYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIGxlYXZlIGRheXMuJ30gPSAnU3RhbmRhcmQgVXJsYXVic3RhZ2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3Igb3ZlcnRpbWUuJ30gPSAnRXZlbnR1ZWxsIHZvcmhhbmRlbmVyIMOcYmVyc3R1bmRlbsO8YmVydHJhZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciB0aGUgc3RhbmRhcmQgd2Vla2x5IGhvdXJzLid9ID0gJ1N0YW5kYXJkIFdvY2hlbmFyYmVpdHN6ZWl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IGFjdGlvbnMuJ30gPSAnQW5mYW5nc3N0YXR1cyBlaW5lciBuZXVlbiBUw6R0aWdrZWl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHByb2plY3RzLid9ID0gJ0FuZmFuZ3NzdGF0dXMgZWluZXMgbmV1ZW4gUHJvamVrdHMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgdXNlcnMuJ30gPSAnQW5mYW5nc3N0YXR1cyBlaW5lcyBuZXVlbiBCZW51dHplcnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHByb2plY3RzIGZvciB3aGljaCBhIHJlbWFyayBpcyByZXF1aXJlZC4gSWYgdGhlIFJlZ0V4cCBtYXRjaGVzIG9uIHRoZSBwcm9qZWN0LCB5b3UgaGF2ZSB0byBpbnNlcnQgYSByZW1hcmsgdG9vLiBUaGUgUmVnRXhwIHVzZSB0aGUgc214IHBhcmFtZXRlci4nfSA9ICdJbm5lcmhhbGIgZGllc2VyIEtvbmZpZ3VyYXRpb25zb3B0aW9uIGthbm4gZWluZSBSZWdFeHAgZGVmaW5pZXJ0IHdlcmRlbiwgZGllIGZlc3RsZWd0LCBiZWkgd2VsY2hlbiBQcm9qZWt0ZW4gZWluZSBCZW1lcmt1bmcgZWluZ2V0cmFnZW4gd2VyZGVuIG11c3MgKGRpZSBSZWdFeHAgYXJiZWl0ZXQgbWl0IHNteC1QYXJhbWV0ZXJuKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aW1lIGFjY291bnRpbmcgc2V0dGluZ3MnfSA9ICdaZWl0ZXJmYXNzdW5nc2VpbnN0ZWxsdW5nZW4gYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgcmVjb3JkJ30gPSAnWmVpdGVyZmFzc3VuZyBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvciBob3cgbWFueSBkYXlzIGFnbyB5b3UgY2FuIGluc2VydCB3b3JraW5nIHVuaXRzLid9ID0gJ0xlZ3QgZmVzdCwgYmlzIHdhbm4gbWFuIGluIMOkbHRlcmUgWmVpdGVpbnRyw6RnZSBiZWFyYmVpdGVuIGthbm4gKHouIEIuIDEwIFRhZ2UgenVyw7xja2xpZWdlbmQpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBlbmFibGVkLCB0aGUgZHJvcGRvd24gZWxlbWVudHMgaW4gdGhlIGVkaXQgc2NyZWVuIGFyZSBjaGFuZ2VkIHRvIGF1dG9jb21wbGV0aW9uIGZpZWxkcy4nfSA9ICdBa3RpdmllcnQgZGllIEF1dG9jb21wbGV0aW9uIGF1ZiBkZW4gRWluZ2FiZWZlbGRlcm4gaW0gQmVhcmJlaXRlbi1CZXJlaWNoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgYWZ0ZXIgd2hpY2ggdGhlIHdvcmtpbmcgdW5pdHMgaGF2ZSB0byBiZSBpbnNlcnRlZC4nfSA9ICdNYXhpbWFsZSBBbnphaGwgdm9uIEFyYmVpdHN0YWdlbiwgbmFjaCBkZXIgZGllIEFyYmVpdHN6ZWl0IGVpbmdldHJhZ2VuIHdlcmRlbiBtdXNzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgd2l0aG91dGggd29ya2luZyB1bml0cyBlbnRyeSBhZnRlciB3aGljaCBhIHdhcm5pbmcgd2lsbCBiZSBzaG93bi4nfSA9ICdNYXhpbWFsZSBBbnphaGwgdm9uIEFyYmVpdHN0YWdlbiBvaG5lIEVpbnRyYWcsIG5hY2ggZGVyIGVpbmUgV2FybnVuZyBhbmdlemVpZ3Qgd2lyZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCB0aW1lIHJlcG9ydGluZyd9ID0gJ1Byb2pla3QgWmVpdGVyZmFzc3VuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWd1bGFyIGV4cHJlc3Npb25zIGZvciBjb25zdHJhaW5pbmcgYWN0aW9uIGxpc3QgYWNjb3JkaW5nIHRvIHNlbGVjdGVkIHByb2plY3QuIEtleSBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHByb2plY3QocyksIGNvbnRlbnQgY29udGFpbnMgcmVndWxhciBleHByZXNzaW9ucyBmb3IgYWN0aW9uKHMpLid9ID0gJ1JlZ3Vsw6RyZXIgQXVzZHJ1Y2ssIHVtIGRpZSBMaXN0ZSBkZXIgVMOkdGlna2VpdGVuIGJlesO8Z2xpY2ggZGVzIGF1c2dld8OkaGx0ZW4gUHJvamVrdHMgZWluenVzY2hyw6Rua2VuLiBEZXIgU2NobMO8c3NlbCBlbnRow6RsdCBlaW5lbiBSZWd1bMOkcmVuIEF1c2RydWNrIGbDvHIgUHJvamVrdGUsIGRlciBXZXJ0IGVpbmVuIFJlZ3Vsw6RyZW4gQXVzZHJ1Y2sgZsO8ciBkaWUgVMOkdGlna2VpdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWd1bGFyIGV4cHJlc3Npb25zIGZvciBjb25zdHJhaW5pbmcgcHJvamVjdCBsaXN0IGFjY29yZGluZyB0byB1c2VyIGdyb3Vwcy4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBncm91cHMuJ30gPSAnUmVndWzDpHJlciBBdXNkcnVjaywgdW0gZGllIExpc3RlIGRlciBQcm9qZWt0ZSBiZXrDvGdsaWNoIGRlcyBha3RpdmVuIEJlbnV0emVycyBlaW56dXNjaHLDpG5rZW4uIERlciBTY2hsw7xzc2VsIGVudGjDpGx0IGVpbmVuIFJlZ3Vsw6RyZW4gQXVzZHJ1Y2sgZsO8ciBQcm9qZWt0ZSwgZGVyIFdlcnQgZW50aMOkbHQgZWluZSBrb21tYS1zZXBhcmllcnRlIExpc3RlIHZvbiBCZW51dHplcmdydXBwZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyBpZiB3b3JraW5nIGhvdXJzIGNhbiBiZSBpbnNlcnRlZCB3aXRob3V0IHN0YXJ0IGFuZCBlbmQgdGltZXMuJ30gPSAnR2lidCBhbiwgb2IgQXJiZWl0c3N0dW5kZW4gb2huZSBTdGFydC0gdW5kIEVuZHplaXQgZWluZ2VnZWJlbiB3ZXJkZW4ga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBtb2R1bGUgZm9yY2VzIGluc2VydHMgaW4gVGltZUFjY291bnRpbmcuJ30gPSAnRGllc2VzIE1vZHVsIHp3aW5ndCB6dXIgRWluZ2FiZSB2b24gU3R1bmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBub3RpZmljYXRpb24gbW9kdWxlIGdpdmVzIGEgd2FybmluZyBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMuJ30gPSAnTW9kdWwsIGRhc3MgZGVuIEFnZW50IGltIE5vdGlmaWNhdGlvbi1CZXJlaWNoIGRlcyBBZ2VudC1JbnRlcmZhY2VzIGRhcsO8YmVyIGluZm9ybWllcnQsIHdlbm4gc2Nob24genUgbGFuZ2Uga2VpbmUgU3R1bmRlbiBtZWhyIGVpbmdldHJhZ2VuIHd1cmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBhY2NvdW50aW5nLid9ID0gJ1plaXRlcmZhc3N1bmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIHVzZSBpZiBzb21lIGFjdGlvbnMgcmVkdWNlZCB0aGUgd29ya2luZyBob3VycyAoZm9yIGV4YW1wbGUsIGlmIG9ubHkgaGFsZiBvZiB0aGUgdHJhdmVsaW5nIHRpbWUgaXMgcGFpZCBLZXkgPT4gdHJhdmVsaW5nOyBDb250ZW50ID0+IDUwKS4nfSA9ICdIaWVyIGthbm4gbWFuIGVpbmdlYmVuLCBvYiBmw7xyIGVpbmUgYmVzdGltbXRlIFTDpHRpZ2tlaXQsIGRpZSB6dSB2ZXJyZWNobmVuZGVuIFN0dW5kZW4gZ2Vrw7xyenQgd2VyZGVuLiBaLiBCIHdlbm4gUmVpc2V6ZWl0ZW4gbnVyIHp1ciBIw6RsZnRlIHZlcmfDvHRldCB3ZXJkZW4gKEtleSA9Jmd0OyBqb3VybmV5OyBDb250ZW50ID0mZ3Q7IDUwKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgc3RhdGlzdGljcyBtb2R1bGUgbWF5IGdlbmVyYXRlIHRpbWUgYWNjb3VudGluZyBpbmZvcm1hdGlvbi4nfSA9ICdCZXN0aW1tdCwgb2IgZGFzIFN0YXRpc3Rpay1Nb2R1bCBJbmZvcm1hdGlvbmVuIHp1ciBaZWl0ZXJmYXNzdW5nIGdlbmVyaWVyZW4ga2Fubi4nOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbid9ID0gJ01vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R1ZSd9ID0gJ0RpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZCd9ID0gJ01pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RodSd9ID0gJ0RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyaSd9ID0gJ0ZyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdCd9ID0gJ1NhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1bid9ID0gJ1NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0phbnVhcnknfSA9ICdKYW51YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmVicnVhcnknfSA9ICdGZWJydWFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hcmNoJ30gPSAnTcOkcnonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXByaWwnfSA9ICdBcHJpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXknfSA9ICdNYWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVuZSd9ID0gJ0p1bmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVseSd9ID0gJ0p1bGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXVndXN0J30gPSAnQXVndXN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcHRlbWJlcid9ID0gJ1NlcHRlbWJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPY3RvYmVyJ30gPSAnT2t0b2Jlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3ZlbWJlcid9ID0gJ05vdmVtYmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2VtYmVyJ30gPSAnRGV6ZW1iZXInOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHByb2plY3RzJ30gPSAnQWxsZSBQcm9qZWt0ZSBhbnplaWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZhbGlkIHByb2plY3RzJ30gPSAnQWxsZSBnw7xsdGlnZW4gUHJvamVrdGUgYW56ZWlnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZUFjY291bnRpbmcnfSA9ICdaZWl0ZXJmYXNzdW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGlvbnMnfSA9ICdBa3Rpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIHVwZGF0ZWQhJ30gPSAnQmVudXR6ZXIgYWt0dWFsaXNpZXJ0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIGFkZGVkISd9ID0gJ0JlbnV0emVyIGhpbnp1Z2Vmw7xndCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCBhZGRlZCEnfSA9ICdQcm9qZWt0IGhpbnp1Z2Vmw7xndCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCB1cGRhdGVkISd9ID0gJ1Byb2pla3QgYWt0dWFsaXNpZXJ0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIGFkZGVkISd9ID0gJ1TDpHRpZ2tlaXQgaGluenVnZWbDvGd0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIHVwZGF0ZWQhJ30gPSAnVMOkdGlna2VpdCBha3R1YWxpc2llcnQhJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBkZWxldGUgV29ya2luZyBVbml0cyEnfSA9ICdLYW5uIEFyYmVpdHNzdHVuZGVuIG5pY2h0IGzDtnNjaGVuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2F2ZSBzZXR0aW5ncywgYmVjYXVzZSBhIGRheSBoYXMgb25seSAyNCBob3VycyEnfSA9ICdFaW4gVGFnIGhhdCBudXIgMjQgU3R1bmRlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGluc2VydCB5b3VyIHdvcmtpbmcgaG91cnMhJ30gPSAnQml0dGUgdHJhZ2VuIFNpZSBJaHJlIEFyYmVpdHN6ZWl0ZW4gZWluISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdCZXJpY2h0c3dlc2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Y2Nlc3NmdWwgaW5zZXJ0ISd9ID0gJ0VyZm9sZ3JlaWNoIGVpbmdlZsO8Z3QhJzsKCn0KCjE7Cg==
77u/IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kYV9UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRhX1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICdWaWwgZHUgdmlya2VsaWcgc2xldHRlIHRpZHNyZWduc2thYmV0IGZvciBkZW5uZSBkYWc/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUaW1lIFJlY29yZCd9ID0gJ1JlZGlnZXIgdGlkc3JlZ2lzdHJlcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHNldHRpbmdzJ30gPSAnUHJvamVrdGluZHN0aWxsaW5nZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSBOYXZpZ2F0aW9uJ30gPSAnRGF0b25hdmlnYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJldmlvdXMgZGF5J30gPSAnRm9ycmlnZSBkYWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBkYXknfSA9ICdOw6ZzdGUgZGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgd2l0aG91dCBlbnRyaWVzJ30gPSAnRGFnZSB1ZGVuIG9wdGVnbmVsc2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZpZWxkcyBhcmUgbWFya2VkIHdpdGggYSAiKiIuJ30gPSAnRGUgcMOla3LDpnZlZGUgZmVsdGVyIGVyIG1hcmtlcmV0IG1lZCAiKiIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIHRvIGZpbGwgaW4gc3RhcnQgYW5kIGVuZCB0aW1lIG9yIGEgdGltZSBwZXJpb2QuJ30gPSAnRHUgc2thbCBpbmR0YXN0ZSBlbiBzdGFydC0gb2cgc2x1dGRhdG8gZWxsZXIgZW4gdGlkc3BlcmlvZGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2snfSA9ICdPcGdhdmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtYXJrJ30gPSAnQmVtw6Zya25pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSBOYXZpZ2F0aW9uJ30gPSAnRGF0b25hdmlnYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGFkZCBhIHJlbWFyayB3aXRoIG1vcmUgdGhhbiA4IGNoYXJhY3RlcnMhLid9ID0gJ1RpbGbDuGogdmVubGlnc3QgZW4gYmVtw6Zya25pbmcgbWVkIG1lcmUgZW5kIDggdGVnbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVnYXRpdmUgdGltZXMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ05lZ2F0aXYgdGlkIGVyIGlra2UgdGlsbGFkdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkLiBTdGFydCB0aW1lIG1hdGNoZXMgYW5vdGhlciBpbnRlcnZhbC4nfSA9ICdHZW50YWduZSB0aW1lciBlciBpa2tlIHRpbGxhZHQuIFN0YXJ0dGlkZW4gc3ZhcmVyIHRpbCBldCBhbmRldCBpbnRlcnZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHRpbWUgbXVzdCBiZSBhZnRlciBzdGFydCB0aW1lLid9ID0gJ1NsdXR0aWRlbiBza2FsIHbDpnJlIHNlbmVyZSBlbmQgc3RhcnR0aWRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkLiBFbmQgdGltZSBtYXRjaGVzIGFub3RoZXIgaW50ZXJ2YWwuJ30gPSAnR2VudGFnbmUgdGltZXIgZXIgaWtrZSB0aWxsYWR0LiBTbHV0dGlkZW4gc3ZhcmVyIHRpbCBldCBhbmRldCBpbnRlcnZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIGlzIGJpZ2dlciB0aGFuIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgdGltZXMhJ30gPSAnUGVyaW9kZW4gZXIgbMOmbmdlcmUgZW5kIGludGVydmFsbGV0IG1lbGxlbSBzdGFydC0gb2cgc2x1dHRpZCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBwZXJpb2QhIEEgZGF5IGhhcyBvbmx5IDI0IGhvdXJzLid9ID0gJ1VneWxkaWcgcGVyaW9kZSEgRW4gZGFnIGhhciBrdW4gMjQgdGltZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdmFsaWQgcGVyaW9kIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJ30gPSAnRW4gZ3lsZGlnIHBlcmlvZGUgc2thbCB2w6ZyZSBzdMO4cnJlIGVuZCAwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgcGVyaW9kISBOZWdhdGl2ZSBwZXJpb2RzIGFyZSBub3QgYWxsb3dlZC4nfSA9ICdVZ3lsZGlnIHBlcmlvZGUhIE5lZ2F0aXZlIHBlcmlvZGVyIGVyIGlra2UgdGlsbGFkdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG9uZSByb3cnfSA9ICdUaWxmw7hqIGVuIHLDpmtrZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3RhbCd9ID0gJ0kgYWx0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09uIHZhY2F0aW9uJ30gPSAnUMOlIGZlcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gb25seSBzZWxlY3Qgb25lIGNoZWNrYm94IGVsZW1lbnQhJ30gPSAnRHUga2FuIGt1biB2w6ZsZ2UgZXQgYWZrcnlkc25pbmdzZmVsdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gc2ljayBsZWF2ZSd9ID0gJ1N5Z2VmcmF2w6ZyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09uIG92ZXJ0aW1lIGxlYXZlJ30gPSAnQWZzcGFkc2VyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIGl0ZW1zJ30gPSAnVmlzIGFsbGUgcHVua3Rlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgVGltZSBBY2NvdW50aW5nIEVudHJ5J30gPSAnU2xldCB0aWRzcmVnbnNrYWJzaW5kdGFzdG5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlybSBpbnNlcnQnfSA9ICdCZWtyw6ZmdCBpbmRzw6Z0dGVsc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiBzaWNrIGxlYXZlPyd9ID0gJ0VyIGR1IHNpa2tlciBww6UsIGF0IGR1IGFyYmVqZGVkZSB1bmRlciBkaXQgc3lnZWZyYXbDpnI/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgd2hpbGUgeW91IHdlcmUgb24gdmFjYXRpb24/J30gPSAnRXIgZHUgc2lra2VyIHDDpSwgYXQgZHUgYXJiZWpkZWRlLCBtZW5zIGR1IHZhciBww6UgZmVyaWU/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgd2hpbGUgeW91IHdlcmUgb24gb3ZlcnRpbWUgbGVhdmU/J30gPSAnRXIgZHUgc2lra2VyIHDDpSwgYXQgZHUgYXJiZWpkZWRlLCBtZW5zIGR1IHZhciBww6UgYWZzcGFkc2VyaW5nPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIG1vcmUgdGhhbiAxNiBob3Vycz8nfSA9ICdFciBkdSBzaWtrZXIgcMOlLCBhdCBkdSBhcmJlamRlZGUgbWVyZSBlbmQgMTYgdGltZXI/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nT3ZlcnZpZXcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgcmVwb3J0aW5nIG1vbnRobHkgb3ZlcnZpZXcnfSA9ICdNw6VuZWRsaWcgb3ZlcnNpZ3Qgb3ZlciB0aWRzcmFwb3J0ZXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKEhvdXJzKSd9ID0gJ092ZXJ0aWQgKHRpbWVyKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSAodGhpcyBtb250aCknfSA9ICdPdmVydGlkIChkZW5uZSBtw6VuZWQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0b3RhbCknfSA9ICdPdmVydGlkIChpIGFsdCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtYWluaW5nIG92ZXJ0aW1lIGxlYXZlJ30gPSAnUmVzdGVyZW5kZSBhZnNwYWRzZXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gKERheXMpJ30gPSAnRmVyaWUgKGRhZ2UpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ0ZlcmllZGFnZSBicnVndCAoZGVubmUgbcOlbmVkKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiB0YWtlbiAodG90YWwpJ30gPSAnRmVyaWVkYWdlIGJydWd0IChpIGFsdCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtYWluaW5nIHZhY2F0aW9uJ30gPSAnUmVzdGVyZW5kZSBmZXJpZWRhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBMZWF2ZSAoRGF5cyknfSA9ICdTeWdlZnJhdsOmciAoZGFnZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBsZWF2ZSB0YWtlbiAodGhpcyBtb250aCknfSA9ICdTeWdlZnJhdsOmciBicnVndCAoZGVubmUgbcOlbmVkKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0b3RhbCknfSA9ICdTeWdlZnJhdsOmciBicnVndCAoaSBhbHQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXZpb3VzIG1vbnRoJ30gPSAnRm9ycmlnZSBtw6VuZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBtb250aCd9ID0gJ07DpnN0ZSBtw6VuZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5J30gPSAnRGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZWtkYXknfSA9ICdVZ2VkYWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya2luZyBIb3Vycyd9ID0gJ0FyYmVqZHN0aW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3RhbCB3b3JrZWQgaG91cnMnfSA9ICdBcmJlamRzdGltZXIgaSBhbHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlclwncyBwcm9qZWN0IG92ZXJ2aWV3J30gPSAnQnJ1Z2VycyBwcm9qZWt0b3ZlcmJsaWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgKG1vbnRobHkpJ30gPSAnVGltZXIgKG3DpW5lZGxpZyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgKExpZmV0aW1lKSd9ID0gJ1NhbWxldCBhbnRhbCB0aW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFuZCB0b3RhbCd9ID0gJ0FsdCBpIGFsdCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1Byb2plY3RSZXBvcnRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgcmVwb3J0J30gPSAnUHJvamVrdHJhcHBvcnQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdSZXBvcnRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgcmVwb3J0aW5nJ30gPSAnVGlkc3JhcG9ydGVyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbnRoIE5hdmlnYXRpb24nfSA9ICdNw6VuZWRzbmF2aWdhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIHJlcG9ydHMnfSA9ICdCcnVnZXJyYXBwb3J0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGhseSB0b3RhbCd9ID0gJ0kgYWx0IGZvciBtw6VuZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlmZXRpbWUgdG90YWwnfSA9ICdTYW1sZXQgdG90YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgbGVhdmUnfSA9ICdBZnNwYWRzZXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24nfSA9ICdGZXJpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlJ30gPSAnU3lnZWZyYXbDpnInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gcmVtYWluaW5nJ30gPSAnUmVzdGVyZW5kZSBmcmF2w6Zyc2RhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCByZXBvcnRzJ30gPSAnUHJvamVrdHJhcHBvcnRlcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFByb2plY3QgU2V0dGluZ3MnfSA9ICdSZWRpZ2VyIGluZHN0aWxsaW5nZXIgZm9yIHRpZHNyZWduc2thYnNwcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBwcm9qZWN0J30gPSAnVGlsZsO4aiBwcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBQcm9qZWN0J30gPSAnVGlsZsO4aiBwcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUHJvamVjdCBTZXR0aW5ncyd9ID0gJ1JlZGlnZXIgcHJvamVrdGluZHN0aWxsaW5nZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3Qgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICdEZXIgZXIgYWxsZXJlZGUgZXQgcHJvamVrdCBtZWQgZGV0dGUgbmF2bi4gVsOmbGcgdmVubGlnc3QgZXQgYW5kZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFNldHRpbmdzJ30gPSAnUmVkaWdlciB0aWRzcmVnbnNrYWJzaW5kc3RpbGluZ2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0YXNrJ30gPSAnVGlsZsO4aiBvcGdhdmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHVzZXInfSA9ICdOeSBicnVnZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBQcm9qZWN0cyd9ID0gJ0ZpbHRyw6lyIHByb2pla3Rlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFRhc2tzJ30gPSAnRmlsdHLDqXIgb3BnYXZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFVzZXJzJ30gPSAnRmlsdHLDqXIgYnJ1Z2VyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IExpc3QnfSA9ICdQcm9qZWt0bGlzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayBMaXN0J30gPSAnT3BnYXZlbGlzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFRhc2snfSA9ICdUaWxmw7hqIG9wZ2F2ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRhc2sgU2V0dGluZ3MnfSA9ICdSZWRpZ2VyIG9wZ2F2ZWluZHN0aWxsaW5nZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHRhc2sgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICdEZXIgZXIgYWxsZXJlZGUgZW4gb3BnYXZlIG1lZCBkZXR0ZSBuYXZuLiBWw6ZsZyB2ZW5saWdzdCBldCBhbmRldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBMaXN0J30gPSAnQnJ1Z2VybGlzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFVzZXIgU2V0dGluZ3MnfSA9ICdOeWUgYnJ1Z2VyaW5kc3RpbGxpbmdlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFVzZXIgU2V0dGluZ3MnfSA9ICdSZWRpZ2VyIGJydWdlcmluZHN0aWxsaW5nZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudHMnfSA9ICdLb21tZW50YXJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IE92ZXJ0aW1lJ30gPSAnVmlzIG92ZXJ0aWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3cgcHJvamVjdCBjcmVhdGlvbid9ID0gJ1RpbGxhZCBvcHJldHRlbHNlIGFmIHByb2pla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIEJlZ2luJ30gPSAnQmVneW5kIHBlcmlvZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIEVuZCd9ID0gJ0Fmc2x1dCBwZXJpb2RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgb2YgVmFjYXRpb24nfSA9ICdGZXJpZWRhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgcGVyIFdlZWsnfSA9ICdUaW1lciBwci4gdWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1dGhvcml6ZWQgT3ZlcnRpbWUnfSA9ICdHb2RrZW5kdCBvdmVydGlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBlbmQgbXVzdCBiZSBhZnRlciBwZXJpb2QgYmVnaW4uJ30gPSAnUGVyaW9kZW5zIGFmc2x1dG5pbmcgc2thbCB2w6ZyZSBlZnRlciBwZXJpb2RlbnMgc3RhcnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHRpbWUgcGVyaW9kcyBmb3VuZC4nfSA9ICdJbmdlbiB0aWRzcGVyaW9kZXIgZnVuZGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdGltZSBwZXJpb2QnfSA9ICdUaWxmw7hqIHRpZHNwZXJpb2RlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nVmlldwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyBUaW1lIFJlY29yZCd9ID0gJ1NlIHRpZHNyZWdpc3RyZXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyBvZiAnfSA9ICdTZSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSBuYXZpZ2F0aW9uJ30gPSAnRGF0b25hdmlnYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGF0YSBmb3VuZCBmb3IgdGhpcyBkYXkuJ30gPSAnRGVyIGVyIGlra2UgZnVuZGV0IGRhdGEgZm9yIGRlbm5lIGRhZy4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cyBmb3IgdGhlIHVzZXIuJ30gPSAnQWdlbnQgaW50ZXJmYWNlLW5vdGlmaWNhdGlvbnNtb2R1bGV0IHNrYWwgc2UgYW50YWxsZXQgYWYgdWFmc2x1dHRlZGUgYXJiZWpkc2RhZ2UgZm9yIGJydWdlcmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG5hbWUgZm9yIG5ldyBhY3Rpb25zLid9ID0gJ1N0YW5kYXJkbmF2biBmb3IgbnllIGhhbmRsaW5nZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbmFtZSBmb3IgbmV3IHByb2plY3RzLid9ID0gJ1N0YW5kYXJkbmF2biBmb3IgbnllIHByb2pla3Rlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIGVuZC4nfSA9ICdTdGFuZGFyZGluZHN0aWxsaW5nIGZvciBzbHV0ZGF0by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIHN0YXJ0Lid9ID0gJ1N0YW5kYXJkaW5kc3RpbGxpbmcgZm9yIGJlZ3luZGVsc2VzZGF0by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBsZWF2ZSBkYXlzLid9ID0gJ1N0YW5kYXJkaW5kc3RpbGxpbmcgZm9yIGZyYXbDpnJzZGFnZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBvdmVydGltZS4nfSA9ICdTdGFuZGFyZGluZHN0aWxsaW5nIGZvciBvdmVydGlkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIHRoZSBzdGFuZGFyZCB3ZWVrbHkgaG91cnMuJ30gPSAnU3RhbmRhcmRpbmRzdGlsbGluZyBmb3Igbm9ybWFsZSB1Z2VudGxpZ2UgdGltZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgYWN0aW9ucy4nfSA9ICdTdGFuZGFyZGluZHN0aWxsaW5nIGZvciBueWUgaGFuZGxpbmdlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0dXMgZm9yIG5ldyBwcm9qZWN0cy4nfSA9ICdTdGFuZGFyZGluZHN0aWxsaW5nIGZvciBueWUgcHJvamVrdGVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHVzZXJzLid9ID0gJ1N0YW5kYXJkaW5kc3RpbGxpbmcgZm9yIG55ZSBicnVnZXJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwcm9qZWN0cyBmb3Igd2hpY2ggYSByZW1hcmsgaXMgcmVxdWlyZWQuIElmIHRoZSBSZWdFeHAgbWF0Y2hlcyBvbiB0aGUgcHJvamVjdCwgeW91IGhhdmUgdG8gaW5zZXJ0IGEgcmVtYXJrIHRvby4gVGhlIFJlZ0V4cCB1c2UgdGhlIHNteCBwYXJhbWV0ZXIuJ30gPSAnRGVmaW5lcmVyIGRlIHByb2pla3RlciwgZm9yIGh2aWxrZSBlbiBiZW3DpnJrbmluZyBlciBww6VrcsOmdmV0LiBIdmlzIFJlZ0V4cCBtYXRjaGVyIHDDpSBwcm9qZWt0ZXQsIHNrYWwgZHUgb2dzw6UgaW5kZsO4amUgZW4gYmVtw6Zya25pbmcuIFJlZ0V4cCBicnVnZXIgc214IHBhcmFtZXRlcmV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgYWNjb3VudGluZyBzZXR0aW5ncyd9ID0gJ1JlZGlnZXIgaW5kc3RpbGxpbmdlciBmb3IgdGlkc3JlZ2lzdHJlcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgcmVjb3JkJ30gPSAnUmVkaWdlciB0aWRzb3B0ZWduZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3IgaG93IG1hbnkgZGF5cyBhZ28geW91IGNhbiBpbnNlcnQgd29ya2luZyB1bml0cy4nfSA9ICdBbmdpdmVyIGZvciBodm9yIG1hbmdlIGRhZ2UsIGR1IGthbiBpbmRzw6Z0dGUgYXJiZWpkc2VuaGVkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIHRoZSBkcm9wZG93biBlbGVtZW50cyBpbiB0aGUgZWRpdCBzY3JlZW4gYXJlIGNoYW5nZWQgdG8gYXV0b2NvbXBsZXRpb24gZmllbGRzLid9ID0gJ0h2aXMgZGVubmUgZXIgYWt0aXZlcmV0LCDDpm5kcmVzIGRyb3Bkb3duLWVsZW1lbnRlcm5lIHDDpSByZWRpZ2VyaW5nc3Nrw6ZybWJpbGxlZGV0IHRpbCBhdXRvZnVsZGbDuHJpbmdzZmVsdGVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgYWZ0ZXIgd2hpY2ggdGhlIHdvcmtpbmcgdW5pdHMgaGF2ZSB0byBiZSBpbnNlcnRlZC4nfSA9ICdNYWtzaW1hbHQgYW50YWwgYWYgYXJiZWpkc2RhZ2UgZWZ0ZXIgaHZpbGtldCBhcmJlamRzZW5oZWRlcm5lIHNrYWwgaW5kc8OmdHRlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygd29ya2luZyBkYXlzIHdpdGhvdXRoIHdvcmtpbmcgdW5pdHMgZW50cnkgYWZ0ZXIgd2hpY2ggYSB3YXJuaW5nIHdpbGwgYmUgc2hvd24uJ30gPSAnTWFrc2ltYWx0IGFudGFsIGFmIGFyYmVqZHNkYWdlIHVkZW4gaW5kdGFzdG5pbmcgYWYgYXJiZWpkc2VuaGVkZXIgZWZ0ZXIgaHZpbGtldCBlbiBhZHZhcnNlbCB2aWwgYmxpdmUgdmlzdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCB0aW1lIHJlcG9ydGluZyd9ID0gJ1Byb2pla3R0aWRzcmFwcG9ydGVyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBhY3Rpb24gbGlzdCBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgcHJvamVjdC4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBhY3Rpb24ocykuJ30gPSAnUmVndWzDpnJlIHVkdHJ5ayBmb3IgYmVncsOmbnNuaW5nIGFmIGhhbmRsaW5nc2xpc3RlIGlmw7hsZ2UgZGV0IHZhbGd0ZSBwcm9qZWt0LiBOw7hnbGVuIGluZGVob2xkZXIgZXQgcmVndWzDpnJ0IHVkdHJ5ayBmb3IgcHJvamVrdChlciksIGluZGhvbGRldCBydW1tZXIgcmVndWzDpnJlIHVkdHJ5ayBmb3IgaGFuZGxpbmcoZXIpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWd1bGFyIGV4cHJlc3Npb25zIGZvciBjb25zdHJhaW5pbmcgcHJvamVjdCBsaXN0IGFjY29yZGluZyB0byB1c2VyIGdyb3Vwcy4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBncm91cHMuJ30gPSAnUmVndWzDpnJlIHVkdHJ5ayBmb3IgYmVncsOmbnNuaW5nIGFmIHByb2pla3RsaXN0ZSBpZsO4bGdlIGJydWdlcmdydXBwZXIuIE7DuGdsZW4gaW5kZWhvbGRlciBldCByZWd1bMOmcnQgdWR0cnlrIGZvciBwcm9qZWt0KGVyKSwgaW5kaG9sZGV0IHJ1bW1lciBrb21tYXNlcGFyZXJldCBsaXN0ZSBvdmVyIGdydXBwZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyBpZiB3b3JraW5nIGhvdXJzIGNhbiBiZSBpbnNlcnRlZCB3aXRob3V0IHN0YXJ0IGFuZCBlbmQgdGltZXMuJ30gPSAnQW5naXZlciwgb20gYXJiZWpkc3RpbWVyIGthbiBpbmRzw6Z0dGVzIHVkZW4gc3RhcnQtIG9nIHNsdXR0aWRlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBtb2R1bGUgZm9yY2VzIGluc2VydHMgaW4gVGltZUFjY291bnRpbmcuJ30gPSAnRGV0dGUgbW9kdWwgZ2VubmVtdHZpbmdlciBpbmRzw6Z0dGVsc2VyIGkgdGlkc3JlZ25za2FiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG5vdGlmaWNhdGlvbiBtb2R1bGUgZ2l2ZXMgYSB3YXJuaW5nIGlmIHRoZXJlIGFyZSB0b28gbWFueSBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cy4nfSA9ICdEZXR0ZSBhZHZpc2VyaW5nc21vZHVsIGdpdmVyIGVuIGFkdmFyc2VsLCBodmlzIGRlciBlciBmb3IgbWFuZ2UgdWZ1bGRzdMOmbmRpZ2UgYXJiZWpkc2RhZ2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgYWNjb3VudGluZy4nfSA9ICdUaWRzcmVnbnNrYWInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gdXNlIGlmIHNvbWUgYWN0aW9ucyByZWR1Y2VkIHRoZSB3b3JraW5nIGhvdXJzIChmb3IgZXhhbXBsZSwgaWYgb25seSBoYWxmIG9mIHRoZSB0cmF2ZWxpbmcgdGltZSBpcyBwYWlkIEtleSA9PiB0cmF2ZWxpbmc7IENvbnRlbnQgPT4gNTApLid9ID0gJ0JydWdlcywgaHZpcyBub2dsZSBoYW5kbGluZ2VyIGhhciByZWR1Y2VyZXQgYXJiZWpkc3RpbWVybmUgKGYuZWtzLiBodmlzIGt1biBoYWx2ZGVsZW4gYWYgcmVqc2V0aWRlbiBlciBiZXRhbHQgS2V5ID0+IHRyYXZlbGluZzsgQ29udGVudCA9PiA1MCknOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbid9ID0gJ01hbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUdWUnfSA9ICdUaXJzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZCd9ID0gJ09ucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaHUnfSA9ICdUb3JzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyaSd9ID0gJ0ZyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXQnfSA9ICdMw7hyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1bid9ID0gJ1PDuG4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSmFudWFyeSd9ID0gJ0phbnVhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZWJydWFyeSd9ID0gJ0ZlYnJ1YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFyY2gnfSA9ICdNYXJ0cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHJpbCd9ID0gJ0FwcmlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heSd9ID0gJ01haic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdW5lJ30gPSAnSnVuaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdWx5J30gPSAnSnVsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdWd1c3QnfSA9ICdBdWd1c3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VwdGVtYmVyJ30gPSAnU2VwdGVtYmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09jdG9iZXInfSA9ICdPa3RvYmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdmVtYmVyJ30gPSAnTm92ZW1iZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjZW1iZXInfSA9ICdEZWNlbWJlcic7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgcHJvamVjdHMnfSA9ICdWaXMgYWxsZSBwcm9qZWt0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2YWxpZCBwcm9qZWN0cyd9ID0gJ1ZpcyBneWxkaWdlIHByb2pla3Rlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lQWNjb3VudGluZyd9ID0gJ1RpZHNyZWduc2thYic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3Rpb25zJ30gPSAnSGFuZGxpbmdlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIHVwZGF0ZWQhJ30gPSAnQnJ1Z2VyIG9wZGF0ZXJldCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBhZGRlZCEnfSA9ICdCcnVnZXIgdGlsZsO4amV0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IGFkZGVkISd9ID0gJ1Byb2pla3QgdGlsZsO4amV0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHVwZGF0ZWQhJ30gPSAnUHJvamVrdCBvcGRhdGVyZXQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgYWRkZWQhJ30gPSAnT3BnYXZlIHRpbGbDuGpldCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayB1cGRhdGVkISd9ID0gJ09wZ2F2ZSBvcGRhdGVyZXQhJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBkZWxldGUgV29ya2luZyBVbml0cyEnfSA9ICdUaWRzZW5oZWRlciBrYW4gaWtrZSBzbGV0dGVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2F2ZSBzZXR0aW5ncywgYmVjYXVzZSBhIGRheSBoYXMgb25seSAyNCBob3VycyEnfSA9ICdJbmRzdGlsbGluZ2VyIGthbiBpa2tlIGdlbW1lcywgZm9yZGkgZXQgZMO4Z24ga3VuIGhhciAyNCB0aW1lciEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGluc2VydCB5b3VyIHdvcmtpbmcgaG91cnMhJ30gPSAnSW5kdGFzdCB2ZW5saWdzdCBkaW5lIGFyYmVqZHN0aW1lciEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmFwb3J0ZXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzc2Z1bCBpbnNlcnQhJ30gPSAnVmVsbHlra2V0IGluZHRhc3RuaW5nISc7Cgp9CgoxOwo=
77u/IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9lc19UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICfCv1JlYWxtZW50ZSBkZXNlYSBlbGltaW5hciBsYSBDb250YWJpbGlkYWQgZGUgVGllbXBvIGRlIGVzdGUgZMOtYT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgUmVjb3JkJ30gPSAnTW9kaWZpY2FyIFJlZ2lzdHJvIGRlIFRpZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHNldHRpbmdzJ30gPSAnQ29uZmlndXJhY2lvbmVzIGRlIHByb3llY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXZpb3VzIGRheSd9ID0gJ0TDrWEgYW50ZXJpb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBkYXknfSA9ICdEw61hIHNpZ3VpZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIHdpdGhvdXQgZW50cmllcyd9ID0gJ0TDrWFzIHNpbiByZWdpc3Rybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmaWVsZHMgYXJlIG1hcmtlZCB3aXRoIGEgIioiLid9ID0gJ0xvcyBjYW1wb3MgcmVxdWVyaWRvcyBlc3TDoW4gbWFyY2Fkb3MgY29uIHVuICIqIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgdG8gZmlsbCBpbiBzdGFydCBhbmQgZW5kIHRpbWUgb3IgYSB0aW1lIHBlcmlvZC4nfSA9ICdFcyBuZWNlc2FyaW8gcXVlIHByb3BvcmNpb25lIHVuYSBob3JhIGRlIGluaWNpbyB5IHVuYSBkZSBmaW5hbGl6YWNpw7NuIG8gdW4gcGVyaW9kby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb3llY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2snfSA9ICdUYXJlYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1hcmsnfSA9ICdDb21lbnRhcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgTmF2aWdhdGlvbid9ID0gJ05hdmVnYWNpw7NuIHBvciBGZWNoYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYWRkIGEgcmVtYXJrIHdpdGggbW9yZSB0aGFuIDggY2hhcmFjdGVycyEuJ30gPSAnwqFQb3IgZmF2b3IsIGVzY3JpYmEgdW4gY29tZW50YXJpbyBkZSBtw6FzIGRlIDggY2FyYWN0ZXJlcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVnYXRpdmUgdGltZXMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ05vIHNlIHBlcm1pdGUgbGEgaW5zZXJjacOzbiBkZSBob3JhcyBuZWdhdGl2YXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGVhdGVkIGhvdXJzIGFyZSBub3QgYWxsb3dlZC4gU3RhcnQgdGltZSBtYXRjaGVzIGFub3RoZXIgaW50ZXJ2YWwuJ30gPSAnTm8gc2UgcGVybWl0ZSBsYSBpbnNlcmNpw7NuIGRlIGhvcmFzIHJlcGV0aWRhcy4gTGEgaG9yYSBkZSBpbmljaW8gZXN0w6EgaW5jbHXDrWRhIGVuIG90cm8gaW50ZXJ2YWxvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgdGltZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IHRpbWUuJ30gPSAnTGEgaG9yYSBkZSBmaW5hbGl6YWNpw7NuIGRlYmUgc2VyIHBvc3RlcmlvciBhIGxhIGRlIGluaWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkLiBFbmQgdGltZSBtYXRjaGVzIGFub3RoZXIgaW50ZXJ2YWwuJ30gPSAnTm8gc2UgcGVybWl0ZSBsYSBpbnNlcmNpw7NuIGRlIGhvcmFzIHJlcGV0aWRhcy4gTGEgaG9yYSBkZSBmaW5hbGl6YWNpw7NuIGVzdMOhIGluY2x1w61kYSBlbiBvdHJvIGludGVydmFsby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIGlzIGJpZ2dlciB0aGFuIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgdGltZXMhJ30gPSAnwqFFbCBwZXJpb2RvIGVzIG1heW9yIGFsIGludGVydmFsbyBlbnRyZSBsYXMgaG9yYXMgZGUgaW5pY2lvIHkgZmluYWxpemFjacOzbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBwZXJpb2QhIEEgZGF5IGhhcyBvbmx5IDI0IGhvdXJzLid9ID0gJ8KhUGVyaW9kbyBpbnbDoWxpZG8hIFVuIGTDrWEgc8OzbG8gdGllbmUgMjQgaG9yYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdmFsaWQgcGVyaW9kIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJ30gPSAnVW4gcGVyaW9kbyB2w6FsaWRvIGRlYmUgc2VyIG1heW9yIGEgY2Vyby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBwZXJpb2QhIE5lZ2F0aXZlIHBlcmlvZHMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ8KhUGVyaW9kbyBpbnbDoWxpZG8hIE5vIHNlIHBlcm1pdGVuIHBlcmlvZG9zIG5lZ2F0aXZvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG9uZSByb3cnfSA9ICdBw7FhZGlyIHVuYSBmaWxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvdGFsJ30gPSAnVG90YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gdmFjYXRpb24nfSA9ICdEZSB2YWNhY2lvbmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gb25seSBzZWxlY3Qgb25lIGNoZWNrYm94IGVsZW1lbnQhJ30gPSAnwqFTw7NsbyBzZSBwZXJtaXRlIGVsZWdpciB1biBlbGVtZW50byBjaGVja2JveCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gc2ljayBsZWF2ZSd9ID0gJ0F1c2VudGUgcG9yIGVuZmVybWVkYWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gb3ZlcnRpbWUgbGVhdmUnfSA9ICdBdXNlbnRlIHBvciBoYWJlciB0cmFiYWphZG8gaG9yYXMgZXh0cmFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIGl0ZW1zJ30gPSAnTW9zdHJhciB0b2RvcyBsb3MgZWxlbWVudG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUaW1lIEFjY291bnRpbmcgRW50cnknfSA9ICdFbGltaW5hciBSZWdpc3RybyBkZSBDb250YWJpbGlkYWQgZGUgVGllbXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpcm0gaW5zZXJ0J30gPSAnQ29uZmlybWFyIGluc2VyY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiBzaWNrIGxlYXZlPyd9ID0gJ8K/RXN0w6Egc2VndXJvIHF1ZSB0cmFiYWrDsyBkdXJhbnRlIHN1IGF1c2VuY2lhIHBvciBlbmZlcm1lZGFkPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIHZhY2F0aW9uPyd9ID0gJ8K/RXN0w6Egc2VndXJvIHF1ZSB0cmFiYWrDsyBkdXJhbnRlIHN1cyB2YWNhY2lvbmVzPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIG92ZXJ0aW1lIGxlYXZlPyd9ID0gJ8K/RXN0w6Egc2VndXJvIHF1ZSB0cmFiYWrDsyBkdXJhbnRlIHN1IGF1c2VuY2lhIHBvciBoYWJlciB0cmFiYWphZG8gaG9yYXMgZXh0cmFzPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIG1vcmUgdGhhbiAxNiBob3Vycz8nfSA9ICfCv0VzdMOhIHNlZ3VybyBxdWUgdHJhYmFqw7MgbcOhcyBkZSAxNiBob3Jhcz8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdPdmVydmlldwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSByZXBvcnRpbmcgbW9udGhseSBvdmVydmlldyd9ID0gJ1Zpc3RhIG1lbnN1YWwgZGUgdGllbXBvcyByZXBvcnRhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lIChIb3VycyknfSA9ICdOw7ptZXJvIGRlIGhvcmFzIGV4dHJhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSAodGhpcyBtb250aCknfSA9ICdIb3JhcyBleHRyYXMgdHJhYmFqYWRhcyAoZXN0ZSBtZXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0b3RhbCknfSA9ICdUb3RhbCBkZSBob3JhcyBleHRyYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtYWluaW5nIG92ZXJ0aW1lIGxlYXZlJ30gPSAnSG9yYXMgcmVzdGFudGVzIHBhcmEgYXVzZW50YXJzZSBwb3IgaGFiZXIgdHJhYmFqYWRvIGhvcmFzIGV4dHJhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiAoRGF5cyknfSA9ICdWYWNhY2lvbmVzIChkw61hcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gdGFrZW4gKHRoaXMgbW9udGgpJ30gPSAnVmFjYWNpb25lcyAoZXN0ZSBtZXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHRha2VuICh0b3RhbCknfSA9ICdWYWNhY2lvbmVzIHRvbWFkYXMgKHRvdGFsKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgdmFjYXRpb24nfSA9ICdEw61hcyBkZSB2YWNhY2lvbmVzIHJlc3RhbnRlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIExlYXZlIChEYXlzKSd9ID0gJ0F1c2VuY2lhIHBvciBlbmZlcm1lZGFkIChkw61hcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBsZWF2ZSB0YWtlbiAodGhpcyBtb250aCknfSA9ICdBdXNlbmNpYXMgcG9yIGVuZmVybWVkYWQgKGVzdGUgbWVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0b3RhbCknfSA9ICdBdXNlbmNpYXMgcG9yIGVuZmVybWVkYWQgKHRvdGFsKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmV2aW91cyBtb250aCd9ID0gJ01lcyBhbnRlcmlvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXh0IG1vbnRoJ30gPSAnTWVzIHNpZ3VpZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXknfSA9ICdEw61hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZWtkYXknfSA9ICdEw61hIGRlIGxhIHNlbWFuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JraW5nIEhvdXJzJ30gPSAnSG9yYXMgdHJhYmFqYWRhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3RhbCB3b3JrZWQgaG91cnMnfSA9ICdUb3RhbCBkZSBob3JhcyB0cmFiYWphZGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXJcJ3MgcHJvamVjdCBvdmVydmlldyd9ID0gJ1Zpc3RhIGRlIHByb3llY3RvIGRlIHVzdWFyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgKG1vbnRobHkpJ30gPSAnSG9yYXMgKG1lbnN1YWxlcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgKExpZmV0aW1lKSd9ID0gJ0hvcmFzICh0aWVtcG8gZGUgdmlkYSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhbmQgdG90YWwnfSA9ICdUb3RhbCBuZXRvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nUHJvamVjdFJlcG9ydGluZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCByZXBvcnQnfSA9ICdSZXBvcnRlIGRlIHByb3llY3RvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nUmVwb3J0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIHJlcG9ydGluZyd9ID0gJ1JlcG9ydGUgZGUgdGllbXBvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb250aCBOYXZpZ2F0aW9uJ30gPSAnTmF2ZWdhY2nDs24gcG9yIG1lcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIHJlcG9ydHMnfSA9ICdSZXBvcnRlcyBkZSB1c3VhcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbnRobHkgdG90YWwnfSA9ICdUb3RhbCBtZW5zdWFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpZmV0aW1lIHRvdGFsJ30gPSAnVGllbXBvIHRvdGFsIGRlIHZpZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgbGVhdmUnfSA9ICdBdXNlbmNpYSBwb3IgaGFiZXIgdHJhYmFqYWRvIGhvcmFzIGV4dHJhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbid9ID0gJ1ZhY2FjaW9uZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBsZWF2ZSd9ID0gJ0F1c2VuY2lhIHBvciBlbmZlcm1lZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHJlbWFpbmluZyd9ID0gJ0TDrWFzIGxpYnJlcyByZXN0YW50ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCByZXBvcnRzJ30gPSAnUmVwb3J0ZXMgZGUgcHJveWVjdG8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdTZXR0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgQWNjb3VudGluZyBQcm9qZWN0IFNldHRpbmdzJ30gPSAnTW9kaWZpY2FyIGxhIGNvbmZpZ3VyYWNpw7NuIGRlbCBwcm95ZWN0byBkZSBjb250YWJpbGlkYWQgZGUgdGllbXBvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgcHJvamVjdCd9ID0gJ0FncmVnYXIgcHJveWVjdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFByb2plY3QnfSA9ICdBZ3JlZ2FyIFByb3llY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUHJvamVjdCBTZXR0aW5ncyd9ID0gJ01vZGlmaWNhciBsYSBDb25maWd1cmFjacOzbiBkZWwgUHJveWVjdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3Qgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICdZYSBleGlzdGUgdW4gcHJveWVjdG8gY29uIGVzdGUgbm9tYnJlLiBQb3IgZmF2b3IsIGVsaWphIHVubyBkaWZlcmVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFNldHRpbmdzJ30gPSAnTW9kaWZpY2FyIGxhIENvbmZpZ3VyYWNpw7NuIGRlIGxhIENvbnRhYmlsaWRhZCBkZSBUaWVtcG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRhc2snfSA9ICdBZ3JlZ2FyIHRhcmVhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB1c2VyJ30gPSAnVXN1YXJpbyBudWV2byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFByb2plY3RzJ30gPSAnRmlsdHJvIHBhcmEgUHJveWVjdG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgVGFza3MnfSA9ICdGaWx0cm8gcGFyYSBUYXJlYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBVc2Vycyd9ID0gJ0ZpbHRybyBwYXJhIFVzdWFyaW9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgTGlzdCd9ID0gJ0xpc3RhIGRlIFByb3llY3Rvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIExpc3QnfSA9ICdMaXN0YSBkZSBUYXJlYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFRhc2snfSA9ICdBZ3JlZ2FyIFRhcmVhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGFzayBTZXR0aW5ncyd9ID0gJ01vZGlmaWNhciBsYSBDb25maWd1cmFjacOzbiBkZSBsYSBUYXJlYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSBpcyBhbHJlYWR5IGEgdGFzayB3aXRoIHRoaXMgbmFtZS4gUGxlYXNlLCBjaG9vc2UgYSBkaWZmZXJlbnQgb25lLid9ID0gJ1lhIGV4aXN0ZSB1bmEgdGFyZWEgY29uIGVzdGUgbm9tYnJlLiBQb3IgZmF2b3IsIGVsaWphIHVubyBkaWZlcmVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgTGlzdCd9ID0gJ0xpc3RhIGRlIFVzdWFyaW9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBVc2VyIFNldHRpbmdzJ30gPSAnQ29uZmlndXJhY2nDs24gZGUgVXN1YXJpbyBOdWV2byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFVzZXIgU2V0dGluZ3MnfSA9ICdNb2RpZmljYXIgbGEgQ29uZmlndXJhY2nDs24gZGVsIFVzdWFyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudHMnfSA9ICdDb21lbnRhcmlvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IE92ZXJ0aW1lJ30gPSAnTW9zdHJhciBob3JhcyBleHRyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvdyBwcm9qZWN0IGNyZWF0aW9uJ30gPSAnUGVybWl0aXIgY3JlYWNpw7NuIGRlIHByb3llY3Rvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgQmVnaW4nfSA9ICdQZXJpb2RvIGRlIGluaWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgRW5kJ30gPSAnUGVyaW9kbyBkZSBmaW5hbGl6YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgb2YgVmFjYXRpb24nfSA9ICdEw61hcyBkZSBWYWNhY2lvbmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIHBlciBXZWVrJ30gPSAnSG9yYXMgcG9yIFNlbWFuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdXRob3JpemVkIE92ZXJ0aW1lJ30gPSAnVGllbXBvIEV4dHJhIEF1dG9yaXphZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIGVuZCBtdXN0IGJlIGFmdGVyIHBlcmlvZCBiZWdpbi4nfSA9ICdFbCBwZXJpb2RvIGRlIGZpbmFsaXphY2nDs24gZGViZSBzZXIgcG9zdGVyaW9yIGFsIGRlIGluaWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdGltZSBwZXJpb2RzIGZvdW5kLid9ID0gJ05vIHNlIGVuY29udHJhcm9uIHBlcmlvZG9zIGRlIHRpZW1wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRpbWUgcGVyaW9kJ30gPSAnQWdyZWdhciBwZXJpb2RvIGRlIHRpZW1wbyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1ZpZXcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZpZXcgVGltZSBSZWNvcmQnfSA9ICdWZXIgcmVnaXN0cm8gZGUgdGllbXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZpZXcgb2YgJ30gPSAnUmVzdW1lbiBkZSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSBuYXZpZ2F0aW9uJ30gPSAnTmF2ZWdhY2nDs24gcG9yIGZlY2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRhdGEgZm91bmQgZm9yIHRoaXMgZGF5Lid9ID0gJ05vIHNlIGVuY29udHJhcm9uIGRhdG9zIGRlIGVzdGUgZMOtYS4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cyBmb3IgdGhlIHVzZXIuJ30gPSAnTcOzZHVsbyBkZSBub3RpZmljYWNpw7NuIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUsIG5lY2VzYXJpbyBwYXJhIHZpc3VhbGl6YXIgZWwgbsO6bWVybyBkZSBkw61hcyBpbmNvbXBsZXRvcyBkZSB1biB1c3VhcmlvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG5hbWUgZm9yIG5ldyBhY3Rpb25zLid9ID0gJ05vbWJyZSBwb3IgZGVmZWN0byBwYXJhIGFjY2lvbmVzIG51ZXZhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBuYW1lIGZvciBuZXcgcHJvamVjdHMuJ30gPSAnTm9tYnJlIHBvciBkZWZlY3RvIHBhcmEgcHJveWVjdG9zIG51ZXZvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIGVuZC4nfSA9ICdDb25maWd1cmFjacOzbiBwb3IgZGVmZWN0byBwYXJhIGxhIGZlY2hhIGRlIGZpbmFsaXphY2nDs24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGF0ZSBzdGFydC4nfSA9ICdDb25maWd1cmFjacOzbiBwb3IgZGVmZWN0byBwYXJhIGxhIGZlY2hhIGRlIGluaWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBsZWF2ZSBkYXlzLid9ID0gJ0NvbmZpZ3VyYWNpw7NuIHBvciBkZWZlY3RvIHBhcmEgbGFzIGZhbHRhcyAoZMOtYXMgZGUgYXVzZW5jaWEpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIG92ZXJ0aW1lLid9ID0gJ0NvbmZpZ3VyYWNpw7NuIHBvciBkZWZlY3RvIHBhcmEgbGFzIGhvcmFzIGV4dHJhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciB0aGUgc3RhbmRhcmQgd2Vla2x5IGhvdXJzLid9ID0gJ0NvbmZpZ3VyYWNpw7NuIHBvciBkZWZlY3RvIHBhcmEgbGFzIGhvcmFzIHNlbWFuYWxlcyBlc3TDoW5kYXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgYWN0aW9ucy4nfSA9ICdFc3RhZG8gcG9yIGRlZmVjdG8gcGFyYSBhY2Npb25lcyBudWV2YXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgcHJvamVjdHMuJ30gPSAnRXN0YWRvIHBvciBkZWZlY3RvIHBhcmEgcHJveWVjdG9zIG51ZXZvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0dXMgZm9yIG5ldyB1c2Vycy4nfSA9ICdFc3RhZG8gcG9yIGRlZmVjdG8gcGFyYSB1c3VhcmlvcyBudWV2b3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHByb2plY3RzIGZvciB3aGljaCBhIHJlbWFyayBpcyByZXF1aXJlZC4gSWYgdGhlIFJlZ0V4cCBtYXRjaGVzIG9uIHRoZSBwcm9qZWN0LCB5b3UgaGF2ZSB0byBpbnNlcnQgYSByZW1hcmsgdG9vLiBUaGUgUmVnRXhwIHVzZSB0aGUgc214IHBhcmFtZXRlci4nfSA9ICdEZWZpbmUgcGFyYSBjdcOhbGVzIHByb3llY3RvcyBlcyBvYmxpZ2F0b3JpYSBsYSBpbnNlcmNpw7NuIGRlIGNvbWVudGFyaW9zLiBTaSBsYSBleHByZXNpw7NuIHJlZ3VsYXIgY29pbmNpZGUgY29uIGVsIHByb3llY3RvLCBzZSB0aWVuZSBxdWUgZXNjcmliaXIgdW4gY29tZW50YXJpby4gTGEgZXhwcmVzacOzbiByZWd1bGFyIHVzYSBlbCBwYXLDoW1ldHJvIHNteC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aW1lIGFjY291bnRpbmcgc2V0dGluZ3MnfSA9ICdNb2RpZmljYXIgbGEgY29uZmlndXJhY2nDs24gZGUgbGEgY29udGFiaWxpZGFkIGRlIHRpZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgcmVjb3JkJ30gPSAnTW9kaWZpY2FyIHJlZ2lzdHJvIGRlIHRpZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3IgaG93IG1hbnkgZGF5cyBhZ28geW91IGNhbiBpbnNlcnQgd29ya2luZyB1bml0cy4nfSA9ICdFc3BlY2lmaWNhIGVsIG7Dum1lcm8gbcOheGltbyBkZSBkw61hcyBwYXJhIHJlZ2lzdHJhciBob3JhcyBkZSB0cmFiYWpvIGF0cmFzYWRhcyAocG9yIGVqZW1wbG86IDEwIGTDrWFzIGRlIGFudGlnw7xlZGFkKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZW5hYmxlZCwgdGhlIGRyb3Bkb3duIGVsZW1lbnRzIGluIHRoZSBlZGl0IHNjcmVlbiBhcmUgY2hhbmdlZCB0byBhdXRvY29tcGxldGlvbiBmaWVsZHMuJ30gPSAnU2kgc2UgaGFiaWxpdGEsIGxvcyBlbGVtZW50b3MgZGVzcGxlZ2FibGVzIGRlIGxhIHZlbnRhbmEgZGUgZWRpY2nDs24gc2UgY2FtYmlhbiBwb3IgY2FtcG9zIGRlIGF1dG9jb21wbGV0YWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgYWZ0ZXIgd2hpY2ggdGhlIHdvcmtpbmcgdW5pdHMgaGF2ZSB0byBiZSBpbnNlcnRlZC4nfSA9ICdOw7ptZXJvIG3DoXhpbW8gZGUgZMOtYXMgbGFib3JhbGVzIGRlc3B1w6lzIGRlIGxvcyBjdWFsZXMgZXMgb2JsaWdhdG9yaW8gcmVwb3J0YXIgbGFzIGhvcmFzIHRyYWJhamFkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIHdvcmtpbmcgZGF5cyB3aXRob3V0aCB3b3JraW5nIHVuaXRzIGVudHJ5IGFmdGVyIHdoaWNoIGEgd2FybmluZyB3aWxsIGJlIHNob3duLid9ID0gJ07Dum1lcm8gbcOheGltbyBkZSBkw61hcyBsYWJvcmFsZXMgc2luIHJlZ2lzdHJvIGRlIGhvcmFzIHRyYWJhamFkYXMgZGVzcHXDqXMgZGUgbG9zIGN1YWxlcyBzZSBtb3N0cmFyw6EgdW5hIGFkdmVydGVuY2lhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHRpbWUgcmVwb3J0aW5nJ30gPSAnUmVwb3J0ZSBkZSB0aWVtcG9zIGRlIHByb3llY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBhY3Rpb24gbGlzdCBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgcHJvamVjdC4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBhY3Rpb24ocykuJ30gPSAnRXhwcmVzaW9uZXMgcmVndWxhcmVzIHBhcmEgcmVzdHJpbmdpciBsYSBsaXN0YSBkZSBhY2Npb25lcywgZGUgYWN1ZXJkbyBhbCBwcm95ZWN0byBzZWxlY2Npb25hZG8uIEtleSBjb250aWVuZSBsYSBleHByZXNpw7NuIHJlZ3VsYXIgcGFyYSBsb3MgcHJveWVjdG9zIHkgQ29udGVudCwgbGFzIGV4cHJlc2lvbmVzIHJlZ3VsYXJlcyBwYXJhIGxhcyBhY2Npb25lcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVndWxhciBleHByZXNzaW9ucyBmb3IgY29uc3RyYWluaW5nIHByb2plY3QgbGlzdCBhY2NvcmRpbmcgdG8gdXNlciBncm91cHMuIEtleSBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHByb2plY3QocyksIGNvbnRlbnQgY29udGFpbnMgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZ3JvdXBzLid9ID0gJ0V4cHJlc2lvbmVzIHJlZ3VsYXJlcyBwYXJhIHJlc3RyaW5naXIgbGEgbGlzdGEgZGUgcHJveWVjdG9zLCBkZSBhY3VlcmRvIGEgbG9zIGdydXBvcyBkZSB1c3Vhcmlvcy4gS2V5IGNvbnRpZW5lIGxhIGV4cHJlc2nDs24gcmVndWxhciBwYXJhIGxvcyBwcm95ZWN0b3MgeSBDb250ZW50LCB1bmEgbGlzdGEgZGUgZ3J1cG9zLCBzZXBhcmFkb3MgcG9yIGNvbWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgaWYgd29ya2luZyBob3VycyBjYW4gYmUgaW5zZXJ0ZWQgd2l0aG91dCBzdGFydCBhbmQgZW5kIHRpbWVzLid9ID0gJ0VzcGVjaWZpY2Egc2kgZXMgcG9zaWJsZSBpbnNlcnRhciBsYXMgaG9yYXMgdHJhYmFqYWRhcyBzaW4gZGVmaW5pciBsb3MgdGllbXBvcyBkZSBpbmljaW8geSBmaW5hbGl6YWNpw7NuIGRlIGxhcyB0YXJlYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbW9kdWxlIGZvcmNlcyBpbnNlcnRzIGluIFRpbWVBY2NvdW50aW5nLid9ID0gJ0VzdGUgbcOzZHVsbyBoYWNlIG9ibGlnYXRvcmlhIGxhIGluc2VyY2nDs24gZGUgaG9yYXMgdHJhYmFqYWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBub3RpZmljYXRpb24gbW9kdWxlIGdpdmVzIGEgd2FybmluZyBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMuJ30gPSAnTcOzZHVsbyBkZSBub3RpZmljYWNpw7NuIHF1ZSBtdWVzdHJhIHVuYSBhZHZlcnRlbmNpYSBzaSBoYXkgZGVtYXNpYWRvcyBkw61hcyBzaW4gcmVnaXN0cm8gZGUgaG9yYXMgdHJhYmFqYWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBhY2NvdW50aW5nLid9ID0gJ0NvbnRhYmlsaWRhZCBkZSB0aWVtcG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIHVzZSBpZiBzb21lIGFjdGlvbnMgcmVkdWNlZCB0aGUgd29ya2luZyBob3VycyAoZm9yIGV4YW1wbGUsIGlmIG9ubHkgaGFsZiBvZiB0aGUgdHJhdmVsaW5nIHRpbWUgaXMgcGFpZCBLZXkgPT4gdHJhdmVsaW5nOyBDb250ZW50ID0+IDUwKS4nfSA9ICdTZSB1c2Egc2kgYWxndW5hcyBhY2Npb25lcyByZWR1Y2VuIGVsIG7Dum1lcm8gZGUgaG9yYXMgdHJhYmFqYWRhcyAocG9yIGVqZW1wbG86IHNpIHPDs2xvIHNlIHBhZ2EgbGEgbWl0YWQgZGVsIHRpZW1wbyBkZSB2aWFqZSBwdWVkZSBlc3BlY2lmaWNhcnNlIEtleSA9PiBWaWFqZTsgQ29udGVudCA9PiA1MCkuJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb24nfSA9ICdMdW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHVlJ30gPSAnTWFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZCd9ID0gJ01pw6lyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RodSd9ID0gJ0p1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmknfSA9ICdWaWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdCd9ID0gJ1PDoWInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VuJ30gPSAnRG9tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0phbnVhcnknfSA9ICdFbmVybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZWJydWFyeSd9ID0gJ0ZlYnJlcm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFyY2gnfSA9ICdNYXJ6byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHJpbCd9ID0gJ0FicmlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heSd9ID0gJ01heW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVuZSd9ID0gJ0p1bmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bHknfSA9ICdKdWxpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdWd1c3QnfSA9ICdBZ29zdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VwdGVtYmVyJ30gPSAnU2VwdGllbWJyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPY3RvYmVyJ30gPSAnT2N0dWJyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3ZlbWJlcid9ID0gJ05vdmllbWJyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNlbWJlcid9ID0gJ0RpY2llbWJyZSc7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgcHJvamVjdHMnfSA9ICdNb3N0cmFyIHRvZG9zIGxvcyBwcm95ZWN0b3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2YWxpZCBwcm9qZWN0cyd9ID0gJ01vc3RyYXIgdG9kb3MgbG9zIHByb3llY3RvcyB2w6FsaWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lQWNjb3VudGluZyd9ID0gJ0NvbnRhYmlsaWRhZCBEZSBUaWVtcG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aW9ucyd9ID0gJ0FjY2lvbmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgdXBkYXRlZCEnfSA9ICfCoVVzdWFyaW8gYWN0dWFsaXphZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgYWRkZWQhJ30gPSAnwqFVc3VhcmlvIGHDsWFkaWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IGFkZGVkISd9ID0gJ8KhUHJveWVjdG8gYcOxYWRpZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgdXBkYXRlZCEnfSA9ICfCoVByb3llY3RvIGFjdHVhbGl6YWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIGFkZGVkISd9ID0gJ8KhVGFyZWEgYcOxYWRpZGEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgdXBkYXRlZCEnfSA9ICfCoVRhcmVhIGFjdHVhbGl6YWRhISc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmVwb3J0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzZnVsIGluc2VydCEnfSA9ICfCoUluc2VyY2nDs24gZXhpdG9zYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNhdmUgc2V0dGluZ3MsIGJlY2F1c2UgYSBkYXkgaGFzIG9ubHkgMjQgaG91cnMhJ30gPSAnwqFJbXBvc2libGUgZ3VhcmRhciBsYSBjb25maWd1cmFjacOzbiBwb3JxdWUgdW4gZMOtYSBzw7NsbyB0aWVuZSAyNCBob3JhcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGRlbGV0ZSBXb3JraW5nIFVuaXRzISd9ID0gJ8KhSW1wb3NpYmxlIGVsaW1pbmFyIGxhcyB1bmlkYWRlcyBkZSB0cmFiYWpvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgaW5zZXJ0IHlvdXIgd29ya2luZyBob3VycyEnfSA9ICfCoUZhdm9yIGRlIGluc2VydGFyIHN1cyBob3JhcyBkZSB0cmFiYWpvISc7Cn0KCjE7Cg==
77u/IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9odV9UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omh1X1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICdCaXp0b3NhbiB0w7Zyw7ZsbmkgYWthcmphIGEgbWFpIG5hcCBJZMO1RWxzesOhbW9sw6Fzw6F0Pyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ0VkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBSZWNvcmQnfSA9ICdJZMO1IGJlamVneXrDqXMgc3plcmtlc3p0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHNldHRpbmdzJ30gPSAnUHJvamVrdCBiZcOhbGzDrXTDoXNvayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIE5hdmlnYXRpb24nfSA9ICdEw6F0dW0gbmF2aWfDoWNpw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJldmlvdXMgZGF5J30gPSAnRWzDtXrDtSBuYXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBkYXknfSA9ICdLw7Z2ZXRrZXrDtSBuYXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyB3aXRob3V0IGVudHJpZXMnfSA9ICdCZWplZ3l6w6lzIG7DqWxrw7xsaSBuYXBvayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmaWVsZHMgYXJlIG1hcmtlZCB3aXRoIGEgIioiLid9ID0gJ0EgIioiLWFsIGplbMO2bHQgbWV6w7VrIGtpdMO2bHTDqXNlIGvDtnRlbGV6w7UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIHRvIGZpbGwgaW4gc3RhcnQgYW5kIGVuZCB0aW1lIG9yIGEgdGltZSBwZXJpb2QuJ30gPSAnS2kga2VsbCB0w7ZsdGVuaWUgYSBrZXpkw7Ugw6lzIGJlZmVqZXrDtSBpZMO1cG9udG90IHZhZ3kgYXogaWTDtXRhcnRhbW90Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrJ30gPSAnRmVsYWRhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1hcmsnfSA9ICdNZWdqZWd5esOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIE5hdmlnYXRpb24nfSA9ICdEw6F0dW0gbmF2aWfDoWNpw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGFkZCBhIHJlbWFyayB3aXRoIG1vcmUgdGhhbiA4IGNoYXJhY3RlcnMhLid9ID0gJ0vDqXJlbSBhZGpvbiBtZWcgZWd5IDgga2FyYWt0ZXJuw6lsIGhvc3N6YWJiIG1lZ2plZ3l6w6lzdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVnYXRpdmUgdGltZXMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ05lZ2F0w612IGlkw7VrIG5lbSBtZWdlbmdlZGV0dGVrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBlYXRlZCBob3VycyBhcmUgbm90IGFsbG93ZWQuIFN0YXJ0IHRpbWUgbWF0Y2hlcyBhbm90aGVyIGludGVydmFsLid9ID0gJ0lzbcOpdGzDtWTDtSDDs3LDoWsgbWVnYWTDoXNhIG5lbSBtZWdlbmdlZGV0dC4gQSBrZXpkw7UgaWTDtXBvbnQgZWd5ZXppayBlZ3kgbcOhc2lrIGludGVydmFsdW1tYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCB0aW1lIG11c3QgYmUgYWZ0ZXIgc3RhcnQgdGltZS4nfSA9ICdBIGJlZmVqZXrDtSBpZMO1cG9udCBrw6lzw7ViYmkga2VsbCBsZWd5ZW4sIG1pbnQgYSBrZXpkw7UgaWTDtXBvbnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGVhdGVkIGhvdXJzIGFyZSBub3QgYWxsb3dlZC4gRW5kIHRpbWUgbWF0Y2hlcyBhbm90aGVyIGludGVydmFsLid9ID0gJ0lzbcOpdGzDtWTDtSDDs3LDoWsgbWVnYWTDoXNhIG5lbSBsZWhldHPDqWdlcy4gQSBiZWZlamV6w7UgaWTDtXBvbnQgZWd5ZXppayBtw6FzIGlkw7VzemFra2FsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgaXMgYmlnZ2VyIHRoYW4gdGhlIGludGVydmFsIGJldHdlZW4gc3RhcnQgYW5kIGVuZCB0aW1lcyEnfSA9ICdBeiBpZMO1dGFydGFtIG5hZ3lvYmIsIG1pbnQgYSBrZXpkw7Ugw6lzIGJlamV6w7UgaWTDtXBvbnQga8O2enRpIGlkw7UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgcGVyaW9kISBBIGRheSBoYXMgb25seSAyNCBob3Vycy4nfSA9ICfDiXJ2w6lueXRlbGVuIGlkw7V0YXJ0YW0hIEEgbmFwIGNzYWsgMjQgw7Nyw6Fiw7NsIMOhbGwhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdmFsaWQgcGVyaW9kIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJ30gPSAnQXogw6lydsOpbnllcyBpZMO1dGFydGFtbmFrIG5hZ3lvYmJuYWsga2VsbCBsZW5uaWUgbnVsbMOhbsOhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBwZXJpb2QhIE5lZ2F0aXZlIHBlcmlvZHMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ8OJcnbDqW55dGVsZW4gaWTDtXRhcnRhbSEgTmVnYXTDrXYgaWTDtXRhcnRhbSBuZW0gbWVnZW5nZWRldHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBvbmUgcm93J30gPSAnU29yIGhvenrDoWFkw6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3RhbCd9ID0gJ8OWc3N6ZXNlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbiB2YWNhdGlvbid9ID0gJ1N6YWJhZHPDoWdvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG9ubHkgc2VsZWN0IG9uZSBjaGVja2JveCBlbGVtZW50ISd9ID0gJ0NzYWsgZWd5IGplbMO2bMO1bsOpZ3l6ZXRldCB2w6FsYXN6dGhhdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gc2ljayBsZWF2ZSd9ID0gJ0JldGVnc3phYmFkc8OhZ29uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09uIG92ZXJ0aW1lIGxlYXZlJ30gPSAnVMO6bMOzcmEgbGV0w7ZsdMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgaXRlbXMnfSA9ICfDlnNzemVzIGJlamVneXrDqXMgbWVnamVsZW7DrXTDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUaW1lIEFjY291bnRpbmcgRW50cnknfSA9ICdJZMO1RWxzesOhbW9sw6FzIGJlamVneXrDqXMgdMO2cmzDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpcm0gaW5zZXJ0J30gPSAnQmVzesO6csOhcyBqw7N2w6FoYWd5w6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIHNpY2sgbGVhdmU/J30gPSAnQml6dG9zYW4gZG9sZ296b3R0LCBtaWvDtnpiZW4gYmV0ZWdzemFiYWTDoXNnb24gdm9sdD8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiB2YWNhdGlvbj8nfSA9ICdCaXp0b3NhbiBkb2xnb3pvdHQsIG1pa8O2emJlbiBiZXRlZ3N6YWJhZMOhc2dvbiB2b2x0Pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIG92ZXJ0aW1lIGxlYXZlPyd9ID0gJ0JpenRvc2FuIGRvbGdvem90dCwgbWlrw7Z6YmVuIHTDumzDs3LDoXQgdMO2bHTDtnR0IGxlPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIG1vcmUgdGhhbiAxNiBob3Vycz8nfSA9ICdCaXp0b3NhbiB0w7ZiYmV0IGRvbGdvem90dCBtaW50IDE2IMOzcmE/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nT3ZlcnZpZXcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgcmVwb3J0aW5nIG1vbnRobHkgb3ZlcnZpZXcnfSA9ICdJZMO1LWtpbXV0YXTDoXMgaGF2aSDDtnNzemVzw610w7UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKEhvdXJzKSd9ID0gJ1TDumzDs3JhICjDs3LDoWspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0aGlzIG1vbnRoKSd9ID0gJ1TDumzDs3JhIChlYmJlbiBhIGjDs25hcGJhbiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKHRvdGFsKSd9ID0gJ1TDumzDs3JhICjDtnNzemVzZW4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbWFpbmluZyBvdmVydGltZSBsZWF2ZSd9ID0gJ0xldMO2bHRoZXTDtSB0w7psw7NyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiAoRGF5cyknfSA9ICdTemFiYWRzw6FnIChuYXApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ1N6YWJhZHPDoWcgKGViYmVuIGEgaMOzbmFwYmFuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiB0YWtlbiAodG90YWwpJ30gPSAnU3phYmFkc8OhZyAow7Zzc3plc2VuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgdmFjYXRpb24nfSA9ICdGZW5ubWFyYWTDsyBzemFiYWRzw6FnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgTGVhdmUgKERheXMpJ30gPSAnQmV0ZWdzemFiYWRzw6FnIChuYXApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUgdGFrZW4gKHRoaXMgbW9udGgpJ30gPSAnQmV0ZWdzemFiYWRzw6FnIChlYmJlbiBhIGjDs25hcGJhbiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBsZWF2ZSB0YWtlbiAodG90YWwpJ30gPSAnQmV0ZWdzemFiYWRzw6FnICjDtnNzemVzZW4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXZpb3VzIG1vbnRoJ30gPSAnRWzDtXrDtSBow7NuYXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBtb250aCd9ID0gJ0vDtnZldGtlesO1IGjDs25hcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXknfSA9ICdOYXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2Vla2RheSd9ID0gJ0jDqXRrw7Z6bmFwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtpbmcgSG91cnMnfSA9ICdNdW5rYWlkw7UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG90YWwgd29ya2VkIGhvdXJzJ30gPSAnw5Zzc3plcyBtdW5rYWlkw7UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlclwncyBwcm9qZWN0IG92ZXJ2aWV3J30gPSAnRmVsaGFzem7DoWzDs2kgcHJvamVrdCDDtnNzemVmb2dsYWzDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3VycyAobW9udGhseSknfSA9ICfDk3LDoWsgKGhhdmkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIChMaWZldGltZSknfSA9ICfDk3LDoWsgKMOpbGV0dGFydGFtKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFuZCB0b3RhbCd9ID0gJ01pbmTDtnNzemVzZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdQcm9qZWN0UmVwb3J0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHJlcG9ydCd9ID0gJ1Byb2pla3Qga3VpbXV0YXTDoXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdSZXBvcnRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgcmVwb3J0aW5nJ30gPSAnSWTDtSBraW11dGF0w6FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbnRoIE5hdmlnYXRpb24nfSA9ICdIw7NuYXAgbmF2aWfDoWNpw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciByZXBvcnRzJ30gPSAnRmVsaGFzem7DoWzDsyBraW11dGF0w6FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbnRobHkgdG90YWwnfSA9ICdIYXZpIMO2c3N6ZXPDrXTDtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWZldGltZSB0b3RhbCd9ID0gJ8OJbGV0dGFydGFtIMO2c3N6ZXPDrXTDtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSBsZWF2ZSd9ID0gJ1TDumzDs3JhIGxldMO2bHTDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24nfSA9ICdTemFiYWRzw6FnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUnfSA9ICdCZXRlZ3N6YWJhZHPDoWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gcmVtYWluaW5nJ30gPSAnSMOhdHJhbMOpdsO1IHTDoXZvbGzDqXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCByZXBvcnRzJ30gPSAnUHJvamVrdCBraW11dGF0w6Fzb2snOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdTZXR0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgQWNjb3VudGluZyBQcm9qZWN0IFNldHRpbmdzJ30gPSAnSWTDtUVsc3rDoW1vbMOhcyBQcm9qZWt0IEJlw6FsbMOtdMOhc29rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBwcm9qZWN0J30gPSAnw5pqIHByb2pla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFByb2plY3QnfSA9ICfDmmogUHJvamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFByb2plY3QgU2V0dGluZ3MnfSA9ICdQcm9qZWt0IEJlw6FsbMOtdMOhc29rIFN6ZXJrZXN6dMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3Qgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICdNw6FyIHZhbiBpbHllbiBuZXbDuyBwcm9qZWt0LCB2w6FsYXNzem9uIG3DoXMgbmV2ZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFNldHRpbmdzJ30gPSAnSWTDtUVsc3rDoW1vbMOhcyBCZcOhbGzDrXTDoXNvayBTemVya2VzenTDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0YXNrJ30gPSAnw5pqIGZlbGFkYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHVzZXInfSA9ICfDmmogZmVsaGFzem7DoWzDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFByb2plY3RzJ30gPSAnUHJvamVrdGVrIFN6w7tyw6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFRhc2tzJ30gPSAnRmVsYWRhdG9rIFN6w7tyw6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFVzZXJzJ30gPSAnRmVsaGFzem7DoWzDs2sgU3rDu3LDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgTGlzdCd9ID0gJ1Byb2pla3QgTGlzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayBMaXN0J30gPSAnRmVsYWRhdCBMaXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgVGFzayd9ID0gJ8OaaiBGZWxhZGF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGFzayBTZXR0aW5ncyd9ID0gJ0ZlbGFkYXQgQmXDoWxsw610w6Fzb2sgU3plcmtlc3p0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSBpcyBhbHJlYWR5IGEgdGFzayB3aXRoIHRoaXMgbmFtZS4gUGxlYXNlLCBjaG9vc2UgYSBkaWZmZXJlbnQgb25lLid9ID0gJ03DoXIgdmFuIGlseWVuIG5ldsO7IGZlbGFkYXQsIHbDoWxhc3N6b24gbcOhcyBuZXZldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBMaXN0J30gPSAnRmVsaGFzem7DoWzDsyBMaXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgVXNlciBTZXR0aW5ncyd9ID0gJ8OaaiBGZWxoYXN6bsOhbMOzIEJlw6FsbMOtdMOhc2FpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVXNlciBTZXR0aW5ncyd9ID0gJ0ZlbGhhc3puw6Fsw7NpIEJlw6FsbMOtdMOhc29rIFN6ZXJrZXN6dMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudHMnfSA9ICdNZWdqZWd5esOpc2VrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgT3ZlcnRpbWUnfSA9ICdNdXRhc3NhIGEgVMO6bMOzcsOhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvdyBwcm9qZWN0IGNyZWF0aW9uJ30gPSAnUHJvamVrdCBsw6l0cmVob3rDoXPDoW5hayBlbmdlZMOpbHllesOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIEJlZ2luJ30gPSAnSWTDtXN6YWsgS2V6ZGV0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgRW5kJ30gPSAnSWTDtXN6YWsgVsOpZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyBvZiBWYWNhdGlvbid9ID0gJ1N6YWJhZG5hcG9rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIHBlciBXZWVrJ30gPSAnw5Nyw6FrIGhldGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXV0aG9yaXplZCBPdmVydGltZSd9ID0gJ0rDs3bDoWhhZ3lvdHQgVMO6bMOzcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIGVuZCBtdXN0IGJlIGFmdGVyIHBlcmlvZCBiZWdpbi4nfSA9ICdBeiBpZMO1c3phayB2w6lnw6luZWsgYSBrZXpkZXRlIHV0w6FuIGtlbGwgbGVubmllLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB0aW1lIHBlcmlvZHMgZm91bmQuJ30gPSAnSWTDtXN6YWsgbmVtIHRhbMOhbGhhdMOzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdGltZSBwZXJpb2QnfSA9ICdJZMO1c3phayBob3p6w6FhZMOhc2EnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdWaWV3CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3IFRpbWUgUmVjb3JkJ30gPSAnSWTDtSBCZWplZ3l6w6lzIG1lZ3Rla2ludMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyBvZiAnfSA9ICdNZWd0ZWtpbnTDqXMgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgbmF2aWdhdGlvbid9ID0gJ0TDoXR1bSBuYXZpZ8OhY2nDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkYXRhIGZvdW5kIGZvciB0aGlzIGRheS4nfSA9ICdOaW5jcyBhZGF0IGVoaGV6IGEgbmFwaG96Lic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGluY29tcGxldGUgd29ya2luZyBkYXlzIGZvciB0aGUgdXNlci4nfSA9ICfDnGd5aW50w6l6w7UgaW50ZXJmYWNlIGZpZ3llbG1lenRldMO1IG1vZHVsIGEga2l0w7ZsdGV0bGVuIG11bmthbmFwb2sgbWVnamVsZW7DrXTDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBuYW1lIGZvciBuZXcgYWN0aW9ucy4nfSA9ICdBeiDDumogYWtjacOzayBhbGFww6lydGVsbWV6ZXR0IG5ldmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbmFtZSBmb3IgbmV3IHByb2plY3RzLid9ID0gJ0F6IMO6aiBwcm9qZWt0ZWsgYWxhcMOpcnRlbG1lemV0dCBuZXZlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIGRhdGUgZW5kLid9ID0gJ0FsYXBiZcOhbGzDrXTDoXMgYSBkw6F0dW0gdsOpZ8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIGRhdGUgc3RhcnQuJ30gPSAnQWxhcGJlw6FsbMOtdMOhcyBhIGTDoXR1bSBrZXpkZXTDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBsZWF2ZSBkYXlzLid9ID0gJ0FsYXBiZcOhbGzDrXTDoXMgYSB0w6F2b2xsw6l0IG5hcGphaWhvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBvdmVydGltZS4nfSA9ICdBbGFwYmXDoWxsw610w6FzIGEgdMO6bMOzcsOhaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIHRoZSBzdGFuZGFyZCB3ZWVrbHkgaG91cnMuJ30gPSAnQWxhcGJlw6FsbMOtdMOhcyBhIG5vcm3DoWwgaGV0aSDDs3LDoWtob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgYWN0aW9ucy4nfSA9ICdBeiDDumogYWtjacOzayBhbGFww6lydGVsbWV6ZXR0IHN0w6F0dXN6YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0dXMgZm9yIG5ldyBwcm9qZWN0cy4nfSA9ICdBeiDDumogcHJvamVrdGVrIGFsYXDDqXJ0ZWxtZXpldHQgc3TDoXR1c3phLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHVzZXJzLid9ID0gJ0F6IMO6aiBmZWxoYXN6bsOhbMOzayBhbGFww6lydGVsbWV6ZXR0IHN0w6F0dXN6YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcHJvamVjdHMgZm9yIHdoaWNoIGEgcmVtYXJrIGlzIHJlcXVpcmVkLiBJZiB0aGUgUmVnRXhwIG1hdGNoZXMgb24gdGhlIHByb2plY3QsIHlvdSBoYXZlIHRvIGluc2VydCBhIHJlbWFyayB0b28uIFRoZSBSZWdFeHAgdXNlIHRoZSBzbXggcGFyYW1ldGVyLid9ID0gJ0FkamEgbWVnIGEgcHJvamVrdGVrZXQsIGFtZWx5ZWtoZXoga8O2dGVsZXrDtSBhIG1lZ2plZ3l6w6lzLiBIYSBhIFJlZ0V4cCBraWZlamV6w6lzIGlsbGVzemtlZGlrIGVneSBwcm9qZWt0cmUsIG1lZyBrZWxsIGFkbmlhIG1lZ2plZ3l6w6lzdC4gQSBSZWdFeHAgYXogc214IHBhcmFtw6l0ZXJ0IGhhc3puw6FsamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGltZSBhY2NvdW50aW5nIHNldHRpbmdzJ30gPSAnSWTDtUVsc3rDoW1vbMOhcyBiZcOhbGzDrXTDoXNvayBzemVya2VzenTDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGltZSByZWNvcmQnfSA9ICdJZMO1IGJlamVneXrDqXMgc3plcmtlc3p0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3IgaG93IG1hbnkgZGF5cyBhZ28geW91IGNhbiBpbnNlcnQgd29ya2luZyB1bml0cy4nfSA9ICdIw6FueSBuYXByYSB2aXNzemFtZW7DtWxlZyB0dWRqYSBtZWdhZG5pIGEgbXVua2FpZMO1dC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZW5hYmxlZCwgdGhlIGRyb3Bkb3duIGVsZW1lbnRzIGluIHRoZSBlZGl0IHNjcmVlbiBhcmUgY2hhbmdlZCB0byBhdXRvY29tcGxldGlvbiBmaWVsZHMuJ30gPSAnSGEgZW5nZWTDqWx5ZXpldHQsIGEgbGVnw7ZyZMO8bMO1IGVsZW1layBoZWx5ZXR0IGF1dG9tYXRpa3VzIGtpZWfDqXN6w610w6lzIGxlc3ogYSBtZXrDtWtuw6lsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgYWZ0ZXIgd2hpY2ggdGhlIHdvcmtpbmcgdW5pdHMgaGF2ZSB0byBiZSBpbnNlcnRlZC4nfSA9ICdNYXhpbXVtIGjDoW55IG5hcCB1dMOhbiBrw7Z0ZWxlesO1IG1lZ2FkbmkgYSBtdW5rYWlkw7V0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgd2l0aG91dGggd29ya2luZyB1bml0cyBlbnRyeSBhZnRlciB3aGljaCBhIHdhcm5pbmcgd2lsbCBiZSBzaG93bi4nfSA9ICdNYXhpbXVtIGjDoW55IG11bmthaWTDtSBtZWdhZMOhc2EgbsOpbGvDvGxpIG11bmthbmFwIHV0w6FuIGplbGVuamVuIG1lZyBmaWd5ZWxtZXp0ZXTDqXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgdGltZSByZXBvcnRpbmcnfSA9ICdQcm9qZWt0IGlkw7Uga2ltdXRhdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWd1bGFyIGV4cHJlc3Npb25zIGZvciBjb25zdHJhaW5pbmcgYWN0aW9uIGxpc3QgYWNjb3JkaW5nIHRvIHNlbGVjdGVkIHByb2plY3QuIEtleSBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHByb2plY3QocyksIGNvbnRlbnQgY29udGFpbnMgcmVndWxhciBleHByZXNzaW9ucyBmb3IgYWN0aW9uKHMpLid9ID0gJ1JlZ3Vsw6FyaXMga2lmZWplesOpcyBhIHByb2pla3RoZXogbWVnZmVsZWzDtSBha2Npw7NrIGxpc3TDoWrDoW5hayBzesO8a8OtdMOpc8OpaGV6LiBBIGt1bGNzIHJlZ3Vsw6FyaXMga2lmZWplesOpc3QgdGFydGFsbWF6IGEgcHJvamVrdGVraGV6LCBhIHRhcnRhbG9tIHJlZ3Vsw6FyaXMga2lmZWplesOpc3QgdGFydGFsbWF6IGF6IGFrY2nDs2tob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBwcm9qZWN0IGxpc3QgYWNjb3JkaW5nIHRvIHVzZXIgZ3JvdXBzLiBLZXkgY29udGFpbnMgcmVndWxhciBleHByZXNzaW9uIGZvciBwcm9qZWN0KHMpLCBjb250ZW50IGNvbnRhaW5zIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGdyb3Vwcy4nfSA9ICdSZWd1bMOhcmlzIGtpZmVqZXrDqXMgYSBmZWxoYXN6bsOhbMOzayBjc29wb3J0asOhbmFrIG1lZ2ZlbGVsw7UgcHJvamVrdGVrIGxpc3TDoWrDoW5hayBzesO8a8OtdMOpc8OpaGV6LiBBIGt1bGNzIHJlZ3Vsw6FyaXMga2lmZWplesOpc3QgdGFydGFsbWF6IGEgcHJvamVrdGVraGV6LCBhIHRhcnRhbG9tIHJlZ3Vsw6FyaXMga2lmZWplesOpc3QgdGFydGFsbWF6IGEgY3NvcG9ydG9rIGxpc3TDoWrDoWhvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIGlmIHdvcmtpbmcgaG91cnMgY2FuIGJlIGluc2VydGVkIHdpdGhvdXQgc3RhcnQgYW5kIGVuZCB0aW1lcy4nfSA9ICdBZGphIG1lZywgaGEgYSBtdW5rYWlkw7UgbWVnYWRoYXTDsyBrZXpkw7Ugw6lzIGJlZmVqZXrDtSBpZMO1cG9udCBuw6lsa8O8bC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBtb2R1bGUgZm9yY2VzIGluc2VydHMgaW4gVGltZUFjY291bnRpbmcuJ30gPSAnRXogYSBtb2R1bCBrw6lueXN6ZXLDrXRpIGF6IElkw7VFbHN6w6Ftb2zDoXMgYmVzesO6csOhc8OhdC4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbm90aWZpY2F0aW9uIG1vZHVsZSBnaXZlcyBhIHdhcm5pbmcgaWYgdGhlcmUgYXJlIHRvbyBtYW55IGluY29tcGxldGUgd29ya2luZyBkYXlzLid9ID0gJ0V6IGEgZmlneWVsbWV6dGV0w7UgbW9kdWwgamVsemksIGhhIHTDumwgc29rIGtpdMO2bHRldGxlbiBtdW5rYW5hcCB2YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgYWNjb3VudGluZy4nfSA9ICdJZMO1RWxzesOhbW9sw6FzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyB1c2UgaWYgc29tZSBhY3Rpb25zIHJlZHVjZWQgdGhlIHdvcmtpbmcgaG91cnMgKGZvciBleGFtcGxlLCBpZiBvbmx5IGhhbGYgb2YgdGhlIHRyYXZlbGluZyB0aW1lIGlzIHBhaWQgS2V5ID0+IHRyYXZlbGluZzsgQ29udGVudCA9PiA1MCkuJ30gPSAnSGFzem7DoWxqYSwgaGEgdmFsYW1lbHlpayBha2Npw7MgY3PDtmtrZW50aSBhIG11bmthw7Nyw6FrYXQgKHDDqWxkw6F1bCBoYSBjc2FrIGF6IHV0YXrDoXMgZmVsZSBrZXLDvGwga2lmaXpldMOpc3JlLCBLdWxjcyA9PiBVdGF6w6FzOyBUYXJ0YWxvbSA9PjUwKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgc3RhdGlzdGljcyBtb2R1bGUgbWF5IGdlbmVyYXRlIHRpbWUgYWNjb3VudGluZyBpbmZvcm1hdGlvbi4nfSA9ICdNZWdoYXTDoXJvenphLCBoYSBhIHN0YXRpc3p0aWthIG1vZHVsIGdlbmVyw6FsaGF0IElkw7VFbHN6w6Ftb2zDoXMgaW5mb3Jtw6FjacOza2F0Lic7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uJ30gPSAnSCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUdWUnfSA9ICdLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZCd9ID0gJ1N6ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaHUnfSA9ICdDcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmknfSA9ICdQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdCd9ID0gJ1N6byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdW4nfSA9ICdWJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0phbnVhcnknfSA9ICdKYW51w6FyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZlYnJ1YXJ5J30gPSAnRmVicnXDoXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFyY2gnfSA9ICdNw6FyY2l1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHJpbCd9ID0gJ8OBcHJpbGlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heSd9ID0gJ03DoWp1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdW5lJ30gPSAnSsO6bml1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdWx5J30gPSAnSsO6bGl1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdWd1c3QnfSA9ICdBdWd1c3p0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VwdGVtYmVyJ30gPSAnU3plcHRlbWJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPY3RvYmVyJ30gPSAnT2t0w7NiZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm92ZW1iZXInfSA9ICdOb3ZlbWJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNlbWJlcid9ID0gJ0RlY2VtYmVyJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCBwcm9qZWN0cyd9ID0gJ0F6IMO2c3N6ZXMgcHJvamVrdCBtZWdqZWxlbsOtdMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2YWxpZCBwcm9qZWN0cyd9ID0gJ0F6IMOpcnbDqW55ZXMgcHJvamVrdGVrIG1lZ2plbGVuw610w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lQWNjb3VudGluZyd9ID0gJ0lkw7VFbHN6w6Ftb2zDoXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aW9ucyd9ID0gJ0FrY2nDs2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciB1cGRhdGVkISd9ID0gJ0ZlbGhhc3puw6Fsw7MgbcOzZG9zw610dmEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgYWRkZWQhJ30gPSAnRmVsaGFzem7DoWzDsyBob3p6w6FhZHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IGFkZGVkISd9ID0gJ1Byb2pla3QgaG96esOhYWR2YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCB1cGRhdGVkISd9ID0gJ1Byb2pla3QgbcOzZG9zw610dmEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgYWRkZWQhJ30gPSAnRmVsYWRhdCBob3p6w6FhZHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIHVwZGF0ZWQhJ30gPSAnRmVsYWRhdCBtw7Nkb3PDrXR2YSEnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGRlbGV0ZSBXb3JraW5nIFVuaXRzISd9ID0gJ05lbSBsZWhldCB0w7Zyw7ZsbmkgYSBtdW5rYWlkw7V0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2F2ZSBzZXR0aW5ncywgYmVjYXVzZSBhIGRheSBoYXMgb25seSAyNCBob3VycyEnfSA9ICdOZW0gbGVoZXQgbWVudGVuaSBhIGJlw6FsbMOtdMOhc29rYXQsIGEgbmFwIGNzYWsgMjQgw7Nyw6Fiw7NsIMOhbGwhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBpbnNlcnQgeW91ciB3b3JraW5nIGhvdXJzISd9ID0gJ0vDqXJlbSBhZGphIG1lZyBhIG11bmthaWRlasOpdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnS2ltdXRhdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzZnVsIGluc2VydCEnfSA9ICdTaWtlcmVzZW4gaG96esOhYWR2YSEnOwoKfQoKMTsK
77u/IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9pdF9UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Oml0X1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICdWdW9pIHZlcmFtZW50ZSBjYW5jZWxsYXJlIGxhIHJlbmRpY29udGF6aW9uZSB0ZW1wb3JhbGUgZGkgb2dnaSA/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUaW1lIFJlY29yZCd9ID0gJ01vZGlmaWNhIGxhIHJlbmRpY29udGF6aW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHNldHRpbmdzJ30gPSAnSW1wb3N0YXppb25pIGRlbCBwcm9nZXR0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmV2aW91cyBkYXknfSA9ICdHaW9ybm8gcHJlY2VkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXh0IGRheSd9ID0gJ0dpb3JubyBzdWNjZXNzaXZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgd2l0aG91dCBlbnRyaWVzJ30gPSAnR2lvcm5pIHNlbnphIGluZm9ybWF6aW9uaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmaWVsZHMgYXJlIG1hcmtlZCB3aXRoIGEgIioiLid9ID0gJ0kgY2FtcGkgb2JibGlnYXRvcmkgc29ubyBpbmRpY2F0aSBjb24gIioiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSB0byBmaWxsIGluIHN0YXJ0IGFuZCBlbmQgdGltZSBvciBhIHRpbWUgcGVyaW9kLid9ID0gJ0VcJyBvYmJsaWdhdG9yaW8gaW5zZXJpcmUgaW5pemlvIGUgZmluZSBvcHB1cmUgdW4gcGVyaW9kby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2dldHRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2snfSA9ICdDb21waXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbWFyayd9ID0gJ0NvbW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgTmF2aWdhdGlvbid9ID0gJ05hdmlnYXppb25lIHBlciBkYXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBhZGQgYSByZW1hcmsgd2l0aCBtb3JlIHRoYW4gOCBjaGFyYWN0ZXJzIS4nfSA9ICdJbnNlcmlyZSB1biBjb21tZXRvIHBpw7kgbHVuZ28gZGkgOCBjYXJhdHRlcmkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZ2F0aXZlIHRpbWVzIGFyZSBub3QgYWxsb3dlZC4nfSA9ICdOb24gcG9zc29ubyBlc3NlcmUgaW5zZXJpdGkgdmFsb3JpIG5lZ2F0aXZpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBlYXRlZCBob3VycyBhcmUgbm90IGFsbG93ZWQuIFN0YXJ0IHRpbWUgbWF0Y2hlcyBhbm90aGVyIGludGVydmFsLid9ID0gJ05vbiDDqCBwZXJtZXNzbyBpbnNlcmlyZSBvcmUgcmlwZXR1dGUuIExcJ29yYXJpbyBkaSBpbml6aW8gY29pbmNpZGUgY29uIHVuIGFsdHJvIGludGVydmFsbG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCB0aW1lIG11c3QgYmUgYWZ0ZXIgc3RhcnQgdGltZS4nfSA9ICdMXCdvcmFyaW8gZGkgZmluZSDDqCBwb3N0ZXJpb3JlIGFsbFwnb3JhcmlvIGRpIGluaXppby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkLiBFbmQgdGltZSBtYXRjaGVzIGFub3RoZXIgaW50ZXJ2YWwuJ30gPSAnTm9uIMOoIHBlcm1lc3NvIGluc2VyaXJlIG9yZSByaXBldHV0ZS4gTFwnb3JhcmlvIGRpIGZpbmUgY29pbmNpZGUgY29uIHVuIGFsdHJvIGludGVydmFsbG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBpcyBiaWdnZXIgdGhhbiB0aGUgaW50ZXJ2YWwgYmV0d2VlbiBzdGFydCBhbmQgZW5kIHRpbWVzISd9ID0gJ0lsIHBlcmlvZG8gw6ggc3VwZXJpb3JlIGFsbFwnaW50ZXJ2YWxsbyBkaSBpbml6aW9cXGZpbmUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgcGVyaW9kISBBIGRheSBoYXMgb25seSAyNCBob3Vycy4nfSA9ICdQZXJpb2RvIG5vbiB2YWxpZG8uIFVuYSBnaW9ybmF0YSBoYSBzb2xvIDI0IG9yZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB2YWxpZCBwZXJpb2QgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nfSA9ICdVbiBwZXJpb2RvIHZhbGlkbyBkZXZlIGVzc2VyZSBtYWdnaW9yZSBkaSB6ZXJvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHBlcmlvZCEgTmVnYXRpdmUgcGVyaW9kcyBhcmUgbm90IGFsbG93ZWQuJ30gPSAnUGVyaW9kbyBub24gdmFsaWRvLiBWYWxvcmkgbmVnYXRpdmkgbm9uIGFtbWVzc2kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBvbmUgcm93J30gPSAnQWdnaXVuZ2VyZSB1bmEgcmlnYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3RhbCd9ID0gJ1RvdGFsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbiB2YWNhdGlvbid9ID0gJ0ZlcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gb25seSBzZWxlY3Qgb25lIGNoZWNrYm94IGVsZW1lbnQhJ30gPSAnUHVvaSBzZWxlemlvbmFyZSBzb2xvIHVuIGVsZW1lbnRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbiBzaWNrIGxlYXZlJ30gPSAnQXNzZW50ZSBwZXIgbWFsYXR0aWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gb3ZlcnRpbWUgbGVhdmUnfSA9ICdBc3NlbnRlIHBlciByZWN1cGVybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCBpdGVtcyd9ID0gJ01vc3RyYSB0dXR0aSBnbGkgZWxlbWVudGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIFRpbWUgQWNjb3VudGluZyBFbnRyeSd9ID0gJ0NhbmNlbGxhcmUgdm9jZSBkaSByZW5kaWNvbnRhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlybSBpbnNlcnQnfSA9ICdDb25mZXJtYXJlIGluc2VyaW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgd2hpbGUgeW91IHdlcmUgb24gc2ljayBsZWF2ZT8nfSA9ICdTZWkgc2ljdXJvIGRpIGF2ZXIgbGF2b3JhdG8gbWVudHJlIGVyaSBhc3NlbnRlIHBlciBtYWxhdHRpYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiB2YWNhdGlvbj8nfSA9ICdTZWkgc2ljdXJvIGRpIGF2ZXIgbGF2b3JhdG8gbWVudHJlIGVyaSBpbiBmZXJpZT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiBvdmVydGltZSBsZWF2ZT8nfSA9ICdTZWkgc2ljdXJvIGRpIGF2ZXIgbGF2b3JhdG8gbWVudHJlIGVyaSBhc3NlbnRlIHBlciByZWN1cGVybyA/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgbW9yZSB0aGFuIDE2IGhvdXJzPyd9ID0gJ1NlaSBzaWN1cm8gZGkgYXZlciBsYXZvcmF0byBwacO5IGRpIDE2IG9yZT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdPdmVydmlldwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSByZXBvcnRpbmcgbW9udGhseSBvdmVydmlldyd9ID0gJ0NydXNjb3R0byBtZW5zaWxlIGRpIHJlbmRpY29udGF6aW9uZSB0ZW1wb3JhbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKEhvdXJzKSd9ID0gJ1N0cmFvcmRpbmFyaW8gKG9yZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKHRoaXMgbW9udGgpJ30gPSAnU3RyYW9yZGluYXJpbyAocXVlc3RvIG1lc2UpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0b3RhbCknfSA9ICdTdHJhb3JkaW5hcmlvICh0b3RhbGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbWFpbmluZyBvdmVydGltZSBsZWF2ZSd9ID0gJ1RvdGFsZSBvcmUgZGkgcmVjdXBlcm8gZGlzcG9uaWJpbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gKERheXMpJ30gPSAnRmVyaWUgKGdpb3JuaSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gdGFrZW4gKHRoaXMgbW9udGgpJ30gPSAnRmVyaWUgdXRpbGl6emF0ZSAocXVlc3RvIG1lc2UpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHRha2VuICh0b3RhbCknfSA9ICdGZXJpZSB1dGlsaXp6YXRlICh0b3RhbGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbWFpbmluZyB2YWNhdGlvbid9ID0gJ0ZlcmllIHJlc2lkdWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBMZWF2ZSAoRGF5cyknfSA9ICdBc3NlbnplIHBlciBtYWxhdHRpYSAoZ2lvcm5pKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ0Fzc2VuemUgcGVyIG1hbGF0dGlhIHV0aWxpenphdGUgKHF1ZXN0byBtZXNlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0b3RhbCknfSA9ICdBc3NlbnplIHBlciBtYWxhdHRpYSAodG90YWxlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmV2aW91cyBtb250aCd9ID0gJ01lc2UgcHJlY2VkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXh0IG1vbnRoJ30gPSAnTWVzZSBzZWd1ZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXknfSA9ICdHaW9ybm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2Vla2RheSd9ID0gJ0dpb3JubyBkZWxsYSBzZXR0aW1hbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya2luZyBIb3Vycyd9ID0gJ09yZSBsYXZvcmF0aXZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvdGFsIHdvcmtlZCBob3Vycyd9ID0gJ1RvdGFsZSBvcmUgbGF2b3JhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlclwncyBwcm9qZWN0IG92ZXJ2aWV3J30gPSAnVmlzdWFsaXp6YXppb25lIGRlbCBwcm9nZXR0byAtIFV0ZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3VycyAobW9udGhseSknfSA9ICdPcmUgKG1lbnNpbGkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIChMaWZldGltZSknfSA9ICdPcmUgKGdsb2JhbGkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYW5kIHRvdGFsJ30gPSAnVG90YWxlIG9tbmljb21wcmVuc2l2byc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1Byb2plY3RSZXBvcnRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgcmVwb3J0J30gPSAnUmlhc3N1bnRvIHByb2dldHRvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nUmVwb3J0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIHJlcG9ydGluZyd9ID0gJ1JlcG9ydCBkZWwgdGVtcG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGggTmF2aWdhdGlvbid9ID0gJ05hdmlnYXppb25lIHBlciBtZXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgcmVwb3J0cyd9ID0gJ1JlcG9ydCB1dGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGhseSB0b3RhbCd9ID0gJ1RvdGFsZSBtZW5zaWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpZmV0aW1lIHRvdGFsJ30gPSAnVG90YWxlIGdMb2JhbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgbGVhdmUnfSA9ICdBc3NlbnplIHBlciByZWN1cGVybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbid9ID0gJ0ZlcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUnfSA9ICdNYWxhdHRpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiByZW1haW5pbmcnfSA9ICdHaW9ybmkgcmltYW5lbnRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgcmVwb3J0cyd9ID0gJ1JpYXNzdW50aSBwcm9nZXR0byc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFByb2plY3QgU2V0dGluZ3MnfSA9ICdNb2RpZmljYXJlIGxlIGNvbmZpZ3VyYXppb25pIGRpIGdlc3Rpb25lIGRlbCB0ZW1wbyBkZWwgcHJvZ2V0dG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBwcm9qZWN0J30gPSAnQWdnaXVuZ2VyZSBwcm9nZXR0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgUHJvamVjdCd9ID0gJ0FnZ2l1bmdlcmUgcHJvZ2V0dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBQcm9qZWN0IFNldHRpbmdzJ30gPSAnTW9kaWZpY2FyZSBsYSBjb25maWd1cmF6aW9uZSBkZWwgcHJvZ2V0dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3Qgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICdFc2lzdGUgZ2nDoCB1biBwcm9nZXR0byBjb24gcXVlc3RvIG5vbWUuIFNjZWdsZWlyZSB1biBub21lIGRpdmVyc28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFNldHRpbmdzJ30gPSAnTW9kaWZpY2FyZSBsZSBjb25maWd1cmF6aW9uaSBkZWxsYSByZW5kaWNvbnRhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRhc2snfSA9ICdBZ2dpdW5nZXJlIGNvbXBpdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHVzZXInfSA9ICdOdW92byB1dGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBQcm9qZWN0cyd9ID0gJ0ZpbHRybyBwZXIgcHJvZ2V0dGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBUYXNrcyd9ID0gJ0ZpbHRybyBwZXIgY29tcGl0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFVzZXJzJ30gPSAnRmlsdHJvIHBlciB1dGVudGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCBMaXN0J30gPSAnRWxlbmNvIGRlaSBwcm9nZXR0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIExpc3QnfSA9ICdFbGVuY28gZGVpIGNvbXBpdGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFRhc2snfSA9ICdBZ2dpdW5nZXJlIGNvbXBpdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUYXNrIFNldHRpbmdzJ30gPSAnTW9kaWZpY2FyZSBsYSBjb25maWd1cmF6aW9uZSBkZWkgY29tcGl0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSBpcyBhbHJlYWR5IGEgdGFzayB3aXRoIHRoaXMgbmFtZS4gUGxlYXNlLCBjaG9vc2UgYSBkaWZmZXJlbnQgb25lLid9ID0gJ0VzaXN0ZSBnacOgIHVuIGNvbXBpdG8gY29uIHF1ZXN0byBub21lLiBTY2VnbGllcmUgdW4gbm9tZSBkaXZlcnNvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIExpc3QnfSA9ICdFbGVuY28gdXRlbnRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBVc2VyIFNldHRpbmdzJ30gPSAnQ29uZmlndXJhemlvbmkgbnVvdm8gdXRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVXNlciBTZXR0aW5ncyd9ID0gJ01vZGlmaWNhcmUgY29uZmlndXJhemlvbmUgdXRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnRzJ30gPSAnQ29tbWVudGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBPdmVydGltZSd9ID0gJ01vc3RyYXJlIHN0cmFvcmRpbmFyaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvdyBwcm9qZWN0IGNyZWF0aW9uJ30gPSAnQ29zZW50aXJlIGxhIGNyZWF6aW9uZSBkZWwgcHJvZ2V0dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIEJlZ2luJ30gPSAnUGVyaW9kbyBkaSBpbml6aW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIEVuZCd9ID0gJ1BlcmlvZG8gZGkgdGVybWluZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIG9mIFZhY2F0aW9uJ30gPSAnR2lvcm5pIGRpIEFzc2VuemEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgcGVyIFdlZWsnfSA9ICdPcmUgYWxsYSBzZXR0aW1hbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXV0aG9yaXplZCBPdmVydGltZSd9ID0gJ1N0cmFvcmRpbmFyaSBhdXRvcml6emF0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgZW5kIG11c3QgYmUgYWZ0ZXIgcGVyaW9kIGJlZ2luLid9ID0gJ0lsIHBlcmlvZG8gZmluYWxlIGRldmUgZXNzZXJlIHBvc3RlcmlvcmUgYWwgcGVyaW9kbyBpbml6aWFsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdGltZSBwZXJpb2RzIGZvdW5kLid9ID0gJ05vbiBjaSBzb25vIHBlcmlvZGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0aW1lIHBlcmlvZCd9ID0gJ0FnZ2l1bmdpIHBlcmlvZG8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdWaWV3CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3IFRpbWUgUmVjb3JkJ30gPSAnVmlzdWFsaXp6YXJlIHJlZ2lzdHJvIG9yYXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3IG9mICd9ID0gJ1Zpc3VhbGl6emF6aW9uZSBkaSAgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgbmF2aWdhdGlvbid9ID0gJ05hdmlnYXppb25lIHBlciBkYXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRhdGEgZm91bmQgZm9yIHRoaXMgZGF5Lid9ID0gJ05lc3N1biBkYXRvIHRyb3ZhdG8gcGVyIHF1ZXN0byBnaW9ybm8uJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMgZm9yIHRoZSB1c2VyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG5hbWUgZm9yIG5ldyBhY3Rpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG5hbWUgZm9yIG5ldyBwcm9qZWN0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIGVuZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIHN0YXJ0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIGxlYXZlIGRheXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3Igb3ZlcnRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgdGhlIHN0YW5kYXJkIHdlZWtseSBob3Vycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0dXMgZm9yIG5ldyBhY3Rpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHByb2plY3RzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHVzZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwcm9qZWN0cyBmb3Igd2hpY2ggYSByZW1hcmsgaXMgcmVxdWlyZWQuIElmIHRoZSBSZWdFeHAgbWF0Y2hlcyBvbiB0aGUgcHJvamVjdCwgeW91IGhhdmUgdG8gaW5zZXJ0IGEgcmVtYXJrIHRvby4gVGhlIFJlZ0V4cCB1c2UgdGhlIHNteCBwYXJhbWV0ZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGltZSBhY2NvdW50aW5nIHNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGltZSByZWNvcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yIGhvdyBtYW55IGRheXMgYWdvIHlvdSBjYW4gaW5zZXJ0IHdvcmtpbmcgdW5pdHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIHRoZSBkcm9wZG93biBlbGVtZW50cyBpbiB0aGUgZWRpdCBzY3JlZW4gYXJlIGNoYW5nZWQgdG8gYXV0b2NvbXBsZXRpb24gZmllbGRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgYWZ0ZXIgd2hpY2ggdGhlIHdvcmtpbmcgdW5pdHMgaGF2ZSB0byBiZSBpbnNlcnRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygd29ya2luZyBkYXlzIHdpdGhvdXRoIHdvcmtpbmcgdW5pdHMgZW50cnkgYWZ0ZXIgd2hpY2ggYSB3YXJuaW5nIHdpbGwgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgdGltZSByZXBvcnRpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVndWxhciBleHByZXNzaW9ucyBmb3IgY29uc3RyYWluaW5nIGFjdGlvbiBsaXN0IGFjY29yZGluZyB0byBzZWxlY3RlZCBwcm9qZWN0LiBLZXkgY29udGFpbnMgcmVndWxhciBleHByZXNzaW9uIGZvciBwcm9qZWN0KHMpLCBjb250ZW50IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGFjdGlvbihzKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVndWxhciBleHByZXNzaW9ucyBmb3IgY29uc3RyYWluaW5nIHByb2plY3QgbGlzdCBhY2NvcmRpbmcgdG8gdXNlciBncm91cHMuIEtleSBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHByb2plY3QocyksIGNvbnRlbnQgY29udGFpbnMgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZ3JvdXBzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgaWYgd29ya2luZyBob3VycyBjYW4gYmUgaW5zZXJ0ZWQgd2l0aG91dCBzdGFydCBhbmQgZW5kIHRpbWVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBmb3JjZXMgaW5zZXJ0cyBpbiBUaW1lQWNjb3VudGluZy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBub3RpZmljYXRpb24gbW9kdWxlIGdpdmVzIGEgd2FybmluZyBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgYWNjb3VudGluZy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gdXNlIGlmIHNvbWUgYWN0aW9ucyByZWR1Y2VkIHRoZSB3b3JraW5nIGhvdXJzIChmb3IgZXhhbXBsZSwgaWYgb25seSBoYWxmIG9mIHRoZSB0cmF2ZWxpbmcgdGltZSBpcyBwYWlkIEtleSA9PiB0cmF2ZWxpbmc7IENvbnRlbnQgPT4gNTApLid9ID0gJyc7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uJ30gPSAnTHVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R1ZSd9ID0gJ01hcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWQnfSA9ICdNZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGh1J30gPSAnR2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyaSd9ID0gJ1Zlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXQnfSA9ICdTw6FiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1bid9ID0gJ0RvbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKYW51YXJ5J30gPSAnR2VubmFpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZWJydWFyeSd9ID0gJ0ZlYmJyYWlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hcmNoJ30gPSAnTWFyem8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXByaWwnfSA9ICdBcHJpbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF5J30gPSAnTWFnZ2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bmUnfSA9ICdHaXVnbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVseSd9ID0gJ0x1Z2xpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdWd1c3QnfSA9ICdBZ29zdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VwdGVtYmVyJ30gPSAnU2V0dGVtYnJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09jdG9iZXInfSA9ICdPdHRvYnJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdmVtYmVyJ30gPSAnTm92ZW1icmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjZW1iZXInfSA9ICdEaWNlbWJyZSc7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgcHJvamVjdHMnfSA9ICdNb3N0cmFyZSB0dXR0aSBpIHByb2dldHRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdmFsaWQgcHJvamVjdHMnfSA9ICdNb3N0cmFyZSBzb2xvIGkgcHJvZ2V0dGkgdmFsaWRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWVBY2NvdW50aW5nJ30gPSAnUmVuZGljb250YXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGlvbnMnfSA9ICdBemlvbmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciB1cGRhdGVkISd9ID0gJ1V0ZW50ZSBhZ2dpb3JuYXRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIGFkZGVkISd9ID0gJ1V0ZW50ZSBhZ2dpdW50byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCBhZGRlZCEnfSA9ICdQcm9nZXR0byBhZ2dpdW50byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCB1cGRhdGVkISd9ID0gJ1Byb2dldHRvIGFnZ2lvcm5hdG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgYWRkZWQhJ30gPSAnQ29tcGl0byBhZ2dpdW50byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayB1cGRhdGVkISd9ID0gJ0NvbXBpdG8gYWdnaW9ybmF0byEnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JlcG9ydGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzc2Z1bCBpbnNlcnQhJ30gPSAnSW5zZXJpbWVudG8gdGVybWluYXRvIHBvc2l0aXZhbWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNhdmUgc2V0dGluZ3MsIGJlY2F1c2UgYSBkYXkgaGFzIG9ubHkgMjQgaG91cnMhJ30gPSAnwqFJbXBvc2libGUgZ3VhcmRhciBsYSBjb25maWd1cmFjacOzbiBwb3JxdWUgdW4gZMOtYSBzw7NsbyB0aWVuZSAyNCBob3JhcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGRlbGV0ZSBXb3JraW5nIFVuaXRzISd9ID0gJ8KhSW1wb3NpYmxlIGVsaW1pbmFyIGxhcyB1bmlkYWRlcyBkZSB0cmFiYWpvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgaW5zZXJ0IHlvdXIgd29ya2luZyBob3VycyEnfSA9ICfCoUZhdm9yIGRlIGluc2VydGFyIHN1cyBob3JhcyBkZSB0cmFiYWpvISc7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9qYV9UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDExLzEyLzA4IEthb3J1IEhheWFtYSBUSVMgSW5jLgojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpqYV9UaW1lQWNjb3VudGluZzsKCnVzZSB1dGY4OwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKc3ViIERhdGEgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nRGVsZXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoZSBUaW1lIEFjY291bnRpbmcgb2YgdGhpcyBkYXk/J30gPSAn5pys5b2T44Gr6Kmy5b2T5pel44Gu5oOF5aCx44KS5YmK6Zmk44GX44G+44GZ44GL77yfJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUaW1lIFJlY29yZCd9ID0gJ+OCv+OCpOODoOODrOOCs+ODvOODieOBrue3qOmbhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHNldHRpbmdzJ30gPSAn44OX44Ot44K444Kn44Kv44OI44Gu57eo6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgTmF2aWdhdGlvbid9ID0gJ+aXpeWIpeODiuODk+OCsuODvOOCt+ODp+ODsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmV2aW91cyBkYXknfSA9ICfliY3jga7ml6UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBkYXknfSA9ICfmrKHjga7ml6UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyB3aXRob3V0IGVudHJpZXMnfSA9ICfjgqjjg7Pjg4jjg6rjg7zjga7jgarjgYTml6UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZmllbGRzIGFyZSBtYXJrZWQgd2l0aCBhICIqIi4nfSA9ICcqIOOBrumgheebruOBr+WFpeWKm+W/hemgiOOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSB0byBmaWxsIGluIHN0YXJ0IGFuZCBlbmQgdGltZSBvciBhIHRpbWUgcGVyaW9kLid9ID0gJ+mWi+Wni+aZgumWk+OBqOe1guS6huaZgumWk+OAgeOBvuOBn+OBr+acn+mWk+OCkuaMh+WumuOBl+OBpuOBj+OBoOOBleOBhOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAn44OX44Ot44K444Kn44Kv44OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2snfSA9ICfjgr/jgrnjgq8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtYXJrJ30gPSAn5rOo6YeIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBhZGQgYSByZW1hcmsgd2l0aCBtb3JlIHRoYW4gOCBjaGFyYWN0ZXJzIS4nfSA9ICc45paH5a2X5Lul5LiK44Gu5rOo6YeI44KS6L+95Yqg44GX44Gm44GP44Gg44GV44GE44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZ2F0aXZlIHRpbWVzIGFyZSBub3QgYWxsb3dlZC4nfSA9ICfvvI3vvIjjg57jgqTjg4rjgrnvvInjga7mmYLplpPjga/lhaXlipvjgafjgY3jgb7jgZvjgpMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkLiBTdGFydCB0aW1lIG1hdGNoZXMgYW5vdGhlciBpbnRlcnZhbC4nfSA9ICfnubDjgorov5TjgZXjgozjgZ/mmYLplpPjga/oqLHlj6/jgZXjgozjgb7jgZvjgpPjgILplovlp4vmmYLliLvjga/liKXjga7plpPpmpTjgajkuIDoh7TjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHRpbWUgbXVzdCBiZSBhZnRlciBzdGFydCB0aW1lLid9ID0gJ+e1guS6huaZgumWk+OBruWJjeOBq+mWi+Wni+aZgumWk+OCkuioreWumuOBmeOCi+OBk+OBqOOBr+OBp+OBjeOBvuOBm+OCk+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBlYXRlZCBob3VycyBhcmUgbm90IGFsbG93ZWQuIEVuZCB0aW1lIG1hdGNoZXMgYW5vdGhlciBpbnRlcnZhbC4nfSA9ICdEaWVzZSBFbmR6ZWl0IHd1cmRlIGJlcmVpdHMgaW4gZWluZW0gYW5kZXJlbiBFaW50cmFnIGFuZ2VnZWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIGlzIGJpZ2dlciB0aGFuIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgdGltZXMhJ30gPSAn44CM5pyf6ZaT44CN44Gu6Kit5a6a44GM5LiN5q2j44Gn44GZ44CC6ZaL5aeL5pmC6ZaT44Go57WC5LqG5pmC6ZaT44Gu56+E5Zuy44KS6LaF6YGO44GX44Gm44GE44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgcGVyaW9kISBBIGRheSBoYXMgb25seSAyNCBob3Vycy4nfSA9ICfjgIzmnJ/plpPjgI3jga7oqK3lrprjgYzkuI3mraPjgafjgZnjgILvvIgyNOaZgumWk+S7peS4iuOBr+ioseWPr+OBleOCjOOBvuOBm+OCk++8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIHBlcmlvZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLid9ID0gJ+OAjOacn+mWk+OAjeOBruioreWumuOBjOS4jeato+OBp+OBmeOAgu+8iDDjga/oqLHlj6/jgZXjgozjgb7jgZvjgpPvvIknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBwZXJpb2QhIE5lZ2F0aXZlIHBlcmlvZHMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ+OAjOacn+mWk+OAjeOBruioreWumuOBjOS4jeato+OBp+OBmeOAgu+8iO+8je+8iOODnuOCpOODiuOCue+8ieOBr+ioseWPr+OBleOCjOOBvuOBm+OCk++8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgb25lIHJvdyd9ID0gJ+ihjOOBrui/veWKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3RhbCd9ID0gJ+ioiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbiB2YWNhdGlvbid9ID0gJ+S8keaah+WPluW+l+S4rSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG9ubHkgc2VsZWN0IG9uZSBjaGVja2JveCBlbGVtZW50ISd9ID0gJzHpoIXnm67jga7jgb/pgbjmip7jgafjgY3jgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gc2ljayBsZWF2ZSd9ID0gJ+eXheasoOS4rSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbiBvdmVydGltZSBsZWF2ZSd9ID0gJ+S7o+S8keS4rSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCBpdGVtcyd9ID0gJ+OBmeOBueOBpuOBruOCouOCpOODhuODoOOCkuihqOekuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgVGltZSBBY2NvdW50aW5nIEVudHJ5J30gPSAn44Ko44Oz44OI44Oq44O844KS5YmK6ZmkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpcm0gaW5zZXJ0J30gPSAn5oy/5YWl44Gu56K66KqNJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgd2hpbGUgeW91IHdlcmUgb24gc2ljayBsZWF2ZT8nfSA9ICfnl4XmrKDjgavoqK3lrprjgZXjgozjgZ/mnJ/plpPkuK3jgavnqLzlg43jgZfjgb7jgZfjgZ/jgYvvvJ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiB2YWNhdGlvbj8nfSA9ICfkvJHmmofjgavoqK3lrprjgZXjgozjgZ/mnJ/plpPkuK3jgavnqLzlg43jgZfjgb7jgZfjgZ/jgYvvvJ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiBvdmVydGltZSBsZWF2ZT8nfSA9ICfku6PkvJHjgavoqK3lrprjgZXjgozjgZ/mnJ/plpPkuK3jgavnqLzlg43jgZfjgb7jgZfjgZ/jgYvvvJ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCBtb3JlIHRoYW4gMTYgaG91cnM/J30gPSAnMTbmmYLplpPku6XkuIrnqLzlg43jgZfjgb7jgZfjgZ/jgYvvvJ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VsZWN0IGFsbCBkYXlzJ30gPSAn5YWo44Gm44Gu5pel44KS6YG45oqeJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nT3ZlcnZpZXcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgcmVwb3J0aW5nIG1vbnRobHkgb3ZlcnZpZXcnfSA9ICfmnIjliKXkuIDopqcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKEhvdXJzKSd9ID0gJ+i2hemBjuWLpOWLme+8iO+8muaZgumWk++8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSAodGhpcyBtb250aCknfSA9ICfotoXpgY7li6Tli5nvvIjku4rmnIjvvIknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKHRvdGFsKSd9ID0gJ+i2hemBjuWLpOWLme+8iOe0r+ioiO+8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgb3ZlcnRpbWUgbGVhdmUnfSA9ICfotoXpgY7li6Tli5nlj6/og73mrovvvIjmmYLplpPvvIknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gKERheXMpJ30gPSAn5LyR5pqH77yI5pel5pWw77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ+S8keaah+WPluW+l+aXpeaVsO+8iOS7iuaciO+8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiB0YWtlbiAodG90YWwpJ30gPSAn5LyR5pqH5Y+W5b6X5pel5pWw77yI57Sv6KiI77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbWFpbmluZyB2YWNhdGlvbid9ID0gJ+S8keaah+WPluW+l+aui+aXpeaVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIExlYXZlIChEYXlzKSd9ID0gJ+eXheasoO+8iOaXpeaVsO+8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ+eXheasoOaXpeaVsO+8iOS7iuaciO+8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0b3RhbCknfSA9ICfnl4XmrKDml6XmlbDvvIjntK/oqIjvvIknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJldmlvdXMgbW9udGgnfSA9ICfliY3mnIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBtb250aCd9ID0gJ+asoeaciCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXknfSA9ICfml6UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2Vla2RheSd9ID0gJ+abnOaXpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JraW5nIEhvdXJzJ30gPSAn56i85YON5pmC6ZaTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvdGFsIHdvcmtlZCBob3Vycyd9ID0gJ+e3j+eovOWDjeaZgumWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyXCdzIHByb2plY3Qgb3ZlcnZpZXcnfSA9ICfjg6bjg7zjgrbjga7jg5fjg63jgrjjgqfjgq/jg4jkuIDopqcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgKG1vbnRobHkpJ30gPSAn5pmC6ZaT77yI5LuK5pyI77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIChMaWZldGltZSknfSA9ICfmmYLplpPvvIjpgJrnrpfvvIknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhbmQgdG90YWwnfSA9ICflkIjoqIgnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdQcm9qZWN0UmVwb3J0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHJlcG9ydCd9ID0gJ+ODl+ODreOCuOOCp+OCr+ODiOODu+ODrOODneODvOODiCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1JlcG9ydGluZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSByZXBvcnRpbmcnfSA9ICfmmYLplpPkvJroqIjjg6zjg53jg7zjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGggTmF2aWdhdGlvbid9ID0gJ+aciOWIpeODiuODk+OCsuODvOOCt+ODp+ODsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIHJlcG9ydHMnfSA9ICfjg6bjg7zjgrbjg7vjg6zjg53jg7zjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGhseSB0b3RhbCd9ID0gJ+aciOWQiOioiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWZldGltZSB0b3RhbCd9ID0gJ+mAmueul+WQiOioiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSBsZWF2ZSd9ID0gJ+S7o+S8kSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbid9ID0gJ+S8keaahyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlJ30gPSAn55eF5qygJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHJlbWFpbmluZyd9ID0gJ+S8keaXpeaui+aXpeaVsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHJlcG9ydHMnfSA9ICfjg5fjg63jgrjjgqfjgq/jg4jjg7vjg6zjg53jg7zjg4gnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdTZXR0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgQWNjb3VudGluZyBQcm9qZWN0IFNldHRpbmdzJ30gPSAn5pmC6ZaT5Lya6KiIIOODl+ODreOCuOOCp+OCr+ODiOioreWumuOBrue3qOmbhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgUHJvamVjdCd9ID0gJ+aWsOimj+ODl+ODreOCuOOCp+OCr+ODiOOBrui/veWKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgcHJvamVjdCd9ID0gJ+aWsOimj+ODl+ODreOCuOOCp+OCr+ODiOOBrui/veWKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFByb2plY3QgU2V0dGluZ3MnfSA9ICfjg5fjg63jgrjjgqfjgq/jg4jjga7nt6jpm4YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3Qgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICflkIzlkI3jga7jg5fjg63jgrjjgqfjgq/jg4jjgYzlrZjlnKjjgZfjgb7jgZnjgILlkI3np7DjgpLlpInmm7TjgZfjgabjgY/jgaDjgZXjgYTjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUaW1lIEFjY291bnRpbmcgU2V0dGluZ3MnfSA9ICfoqK3lrprjga7nt6jpm4YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFRhc2snfSA9ICfmlrDopo/jgr/jgrnjgq/jga7ov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRhc2snfSA9ICfmlrDopo/jgr/jgrnjgq/jga7ov73liqAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHVzZXInfSA9ICfmlrDopo/jg6bjg7zjgrYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBQcm9qZWN0cyd9ID0gJ+ODl+ODreOCuOOCp+OCr+ODiOOBrue1nuOCiui+vOOBvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFRhc2tzJ30gPSAn44K/44K544Kv44Gu57We44KK6L6844G/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgVXNlcnMnfSA9ICfjg6bjg7zjgrbjga7ntZ7jgorovrzjgb8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCBMaXN0J30gPSAn44OX44Ot44K444Kn44Kv44OI5LiA6KanJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgTGlzdCd9ID0gJ+OCv+OCueOCr+S4gOimpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRhc2sgU2V0dGluZ3MnfSA9ICfjgr/jgrnjgq/oqK3lrponOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHRhc2sgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICflkIzlkI3jga7jgr/jgrnjgq/jgYzlrZjlnKjjgZfjgb7jgZnjgILlkI3np7DjgpLlpInmm7TjgZfjgabjgY/jgaDjgZXjgYTjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBMaXN0J30gPSAn44Om44O844K25LiA6KanJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBVc2VyIFNldHRpbmdzJ30gPSAn5paw6KaP44Om44O844K26Kit5a6aJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVXNlciBTZXR0aW5ncyd9ID0gJ+ODpuODvOOCtuioreWumuOBrue3qOmbhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50cyd9ID0gJ+OCs+ODoeODs+ODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IE92ZXJ0aW1lJ30gPSAn6LaF6YGO5Yuk5YuZ44KS6KGo56S6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsbG93IHByb2plY3QgY3JlYXRpb24nfSA9ICfjg5fjg63jgrjjgqfjgq/jg4jjga7mlrDopo/ov73liqDjgpLoqLHlj6/jgZnjgosnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIEJlZ2luJ30gPSAn6ZaL5aeL54K5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBFbmQnfSA9ICfntYLkuobngrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyBvZiBWYWNhdGlvbid9ID0gJ+S8keaahyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3VycyBwZXIgV2Vlayd9ID0gJ+aZgumWkyAvIOmAsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdXRob3JpemVkIE92ZXJ0aW1lJ30gPSAn5om/6KqN5riI44Gu6LaF6YGO5Yuk5YuZJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBlbmQgbXVzdCBiZSBhZnRlciBwZXJpb2QgYmVnaW4uJ30gPSAn57WC5LqG54K544Gu5YmN44Gr6ZaL5aeL54K544KS6Kit5a6a44GZ44KL44GT44Go44Gv44Gn44GN44G+44Gb44KT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHRpbWUgcGVyaW9kcyBmb3VuZC4nfSA9ICfmnJ/plpPjgYzmnKroqK3lrprjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRpbWUgcGVyaW9kJ30gPSAn5pyf6ZaT44KS6L+95Yqg44GX44Gm44GP44Gg44GV44GE44CCJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nVmlldwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyBUaW1lIFJlY29yZCd9ID0gJ+OCv+OCpOODoOODu+ODrOOCs+ODvOODieOCkuihqOekuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3IG9mICd9ID0gJ+S4gOimpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkYXRhIGZvdW5kIGZvciB0aGlzIGRheS4nfSA9ICfoqbLlvZPjgZnjgovjg4fjg7zjgr/jgYzjgYLjgorjgb7jgZvjgpPjgIInOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cyBmb3IgdGhlIHVzZXIuJ30gPSAn44Om44O844K244Gu5LiN5a6M5YWo44Gq56i85YON5pel5pWw44KS44Kr44Km44Oz44OI44GX6YCa55+l44GZ44KL44Ko44O844K444Kn44Oz44OI44O744Kk44Oz44K/44O844OV44Kn44Kk44K544Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbmFtZSBmb3IgbmV3IGFjdGlvbnMuJ30gPSAn5paw6KaP5pON5L2c44Gr5a++44GZ44KL44OH44OV44Kp44Or44OI44Gu5ZCN56ewJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbmFtZSBmb3IgbmV3IHByb2plY3RzLid9ID0gJ+aWsOimj+ODl+ODreOCuOOCp+OCr+ODiOOBq+WvvuOBmeOCi+ODh+ODleOCqeODq+ODiOOBruWQjeensCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIGRhdGUgZW5kLid9ID0gJ+OAjOe1guS6huaXpeOAjeOBruODh+ODleOCqeODq+ODiOWApCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIGRhdGUgc3RhcnQuJ30gPSAn44CM6ZaL5aeL5pel44CN44Gu44OH44OV44Kp44Or44OI5YCkJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIGRlc2NyaXB0aW9uLid9ID0gJ+OAjOiqrOaYjuaWh+OAjeOBruODh+ODleOCqeODq+ODiOWApCc7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBsZWF2ZSBkYXlzLid9ID0gJ+OAjOS8keaah+OAjeOBruODh+ODleOCqeODq+ODiOWApCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIG92ZXJ0aW1lLid9ID0gJ+OAjOi2hemBjuWLpOWLmeOAjeOBruODh+ODleOCqeODq+ODiOWApCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIHRoZSBzdGFuZGFyZCB3ZWVrbHkgaG91cnMuJ30gPSAn6YCx44GC44Gf44KK5Z+65pys56i85YON5pmC6ZaT44Gu44OH44OV44Kp44Or44OI5YCkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgYWN0aW9ucy4nfSA9ICfmlrDopo/mk43kvZzjgavlr77jgZnjgovjg4fjg5Xjgqnjg6vjg4jjga7jgrnjg4bjg7zjgr/jgrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0dXMgZm9yIG5ldyBwcm9qZWN0cy4nfSA9ICfmlrDopo/jg5fjg63jgrjjgqfjgq/jg4jjgavlr77jgZnjgovjg4fjg5Xjgqnjg6vjg4jjga7jgrnjg4bjg7zjgr/jgrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0dXMgZm9yIG5ldyB1c2Vycy4nfSA9ICfmlrDopo/jg6bjg7zjgrbjgavlr77jgZnjgovjg4fjg5Xjgqnjg6vjg4jjga7jgrnjg4bjg7zjgr/jgrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcHJvamVjdHMgZm9yIHdoaWNoIGEgcmVtYXJrIGlzIHJlcXVpcmVkLiBJZiB0aGUgUmVnRXhwIG1hdGNoZXMgb24gdGhlIHByb2plY3QsIHlvdSBoYXZlIHRvIGluc2VydCBhIHJlbWFyayB0b28uIFRoZSBSZWdFeHAgdXNlIHRoZSBzbXggcGFyYW1ldGVyLid9ID0gJ+OAjOazqOmHiOOAjeOCqOODs+ODiOODquODvOOCkuW/heimgeOBqOOBmeOCi+mgheebruOCkuWumue+qeOBl+OBvuOBmeOAgiDjgoLjgZfjg5fjg63jgrjjgqfjgq/jg4jlkI3jgYzjgZPjgZPjgafoqK3lrprjgZfjgZ/mraPopo/ooajnj77jgavjg57jg4Pjg4HjgZnjgovloLTlkIjjgIHjgIzms6jph4jvvZ3jga/lv4XpoIjpoIXnm67jgajjgarjgorjgb7jgZnjgILigLvmraPopo/ooajnj77jgavjga9TTVjjg5Hjg6njg6Hjg7zjgr/jgpLkvb/jgYTjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aW1lIGFjY291bnRpbmcgc2V0dGluZ3MnfSA9ICfmmYLplpPkvJroqIjjga7oqK3lrprjgpLnt6jpm4YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aW1lIHJlY29yZCd9ID0gJ+OCv+OCpOODoOODrOOCs+ODvOODieOCkue3qOmbhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3IgaG93IG1hbnkgZGF5cyBhZ28geW91IGNhbiBpbnNlcnQgd29ya2luZyB1bml0cy4nfSA9ICfkvZXml6XliY3jgYvjgonjg6/jg7zjgq3jg7PjgrDjg7vjg6bjg4vjg4Pjg4jjga7mlrDopo/nmbvpjLLjgYzlj6/og73jgafjgYLjgovjgYvjga7oqK3lrprjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZW5hYmxlZCwgdGhlIGRyb3Bkb3duIGVsZW1lbnRzIGluIHRoZSBlZGl0IHNjcmVlbiBhcmUgY2hhbmdlZCB0byBhdXRvY29tcGxldGlvbiBmaWVsZHMuJ30gPSAn44GT44Gu6aCF55uu44KS44CM6Kix5Y+v44CN44Gr44GZ44KL44Go44CB57eo6ZuG55S76Z2i5YaF44Gu44OX44Or44OA44Km44Oz44Oh44OL44Ol44O844KS44Kq44O844OI44Kz44Oz44OX44Oq44O844OI5qmf6IO95LuY44GN44Gu44OV44Kp44O844Og44Gr5aSJ5pu044GX44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gZW50ZXIgIm9uIHZhY2F0aW9uIGxlYXZlJ30gPSAn44GT44Gu6aCF55uu44KS44CM6Kix5Y+v44CN44Gr44GZ44KL44Go44CB44Om44O844K244GM5LyR5pqH55Sz6KuL44Gn44GN44KL44KI44GG44Gr44Gq44KK44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIHdvcmtpbmcgZGF5cyBhZnRlciB3aGljaCB0aGUgd29ya2luZyB1bml0cyBoYXZlIHRvIGJlIGluc2VydGVkLid9ID0gJzHjgaTku6XkuIrjga7jg6/jg7zjgq3jg7PjgrDjg7vjg6bjg4vjg4Pjg4jjgpLoqK3lrprjgZnjgbnjgY3mnIDlpKfjga7nqLzlg43ml6XmlbDjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygd29ya2luZyBkYXlzIHdpdGhvdXRoIHdvcmtpbmcgdW5pdHMgZW50cnkgYWZ0ZXIgd2hpY2ggYSB3YXJuaW5nIHdpbGwgYmUgc2hvd24uJ30gPSAnMeOBpOS7peS4iuOBruODr+ODvOOCreODs+OCsOODu+ODpuODi+ODg+ODiOOBjOioreWumuOBleOCjOOBpuOBhOOBquOBhOWgtOWQiOOAgeOCouODqeODvOODiOOCkueZuuOBmeOCi+OBueOBjeacgOWkp+OBrueovOWDjeaXpeaVsOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHRpbWUgcmVwb3J0aW5nJ30gPSAn44OX44Ot44K444Kn44Kv44OI5Yil5pmC6ZaT5Lya6KiI44Os44Od44O844OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBhY3Rpb24gbGlzdCBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgcHJvamVjdC4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBhY3Rpb24ocykuJ30gPSAn44OX44Ot44K444Kn44Kv44OI44Gr44KI44Gj44Gm6KGM5YuV44Oq44K544OI44KS57We44KK6L6844KA44Gf44KB44Gu5q2j6KaP6KGo54++44CC44CM6Y2144CN44Gn44Gv44OX44Ot44K444Kn44Kv44OI44Gr5a++44GZ44KL5q2j6KaP6KGo54++44KS44CB44CM5YaF5a6544CN44Gn44GvYOihjOWLlWDjgavlr77jgZnjgovmraPopo/ooajnj77jgpLmjIflrprjgZnjgovjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVndWxhciBleHByZXNzaW9ucyBmb3IgY29uc3RyYWluaW5nIHByb2plY3QgbGlzdCBhY2NvcmRpbmcgdG8gdXNlciBncm91cHMuIEtleSBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHByb2plY3QocyksIGNvbnRlbnQgY29udGFpbnMgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZ3JvdXBzLid9ID0gJ+ODpuODvOOCtuOCsOODq+ODvOODl+OBq+OCiOOBo+OBpuODl+ODreOCuOOCp+OCr+ODiOODquOCueODiOOCkue1nuOCiui+vOOCgOOBn+OCgeOBruato+imj+ihqOePvuOAguOAjOmNteOAjeOBp+OBr+ODl+ODreOCuOOCp+OCr+ODiOOBq+WvvuOBmeOCi+ato+imj+ihqOePvuOCkuOAgeOAjOWGheWuueOAjeOBp+OBr+OCq+ODs+ODnuWMuuWIh+OCiuOBruODpuODvOOCtuODquOCueODiOOCkuaMh+WumuOBmeOCi+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgaWYgd29ya2luZyBob3VycyBjYW4gYmUgaW5zZXJ0ZWQgd2l0aG91dCBzdGFydCBhbmQgZW5kIHRpbWVzLid9ID0gJ+alreWLmeaZgumWk+OCkuOAjOmWi+Wni+aZgumWk+OAjeOBqOOAjOe1guS6huaZgumWk+OAjeOBruaMh+WumuODiuOCt+OBp+aWsOimj+eZu+mMsuOBp+OBjeOCi+OBi+OBqeOBhuOBi+aMh+WumuOBmeOCi+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBmb3JjZXMgaW5zZXJ0cyBpbiBUaW1lQWNjb3VudGluZy4nfSA9ICdUaW1lQWNjb3VudGluZ+ODouOCuOODpeODvOODq+OBqOWQjOetieOBrumgheebruOBjOioreWumuW/hemgiOOBqOOBquOCiuOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG5vdGlmaWNhdGlvbiBtb2R1bGUgZ2l2ZXMgYSB3YXJuaW5nIGlmIHRoZXJlIGFyZSB0b28gbWFueSBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cy4nfSA9ICfjgYLjgb7jgorjgavjgoLlpJrjgY/jga7kuI3lrozlhajjgarnqLzlg43ml6XjgYzjgYLjgovloLTlkIjjgIHjgZPjga7pgJrnn6Xjg6Ljgrjjg6Xjg7zjg6vjga/orablkYrjgpLkuI7jgYjjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBhY2NvdW50aW5nLid9ID0gJ+aZgumWk+S8muioiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyB1c2UgaWYgc29tZSBhY3Rpb25zIHJlZHVjZWQgdGhlIHdvcmtpbmcgaG91cnMgKGZvciBleGFtcGxlLCBpZiBvbmx5IGhhbGYgb2YgdGhlIHRyYXZlbGluZyB0aW1lIGlzIHBhaWQgS2V5ID0+IHRyYXZlbGluZzsgQ29udGVudCA9PiA1MCkuJ30gPSAn5qWt5YuZ5LiK44Gu6KGM5YuV44Gr44GK44GE44Gm44CB56i85YON5pmC6ZaT44Go44GX44Gm6KiI5LiK44GZ44KL5pmC6ZaT44KS6Kq/5pW044GZ44KL5b+F6KaB44GM44GC44KL5aC05ZCI44Gr44CB44GT44Gu6Kit5a6a44KS5L2/55So44GX44G+44GZ44CC77yI5L6L77ya44CM56e75YuV5pmC6ZaT44CN44GuNTAl44Gu44G/5Yuk5YuZ5pmC6ZaT55u45b2T44Go44GZ44KL5aC05ZCI44CM6Y2144CN44GrYGpvdXJuZXlg44CB44CM5YaF5a6544CN44GrYDUwYOOBqOioreWumiknOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbid9ID0gJ+aciCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUdWUnfSA9ICfngasnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2VkJ30gPSAn5rC0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RodSd9ID0gJ+acqCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmknfSA9ICfph5EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F0J30gPSAn5ZyfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1bid9ID0gJ+aXpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKYW51YXJ5J30gPSAnMeaciCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZWJydWFyeSd9ID0gJzLmnIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFyY2gnfSA9ICcz5pyIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcmlsJ30gPSAnNOaciCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXknfSA9ICc15pyIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bmUnfSA9ICc25pyIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bHknfSA9ICc35pyIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1Z3VzdCd9ID0gJzjmnIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VwdGVtYmVyJ30gPSAnOeaciCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPY3RvYmVyJ30gPSAnMTDmnIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm92ZW1iZXInfSA9ICcxMeaciCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNlbWJlcid9ID0gJzEy5pyIJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCBwcm9qZWN0cyd9ID0gJ+OBmeOBueOBpuOBruODl+ODreOCuOOCp+OCr+ODiOOCkuihqOekuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZhbGlkIHByb2plY3RzJ30gPSAn5pyJ5Yq544Gq44OX44Ot44K444Kn44Kv44OI44KS6KGo56S6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWVBY2NvdW50aW5nJ30gPSAn5pmC6ZaT5Lya6KiIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGlvbnMnfSA9ICfmk43kvZwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciB1cGRhdGVkISd9ID0gJ+ODpuODvOOCtuaDheWgseOBjOabtOaWsOOBleOCjOOBvuOBl+OBnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIGFkZGVkISd9ID0gJ+ODpuODvOOCtuaDheWgseOBjOi/veWKoOOBleOCjOOBvuOBl+OBnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IGFkZGVkISd9ID0gJ+ODl+ODreOCuOOCp+OCr+ODiOOBjOi/veWKoOOBleOCjOOBvuOBl+OBnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHVwZGF0ZWQhJ30gPSAn44OX44Ot44K444Kn44Kv44OI44GM5pu05paw44GV44KM44G+44GX44GfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgYWRkZWQhJ30gPSAn44K/44K544Kv44GM6L+95Yqg44GV44KM44G+44GX44GfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgdXBkYXRlZCEnfSA9ICfjgr/jgrnjgq/jgYzmm7TmlrDjgZXjgozjgb7jgZfjgZ8nOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGRlbGV0ZSBXb3JraW5nIFVuaXRzISd9ID0gJ+ODr+ODvOOCreODs+OCsOODu+ODpuODi+ODg+ODiOOCkuWJiumZpOOBp+OBjeOBvuOBm+OCkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2F2ZSBzZXR0aW5ncywgYmVjYXVzZSBhIGRheSBoYXMgb25seSAyNCBob3VycyEnfSA9ICfmmYLplpPmjIflrprjgYzkuI3mraPjgafjgZnjgILoqK3lrprjgpLkv53lrZjjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ/jgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGluc2VydCB5b3VyIHdvcmtpbmcgaG91cnMhJ30gPSAn56i85YON5pmC6ZaT44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GE44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ+e1kOaenOihqOekuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzZnVsIGluc2VydCEnfSA9ICfmjL/lhaXjgYzmiJDlip/jgZfjgb7jgZfjgZ/jgIInOwoKfQoKMTsK
77u/IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wbF9UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnBsX1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICdDenkgbmEgcGV3bm8gY2hjZXN6IHVzdW7EhcSHIHphcmFwb3J0b3dhbnkgY3phcyBwcmFjeSBkbGEgdGVnbyBkbmlhPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ0VkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBSZWNvcmQnfSA9ICdFZHl0dWogd3BpcyBjemFzdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHNldHRpbmdzJ30gPSAnVXN0YXdpZW5pYSBwcm9qZWt0dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIE5hdmlnYXRpb24nfSA9ICdOYXdpZ2FjamEgcG8gZGFjaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJldmlvdXMgZGF5J30gPSAnUG9wcnplZG5pIGR6aWXFhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXh0IGRheSd9ID0gJ05hc3TEmXBueSBkemllxYQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyB3aXRob3V0IGVudHJpZXMnfSA9ICdEbmkgYmV6IHJhcG9ydMOzdyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmaWVsZHMgYXJlIG1hcmtlZCB3aXRoIGEgIioiLid9ID0gJ1d5bWFnYW5lIHBvbGEgc8SFIG96bmFjem9uZSAiKiIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIHRvIGZpbGwgaW4gc3RhcnQgYW5kIGVuZCB0aW1lIG9yIGEgdGltZSBwZXJpb2QuJ30gPSAnTXVzaXN6IHdwcm93YWR6acSHIGR6aWXFhCBwb2N6xIV0a3Ugb3JheiBrb8WEY2EgbHViIGN6YXMgdHJ3YW5pYSB3IG9rcmVzaWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2snfSA9ICdaYWRhbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbWFyayd9ID0gJ1V3YWdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgTmF2aWdhdGlvbid9ID0gJ05hd2lnYWNqYSBwbyBkYWNpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYWRkIGEgcmVtYXJrIHdpdGggbW9yZSB0aGFuIDggY2hhcmFjdGVycyEuJ30gPSAnUHJvc3rEmSBkb2RhxIcgdXdhZ8SZIHNrxYJhZGFqxIVjxIUgc2nEmSB6IHdpxJljZWogbmnFvCA4IHpuYWvDs3chJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZ2F0aXZlIHRpbWVzIGFyZSBub3QgYWxsb3dlZC4nfSA9ICdVamVtbmUgY3phc3kgc8SFIG5pZWRvendvbG9uZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkLiBTdGFydCB0aW1lIG1hdGNoZXMgYW5vdGhlciBpbnRlcnZhbC4nfSA9ICdQb3d0YXJ6YWrEhWNlIHNpxJkgY3phc3kgbmllIHPEhSBkb3p3b2xvbmUuIEN6YXMgcm96cG9jesSZY2lhIHBhc3VqZSBkbyBpbm5lZ28gcHJ6ZWR6aWHFgnUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCB0aW1lIG11c3QgYmUgYWZ0ZXIgc3RhcnQgdGltZS4nfSA9ICdDemFzIHpha2/FhGN6ZW5pYSBtdXNpIGJ5xIcgcG8gY3phc2llIHJvenBvY3rEmWNpYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkLiBFbmQgdGltZSBtYXRjaGVzIGFub3RoZXIgaW50ZXJ2YWwuJ30gPSAnUG93dGFyemFqxIVjZSBzacSZIGN6YXN5IG5pZSBzxIUgZG96d29sb25lLiBDemFzIHpha2/FhGN6ZW5pYSBwYXN1amUgZG8gaW5uZWdvIHByemVkemlhxYJ1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgaXMgYmlnZ2VyIHRoYW4gdGhlIGludGVydmFsIGJldHdlZW4gc3RhcnQgYW5kIGVuZCB0aW1lcyEnfSA9ICdPa3JlcyBqZXN0IHdpxJlrc3p5IG5pxbwgb2RzdMSZcCBtacSZZHp5IHBvY3rEhXRraWVtIGkga2/FhGNlbSBjemFzw7N3ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHBlcmlvZCEgQSBkYXkgaGFzIG9ubHkgMjQgaG91cnMuJ30gPSAnTmllcHJhd2lkxYJvd3kgb2tyZXMhIER6aWXFhCBtYSB0eWxrbyAyNCBnb2R6aW55Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIHBlcmlvZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLid9ID0gJ1ByYXdpZMWCb3d5IG9rcmVzIG11c2kgYnnEhyB3acSZa3N6eSBuacW8IHplcm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgcGVyaW9kISBOZWdhdGl2ZSBwZXJpb2RzIGFyZSBub3QgYWxsb3dlZC4nfSA9ICdOaWVwcmF3aWTFgm93eSBva3JlcyEgVWplbW55IG9rcmVzIG5pZSBqZXN0IGRvendvbG9ueS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG9uZSByb3cnfSA9ICdEb2RhaiBqZWRlbiB3aWVyc3onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG90YWwnfSA9ICdTdW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09uIHZhY2F0aW9uJ30gPSAnVXJsb3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBvbmx5IHNlbGVjdCBvbmUgY2hlY2tib3ggZWxlbWVudCEnfSA9ICdNb8W8ZXN6IHphem5hY3p5xIcgdHlsa28gamVkZW4gZWxlbWVudCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gc2ljayBsZWF2ZSd9ID0gJ1p3b2xuaWVuaWUgbGVrYXJza2llJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09uIG92ZXJ0aW1lIGxlYXZlJ30gPSAnV29sbmUgemEgbmFkZ29kemlueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCBpdGVtcyd9ID0gJ1Bva2HFvCB3c3p5c3RraWUgZWxlbWVudHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIFRpbWUgQWNjb3VudGluZyBFbnRyeSd9ID0gJ1VzdcWEIHBvenljasSZIHphcmFwb3J0b3dhbmVnbyBjemFzdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maXJtIGluc2VydCd9ID0gJ1phdHdpZXJkxbogd3N0YXdpZW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIHNpY2sgbGVhdmU/J30gPSAnSmVzdGXFmyBwZXdpZW4gxbxlIHByYWNvd2HFgmXFmyBuYSB6d29sbmllbml1IGxla2Fyc2tpbT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiB2YWNhdGlvbj8nfSA9ICdKZXN0ZcWbIHBld2llbiDFvGUgcHJhY293YcWCZcWbIHBvZGN6YXMgdXJsb3B1Pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIG92ZXJ0aW1lIGxlYXZlPyd9ID0gJ0plc3RlxZsgcGV3aWVuIMW8ZSBwcmFjb3dhxYJlxZsgbmEgd29sbnltIHogbmFkZ29kemluPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIG1vcmUgdGhhbiAxNiBob3Vycz8nfSA9ICdKZXN0ZcWbIHBld2llbiDFvGUgcHJhY293YcWCZcWbIHdpxJljZWogbmnFvCAxNiBnb2R6aW4/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhbGwgZGF5cyd9ID0gJ1phem5hY3ogd3N6eXN0a2llIGRuaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXNzIGVudHJ5J30gPSAnTWFzb3d5IHdwaXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGNob29zZSB0aGUgcmVhc29uIGZvciB5b3VyIGFic2VuY2UgZm9yIHRoZSBzZWxlY3RlZCBkYXlzJ30gPSAnUHJvc3rEmSB3eWJyYcSHIHBvd8OzZCBicmFrdSBvYmVjbm/Fm2NpIGRsYSB3eWJyYW55Y2ggZG5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBjaG9vc2UgYXQgbGVhc3Qgb25lIGRheSEnfSA9ICdQcm9zesSZIHd5YnJhxIcgY29uYWptbmllaiBqZWRlbiBkemllxYQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBjaG9vc2UgYSByZWFzb24gZm9yIGFic2VuY2UhJ30gPSAnUHJvc3rEmSB3eWJyYcSHIHBvd8OzZCBuaWVvYmVjbm/Fm2NpISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXNzIEVudHJ5J30gPSAnTWFzb3d5IHdwaXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBmb3JtYXQhIFBsZWFzZSBlbnRlciBhIHRpbWUgd2l0aCB0aGUgZm9ybWF0IEhIOk1NLid9ID0gJ05pZXByYXdpZMWCb3d5IGZvcm1hdCEgUHJvc3rEmSBwb2RhxIcgY3phcyB3IGdvZHppbmFjaCBHRzpNTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnMjQ6MDAgaXMgb25seSBwZXJtaXR0ZWQgYXMgZW5kIHRpbWUuJ30gPSAnMjQ6MDAgamVzdCBkb3p3b2xvbmUgamVkeW5pZSBqYWtvIGtvbmllYyBjemFzdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB0aW1lISBBIGRheSBoYXMgb25seSAyNCBob3Vycy4nfSA9ICdOaWVwcmF3aWTFgm93eSBjemFzISBEemllxYQgbWEgdHlsa28gMjQgZ29kemlueS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdPdmVydmlldwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSByZXBvcnRpbmcgbW9udGhseSBvdmVydmlldyd9ID0gJ1ByemVnbMSFZCBtaWVzacSZY3puZWdvIHJhcG9ydHUgY3phc3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKEhvdXJzKSd9ID0gJ05hZGdvZHppbnkgKEdvZHppbnkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0aGlzIG1vbnRoKSd9ID0gJ05hZGdvZHppbnkgKHRlbiBtaXNpxIVjKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSAodG90YWwpJ30gPSAnTmFkZ29kemlueSAoxYLEhWN6bmllKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgb3ZlcnRpbWUgbGVhdmUnfSA9ICdQb3pvc3RhxYJlIG5hZGdvZHppbnkgZG8gb2RlYnJhbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIChEYXlzKSd9ID0gJ1VybG9wIChEbmkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ1d5a29yenlzdGFuZSBkbmkgdXJsb3B1ICh0ZW4gbWllc2nEhWMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHRha2VuICh0b3RhbCknfSA9ICdXeWtvcnp5c3RhbmUgZG5pIHVybG9wdSAoxYLEhWN6bmllKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgdmFjYXRpb24nfSA9ICdQb3pvc3RhxYJvIHVybG9wdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIExlYXZlIChEYXlzKSd9ID0gJ1VybG9wIGNob3JvYm93eSAoRG5pKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ1d5a29yenlzdGFuZSBkbmkgdXJsb3B1IGNob3JvYm93ZWdvICh0ZW4gbWllc2nEhWMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUgdGFrZW4gKHRvdGFsKSd9ID0gJ1d5a29yenlzdGFuZSBkbmkgdXJsb3B1IGNob3JvYm93ZWdvICjFgsSFY3puaWUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXZpb3VzIG1vbnRoJ30gPSAnUG9wcnplZG5pIG1pZXNpxIVjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05leHQgbW9udGgnfSA9ICdOYXN0xJlwbnkgbWllc2nEhWMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5J30gPSAnRHppZcWEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZWtkYXknfSA9ICdEemllxYQgdHlnb2RuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya2luZyBIb3Vycyd9ID0gJ0dvZHppbnkgcHJhY3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG90YWwgd29ya2VkIGhvdXJzJ30gPSAnxYHEhWN6bmUgZ29kemlueSB3eXByYWNvd2FuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyXCdzIHByb2plY3Qgb3ZlcnZpZXcnfSA9ICdQcnplZ2zEhWQgcHJvamVrdHUgdcW8eXRrb3duaWthL8Ozdyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3VycyAobW9udGhseSknfSA9ICdHb2R6aW55IChtaWVzacSZY3puaWUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIChMaWZldGltZSknfSA9ICdHb2R6aW55ICjFgsSFY3puaWUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYW5kIHRvdGFsJ30gPSAnT2fDs8WCZW0nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdQcm9qZWN0UmVwb3J0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHJlcG9ydCd9ID0gJ1JhcG9ydCBwcm9qZWt0dSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1JlcG9ydGluZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSByZXBvcnRpbmcnfSA9ICdSYXBvcnQgY3phc3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGggTmF2aWdhdGlvbid9ID0gJ05hd2lnYWNqYSBtaWVzacSZY3puYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIHJlcG9ydHMnfSA9ICdSYXBvcnR5IHXFvHl0a293bmlrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb250aGx5IHRvdGFsJ30gPSAnxYHEhWN6bmllIC0gbWllc2nEmWN6bmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpZmV0aW1lIHRvdGFsJ30gPSAnxYHEhWN6bmllIC0gb2fDs8WCZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgbGVhdmUnfSA9ICdXb2xuZSB6YSBuYWRnb2R6aW55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uJ30gPSAnVXJsb3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBsZWF2ZSd9ID0gJ1VybG9wIGNob3JvYm93eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiByZW1haW5pbmcnfSA9ICdQb3pvc3RhxYJlIGRuaSBwb3phIHByYWPEhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHJlcG9ydHMnfSA9ICdSYXBvcnR5IHByb2pla3R1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nU2V0dGluZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUaW1lIEFjY291bnRpbmcgUHJvamVjdCBTZXR0aW5ncyd9ID0gJ0VkeXR1aiB1c3Rhd2llbmlhIFJhcG9ydG93YW5pYSBDemFzdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgcHJvamVjdCd9ID0gJ0RvZGFqIHByb2pla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFByb2plY3QnfSA9ICdEb2RhaiBwcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUHJvamVjdCBTZXR0aW5ncyd9ID0gJ0VkeXR1aiB1c3Rhd2llbmlhIHByb2pla3R1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXJlIGlzIGFscmVhZHkgYSBwcm9qZWN0IHdpdGggdGhpcyBuYW1lLiBQbGVhc2UsIGNob29zZSBhIGRpZmZlcmVudCBvbmUuJ30gPSAnVyBzeXN0ZW1pZSB6bmFqZHVqZSBzacSZIGp1xbwgcHJvamVrdCBvIHRha2llaiBuYXp3aWUuIFd5YmllcnogaW5uxIUgbmF6d8SZLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgQWNjb3VudGluZyBTZXR0aW5ncyd9ID0gJ0VkeXR1aiB1c3Rhd2llbmlhIFJhcG9ydG93YW5pYSBDemFzdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdGFzayd9ID0gJ0RvZGFqIHphZGFuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHVzZXInfSA9ICdOb3d5IHXFvHl0a293bmlrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgUHJvamVjdHMnfSA9ICdGaWx0ciBuYSBwcm9qZWt0eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFRhc2tzJ30gPSAnRmlsdHIgbmEgemFkYW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFVzZXJzJ30gPSAnRmlsdHIgbmEgdcW8eXRrb3duaWvDs3cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCBMaXN0J30gPSAnTGlzdGEgcHJvamVrdMOzdyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIExpc3QnfSA9ICdMaXN0YSB6YWRhxYQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFRhc2snfSA9ICdEb2RhaiB6YWRhbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGFzayBTZXR0aW5ncyd9ID0gJ0VkeXR1aiB1c3Rhd2llbmlhIHphZGFuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHRhc2sgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICdXIHN5c3RlbWllIHpuYWpkdWplIHNpxJkganXFvCB6YWRhbmllIG8gdGFraWVqIG5hendpZS4gV3liaWVyeiBpbm7EhSBuYXp3xJkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgTGlzdCd9ID0gJ0xpc3RhIHXFvHl0a293bmlrw7N3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBVc2VyIFNldHRpbmdzJ30gPSAnVXN0YXdpZW5pYSBub3dlZ28gdcW8eXRrb3duaWthJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVXNlciBTZXR0aW5ncyd9ID0gJ0VkeXR1aiB1c3Rhd2llbmlhIHXFvHl0a293bmlrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50cyd9ID0gJ0tvbWVudGFyeic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IE92ZXJ0aW1lJ30gPSAnUG9rYcW8IG5hZGdvZHppbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3cgcHJvamVjdCBjcmVhdGlvbid9ID0gJ1plenfDs2wgbmEgdHdvcnplbmllIHByb2pla3R1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBCZWdpbid9ID0gJ09rcmVzIC0gIHBvY3rEhXRlayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgRW5kJ30gPSAnT2tyZXMgLSBrb25pZWMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyBvZiBWYWNhdGlvbid9ID0gJ0RuaSB1cmxvcHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgcGVyIFdlZWsnfSA9ICdHb2R6aW4gdyB0eWdvZG5pdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdXRob3JpemVkIE92ZXJ0aW1lJ30gPSAnWmV6d8OzbCBuYSBuYWRnb2R6aW55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBlbmQgbXVzdCBiZSBhZnRlciBwZXJpb2QgYmVnaW4uJ30gPSAnT2tyZXMga2/FhGNvd3kgbXVzaSBiecSHIHBvIG9rcmVzaWUgcm96cG9jesSZY2lhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB0aW1lIHBlcmlvZHMgZm91bmQuJ30gPSAnQnJhayBva3Jlc8OzdyBjemFzdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRpbWUgcGVyaW9kJ30gPSAnRG9kYWogb2tyZXMgY3phc3UnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdWaWV3CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3IFRpbWUgUmVjb3JkJ30gPSAnUG9rYcW8IHdwaXN6IGN6YXN1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZpZXcgb2YgJ30gPSAnV2lkb2sgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRhdGEgZm91bmQgZm9yIHRoaXMgZGF5Lid9ID0gJ0JyYWsgZGFueWNoIG9kbm/Fm25pZSB0ZWdvIGRuaWEuJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMgZm9yIHRoZSB1c2VyLid9ID0gJ0ludGVyZmVqcyBhZ2VudGEgaW5mb3JtdWrEhWN5IG8gZG5pYWNoIGJleiB6YXJhcG9ydG93YW5lZ28gY3phc3UgcHJhY3kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgZGF0YSB0byB1c2Ugb24gYXR0cmlidXRlIGZvciB0aWNrZXQgc2VhcmNoIHNjcmVlbi4gRXhhbXBsZTogIlRpY2tldENyZWF0ZVRpbWVTdGFydFllYXI9MjAxMDtUaWNrZXRDcmVhdGVUaW1lU3RhcnRNb250aD0xMDtUaWNrZXRDcmVhdGVUaW1lU3RhcnREYXk9NDtUaWNrZXRDcmVhdGVUaW1lU3RvcFllYXI9MjAxMDtUaWNrZXRDcmVhdGVUaW1lU3RvcE1vbnRoPTExO1RpY2tldENyZWF0ZVRpbWVTdG9wRGF5PTM7Ii4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBuYW1lIGZvciBuZXcgYWN0aW9ucy4nfSA9ICdEb215xZtsbmEgbmF6d2EgZGxhIG5vd2VqIGFrY2ppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG5hbWUgZm9yIG5ldyBwcm9qZWN0cy4nfSA9ICdEb215xZtsbmEgbmF6d2EgZGxhIG5vd2VnbyBwcm9qZWt0dS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIGVuZC4nfSA9ICdEb215xZtsbmEgZGF0YSB6YWtvxYRjemVuaWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGF0ZSBzdGFydC4nfSA9ICdEb215xZtsbmEgZGF0YSByb3pwb2N6xJljaWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGVzY3JpcHRpb24uJ30gPSAnRG9tecWbbG5lIHVzdGF3aWVuaWUgZGxhIG9waXN1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIGxlYXZlIGRheXMuJ30gPSAnRG9tecWbbG5lIHVzdGF3aWVuaWUgZGxhIHVybG9wdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBvdmVydGltZS4nfSA9ICdEb215xZtsbmUgdXN0YXdpZW5pZSBkbGEgbmFkZ29kemluLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIHRoZSBzdGFuZGFyZCB3ZWVrbHkgaG91cnMuJ30gPSAnRG9tecWbbG5pZSB1c3Rhd2llbmllIGRsYSBzdGFuZGFyZG93eWNoIGdvZHppbiB0eWdvZG5pb3d5Y2guJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgYWN0aW9ucy4nfSA9ICdEb215xZtsbnkgc3RhdHVzIGRsYSBub3dlaiBha2NqaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0dXMgZm9yIG5ldyBwcm9qZWN0cy4nfSA9ICdEb215xZtsbnkgc3RhdHVzIGRsYSBub3dlZ28gcHJvamVrdHUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgdXNlcnMuJ30gPSAnRG9tecWbbG55IHN0YXR1cyBkbGEgbm93ZWdvIHXFvHl0a293bmlrYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aW1lIGFjY291bnRpbmcgbXVzdCBiZSBzZXQgdG8gYWxsIHRpY2tldHMgaW4gYnVsayBhY3Rpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHByb2plY3RzIGZvciB3aGljaCBhIHJlbWFyayBpcyByZXF1aXJlZC4gSWYgdGhlIFJlZ0V4cCBtYXRjaGVzIG9uIHRoZSBwcm9qZWN0LCB5b3UgaGF2ZSB0byBpbnNlcnQgYSByZW1hcmsgdG9vLiBUaGUgUmVnRXhwIHVzZSB0aGUgc214IHBhcmFtZXRlci4nfSA9ICdEZW50cm8gZGVzdGEgb3DDp8OjbyBkZSBjb25maWd1cmHDp8OjbywgdW1hIHJlZ2V4cCBwb2RlIHNlciBkZWZpbmlkYSBxdWUgZGV0ZXJtaW5hIHF1YWlzIHByb2pldG9zIHPDo28gcmVnaXN0cmFkb3MgY29tIHVtYSBvYnNlcnZhw6fDo28gZGV2ZSBzZXIgKG8gcmVnZXhwIGZ1bmNpb25hIGNvbSBTTVgtcGFyw6JtZXRyb3MpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgYWNjb3VudGluZyBzZXR0aW5ncyd9ID0gJ0VkeXR1aiB1c3Rhd2llbmlhIGN6YXN1IHJhcG9ydG93YW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgcmVjb3JkJ30gPSAnRWR5dHVqIHdwaXMgY3phc3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yIGhvdyBtYW55IGRheXMgYWdvIHlvdSBjYW4gaW5zZXJ0IHdvcmtpbmcgdW5pdHMuJ30gPSAnRGxhIGlsdSBkbmkgd3N0ZWN6IG1vxbxuYSB3c3Rhd2nEhyBqZWRub3N0a2kgY3phc3UgcHJhY3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZW5hYmxlZCwgdGhlIGRyb3Bkb3duIGVsZW1lbnRzIGluIHRoZSBlZGl0IHNjcmVlbiBhcmUgY2hhbmdlZCB0byBhdXRvY29tcGxldGlvbiBmaWVsZHMuJ30gPSAnSmXFm2xpIGFrdHl3b3dhbmUsIGxpc3RhIHd5YmllcmFuYSBqZXN0IHphc3TEhXBpb27EhSBhdXRvd3lwZcWCbmlhbmllbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZW5hYmxlZCwgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBlbnRlciAib24gdmFjYXRpb24gbGVhdmUiLCAib24gc2ljayBsZWF2ZSIgYW5kICJvbiBvdmVydGltZSBsZWF2ZSIgdG8gbXVsdGlwbGUgZGF0ZXMgYXQgb25jZS4nfSA9ICdKZcWbbGkgYWt0eXdvd2FuZSwgdcW8eXRrb3duaWsgbW/FvGUgd3N0YXdpxIcgInVybG9wIiwgInVybG9wIGNob3JvYm93eSIgb3JheiAidXJsb3AgemEgbmFkZ29kemlueSIgZG8ga2lsa3UgZGF0IGplZG5vY3plxZtuaWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIHdvcmtpbmcgZGF5cyBhZnRlciB3aGljaCB0aGUgd29ya2luZyB1bml0cyBoYXZlIHRvIGJlIGluc2VydGVkLid9ID0gJ01ha3N5bWFsbmEgbGljemJhIGRuaSByb2JvY3p5Y2gsIHBvIGt0w7NyeWNoIGplZG5vc3RraSBjemFzdSBwb3dpbm55IHpvc3RhxIcgd3Byb3dhZHpvbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIHdvcmtpbmcgZGF5cyB3aXRob3V0aCB3b3JraW5nIHVuaXRzIGVudHJ5IGFmdGVyIHdoaWNoIGEgd2FybmluZyB3aWxsIGJlIHNob3duLid9ID0gJ01ha3N5bWFsbmEgbGljemJhIGRuaSByb2JvY3p5Y2ggYmV6IHdwcm93YWR6YW5pYSByYXBvcnR1IGN6YXN1LCBwbyBrdMOzcnljaCB6b3N0YW5pZSB3ecWbd2lldGxvbmUgb3N0cnplxbxlbmllLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHRpbWUgcmVwb3J0aW5nJ30gPSAnTyByZWxhdMOzcmlvIGRlIFRlbXBvIGRvIHByb2pldG8gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBhY3Rpb24gbGlzdCBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgcHJvamVjdC4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBhY3Rpb24ocykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBwcm9qZWN0IGxpc3QgYWNjb3JkaW5nIHRvIHVzZXIgZ3JvdXBzLiBLZXkgY29udGFpbnMgcmVndWxhciBleHByZXNzaW9uIGZvciBwcm9qZWN0KHMpLCBjb250ZW50IGNvbnRhaW5zIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGdyb3Vwcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZXMgdGhlIGxvZ2luIGFuZCBwYXNzd29yZCBvbiB0aGUgc2Vzc2lvbiB0YWJsZSBpbiB0aGUgZGF0YWJhc2UsIGlmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBTZXNzaW9uTW9kdWxlLid9ID0gJ1phcGlzdWplIGxvZ2luIG9yYXogaGFzxYJvLCBkbyB0YWJlbGkgc2VzamkgdyBiYXppZSBkYW55Y2gsIGplxZtsaSBiYXphIGRhbnljaCB6b3N0YcWCYSB3eWJyYW5hIHcgU2Vzc2lvbk1vZHVsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhcnRpY2xlIGFzIHJpY2ggdGV4dCBldmVuIGlmIHJpY2ggdGV4dCB3cml0aW5nIGlzIGRpc2FibGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgaWYgd29ya2luZyBob3VycyBjYW4gYmUgaW5zZXJ0ZWQgd2l0aG91dCBzdGFydCBhbmQgZW5kIHRpbWVzLid9ID0gJ09rcmXFm2xhLCBjenkgY3phcyBwcmFjeSBtb8W8ZSB6b3N0YcSHIHdwcm93YWR6b255IGJleiBwb2Rhd2FuaWEgY3phc3Ugcm96cG9jesSZY2lhIG9yYXogemFrb8WEY3plbmlhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBmb3JjZXMgaW5zZXJ0cyBpbiBUaW1lQWNjb3VudGluZy4nfSA9ICdUZW4gbW9kdcWCIHd5bXVzemEgd3Byb3dhZHplbmlhIHcgUmFwb3J0YWNoIEN6YXN1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG5vdGlmaWNhdGlvbiBtb2R1bGUgZ2l2ZXMgYSB3YXJuaW5nIGlmIHRoZXJlIGFyZSB0b28gbWFueSBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cy4nfSA9ICdUZW4gbW9kdcWCIGRhamUgb3N0cnplxbxlbmllLCBqZcWbbGkgamVzdCB6Ynl0IG5pZXBlxYJueWNoIGRuaSByb2JvY3p5Y2guJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgYWNjb3VudGluZy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gdXNlIGlmIHNvbWUgYWN0aW9ucyByZWR1Y2VkIHRoZSB3b3JraW5nIGhvdXJzIChmb3IgZXhhbXBsZSwgaWYgb25seSBoYWxmIG9mIHRoZSB0cmF2ZWxpbmcgdGltZSBpcyBwYWlkIEtleSA9PiB0cmF2ZWxpbmc7IENvbnRlbnQgPT4gNTApLid9ID0gJ1XFvHl3YW5lIGplxZtsaSBuaWVrdMOzcmUgZHppYcWCYW5pYSB6bW5pZWpzennFgnkgZ29kemlueSBwcmFjeSAobnAuIGplxZtsaSB0eWxrbyBwb8WCb3dhIGN6YXMgcG9kcsOzxbx5IGplc3Qgd3lwxYJhY2FuYSBrbHVjeiA9PiBwb2Ryw7PFvGU7IFphd2FydG/Fm8SHID0+IDUwKS4nOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbid9ID0gJ1Bvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUdWUnfSA9ICdXdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWQnfSA9ICfFmnInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGh1J30gPSAnQ3p3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyaSd9ID0gJ1BpxIUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F0J30gPSAnU29iJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1bid9ID0gJ05pZWR6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0phbnVhcnknfSA9ICdTdHljemXFhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZWJydWFyeSd9ID0gJ0x1dHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFyY2gnfSA9ICdNYXJ6ZWMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXByaWwnfSA9ICdLd2llY2llxYQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF5J30gPSAnTWFqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bmUnfSA9ICdDemVyd2llYyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdWx5J30gPSAnTGlwaWVjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1Z3VzdCd9ID0gJ1NpZXJwaWXFhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXB0ZW1iZXInfSA9ICdXcnplc2llxYQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2N0b2Jlcid9ID0gJ1Bhxbpkemllcm5payc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3ZlbWJlcid9ID0gJ0xpc3RvcGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2VtYmVyJ30gPSAnR3J1ZHppZcWEJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCBwcm9qZWN0cyd9ID0gJ1Bva2HFvCB3c3p5c3RraWUgcHJvamVrdHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2YWxpZCBwcm9qZWN0cyd9ID0gJ1Bva2HFvCBha3R1YWxuZSBwcm9qZWt0eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lQWNjb3VudGluZyd9ID0gJ1JhcG9ydG93YW5pZSBDemFzdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3Rpb25zJ30gPSAnQWtjamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciB1cGRhdGVkISd9ID0gJ1XFvHl0a293bmlrIHphYWt0dWFsaXpvd2FueSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBhZGRlZCEnfSA9ICdVxbx5dGtvd25payBkb2RhbnkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgYWRkZWQhJ30gPSAnUHJvamVrdCBkb2RhbnkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgdXBkYXRlZCEnfSA9ICdQcm9qZWt0IHphYWt0dWFsaXpvd2FueSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayBhZGRlZCEnfSA9ICdaYWRhbmllIGRvZGFuZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayB1cGRhdGVkISd9ID0gJ1phZGFuaWUgemFha3R1YWxpem93YW5lISc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgZGVsZXRlIFdvcmtpbmcgVW5pdHMhJ30gPSAnTmllIG1vxbxuYSB1c3VuxIXEhyBKZWRub3N0ZWsgQ3phc3UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzYXZlIHNldHRpbmdzLCBiZWNhdXNlIGEgZGF5IGhhcyBvbmx5IDI0IGhvdXJzISd9ID0gJ05pZSBtb8W8bmEgemFwaXNhxIcgdXN0YXdpZcWEIHBvbmlld2HFvCBkemllxYQgbWEgdHlsa28gMjQgZ29kemlueSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGluc2VydCB5b3VyIHdvcmtpbmcgaG91cnMhJ30gPSAnUHJvc3rEmSB3cHJvd2FkemnEhyBnb2R6aW55IHByYWN5ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSYXBvcnRvd2FuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzc2Z1bCBpbnNlcnQhJ30gPSAnUG9tecWbbG5pZSB3c3Rhd2lvbm8hJzsKCn0KCjE7Cg==
77u/IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wdF9CUl9UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0JSX1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICdWb2PDqiByZWFsbWVudGUgZGVzZWphIGV4Y2x1aXIgYSBjb250YWJpbGl6YcOnw6NvIGRlc3NlIGRpYT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgUmVjb3JkJ30gPSAnRWRpdGFyIHJlZ2lzdHJvIGRlIHRlbXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3Qgc2V0dGluZ3MnfSA9ICdEZWZpbmnDp8O1ZXMgZGUgUHJvamV0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIE5hdmlnYXRpb24nfSA9ICdFc2NvbGhhIGRlIERhdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJldmlvdXMgZGF5J30gPSAnRGlhIGFudGVyaW9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05leHQgZGF5J30gPSAnUHLDs3hpbW8gRGlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgd2l0aG91dCBlbnRyaWVzJ30gPSAnRGlhcyBzZW0gZW50cmFkYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZmllbGRzIGFyZSBtYXJrZWQgd2l0aCBhICIqIi4nfSA9ICdPcyBjYW1wb3MgcXVlIHPDo28gb2JyaWdhdMOzcmlvcyBzw6NvIG1hcmNhZG9zIGNvbSB1bSBhc3RlcmlzY28gIioiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIHRvIGZpbGwgaW4gc3RhcnQgYW5kIGVuZCB0aW1lIG9yIGEgdGltZSBwZXJpb2QuJ30gPSAnVm9jw6ogdGVtIHF1ZSBwcmVlbmNoZXIgbyB0ZW1wbyBkZSBpbsOtY2lvIGUgZmluYWwgb3UgdW0gcGVyw61vZG8gZGUgdGVtcG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2snfSA9ICdUYXJlZmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtYXJrJ30gPSAnTWFyY2FyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgTmF2aWdhdGlvbid9ID0gJ0VzY29saGEgZGUgRGF0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYWRkIGEgcmVtYXJrIHdpdGggbW9yZSB0aGFuIDggY2hhcmFjdGVycyEuJ30gPSAnUG9yIGZhdm9yIGluc2lyYSB1bSBjb21lbnTDoXJpbyBjb20gcGVsbyBtZW5vcyA4IGNhcmFjdGVyZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVnYXRpdmUgdGltZXMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ1ZhbG9yZXMgbmVnYXRpdm9zIG7Do28gc8OjbyBwZXJtaXRpZG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBlYXRlZCBob3VycyBhcmUgbm90IGFsbG93ZWQuIFN0YXJ0IHRpbWUgbWF0Y2hlcyBhbm90aGVyIGludGVydmFsLid9ID0gJ0VzdGUgaG9yw6FyaW8gZGUgaW7DrWNpbyDDqSBpbmRpY2FkbyBlbSBvdXRyYSBlbnRyYWRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgdGltZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IHRpbWUuJ30gPSAnSG9yYSBkZSB0w6lybWlubyBkZXZlIHNlciBwb3N0ZXJpb3Igw6AgaG9yYSBkZSBpbsOtY2lvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBlYXRlZCBob3VycyBhcmUgbm90IGFsbG93ZWQuIEVuZCB0aW1lIG1hdGNoZXMgYW5vdGhlciBpbnRlcnZhbC4nfSA9ICdIb3JhcyByZXBldGlkYXMgbsOjbyBzw6NvIHBlcm1pdGlkYXMuIEhvcmEgZGUgdMOpcm1pbm8gY29pbmNpZGUgY29tIG91dHJvIGludGVydmFsby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIGlzIGJpZ2dlciB0aGFuIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgdGltZXMhJ30gPSAnUGVyw61vZG8gw6kgbWFpb3IgZG8gcXVlIG8gaW50ZXJ2YWxvIGVudHJlIG9zIGhvcsOhcmlvcyBkZSBpbsOtY2lvIGUgZmltISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHBlcmlvZCEgQSBkYXkgaGFzIG9ubHkgMjQgaG91cnMuJ30gPSAnUGVyw61vZG8gaW52w6FsaWRvISBVbSBkaWEgc8OzIHRlbSAyNCBob3Jhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB2YWxpZCBwZXJpb2QgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nfSA9ICdVbSBwZXLDrW9kbyB2w6FsaWRvIGRldmUgc2VyIG1haW9yIHF1ZSB6ZXJvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHBlcmlvZCEgTmVnYXRpdmUgcGVyaW9kcyBhcmUgbm90IGFsbG93ZWQuJ30gPSAnUGVyw61vZG8gaW52w6FsaWRvISBQZXLDrW9kb3MgbmVnYXRpdm9zIG7Do28gc8OjbyBwZXJtaXRpZG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgb25lIHJvdyd9ID0gJ0FkaWNpb25hciB1bWEgbGluaGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG90YWwnfSA9ICdUb3RhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbiB2YWNhdGlvbid9ID0gJ0VtIGbDqXJpYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBvbmx5IHNlbGVjdCBvbmUgY2hlY2tib3ggZWxlbWVudCEnfSA9ICdWb2PDqiBwb2RlIHNlbGVjaW9uYXIgYXBlbmFzIHVtIGVsZW1lbnRvIGRhIGNhaXhhIGRlIHNlbGXDp8OjbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gc2ljayBsZWF2ZSd9ID0gJ0VtIGxpY2Vuw6dhIG3DqWRpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gb3ZlcnRpbWUgbGVhdmUnfSA9ICdFbSBzb2JyZWhvcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgaXRlbXMnfSA9ICdNb3N0cmFyIHRvZG9zIG9zIGl0ZW5zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUaW1lIEFjY291bnRpbmcgRW50cnknfSA9ICdFeGNsdWlyIEVudHJhZGEgZGUgQ29udGFiaWxpemHDp8OjbyBkZSBUZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maXJtIGluc2VydCd9ID0gJ0NvbmZpcm1lIGluc2VyaXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiBzaWNrIGxlYXZlPyd9ID0gJ1RlbSBjZXJ0ZXphIHF1ZSB2b2PDqiB0cmFiYWxob3UgZW5xdWFudG8gZXN0ZXZlIGVtIGxpY2Vuw6dhIG3DqWRpY2E/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgd2hpbGUgeW91IHdlcmUgb24gdmFjYXRpb24/J30gPSAnVGVtIGNlcnRlemEgcXVlIHZvY8OqIHRyYWJhbGhvdSBlbnF1YW50byBlc3RldmUgZW0gZsOpcmlhcz8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiBvdmVydGltZSBsZWF2ZT8nfSA9ICdUZW0gY2VydGV6YSBxdWUgdm9jw6ogdHJhYmFsaG91IGVtIHBlcsOtb2RvIGRlIHNvYnJlaG9yYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCBtb3JlIHRoYW4gMTYgaG91cnM/J30gPSAnVGVtIGNlcnRlemEgcXVlIHZvY8OqIHRyYWJhbGhvdSBtYWlzIGRlIDE2IGhvcmFzPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYWxsIGRheXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzcyBlbnRyeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgY2hvb3NlIHRoZSByZWFzb24gZm9yIHlvdXIgYWJzZW5jZSBmb3IgdGhlIHNlbGVjdGVkIGRheXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGNob29zZSBhdCBsZWFzdCBvbmUgZGF5ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgY2hvb3NlIGEgcmVhc29uIGZvciBhYnNlbmNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXNzIEVudHJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZm9ybWF0ISBQbGVhc2UgZW50ZXIgYSB0aW1lIHdpdGggdGhlIGZvcm1hdCBISDpNTS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnMjQ6MDAgaXMgb25seSBwZXJtaXR0ZWQgYXMgZW5kIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgdGltZSEgQSBkYXkgaGFzIG9ubHkgMjQgaG91cnMuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nT3ZlcnZpZXcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgcmVwb3J0aW5nIG1vbnRobHkgb3ZlcnZpZXcnfSA9ICdWaXPDo28gR2VyYWwgZG8gUmVsYXTDs3JpbyBkZSBDb250YWJpbGl6YcOnw6NvIE1lbnNhbCBkZSBUZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSAoSG91cnMpJ30gPSAnSG9yYS1leHRyYSAoZW0gSG9yYXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0aGlzIG1vbnRoKSd9ID0gJ0hvcmEtZXh0cmEgKGVzdGUgbcOqcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKHRvdGFsKSd9ID0gJ0hvcmEtZXh0cmEgKHRvdGFsKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgb3ZlcnRpbWUgbGVhdmUnfSA9ICdIb3JhLWV4dHJhIHJlbWFuZXNjZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiAoRGF5cyknfSA9ICdGw6lyaWFzIChlbSBEaWFzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiB0YWtlbiAodGhpcyBtb250aCknfSA9ICdGw6lyaWFzIGdvemFkYXMgKGVzdGUgbcOqcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gdGFrZW4gKHRvdGFsKSd9ID0gJ0bDqXJpYXMgZ296YWRhcyAodG90YWwpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbWFpbmluZyB2YWNhdGlvbid9ID0gJ0bDqXJpYXMgcmVtYW5lc2NlbnRlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIExlYXZlIChEYXlzKSd9ID0gJ0RpYXMgQWZhc3RhZG9zIChlbSBEaWFzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ0FmYXN0YW1lbnRvIHBvciBkb2Vuw6dhIChlc3RlIE3DqnMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUgdGFrZW4gKHRvdGFsKSd9ID0gJ0FmYXN0YW1lbnRvIHBvciBkb2Vuw6dhICh0b3RhbCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJldmlvdXMgbW9udGgnfSA9ICdNw6pzIGFudGVyaW9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05leHQgbW9udGgnfSA9ICdQcsOzeGltbyBtw6pzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheSd9ID0gJ0RpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWVrZGF5J30gPSAnRGlhIGRlIHNlbWFuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JraW5nIEhvdXJzJ30gPSAnSG9yYXMgZGUgVHJhYmFsaG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG90YWwgd29ya2VkIGhvdXJzJ30gPSAnVG90YWwgZGUgaG9yYXMgdHJhYmFsaGFkYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlclwncyBwcm9qZWN0IG92ZXJ2aWV3J30gPSAnVmlzw6NvIGdlcmFsIGRlIHByb2pldG9zIGRlIHVzdcOhcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIChtb250aGx5KSd9ID0gJ0hvcmFzIChwb3IgbcOqcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgKExpZmV0aW1lKSd9ID0gJ0hvcmFzICh0b3RhbCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhbmQgdG90YWwnfSA9ICdUb3RhbCBHZXJhbCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1Byb2plY3RSZXBvcnRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgcmVwb3J0J30gPSAnUmVsYXTDs3JpbyBkbyBwcm9qZXRvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nUmVwb3J0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIHJlcG9ydGluZyd9ID0gJ1JlbGF0w7NyaW8gZGUgSG9yYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGggTmF2aWdhdGlvbid9ID0gJ0VzY29saGEgZGUgTcOqcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIHJlcG9ydHMnfSA9ICdSZWxhdMOzcmlvcyBkZSB1c3XDoXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb250aGx5IHRvdGFsJ30gPSAnVG90YWwgbWVuc2FsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpZmV0aW1lIHRvdGFsJ30gPSAnU29tYSBUb3RhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSBsZWF2ZSd9ID0gJ1NvYnJlaG9yYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbid9ID0gJ0bDqXJpYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBsZWF2ZSd9ID0gJ0xpY2Vuw6dhIG3DqWRpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gcmVtYWluaW5nJ30gPSAnRGlhcyBkZSBBZmFzdGFtZW50byBSZW1hbmVzY2VudGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgcmVwb3J0cyd9ID0gJ1JlbGF0w7NyaW9zIGRlIHByb2pldG8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdTZXR0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgQWNjb3VudGluZyBQcm9qZWN0IFNldHRpbmdzJ30gPSAnRWRpdGFyIGRlZmluacOnw7VlcyBkZSBwcm9qZXRvIHBhcmEgY29udGFiaWxpemHDp8OjbyBkZSB0ZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgcHJvamVjdCd9ID0gJ0FkaWNpb25hciBwcm9qZXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBQcm9qZWN0J30gPSAnQWRpY2lvbmFyIFByb2pldG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBQcm9qZWN0IFNldHRpbmdzJ30gPSAnRWRpdGFyIGFzIGNvbmZpZ3VyYcOnw7VlcyBkbyBwcm9qZXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXJlIGlzIGFscmVhZHkgYSBwcm9qZWN0IHdpdGggdGhpcyBuYW1lLiBQbGVhc2UsIGNob29zZSBhIGRpZmZlcmVudCBvbmUuJ30gPSAnSsOhIGV4aXN0ZSB1bSBwcm9qZXRvIGNvbSBlc3RlIG5vbWUuIFBvciBmYXZvciwgZXNjb2xoYSB1bSBkaWZlcmVudGUuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgQWNjb3VudGluZyBTZXR0aW5ncyd9ID0gJ0VkaXRhciBkZWZpbmnDp8O1ZXMgZGUgY29udGFiaWxpemHDp8OjbyBkZSB0ZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdGFzayd9ID0gJ0FkaWNpb25hciB0YXJlZmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHVzZXInfSA9ICdOb3ZvIHVzdcOhcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgUHJvamVjdHMnfSA9ICdGaWx0cm8gcGFyYSBQcm9qZXRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFRhc2tzJ30gPSAnRmlsdHJvIHBhcmEgVGFyZWZhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFVzZXJzJ30gPSAnRmlsdHJvIHBhcmEgVXN1w6FyaW9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgTGlzdCd9ID0gJ0xpc3RhIGRlIFByb2pldG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgTGlzdCd9ID0gJ0xpc3RhIGRlIFRhcmVmYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFRhc2snfSA9ICdBZGljaW9uYXIgVGFyZWZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGFzayBTZXR0aW5ncyd9ID0gJ0VkaXRhciBEZWZpbmnDp8O1ZXMgZGEgVGFyZWZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXJlIGlzIGFscmVhZHkgYSB0YXNrIHdpdGggdGhpcyBuYW1lLiBQbGVhc2UsIGNob29zZSBhIGRpZmZlcmVudCBvbmUuJ30gPSAnSsOhIGV4aXN0ZSB1bWEgdGFyZWZhIGNvbSBlc3RlIG5vbWUuIFBvciBmYXZvciwgZXNjb2xoYSB1bSBkaWZlcmVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgTGlzdCd9ID0gJ0xpc3RhIGRlIHVzdcOhcmlvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgVXNlciBTZXR0aW5ncyd9ID0gJ05vdmFzIENvbmZpZ3VyYcOnw7VlcyBkbyBVc3XDoXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFVzZXIgU2V0dGluZ3MnfSA9ICdFZGl0YXIgYXMgY29uZmlndXJhw6fDtWVzIGRvIHVzdcOhcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnRzJ30gPSAnQ29tZW50w6FyaW9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgT3ZlcnRpbWUnfSA9ICdNb3N0cmFyIFNvYnJlaG9yYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3cgcHJvamVjdCBjcmVhdGlvbid9ID0gJ1Blcm1pdGlyIGNyaWHDp8OjbyBkZSBwcm9qZXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBCZWdpbid9ID0gJ0luw61jaW8gZGUgUGVyw61vZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIEVuZCd9ID0gJ0ZpbSBkZSBQZXLDrW9kbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIG9mIFZhY2F0aW9uJ30gPSAnRGlhcyBkZSBGw6lyaWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIHBlciBXZWVrJ30gPSAnSG9yYXMgcG9yIHNlbWFuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdXRob3JpemVkIE92ZXJ0aW1lJ30gPSAnU29icmVob3JhIGF1dG9yaXphZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIGVuZCBtdXN0IGJlIGFmdGVyIHBlcmlvZCBiZWdpbi4nfSA9ICdGaW5hbCBkbyBwZXLDrW9kbyBkZXZlIHNlciBhcMOzcyBvIHBlcsOtb2RvIGRlIGluw61jaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHRpbWUgcGVyaW9kcyBmb3VuZC4nfSA9ICdTZW0gcGVyw61vZG9zIGRlIHRlbXBvIGVuY29udHJhZG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdGltZSBwZXJpb2QnfSA9ICdBZGljaW9uYXIgcGVyw61vZG8gZGUgdGVtcG8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdWaWV3CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3IFRpbWUgUmVjb3JkJ30gPSAnVmVyIFJlZ2lzdHJvIGRlIFRlbXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZpZXcgb2YgJ30gPSAnVmlzw6NvIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRhdGEgZm91bmQgZm9yIHRoaXMgZGF5Lid9ID0gJ07Do28gZm9yYW0gZW5jb250cmFkb3MgZGFkb3MgcGFyYSBlc3RlIGRpYS4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cyBmb3IgdGhlIHVzZXIuJ30gPSAnQWdlbnRlIGRlIG5vdGlmaWNhw6fDo28gbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSB2ZXIgbyBuw7ptZXJvIGRlIGRpYXMgZGUgdHJhYmFsaG8gaW5jb21wbGV0byBwYXJhIG8gdXN1w6FyaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgZGF0YSB0byB1c2Ugb24gYXR0cmlidXRlIGZvciB0aWNrZXQgc2VhcmNoIHNjcmVlbi4gRXhhbXBsZTogIlRpY2tldENyZWF0ZVRpbWVTdGFydFllYXI9MjAxMDtUaWNrZXRDcmVhdGVUaW1lU3RhcnRNb250aD0xMDtUaWNrZXRDcmVhdGVUaW1lU3RhcnREYXk9NDtUaWNrZXRDcmVhdGVUaW1lU3RvcFllYXI9MjAxMDtUaWNrZXRDcmVhdGVUaW1lU3RvcE1vbnRoPTExO1RpY2tldENyZWF0ZVRpbWVTdG9wRGF5PTM7Ii4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBuYW1lIGZvciBuZXcgYWN0aW9ucy4nfSA9ICdPIG5vbWUgcGFkcsOjbyBwYXJhIG5vdmFzIGHDp8O1ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbmFtZSBmb3IgbmV3IHByb2plY3RzLid9ID0gJ08gbm9tZSBwYWRyw6NvIHBhcmEgbm92b3MgcHJvamV0b3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGF0ZSBlbmQuJ30gPSAnQ29uZmlndXJhw6fDo28gcGFkcsOjbyBwYXJhIGEgZGF0YSBkZSB0w6lybWluby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIHN0YXJ0Lid9ID0gJ0NvbmZpZ3VyYcOnw6NvIHBhZHLDo28gcGFyYSBhIGRhdGEgZGUgaW7DrWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkZXNjcmlwdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBsZWF2ZSBkYXlzLid9ID0gJ0NvbmZpZ3VyYcOnw6NvIHBhZHLDo28gcGFyYSBkaWFzIGRlIGF1c8OqbmNpYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBvdmVydGltZS4nfSA9ICdDb25maWd1cmHDp8OjbyBwYWRyw6NvIHBhcmEgaG9yYXMgZXh0cmFvcmRpbsOhcmlhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciB0aGUgc3RhbmRhcmQgd2Vla2x5IGhvdXJzLid9ID0gJ0NvbmZpZ3VyYcOnw6NvIHBhZHLDo28gcGFyYSBvIGhvcsOhcmlvIHNlbWFuYWwgbm9ybWFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IGFjdGlvbnMuJ30gPSAnRXN0YWRvIHBhZHLDo28gcGFyYSBub3ZhcyBhw6fDtWVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHByb2plY3RzLid9ID0gJ0VzdGFkbyBwYWRyw6NvIHBhcmEgbm92b3MgcHJvamVjdG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHVzZXJzLid9ID0gJ0VzdGFkbyBwYWRyw6NvIHBhcmEgb3Mgbm92b3MgdXN1w6FyaW9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRpbWUgYWNjb3VudGluZyBtdXN0IGJlIHNldCB0byBhbGwgdGlja2V0cyBpbiBidWxrIGFjdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcHJvamVjdHMgZm9yIHdoaWNoIGEgcmVtYXJrIGlzIHJlcXVpcmVkLiBJZiB0aGUgUmVnRXhwIG1hdGNoZXMgb24gdGhlIHByb2plY3QsIHlvdSBoYXZlIHRvIGluc2VydCBhIHJlbWFyayB0b28uIFRoZSBSZWdFeHAgdXNlIHRoZSBzbXggcGFyYW1ldGVyLid9ID0gJ0RlbnRybyBkZXN0YSBvcMOnw6NvIGRlIGNvbmZpZ3VyYcOnw6NvLCB1bWEgcmVnZXhwIHBvZGUgc2VyIGRlZmluaWRhIHF1ZSBkZXRlcm1pbmEgcXVhaXMgcHJvamV0b3Mgc8OjbyByZWdpc3RyYWRvcyBjb20gdW1hIG9ic2VydmHDp8OjbyBkZXZlIHNlciAobyByZWdleHAgZnVuY2lvbmEgY29tIFNNWC1wYXLDom1ldHJvcykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGltZSBhY2NvdW50aW5nIHNldHRpbmdzJ30gPSAnRWRpdGFyIGRlZmluacOnw7VlcyBkZSBjb250cm9sZSBkZSB0ZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgcmVjb3JkJ30gPSAnRWRpdGFyIHJlZ2lzdHJvIGRlIHRlbXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvciBob3cgbWFueSBkYXlzIGFnbyB5b3UgY2FuIGluc2VydCB3b3JraW5nIHVuaXRzLid9ID0gJ0RlZmluZS1zZSBxdWFuZG8gw6kgcG9zc8OtdmVsIGVkaXRhciBhcyBlbnRyYWRhcyBkZSB0ZW1wbyBlbSBpZG9zb3MgKHBvciBleGVtcGxvLCAxMCBkaWFzIGFudGVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBlbmFibGVkLCB0aGUgZHJvcGRvd24gZWxlbWVudHMgaW4gdGhlIGVkaXQgc2NyZWVuIGFyZSBjaGFuZ2VkIHRvIGF1dG9jb21wbGV0aW9uIGZpZWxkcy4nfSA9ICdTZSBhdGl2YWRvLCBvcyBlbGVtZW50b3MgZGUgbGlzdGEgcGVuZGVudGUgbmEgdGVsYSBkZSBlZGnDp8OjbyBzw6NvIGFsdGVyYWRhcyBwYXJhIGNhbXBvcyBhdXRvY29tcGxldGFyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBlbmFibGVkLCB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIGVudGVyICJvbiB2YWNhdGlvbiBsZWF2ZSIsICJvbiBzaWNrIGxlYXZlIiBhbmQgIm9uIG92ZXJ0aW1lIGxlYXZlIiB0byBtdWx0aXBsZSBkYXRlcyBhdCBvbmNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgYWZ0ZXIgd2hpY2ggdGhlIHdvcmtpbmcgdW5pdHMgaGF2ZSB0byBiZSBpbnNlcnRlZC4nfSA9ICdPIG7Dum1lcm8gbcOheGltbyBkZSBkaWFzIGRlIHRyYWJhbGhvIGFww7NzIG8gcXVhbCBhcyB1bmlkYWRlcyBkZSB0cmFiYWxobyBkZXZlbSBzZXIgaW5zZXJpZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgd2l0aG91dGggd29ya2luZyB1bml0cyBlbnRyeSBhZnRlciB3aGljaCBhIHdhcm5pbmcgd2lsbCBiZSBzaG93bi4nfSA9ICdPIG7Dum1lcm8gbcOheGltbyBkZSBkaWFzIGRlIHRyYWJhbGhvLCBzZW0gdW1hIGVudHJhZGEsIGFww7NzIG8gcXVhbCBzZXLDoSBleGliaWRvIHVtIGF2aXNvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHRpbWUgcmVwb3J0aW5nJ30gPSAnTyByZWxhdMOzcmlvIGRlIFRlbXBvIGRvIHByb2pldG8gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBhY3Rpb24gbGlzdCBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgcHJvamVjdC4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBhY3Rpb24ocykuJ30gPSAnRXhwcmVzc8O1ZXMgcmVndWxhcmVzIHBhcmEgcmVzdHJpbmdpciBhIGxpc3RhIGRlIGHDp8O1ZXMgZGUgYWNvcmRvIGNvbSBvIHByb2pldG8gc2VsZWNpb25hZG8uIEEgY2hhdmUgY29udMOpbSBhIGV4cHJlc3PDo28gcmVndWxhciBwYXJhIG8gcHJvamV0byhzKSwgbyBjb250ZcO6ZG8gY29udMOpbSBleHByZXNzw7VlcyByZWd1bGFyZXMgcGFyYSBhw6fDo28ow7VlcykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBwcm9qZWN0IGxpc3QgYWNjb3JkaW5nIHRvIHVzZXIgZ3JvdXBzLiBLZXkgY29udGFpbnMgcmVndWxhciBleHByZXNzaW9uIGZvciBwcm9qZWN0KHMpLCBjb250ZW50IGNvbnRhaW5zIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGdyb3Vwcy4nfSA9ICdFeHByZXNzw7VlcyByZWd1bGFyZXMgcGFyYSByZXN0cmluZ2lyIGEgbGlzdGEgZGUgcHJvamV0b3MgZGUgYWNvcmRvIGNvbSBncnVwb3MgZGUgdXN1w6FyaW9zLiBBIGNoYXZlIGNvbnTDqW0gYSBleHByZXNzw6NvIHJlZ3VsYXIgcGFyYSBvKHMpIHByb2pldG8ocyksIG8gY29udGXDumRvIGNvbnTDqW0gYSBsaXN0YSBkZSBncnVwb3Mgc2VwYXJhZG9zIHBvciB2w61yZ3VsYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmVzIHRoZSBsb2dpbiBhbmQgcGFzc3dvcmQgb24gdGhlIHNlc3Npb24gdGFibGUgaW4gdGhlIGRhdGFiYXNlLCBpZiAiREIiIHdhcyBzZWxlY3RlZCBmb3IgU2Vzc2lvbk1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhcnRpY2xlIGFzIHJpY2ggdGV4dCBldmVuIGlmIHJpY2ggdGV4dCB3cml0aW5nIGlzIGRpc2FibGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgaWYgd29ya2luZyBob3VycyBjYW4gYmUgaW5zZXJ0ZWQgd2l0aG91dCBzdGFydCBhbmQgZW5kIHRpbWVzLid9ID0gJ0VzcGVjaWZpY2Egc2UgYXMgaG9yYXMgZGUgdHJhYmFsaG8gcG9kZW0gc2VyIGludHJvZHV6aWRhcyBzZW0gaG9yw6FyaW9zIGRlIGluw61jaW8gZSBmaW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbW9kdWxlIGZvcmNlcyBpbnNlcnRzIGluIFRpbWVBY2NvdW50aW5nLid9ID0gJ0VzdGUgbcOzZHVsbyBvYnJpZ2EgaW5zZXLDp8O1ZXMgbmEgQ29udGFiaWxpemHDp8OjbyBkZSBUZW1wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBub3RpZmljYXRpb24gbW9kdWxlIGdpdmVzIGEgd2FybmluZyBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMuJ30gPSAnRXN0ZSBtw7NkdWxvIGRlIG5vdGlmaWNhw6fDo28gZMOhIHVtIGF2aXNvIHNlIGhvdXZlciBtdWl0b3MgZGlhcyDDunRlaXMgaW5jb21wbGV0b3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgYWNjb3VudGluZy4nfSA9ICdDb250YWJpbGlkYWRlIGRlIFRlbXBvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyB1c2UgaWYgc29tZSBhY3Rpb25zIHJlZHVjZWQgdGhlIHdvcmtpbmcgaG91cnMgKGZvciBleGFtcGxlLCBpZiBvbmx5IGhhbGYgb2YgdGhlIHRyYXZlbGluZyB0aW1lIGlzIHBhaWQgS2V5ID0+IHRyYXZlbGluZzsgQ29udGVudCA9PiA1MCkuJ30gPSAnUGFyYSB1c2FyIHNlIGFsZ3VtYSBhw6fDtWVzIHJlZHV6aXJhbSBhcyBob3JhcyDDunRlaXMgKHBvciBleGVtcGxvLCBzZSBhcGVuYXMgbWV0YWRlIGRvIHRlbXBvIGRlIHZpYWdlbSDDqSBwYWdvLCBDaGF2ZSA9PiBWaWFnZW07IENvbnRlw7pkbyA9PiA1MCkuJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb24nfSA9ICdTZWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHVlJ30gPSAnVGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZCd9ID0gJ1F1YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaHUnfSA9ICdRdWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJpJ30gPSAnU2V4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdCd9ID0gJ1PDoWInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VuJ30gPSAnRG9tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0phbnVhcnknfSA9ICdKYW5laXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZlYnJ1YXJ5J30gPSAnRmV2ZXJlaXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hcmNoJ30gPSAnTWFyw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcmlsJ30gPSAnQWJyaWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF5J30gPSAnTWFpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdW5lJ30gPSAnSnVuaG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVseSd9ID0gJ0p1bGhvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1Z3VzdCd9ID0gJ0Fnb3N0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXB0ZW1iZXInfSA9ICdTZXRlbWJybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPY3RvYmVyJ30gPSAnT3V0dWJybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3ZlbWJlcid9ID0gJ05vdmVtYnJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2VtYmVyJ30gPSAnRGV6ZW1icm8nOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHByb2plY3RzJ30gPSAnTW9zdHJhciB0b2RvcyBvcyBwcm9qZXRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZhbGlkIHByb2plY3RzJ30gPSAnTW9zdHJhciBwcm9qZXRvcyB2w6FsaWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lQWNjb3VudGluZyd9ID0gJ0NvbnRhYmlsaXphw6fDo28gZGUgVGVtcG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aW9ucyd9ID0gJ0HDp8O1ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciB1cGRhdGVkISd9ID0gJ1VzdcOhcmlvIGF0dWFsaXphZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgYWRkZWQhJ30gPSAnVXN1w6FyaW8gYWRpY2lvbmFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCBhZGRlZCEnfSA9ICdQcm9qZXRvIGFkaWNpb25hZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgdXBkYXRlZCEnfSA9ICdQcm9qZXRvIGF0dWFsaXphZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgYWRkZWQhJ30gPSAnVGFyZWZhIGFkaWNpb25hZGEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgdXBkYXRlZCEnfSA9ICdUYXJlZmEgYXR1YWxpemFkYSEnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGRlbGV0ZSBXb3JraW5nIFVuaXRzISd9ID0gJ07Do28gw6kgcG9zc8OtdmVsIGV4Y2x1aXIgVW5pZGFkZXMgZGUgVHJhYmFsaG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzYXZlIHNldHRpbmdzLCBiZWNhdXNlIGEgZGF5IGhhcyBvbmx5IDI0IGhvdXJzISd9ID0gJ1VtIGRpYSBzw7MgdGVtIDI0IGhvcmFzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgaW5zZXJ0IHlvdXIgd29ya2luZyBob3VycyEnfSA9ICdJbmZvcm1lIHN1YXMgaG9yYXMgdHJhYmFsaGFkYXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JlcG9ydGFuZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzc2Z1bCBpbnNlcnQhJ30gPSAnU3VjZXNzbyBuYSBpbnNlcsOnw6NvISc7Cgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50VGltZUFjY291bnRpbmcucG0gLSB0aW1lIGFjY291bnRpbmcgbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50VGltZUFjY291bnRpbmc7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlRpbWVBY2NvdW50aW5nOwp1c2UgS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbTsKdXNlIERhdGU6OlBjYWxjIHF3KFRvZGF5IERheXNfaW5fTW9udGggRGF5X29mX1dlZWsgQWRkX0RlbHRhX1lNRCBjaGVja19kYXRlKTsKdXNlIFRpbWU6OkxvY2FsOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBPYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAoCiAgICAgICAgcXcoUGFyYW1PYmplY3QgREJPYmplY3QgTW9kdWxlUmVnIExvZ09iamVjdCBVc2VyT2JqZWN0CiAgICAgICAgQ29uZmlnT2JqZWN0IFRpY2tldE9iamVjdCBUaW1lT2JqZWN0IEdyb3VwT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkTmVlZGVkISIgKSBpZiAhJFNlbGYtPnskTmVlZGVkfTsKICAgIH0KCiAgICAjIGNyZWF0ZSByZXF1aXJlZCBvYmplY3RzLi4uCiAgICAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lQWNjb3VudGluZy0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e0NoZWNrSXRlbU9iamVjdH0gICAgICA9IEtlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0tPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFByZVJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgcmV0dXJuIDEgaWYgISRTZWxmLT57QWNjZXNzUm99OwoKICAgIG15ICggJFNlYywgJE1pbiwgJEhvdXIsICREYXksICRNb250aCwgJFllYXIgKQogICAgICAgID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKCBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSApOwoKICAgIG15ICVVc2VyID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJDdXJyZW50UGVyaW9kR2V0KAogICAgICAgIFllYXIgID0+ICRZZWFyLAogICAgICAgIE1vbnRoID0+ICRNb250aCwKICAgICAgICBEYXkgICA9PiAkRGF5LAogICAgKTsKCiAgICByZXR1cm4gaWYgISRVc2VyeyAkU2VsZi0+e1VzZXJJRH0gfTsKCiAgICBteSAlSW5jb21wbGV0ZVdvcmtpbmdEYXlzID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0NvbXBsZXRuZXNzQ2hlY2soKTsKCiAgICAjIHJlZGlyZWN0IGlmIGluY29tcGxldGUgd29ya2luZyBkYXkgYXJlIG91dCBvZiByYW5nZQogICAgaWYgKAogICAgICAgICRJbmNvbXBsZXRlV29ya2luZ0RheXN7RW5mb3JjZUluc2VydH0KICAgICAgICAmJiAkU2VsZi0+e0FjdGlvbn0gbmUgJ0FnZW50VGltZUFjY291bnRpbmcnCiAgICAgICAgJiYgJFNlbGYtPntBY3Rpb259IG5lICdBZ2VudENhbGVuZGFyU21hbGwnCiAgICAgICAgKQogICAgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PiAnQWN0aW9uPUFnZW50VGltZUFjY291bnRpbmc7U3ViYWN0aW9uPUVkaXQnCiAgICAgICAgKTsKICAgIH0KICAgIHJldHVybjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15IEBNb250aEFycmF5ID0gKAogICAgICAgICcnLCAgICAgJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAgICAgJ0FwcmlsJywgICAnTWF5JywKICAgICAgICAnSnVuZScsICdKdWx5JywgICAgJ0F1Z3VzdCcsICAgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywKICAgICAgICAnRGVjZW1iZXInLAogICAgKTsKICAgIG15IEBXZWVrZGF5QXJyYXkgPSAoICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCcsICdTdW4nLCApOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNob3cgY29uZmlybWF0aW9uIGRpYWxvZyB0byBkZWxldGUgdGhlIGVudHJ5IG9mIHRoaXMgZGF5CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdEZWxldGVEYXknICkgKSB7CgogICAgICAgIG15ICggJFNlYywgJE1pbiwgJEhvdXIsICREYXksICRNb250aCwgJFllYXIgKQogICAgICAgICAgICA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCksCiAgICAgICAgICAgICk7CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhTdGF0dXMgWWVhciBNb250aCBEYXkpKSB7CiAgICAgICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBEYXRlCiAgICAgICAgaWYgKCAhJFBhcmFte1llYXJ9IHx8ICEkUGFyYW17TW9udGh9IHx8ICEkUGFyYW17RGF5fSApIHsKICAgICAgICAgICAgJFBhcmFte1llYXJ9ICA9ICRZZWFyOwogICAgICAgICAgICAkUGFyYW17TW9udGh9ID0gJE1vbnRoOwogICAgICAgICAgICAkUGFyYW17RGF5fSAgID0gJERheTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQYXJhbXtZZWFyfSAgPSBzcHJpbnRmKCAiJTAyZCIsICRQYXJhbXtZZWFyfSApOwogICAgICAgICAgICAkUGFyYW17TW9udGh9ID0gc3ByaW50ZiggIiUwMmQiLCAkUGFyYW17TW9udGh9ICk7CiAgICAgICAgICAgICRQYXJhbXtEYXl9ICAgPSBzcHJpbnRmKCAiJTAyZCIsICRQYXJhbXtEYXl9ICk7CiAgICAgICAgfQoKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpbWVBY2NvdW50aW5nRGVsZXRlJywKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIHRoZSByZXR1cm5lZCBkYXRhIHN0cnVjdHVyZQogICAgICAgIG15ICVEYXRhID0gKAogICAgICAgICAgICBIVE1MICAgICAgID0+ICRPdXRwdXQsCiAgICAgICAgICAgIERpYWxvZ1R5cGUgPT4gJ0NvbmZpcm1hdGlvbicsCiAgICAgICAgKTsKCiAgICAgICAgIyByZXR1cm4gSlNPTi1TdHJpbmcgYmVjYXVzZSBvZiBBSkFYLU1vZGUKICAgICAgICBteSAkT3V0cHV0SlNPTiA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SlNPTkVuY29kZSggRGF0YSA9PiBcJURhdGEgKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0SlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGV4cHJlc3Npb24gYWRkIHRpbWUgcGVyaW9kIHdhcyBwcmVzc2VkCiAgICBlbHNpZiAoCiAgICAgICAgJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnQWRkUGVyaW9kJyApCiAgICAgICAgfHwgJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU3VibWl0VXNlckRhdGEnICkKICAgICAgICApCiAgICB7CiAgICAgICAgbXkgJUdldFBhcmFtID0gKCk7CgogICAgICAgICRHZXRQYXJhbXtVc2VySUR9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnVXNlcklEJyApOwogICAgICAgIG15ICRQZXJpb2RzCiAgICAgICAgICAgID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJMYXN0UGVyaW9kTnVtYmVyR2V0KCBVc2VySUQgPT4gJEdldFBhcmFte1VzZXJJRH0gKTsKCiAgICAgICAgIyBjaGVjayB2YWxpZGl0eSBvZiBwZXJpb2RzCiAgICAgICAgbXkgJUVycm9ycyA9ICRTZWxmLT5fQ2hlY2tWYWxpZGl0eVVzZXJQZXJpb2RzKCBQZXJpb2QgPT4gJFBlcmlvZHMgKTsKCiAgICAgICAgIyBpZiB0aGUgcGVyaW9kIGRhdGEgaXMgb2sKICAgICAgICBpZiAoICElRXJyb3JzICkgewoKICAgICAgICAgICAgIyBnZXQgYWxsIHBhcmFtZXRlcnMKICAgICAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KFN1YmFjdGlvbiBEZXNjcmlwdGlvbiBDYWxlbmRhcikpIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhTaG93T3ZlcnRpbWUgQ3JlYXRlUHJvamVjdCkpIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApIHx8IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRQZXJpb2QgPSAxOwogICAgICAgICAgICBteSAlUGVyaW9kRGF0YTsKCiAgICAgICAgICAgIG15ICVVc2VyRGF0YQogICAgICAgICAgICAgICAgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+U2luZ2xlVXNlclNldHRpbmdzR2V0KAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRHZXRQYXJhbXtVc2VySUR9CiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgcGFyYW1ldGVycyBmb3IgYWxsIHJlZ2lzdGVyZWQgcGVyaW9kcwogICAgICAgICAgICB3aGlsZSAoICRVc2VyRGF0YXskUGVyaW9kfSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhXZWVrbHlIb3VycyBPdmVydGltZSBEYXRlU3RhcnQgRGF0ZUVuZCBMZWF2ZURheXMpKSB7CiAgICAgICAgICAgICAgICAgICAgJFBlcmlvZERhdGF7JFBlcmlvZH17JFBhcmFtZXRlcn0KICAgICAgICAgICAgICAgICAgICAgICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgLiAiWyRQZXJpb2RdIiApCiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICRVc2VyRGF0YXskUGVyaW9kfXskUGFyYW1ldGVyfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRQZXJpb2REYXRheyRQZXJpb2R9e1VzZXJTdGF0dXN9CiAgICAgICAgICAgICAgICAgICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJQZXJpb2RTdGF0dXNbJFBlcmlvZF0iICkgfHwgMDsKICAgICAgICAgICAgICAgICRQZXJpb2QrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkR2V0UGFyYW17UGVyaW9kfSA9IFwlUGVyaW9kRGF0YTsKCiAgICAgICAgICAgICMgdXBkYXRlIHBlcmlvZHMKICAgICAgICAgICAgaWYgKCAhJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJTZXR0aW5nc1VwZGF0ZSglR2V0UGFyYW0pICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAnVW5hYmxlIHRvIHVwZGF0ZSB1c2VyIHNldHRpbmdzISBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuJwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0FkZFBlcmlvZCcgKSApIHsKCiAgICAgICAgICAgICAgICAjIHNob3cgdGhlIGVkaXQgdGltZSBzZXR0aWVuZ3MgYWdhaW4sIGJ1dCBub3cgd2l0aCBhIG5ldyBlbXB0eSB0aW1lIHBlcmlvZCBsaW5lCiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgICAgICBPUCA9PgogICAgICAgICAgICAgICAgICAgICAgICAiQWN0aW9uPUFnZW50VGltZUFjY291bnRpbmc7U3ViYWN0aW9uPSRHZXRQYXJhbXtTdWJhY3Rpb259O1VzZXJJRD0kR2V0UGFyYW17VXNlcklEfTsiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gIk5ld1RpbWVQZXJpb2Q9MSIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgc2hvdyB0aGUgb3ZlcnZpZXcgb2YgdGFza3MgYW5kIHVzZXJzCiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgICAgICBPUCA9PiAiQWN0aW9uPUFnZW50VGltZUFjY291bnRpbmc7U3ViYWN0aW9uPVNldHRpbmc7VXNlcj0kU2VsZi0+e1N1YmFjdGlvbn0iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBlZGl0IHRoZSB0aW1lIGFjY291bnRpbmcgZWxlbWVudHMKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRWRpdCcgKSB7CgogICAgICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApIGlmICEkU2VsZi0+e0FjY2Vzc1JvfTsKCiAgICAgICAgbXkgJUZyb250ZW5kICAgPSAoKTsKICAgICAgICBteSAlRGF0YSAgICAgICA9ICgpOwogICAgICAgIG15ICVBY3Rpb25MaXN0ID0gJFNlbGYtPl9BY3Rpb25MaXN0KCk7CiAgICAgICAgbXkgKCAkU2VjLCAkTWluLCAkSG91ciwgJERheSwgJE1vbnRoLCAkWWVhciApCiAgICAgICAgICAgID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KFN0YXR1cyBZZWFyIE1vbnRoIERheSBOb3RpZmljYXRpb24pKSB7CiAgICAgICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApIHx8ICcnOwogICAgICAgIH0KICAgICAgICAkUGFyYW17UmVjb3Jkc051bWJlcn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdSZWNvcmRzTnVtYmVyJyApIHx8IDg7CiAgICAgICAgJFBhcmFte0luc2VydFdvcmtpbmdVbml0c30KICAgICAgICAgICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdJbnNlcnRXb3JraW5nVW5pdHMnICk7CgogICAgICAgICMgQ2hlY2sgRGF0ZQogICAgICAgIGlmICggISRQYXJhbXtZZWFyfSB8fCAhJFBhcmFte01vbnRofSB8fCAhJFBhcmFte0RheX0gKSB7CiAgICAgICAgICAgICRQYXJhbXtZZWFyfSAgPSAkWWVhcjsKICAgICAgICAgICAgJFBhcmFte01vbnRofSA9ICRNb250aDsKICAgICAgICAgICAgJFBhcmFte0RheX0gICA9ICREYXk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUGFyYW17WWVhcn0gID0gc3ByaW50ZiggIiUwMmQiLCAkUGFyYW17WWVhcn0gKTsKICAgICAgICAgICAgJFBhcmFte01vbnRofSA9IHNwcmludGYoICIlMDJkIiwgJFBhcmFte01vbnRofSApOwogICAgICAgICAgICAkUGFyYW17RGF5fSAgID0gc3ByaW50ZiggIiUwMmQiLCAkUGFyYW17RGF5fSApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiB0aGUgZ2l2ZW4gZGF0ZSBpcyBhIHZhbGlkIGRhdGUKICAgICAgICAjIGlmIG5vdCB2YWxpZCwgc2V0IHRoZSBkYXRlIHRvIHRvZGF5CiAgICAgICAgaWYgKCAhY2hlY2tfZGF0ZSggJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9LCAkUGFyYW17RGF5fSApICkgewogICAgICAgICAgICAkUGFyYW17WWVhcn0gICAgICAgID0gJFllYXI7CiAgICAgICAgICAgICRQYXJhbXtNb250aH0gICAgICAgPSAkTW9udGg7CiAgICAgICAgICAgICRQYXJhbXtEYXl9ICAgICAgICAgPSAkRGF5OwogICAgICAgICAgICAkUGFyYW17J1dyb25nRGF0ZSd9ID0gMTsKICAgICAgICB9CgogICAgICAgIG15ICVVc2VyID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJDdXJyZW50UGVyaW9kR2V0KAogICAgICAgICAgICBZZWFyICA9PiAkUGFyYW17WWVhcn0sCiAgICAgICAgICAgIE1vbnRoID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgICAgIERheSAgID0+ICRQYXJhbXtEYXl9LAogICAgICAgICk7CgogICAgICAgICMgZm9yIGluaXRpYWwgdXNlLCB0aGUgZmlyc3QgYWdlbnQgd2l0aCBydy1yaWdodCB3aWxsIGJlIHJlZGlyZWN0ZWQKICAgICAgICAjIHRvICdTZXR0aW5nJywgc28gaGUgY2FuIGRvIHRoZSBpbml0aWFsIHNldHRpbmdzCiAgICAgICAgaWYgKCAhJFVzZXJ7ICRTZWxmLT57VXNlcklEfSB9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9GaXJzdFVzZXJSZWRpcmVjdCgpOwogICAgICAgIH0KCiAgICAgICAgbXkgJUluY29tcGxldGVXb3JraW5nRGF5cyA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Xb3JraW5nVW5pdHNDb21wbGV0bmVzc0NoZWNrKCk7CiAgICAgICAgbXkgJE1heEFsbG93ZWRJbnNlcnREYXlzCiAgICAgICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpNYXhBbGxvd2VkSW5zZXJ0RGF5cycpIHx8ICcxMCc7CiAgICAgICAgKCAkUGFyYW17WWVhckFsbG93ZWR9LCAkUGFyYW17TW9udGhBbGxvd2VkfSwgJFBhcmFte0RheUFsbG93ZWR9ICkKICAgICAgICAgICAgPSBBZGRfRGVsdGFfWU1EKCAkWWVhciwgJE1vbnRoLCAkRGF5LCAwLCAwLCAtJE1heEFsbG93ZWRJbnNlcnREYXlzICk7CiAgICAgICAgaWYgKAogICAgICAgICAgICB0aW1lbG9jYWwoIDEsIDAsIDAsICRQYXJhbXtEYXl9LCAkUGFyYW17TW9udGh9IC0gMSwgJFBhcmFte1llYXJ9IC0gMTkwMCApIDwgdGltZWxvY2FsKAogICAgICAgICAgICAgICAgMSwgMCwgMCwgJFBhcmFte0RheUFsbG93ZWR9LAogICAgICAgICAgICAgICAgJFBhcmFte01vbnRoQWxsb3dlZH0gLSAxLAogICAgICAgICAgICAgICAgJFBhcmFte1llYXJBbGxvd2VkfSAtIDE5MDAKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAhJEluY29tcGxldGVXb3JraW5nRGF5c3tJbmNvbXBsZXRlfXsgJFBhcmFte1llYXJ9IH17ICRQYXJhbXtNb250aH0gfQogICAgICAgICAgICAgICAgeyAkUGFyYW17RGF5fSB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgICAgIE9QID0+CiAgICAgICAgICAgICAgICAgICAgICAgICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1WaWV3O1llYXI9JFBhcmFte1llYXJ9O01vbnRoPSRQYXJhbXtNb250aH07RGF5PSRQYXJhbXtEYXl9IgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzdG9yZSBsYXN0IHNjcmVlbgogICAgICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuJywKICAgICAgICAgICAgVmFsdWUgPT4KICAgICAgICAgICAgICAgICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1FZGl0O1llYXI9JFBhcmFte1llYXJ9O01vbnRoPSRQYXJhbXtNb250aH07RGF5PSRQYXJhbXtEYXl9IiwKICAgICAgICApOwoKICAgICAgICAkUGFyYW17TW9udGhfdG9fVGV4dH0gPSAkTW9udGhBcnJheVsgJFBhcmFte01vbnRofSBdOwoKICAgICAgICAoICRQYXJhbXtZZWFyQmFja30sICRQYXJhbXtNb250aEJhY2t9LCAkUGFyYW17RGF5QmFja30gKQogICAgICAgICAgICA9IEFkZF9EZWx0YV9ZTUQoICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgJFBhcmFte0RheX0sIDAsIDAsIC0xICk7CiAgICAgICAgKCAkUGFyYW17WWVhck5leHR9LCAkUGFyYW17TW9udGhOZXh0fSwgJFBhcmFte0RheU5leHR9ICkKICAgICAgICAgICAgPSBBZGRfRGVsdGFfWU1EKCAkUGFyYW17WWVhcn0sICRQYXJhbXtNb250aH0sICRQYXJhbXtEYXl9LCAwLCAwLCAxICk7CgogICAgICAgIG15ICRSZWR1Y2VUaW1lUmVmID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpSZWR1Y2VUaW1lJyk7CgogICAgICAgICMgaGFzaGVzIHRvIHN0b3JlIHNlcnZlciBzaWRlIGVycm9ycwogICAgICAgIG15ICVFcnJvcnMgICAgICAgICAgPSAoKTsKICAgICAgICBteSAlU2VydmVyRXJyb3JEYXRhID0gKCk7CiAgICAgICAgbXkgJEVycm9ySW5kZXggICAgICA9IDE7CgogICAgICAgICMgRWRpdCBXb3JraW5nIFVuaXRzCiAgICAgICAgaWYgKCAkUGFyYW17U3RhdHVzfSApIHsKCiAgICAgICAgICAgICMgYXJyYXlzIHRvIHNhdmUgYWxsIHN0YXJ0IGFuZCBlbmQgdGltZXMgZm9yIHNvbWUgY2hlY2tzCiAgICAgICAgICAgIG15ICggQFN0YXJ0VGltZXMsIEBFbmRUaW1lcyApOwoKICAgICAgICAgICAgIyBkZWxldGUgcHJldmlvdXMgZW50cmllcyBmb3IgdGhpcyBkYXkgYW5kIHVzZXIKICAgICAgICAgICAgJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0RlbGV0ZSgKICAgICAgICAgICAgICAgIFllYXIgID0+ICRQYXJhbXtZZWFyfSwKICAgICAgICAgICAgICAgIE1vbnRoID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgICAgICAgICBEYXkgICA9PiAkUGFyYW17RGF5fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICVDaGVja2JveENoZWNrID0gKCk7CiAgICAgICAgICAgIGZvciBteSAkRWxlbWVudCAocXcoTGVhdmVEYXkgU2ljayBPdmVydGltZSkpIHsKICAgICAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJEVsZW1lbnQgKTsKICAgICAgICAgICAgICAgIGlmICgkVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAkQ2hlY2tib3hDaGVja3skRWxlbWVudH0gPSAxOwogICAgICAgICAgICAgICAgICAgICRQYXJhbXskRWxlbWVudH0gICAgICAgICA9ICdjaGVja2VkPSJjaGVja2VkIic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17JEVsZW1lbnR9ID0gJycKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiBtb3JlIHRoYW4gb25lIGNoZWNrIGJveCB3YXMgY2hlY2tlZCBpdCBpcyBhIHNlcnZlciBlcnJvcgogICAgICAgICAgICBpZiAoIHNjYWxhciBrZXlzICVDaGVja2JveENoZWNrID4gMSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkQ2hlY2tib3ggKCBzb3J0IGtleXMgJUNoZWNrYm94Q2hlY2sgKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yc3sgJENoZWNrYm94IC4gJ0ludmFsaWQnIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgaW5zZXJ0IHZhbHVlcyAoaWYgYW55KQogICAgICAgICAgICAgICAgaWYgKCBzY2FsYXIga2V5cyAlQ2hlY2tib3hDaGVjayA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAhJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0luc2VydCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFllYXIgICAgID0+ICRQYXJhbXtZZWFyfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vbnRoICAgID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXkgICAgICA9PiAkUGFyYW17RGF5fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlYXZlRGF5ID0+ICRDaGVja2JveENoZWNre0xlYXZlRGF5fSB8fCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ljayAgICAgPT4gJENoZWNrYm94Q2hlY2t7U2lja30gfHwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJ0aW1lID0+ICRDaGVja2JveENoZWNre092ZXJ0aW1lfSB8fCAwLAogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAnQ2FuXCd0IGluc2VydCBXb3JraW5nIFVuaXRzIScKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJFBhcmFte1N1Y2Nlc3NmdWxJbnNlcnR9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgSUQ6CiAgICAgICAgICAgIGZvciBteSAkSUQgKCAxIC4uICRQYXJhbXtSZWNvcmRzTnVtYmVyfSApIHsKCiAgICAgICAgICAgICAgICAjIGFycmF5cyB0byBzYXZlIHRoZSBzZXJ2ZXIgZXJyb3JzIGJsb2NrIHRvIHNob3cgdGhlIGVycm9yIG1zZ3MKICAgICAgICAgICAgICAgIG15ICggQFN0YXJ0VGltZVNlcnZlckVycm9yQmxvY2ssIEBFbmRUaW1lU2VydmVyRXJyb3JCbG9jaywgQFBlcmlvZFNlcnZlckVycm9yQmxvY2sgKQogICAgICAgICAgICAgICAgICAgID0gKCk7CgogICAgICAgICAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KFByb2plY3RJRCBBY3Rpb25JRCBSZW1hcmsgU3RhcnRUaW1lIEVuZFRpbWUgUGVyaW9kKSkgewogICAgICAgICAgICAgICAgICAgICRQYXJhbXskUGFyYW1ldGVyfQogICAgICAgICAgICAgICAgICAgICAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciAuICdbJyAuICRJRCAuICddJyApOwogICAgICAgICAgICAgICAgICAgIGlmICggJFBhcmFteyRQYXJhbWV0ZXJ9ICkgewogICAgICAgICAgICAgICAgICAgICAgICBteSAkUGFyYW1SZWYgPSBcJFBhcmFteyRQYXJhbWV0ZXJ9OwoKICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWxldGUgbGVhZGluZyBhbmQgdGFpbGluZyBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAgICAgJFBhcmFtUmVmID0gJFNlbGYtPntDaGVja0l0ZW1PYmplY3R9LT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1JlZiA9PiAkUGFyYW1SZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmltTGVmdCAgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyaW1SaWdodCA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBuZXh0IElEIGlmICEkUGFyYW17UHJvamVjdElEfSAmJiAhJFBhcmFte0FjdGlvbklEfTsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBtaXNzaW5nIHZhbHVlcwogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17UHJvamVjdElEfSAmJiAhJFBhcmFte0FjdGlvbklEfSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtBY3Rpb25JREludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggISRQYXJhbXtQcm9qZWN0SUR9ICYmICRQYXJhbXtBY3Rpb25JRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yc3skRXJyb3JJbmRleH17UHJvamVjdElESW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY3JlYXRlIGEgdmFsaWQgcGVyaW9kCiAgICAgICAgICAgICAgICBteSAkUGVyaW9kID0gJFBhcmFte1BlcmlvZH07CiAgICAgICAgICAgICAgICBpZiAoICRQZXJpb2QgPX4gL14oXGQrKSwoXGQrKS8gKSB7CiAgICAgICAgICAgICAgICAgICAgJFBlcmlvZCA9ICQxIC4gIi4iIC4gJDI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgI2FsbG93IGZvcm1hdCBoaDptbQogICAgICAgICAgICAgICAgZWxzaWYgKCAkUGFyYW17UGVyaW9kfSA9fiAvXihcZCspOihcZCspLyApIHsKICAgICAgICAgICAgICAgICAgICAkUGVyaW9kID0gJDEgKyAkMiAvIDYwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgaWYgc3RhcnQgb3IgZW5kIHRpbWVzIGFyZSBtaXNzaW5nLCBkZWxldGUgdGhlIG90aGVyIGVudHJ5CiAgICAgICAgICAgICAgICBpZiAoICEkUGFyYW17U3RhcnRUaW1lfSB8fCAhJFBhcmFte0VuZFRpbWV9ICkgewogICAgICAgICAgICAgICAgICAgICRQYXJhbXtTdGFydFRpbWV9ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFte0VuZFRpbWV9ICAgPSAnJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGFkZCAnOjAwJyB0byB0aGUgdGltZSwgaWYgaXQgZG9lc24ndCBoYXZlIGl0IHlldAogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17U3RhcnRUaW1lfSAmJiAkUGFyYW17U3RhcnRUaW1lfSAhfiAvXihcZCspOihcZCspJC8gKSB7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFte1N0YXJ0VGltZX0gLj0gJzowMCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRQYXJhbXtFbmRUaW1lfSAmJiAkUGFyYW17RW5kVGltZX0gIX4gL14oXGQrKTooXGQrKSQvICkgewogICAgICAgICAgICAgICAgICAgICRQYXJhbXtFbmRUaW1lfSAuPSAnOjAwJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAoICRQYXJhbXtTdGFydFRpbWV9ID1+IC9eKFxkKyk6KFxkKykkLyApCiAgICAgICAgICAgICAgICAgICAgJiYgKCAkUGFyYW17RW5kVGltZX0gPX4gL14oXGQrKTooXGQrKSQvICkKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFte1N0YXJ0VGltZX0gPX4gL14oXGQrKTooXGQrKSQvOwogICAgICAgICAgICAgICAgICAgIG15ICRTdGFydFRpbWUgPSAkMSAqIDYwICsgJDI7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFte0VuZFRpbWV9ID1+IC9eKFxkKyk6KFxkKykkLzsKICAgICAgICAgICAgICAgICAgICBteSAkRW5kVGltZSA9ICQxICogNjAgKyAkMjsKICAgICAgICAgICAgICAgICAgICBpZiAoICRSZWR1Y2VUaW1lUmVmLT57ICRBY3Rpb25MaXN0eyAkUGFyYW17QWN0aW9uSUR9IH0gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFBlcmlvZCA9ICggJEVuZFRpbWUgLSAkU3RhcnRUaW1lICkgLyA2MAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAkUmVkdWNlVGltZVJlZi0+eyAkQWN0aW9uTGlzdHsgJFBhcmFte0FjdGlvbklEfSB9IH0gLyAxMDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkUGVyaW9kID0gKCAkRW5kVGltZSAtICRTdGFydFRpbWUgKSAvIDYwOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBlbmQgdGltZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IHRpbWUKICAgICAgICAgICAgICAgICAgICBpZiAoICRFbmRUaW1lIDw9ICRTdGFydFRpbWUgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e0VuZFRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEVuZFRpbWVTZXJ2ZXJFcnJvckJsb2NrLCAnRW5kVGltZUJlZm9yZVN0YXJ0VGltZVNlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRTdGFydFRpbWVzWyRJRF0gPSAkU3RhcnRUaW1lOwogICAgICAgICAgICAgICAgICAgICRFbmRUaW1lc1skSURdICAgPSAkRW5kVGltZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICggJFBhcmFte1N0YXJ0VGltZX0gJiYgJFBhcmFte1N0YXJ0VGltZX0gIX4gL14oXGQrKTooXGQrKSQvICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtTdGFydFRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQFN0YXJ0VGltZVNlcnZlckVycm9yQmxvY2ssICdTdGFydFRpbWVJbnZhbGlkRm9ybWF0U2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoICRQYXJhbXtFbmRUaW1lfSAmJiAkUGFyYW17RW5kVGltZX0gIX4gL14oXGQrKTooXGQrKSQvICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtFbmRUaW1lSW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBFbmRUaW1lU2VydmVyRXJyb3JCbG9jaywgJ0VuZFRpbWVJbnZhbGlkRm9ybWF0U2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG5lZ2F0aXZlIHRpbWVzIGFyZSBub3QgYWxsb3dlZAogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17U3RhcnRUaW1lfSA9fiAvXi0oXGQrKTooXGQrKSQvICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e1N0YXJ0VGltZUludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBTdGFydFRpbWVTZXJ2ZXJFcnJvckJsb2NrLCAnU3RhcnRUaW1lTmVnYXRpdmVTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRQYXJhbXtFbmRUaW1lfSA9fiAvXi0oXGQrKTooXGQrKSQvICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e0VuZFRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBARW5kVGltZVNlcnZlckVycm9yQmxvY2ssICdFbmRUaW1lTmVnYXRpdmVTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyByZXBlYXRlZCBob3VycyBhcmUgbm90IGFsbG93ZWQKICAgICAgICAgICAgICAgIGZvciAoIG15ICRQb3NpdGlvbiA9ICRJRCAtIDE7ICRQb3NpdGlvbiA+PSAxOyAkUG9zaXRpb24tLSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IGlmICFkZWZpbmVkICRTdGFydFRpbWVzWyRQb3NpdGlvbl0gfHwgIWRlZmluZWQgJFN0YXJ0VGltZXNbJElEXTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkU3RhcnRUaW1lc1skUG9zaXRpb25dID4gJFN0YXJ0VGltZXNbJElEXQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkU3RhcnRUaW1lc1skUG9zaXRpb25dIDwgJEVuZFRpbWVzWyRJRF0KICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEVycm9yc3skRXJyb3JJbmRleH17RW5kVGltZUludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARW5kVGltZVNlcnZlckVycm9yQmxvY2ssICdFbmRUaW1lUmVwZWF0ZWRIb3VyU2VydmVyRXJyb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAhZ3JlcCggL15FbmRUaW1lUmVwZWF0ZWRIb3VyU2VydmVyRXJyb3IvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQEVuZFRpbWVTZXJ2ZXJFcnJvckJsb2NrICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICRFbmRUaW1lc1skUG9zaXRpb25dID4gJFN0YXJ0VGltZXNbJElEXQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkRW5kVGltZXNbJFBvc2l0aW9uXSA8ICRFbmRUaW1lc1skSURdCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJEVuZFRpbWVzWyRJRF0gPiAkRW5kVGltZXNbJFBvc2l0aW9uXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e1N0YXJ0VGltZUludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQFN0YXJ0VGltZVNlcnZlckVycm9yQmxvY2ssICdTdGFydFRpbWVSZXBlYXRlZEhvdXJTZXJ2ZXJFcnJvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcCggL15TdGFydFRpbWVSZXBlYXRlZEhvdXJTZXJ2ZXJFcnJvciQvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBTdGFydFRpbWVTZXJ2ZXJFcnJvckJsb2NrICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtFbmRUaW1lSW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARW5kVGltZVNlcnZlckVycm9yQmxvY2ssICdFbmRUaW1lUmVwZWF0ZWRIb3VyU2VydmVyRXJyb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgIQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXAoIC9eRW5kVGltZVJlcGVhdGVkSG91clNlcnZlckVycm9yJC8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQEVuZFRpbWVTZXJ2ZXJFcnJvckJsb2NrICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICggJFN0YXJ0VGltZXNbJFBvc2l0aW9uXSA9PSAkU3RhcnRUaW1lc1skSURdICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtTdGFydFRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQFN0YXJ0VGltZVNlcnZlckVycm9yQmxvY2ssICdTdGFydFRpbWVSZXBlYXRlZEhvdXJTZXJ2ZXJFcnJvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXAoIC9eU3RhcnRUaW1lUmVwZWF0ZWRIb3VyU2VydmVyRXJyb3IkLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBTdGFydFRpbWVTZXJ2ZXJFcnJvckJsb2NrICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoICRFbmRUaW1lc1skUG9zaXRpb25dID09ICRFbmRUaW1lc1skSURdICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtFbmRUaW1lSW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBFbmRUaW1lU2VydmVyRXJyb3JCbG9jaywgJ0VuZFRpbWVSZXBlYXRlZEhvdXJTZXJ2ZXJFcnJvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXAoIC9eRW5kVGltZVJlcGVhdGVkSG91clNlcnZlckVycm9yJC8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBARW5kVGltZVNlcnZlckVycm9yQmxvY2sgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgJFN0YXJ0VGltZXNbJElEXSA+ICRTdGFydFRpbWVzWyRQb3NpdGlvbl0KICAgICAgICAgICAgICAgICAgICAgICAgJiYgJFN0YXJ0VGltZXNbJElEXSA8ICRFbmRUaW1lc1skUG9zaXRpb25dCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e1N0YXJ0VGltZUludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAU3RhcnRUaW1lU2VydmVyRXJyb3JCbG9jaywgJ1N0YXJ0VGltZVJlcGVhdGVkSG91clNlcnZlckVycm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgIQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcCggL15TdGFydFRpbWVSZXBlYXRlZEhvdXJTZXJ2ZXJFcnJvciQvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQFN0YXJ0VGltZVNlcnZlckVycm9yQmxvY2sgKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgJEVuZFRpbWVzWyRJRF0gPiAkU3RhcnRUaW1lc1skUG9zaXRpb25dCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRFbmRUaW1lc1skSURdIDwgJEVuZFRpbWVzWyRQb3NpdGlvbl0KICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEVycm9yc3skRXJyb3JJbmRleH17RW5kVGltZUludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARW5kVGltZVNlcnZlckVycm9yQmxvY2ssICdFbmRUaW1lUmVwZWF0ZWRIb3VyU2VydmVyRXJyb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwKCAvXkVuZFRpbWVSZXBlYXRlZEhvdXJTZXJ2ZXJFcnJvciQvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQEVuZFRpbWVTZXJ2ZXJFcnJvckJsb2NrICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgJzI0OjAwJyBpcyBvbmx5IHBlcm1pdHRlZCBhcyBlbmQgdGltZQogICAgICAgICAgICAgICAgaWYgKCAkU3RhcnRUaW1lc1skSURdICYmICRTdGFydFRpbWVzWyRJRF0gPT0gMTQ0MCApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtTdGFydFRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAU3RhcnRUaW1lU2VydmVyRXJyb3JCbG9jaywgJ1N0YXJ0VGltZTI0SG91cnMnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgdGltZXMgc3VwZXJpb3IgdG8gMjQ6MDAgYXJlIG5vdCBhbGxvd2VkCiAgICAgICAgICAgICAgICBpZiAoICRTdGFydFRpbWVzWyRJRF0gJiYgJFN0YXJ0VGltZXNbJElEXSA+IDE0NDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yc3skRXJyb3JJbmRleH17U3RhcnRUaW1lSW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgIHB1c2ggQFN0YXJ0VGltZVNlcnZlckVycm9yQmxvY2ssICdTdGFydFRpbWVJbnZhbGlkJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggJEVuZFRpbWVzWyRJRF0gJiYgJEVuZFRpbWVzWyRJRF0gPiAxNDQwICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e0VuZFRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBARW5kVGltZVNlcnZlckVycm9yQmxvY2ssICdFbmRUaW1lSW52YWxpZCc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBhZGQgcmVmZXJlbmNlIHRvIHRoZSBzZXJ2ZXIgZXJyb3IgbXNncyB0byBiZSBzaG93bgogICAgICAgICAgICAgICAgaWYgKCAkRXJyb3JzeyRFcnJvckluZGV4fSAmJiAkRXJyb3JzeyRFcnJvckluZGV4fXtTdGFydFRpbWVJbnZhbGlkfSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtTdGFydFRpbWVTZXJ2ZXJFcnJvckJsb2NrfSA9IFxAU3RhcnRUaW1lU2VydmVyRXJyb3JCbG9jazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggJEVycm9yc3skRXJyb3JJbmRleH0gJiYgJEVycm9yc3skRXJyb3JJbmRleH17RW5kVGltZUludmFsaWR9ICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e0VuZFRpbWVTZXJ2ZXJFcnJvckJsb2NrfSA9IFxARW5kVGltZVNlcnZlckVycm9yQmxvY2s7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBvdmVyd3JpdGUgcGVyaW9kIGlmIHRoZXJlIGFyZSBzdGFydCBhbmQgZW5kIHRpbWVzCiAgICAgICAgICAgICAgICBpZiAoICRTdGFydFRpbWVzWyRJRF0gJiYgJEVuZFRpbWVzWyRJRF0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFBlcmlvZCA9ICRFbmRUaW1lc1skSURdIC0gJFN0YXJ0VGltZXNbJElEXTsKCiAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IHBlcmlvZCBmcm9tIG1pbnV0ZXMgdG8gaG91cnMKICAgICAgICAgICAgICAgICAgICAkUGVyaW9kIC89IDYwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY2hlY2sgZm9yIGVycm9ycyBpbiB0aGUgcGVyaW9kCiAgICAgICAgICAgICAgICBpZiAoICRQZXJpb2QgPT0gMCApIHsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBQZXJpb2RTZXJ2ZXJFcnJvckJsb2NrLCAnWmVyb0hvdXJzUGVyaW9kU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpJbnB1dEhvdXJzV2l0aG91dFN0YXJ0RW5kVGltZScpCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e1BlcmlvZEludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e1N0YXJ0VGltZUludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICAgICAgJEVycm9yc3skRXJyb3JJbmRleH17RW5kVGltZUludmFsaWR9ICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICggJFBlcmlvZCA8IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e1BlcmlvZEludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAUGVyaW9kU2VydmVyRXJyb3JCbG9jaywgJ05lZ2F0aXZlUGVyaW9kU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICggJFBlcmlvZCA+IDI0ICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e1BlcmlvZEludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBQZXJpb2RTZXJ2ZXJFcnJvckJsb2NrLCAnSW52YWxpZEhvdXJzUGVyaW9kU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICggJEVycm9yc3skRXJyb3JJbmRleH0gJiYgJEVycm9yc3skRXJyb3JJbmRleH17UGVyaW9kSW52YWxpZH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yc3skRXJyb3JJbmRleH17UGVyaW9kU2VydmVyRXJyb3JCbG9ja30gPSBcQFBlcmlvZFNlcnZlckVycm9yQmxvY2s7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBpZiB0aGVyZSB3YXMgYW4gZXJyb3Igb24gdGhpcyByb3csIHNhdmUgYWxsIGRhdGEgaW4gdGhlIHNlcnZlciBlcnJvciBoYXNoCiAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQgJEVycm9yc3skRXJyb3JJbmRleH0gKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KFByb2plY3RJRCBBY3Rpb25JRCBSZW1hcmsgU3RhcnRUaW1lIEVuZFRpbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZXJ2ZXJFcnJvckRhdGF7JEVycm9ySW5kZXh9eyRQYXJhbWV0ZXJ9ID0gJFBhcmFteyRQYXJhbWV0ZXJ9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXtQZXJpb2R9ID0gJFBlcmlvZDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSwgc2F2ZSByb3cgb24gdGhlIERCCiAgICAgICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsaXplIHRoZSBhcnJheSBvZiB3b3JraW5nIHVuaXRzCiAgICAgICAgICAgICAgICAgICAgQHsgJERhdGF7V29ya2luZ1VuaXRzfSB9ID0gKCk7CgogICAgICAgICAgICAgICAgICAgICMgcmVwbGFjZSAyNDowMCBmb3IgMjM6NTk6NTkgdG8gYmUgYSB2YWxpZCBlbnRyeSBpbiB0aGUgREIKICAgICAgICAgICAgICAgICAgICAkUGFyYW17RW5kVGltZX0gPSAkUGFyYW17RW5kVGltZX0gZXEgJzI0OjAwJyA/ICcyMzo1OTo1OScgOiAkUGFyYW17RW5kVGltZX07CgogICAgICAgICAgICAgICAgICAgIG15ICVXb3JraW5nVW5pdCA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdElEID0+ICRQYXJhbXtQcm9qZWN0SUR9LAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb25JRCAgPT4gJFBhcmFte0FjdGlvbklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgUmVtYXJrICAgID0+ICRQYXJhbXtSZW1hcmt9LAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydFRpbWUgPT4gJFBhcmFte1N0YXJ0VGltZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIEVuZFRpbWUgICA9PiAkUGFyYW17RW5kVGltZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIFBlcmlvZCAgICA9PiAkUGVyaW9kLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyAkRGF0YXtXb3JraW5nVW5pdHN9IH0sIFwlV29ya2luZ1VuaXQ7CgogICAgICAgICAgICAgICAgICAgICREYXRhe1llYXJ9ICA9ICRQYXJhbXtZZWFyfTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtNb250aH0gPSAkUGFyYW17TW9udGh9OwogICAgICAgICAgICAgICAgICAgICREYXRhe0RheX0gICA9ICRQYXJhbXtEYXl9OwoKICAgICAgICAgICAgICAgICAgICBpZiAoICEkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+V29ya2luZ1VuaXRzSW5zZXJ0KCVEYXRhKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICdDYW5cJ3QgaW5zZXJ0IFdvcmtpbmcgVW5pdHMhJwogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkUGFyYW17U3VjY2Vzc2Z1bEluc2VydH0gPSAxOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgaW5jcmVtZW50IHRoZSBlcnJvciBpbmRleCBpZiB0aGVyZSB3YXMgYW4gZXJyb3Igb24gdGhpcyByb3cKICAgICAgICAgICAgICAgICRFcnJvckluZGV4KysgaWYgKCBkZWZpbmVkICRFcnJvcnN7JEVycm9ySW5kZXh9ICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICglU2VydmVyRXJyb3JEYXRhKSB7CiAgICAgICAgICAgICAgICAkUGFyYW17U3VjY2Vzc2Z1bEluc2VydH0gPSB1bmRlZjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBTaG93IFdvcmtpbmcgVW5pdHMKICAgICAgICAjIGdldCBleGlzdGluZyB3b3JraW5nIHVuaXRzCiAgICAgICAgJURhdGEgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+V29ya2luZ1VuaXRzR2V0KAogICAgICAgICAgICBZZWFyICA9PiAkUGFyYW17WWVhcn0sCiAgICAgICAgICAgIE1vbnRoID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgICAgIERheSAgID0+ICRQYXJhbXtEYXl9LAogICAgICAgICk7CgogICAgIyBnZXQgbnVtYmVyIG9mIHdvcmtpbmcgdW5pdHMgKD1yZWNvcmRzKQogICAgIyBpZiBiaWdnZXIgdGhhbiBSZWNvcmRzTnVtYmVyLCBtb3JlIHRoYW4gdGhlIG51bWJlciBvZiBkZWZhdWx0IHJlY29yZHMgd2VyZSBzYXZlZCBmb3IgdGhpcyBkYXRlCiAgICAgICAgaWYgKCAkRGF0YXtXb3JraW5nVW5pdHN9ICkgewogICAgICAgICAgICBteSAkV29ya2luZ1VuaXRzQ291bnQgPSBAeyAkRGF0YXtXb3JraW5nVW5pdHN9IH07CiAgICAgICAgICAgIGlmICggJFdvcmtpbmdVbml0c0NvdW50ID4gJFBhcmFte1JlY29yZHNOdW1iZXJ9ICkgewogICAgICAgICAgICAgICAgJFBhcmFte1JlY29yZHNOdW1iZXJ9ID0gJFdvcmtpbmdVbml0c0NvdW50OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6SW5wdXRIb3Vyc1dpdGhvdXRTdGFydEVuZFRpbWUnKSApIHsKICAgICAgICAgICAgJFBhcmFte1BlcmlvZEJsb2NrfSAgID0gJ1VuaXRJbnB1dFBlcmlvZCc7CiAgICAgICAgICAgICRGcm9udGVuZHtQZXJpb2ROb3RlfSA9ICcqJzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQYXJhbXtQZXJpb2RCbG9ja30gICA9ICdVbml0UGVyaW9kV2l0aG91dElucHV0JzsKICAgICAgICAgICAgJEZyb250ZW5ke1BlcmlvZE5vdGV9ID0gJyc7CiAgICAgICAgfQoKICAgICAgICBpZiAoIHRpbWUoKSA+IHRpbWVsb2NhbCggMSwgMCwgMCwgJFBhcmFte0RheX0sICRQYXJhbXtNb250aH0gLSAxLCAkUGFyYW17WWVhcn0gLSAxOTAwICkgKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdVbml0QmxvY2snLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJUZyb250ZW5kIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzaWNrLCBsZWF2ZSBkYXkgYW5kIG92ZXJ0aW1lCiAgICAgICAgJFBhcmFte1NpY2t9ICAgICA9ICREYXRhe1NpY2t9ICAgICA/ICdjaGVja2VkPSJjaGVja2VkIicgOiAnJzsKICAgICAgICAkUGFyYW17TGVhdmVEYXl9ID0gJERhdGF7TGVhdmVEYXl9ID8gJ2NoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnOwogICAgICAgICRQYXJhbXtPdmVydGltZX0gPSAkRGF0YXtPdmVydGltZX0gPyAnY2hlY2tlZD0iY2hlY2tlZCInIDogJyc7CgogICAgICAgICRQYXJhbXtUb3RhbH0gPSAkRGF0YXtUb3RhbH07CgogICAgICAgICMgc2V0IGFjdGlvbiBsaXN0IGFuZCByZWxhdGVkIGNvbnN0cmFpbnRzCiAgICAgICAgIyBnZW5lcmF0ZSBhIEphdmFTY3JpcHQgQXJyYXkgd2hpY2ggd2lsbCBiZSBvdXRwdXQgdG8gdGhlIHRlbXBsYXRlCiAgICAgICAgbXkgQEFjdGlvbklEcyA9IHNvcnQgeyAkQWN0aW9uTGlzdHskYX0gY21wICRBY3Rpb25MaXN0eyRifSB9IGtleXMgJUFjdGlvbkxpc3Q7CiAgICAgICAgbXkgQEpTQWN0aW9uczsKICAgICAgICBmb3IgbXkgJEFjdGlvbklEIChAQWN0aW9uSURzKSB7CiAgICAgICAgICAgIHB1c2ggQEpTQWN0aW9ucywgIlsnJEFjdGlvbklEJywgJyRBY3Rpb25MaXN0eyRBY3Rpb25JRH0nXSI7CiAgICAgICAgfQogICAgICAgICRQYXJhbXtKU0FjdGlvbkxpc3R9ID0gJ1snIC4gKCBqb2luICcsICcsIEBKU0FjdGlvbnMgKSAuICddJzsKCiAgICAgICAgbXkgJEFjdGlvbkxpc3RDb25zdHJhaW50cwogICAgICAgICAgICA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6QWN0aW9uTGlzdENvbnN0cmFpbnRzJyk7CiAgICAgICAgbXkgQEpTQWN0aW9uTGlzdENvbnN0cmFpbnRzOwogICAgICAgIGZvciBteSAkUHJvamVjdE5hbWVSZWdFeHAgKCBzb3J0IGtleXMgJXskQWN0aW9uTGlzdENvbnN0cmFpbnRzfSApIHsKICAgICAgICAgICAgbXkgJEFjdGlvbk5hbWVSZWdFeHAgPSAkQWN0aW9uTGlzdENvbnN0cmFpbnRzLT57JFByb2plY3ROYW1lUmVnRXhwfTsKICAgICAgICAgICAgc3soWyciXFxdKX17XFwkMX1zbXhnIGZvciAoICRQcm9qZWN0TmFtZVJlZ0V4cCwgJEFjdGlvbk5hbWVSZWdFeHAgKTsKICAgICAgICAgICAgcHVzaCBASlNBY3Rpb25MaXN0Q29uc3RyYWludHMsICJbJyRQcm9qZWN0TmFtZVJlZ0V4cCcsICckQWN0aW9uTmFtZVJlZ0V4cCddIjsKICAgICAgICB9CiAgICAgICAgJFBhcmFte0pTQWN0aW9uTGlzdENvbnN0cmFpbnRzfSA9ICdbJyAuICggam9pbiAnLCAnLCBASlNBY3Rpb25MaXN0Q29uc3RyYWludHMgKSAuICddJzsKCiAgICAgICAgIyBidWlsZCBhIHdvcmtpbmcgdW5pdCBhcnJheQogICAgICAgIG15IEBVbml0cyA9ICh1bmRlZik7CiAgICAgICAgaWYgKCAkRGF0YXtXb3JraW5nVW5pdHN9ICkgewogICAgICAgICAgICBwdXNoIEBVbml0cywgQHsgJERhdGF7V29ya2luZ1VuaXRzfSB9CiAgICAgICAgfQoKICAgICAgICAkRXJyb3JJbmRleCA9IDA7CgogICAgICAgICMgYnVpbGQgdW5pdHMKICAgICAgICAkUGFyYW17IkpTUHJvamVjdExpc3QifSA9ICJ2YXIgSlNQcm9qZWN0TGlzdCA9IG5ldyBBcnJheSgpO1xuIjsKICAgICAgICBmb3IgbXkgJElEICggMSAuLiAkUGFyYW17UmVjb3Jkc051bWJlcn0gKSB7CiAgICAgICAgICAgICRQYXJhbXtJRH0gPSAkSUQ7CiAgICAgICAgICAgIG15ICRVbml0UmVmICAgPSAkVW5pdHNbJElEXTsKICAgICAgICAgICAgbXkgJFNob3dFcnJvciA9IDA7CgogICAgICAgICAgICBpZiAoICEkVW5pdFJlZiApIHsKICAgICAgICAgICAgICAgICRFcnJvckluZGV4Kys7CiAgICAgICAgICAgICAgICAkU2hvd0Vycm9yID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBnZXQgZGF0YSBvZiBwcm9qZWN0cwogICAgICAgICAgICBteSAkUHJvamVjdExpc3QgPSAkU2VsZi0+X1Byb2plY3RMaXN0KAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkVW5pdFJlZi0+e1Byb2plY3RJRH0KICAgICAgICAgICAgICAgICAgICB8fCAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXtQcm9qZWN0SUR9CiAgICAgICAgICAgICAgICAgICAgfHwgJycsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkUGFyYW17UHJvamVjdElEfQogICAgICAgICAgICAgICAgPSAkVW5pdFJlZi0+e1Byb2plY3RJRH0KICAgICAgICAgICAgICAgIHx8ICRTZXJ2ZXJFcnJvckRhdGF7JEVycm9ySW5kZXh9e1Byb2plY3RJRH0KICAgICAgICAgICAgICAgIHx8ICcnOwogICAgICAgICAgICAkUGFyYW17UHJvamVjdE5hbWV9ID0gJyc7CgogICAgICAgICAgICAjIGdlbmVyYXRlIEphdmFTY3JpcHQgYXJyYXkgd2hpY2ggd2lsbCBiZSBvdXRwdXQgdG8gdGhlIHRlbXBsYXRlCiAgICAgICAgICAgIG15IEBKU1Byb2plY3RMaXN0OwogICAgICAgICAgICBmb3IgbXkgJFByb2plY3QgKCBAeyRQcm9qZWN0TGlzdH0gKSB7CiAgICAgICAgICAgICAgICBwdXNoIEBKU1Byb2plY3RMaXN0LAogICAgICAgICAgICAgICAgICAgICd7aWQ6JyAuICggJFByb2plY3QtPntLZXl9IHx8ICcwJyApIC4gJyAsIG5hbWU6XCcnIC4gJFByb2plY3QtPntWYWx1ZX0gLiAnXCd9JzsKCiAgICAgICAgICAgICAgICBpZiAoICRQcm9qZWN0LT57S2V5fSBlcSAkUGFyYW17UHJvamVjdElEfSApIHsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17UHJvamVjdE5hbWV9ID0gJFByb2plY3QtPntWYWx1ZX07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFBhcmFteyJKU1Byb2plY3RMaXN0In0KICAgICAgICAgICAgICAgIC49ICJKU1Byb2plY3RMaXN0WyRJRF0gPSBbIiAuICggam9pbiAnLCAnLCBASlNQcm9qZWN0TGlzdCApIC4gIl07XG4iOwoKICAgICAgICAgICAgJEZyb250ZW5ke1Byb2plY3RPcHRpb259ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+ICRQcm9qZWN0TGlzdCwKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICJQcm9qZWN0SURbJElEXSIsCiAgICAgICAgICAgICAgICBJRCAgICAgICAgICA9PiAiUHJvamVjdElEJElEIiwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDAsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnVmFsaWRhdGVfVGltZUFjY291bnRpbmdfUHJvamVjdCBQcm9qZWN0U2VsZWN0aW9uICcKICAgICAgICAgICAgICAgICAgICAuICggJEVycm9yc3skRXJyb3JJbmRleH17UHJvamVjdElESW52YWxpZH0gfHwgJycgKSwKICAgICAgICAgICAgICAgIE9uQ2hhbmdlID0+ICJUaW1lQWNjb3VudGluZy5BZ2VudC5FZGl0VGltZVJlY29yZHMuRmlsbEFjdGlvbkxpc3QoJElEKTsiLAogICAgICAgICAgICApOwoKIyBhY3Rpb24gbGlzdCBpbml0aWFsbHkgb25seSBjb250YWlucyBlbXB0eSBhbmQgc2VsZWN0ZWQgZWxlbWVudCBhcyB3ZWxsIGFzIGVsZW1lbnRzIGNvbmZpZ3VyZWQgZm9yIHNlbGVjdGVkIHByb2plY3QKIyBpZiBubyBjb25zdHJhaW50cyBhcmUgY29uZmlndXJlZCwgYWxsIGFjdGlvbnMgd2lsbCBiZSBkaXNwbGF5ZWQKICAgICAgICAgICAgbXkgJEFjdGlvbkRhdGEgPSAkU2VsZi0+X0FjdGlvbkxpc3RDb25zdHJhaW50cygKICAgICAgICAgICAgICAgIFByb2plY3RJRCA9PiAkVW5pdFJlZi0+e1Byb2plY3RJRH0gfHwgJFNlcnZlckVycm9yRGF0YXskRXJyb3JJbmRleH17UHJvamVjdElEfSwKICAgICAgICAgICAgICAgIFByb2plY3RMaXN0ICAgICAgICAgICA9PiAkUHJvamVjdExpc3QsCiAgICAgICAgICAgICAgICBBY3Rpb25MaXN0ICAgICAgICAgICAgPT4gXCVBY3Rpb25MaXN0LAogICAgICAgICAgICAgICAgQWN0aW9uTGlzdENvbnN0cmFpbnRzID0+ICRBY3Rpb25MaXN0Q29uc3RyYWludHMsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRBY3Rpb25EYXRhLT57Jyd9ID0gJyc7CgogICAgICAgICAgICBpZiAoICRVbml0UmVmICYmICRVbml0UmVmLT57QWN0aW9uSUR9ICYmICRBY3Rpb25MaXN0eyAkVW5pdFJlZi0+e0FjdGlvbklEfSB9ICkgewogICAgICAgICAgICAgICAgJEFjdGlvbkRhdGEtPnsgJFVuaXRSZWYtPntBY3Rpb25JRH0gfSA9ICRBY3Rpb25MaXN0eyAkVW5pdFJlZi0+e0FjdGlvbklEfSB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICRTZXJ2ZXJFcnJvckRhdGF7JEVycm9ySW5kZXh9CiAgICAgICAgICAgICAgICAmJiAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXtBY3Rpb25JRH0KICAgICAgICAgICAgICAgICYmICRBY3Rpb25MaXN0eyAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXtBY3Rpb25JRH0gfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkQWN0aW9uRGF0YS0+eyAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXtBY3Rpb25JRH0gfQogICAgICAgICAgICAgICAgICAgID0gJEFjdGlvbkxpc3R7ICRTZXJ2ZXJFcnJvckRhdGF7JEVycm9ySW5kZXh9e0FjdGlvbklEfSB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAkRnJvbnRlbmR7QWN0aW9uT3B0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCgogICAgICAgICAgICAgICAgRGF0YSAgICAgICA9PiAkQWN0aW9uRGF0YSwKICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFVuaXRSZWYtPntBY3Rpb25JRH0gfHwgJFNlcnZlckVycm9yRGF0YXskRXJyb3JJbmRleH17QWN0aW9uSUR9IHx8ICcnLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAiQWN0aW9uSURbJElEXSIsCiAgICAgICAgICAgICAgICBJRCAgICAgICAgID0+ICJBY3Rpb25JRCRJRCIsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ1ZhbGlkYXRlX0RlcGVuZGluZ1JlcXVpcmVkQU5EIFZhbGlkYXRlX0RlcGVuZGluZ19Qcm9qZWN0SUQnCiAgICAgICAgICAgICAgICAgICAgLiAkSUQKICAgICAgICAgICAgICAgICAgICAuICcgQWN0aW9uU2VsZWN0aW9uICcKICAgICAgICAgICAgICAgICAgICAuICggJEVycm9yc3skRXJyb3JJbmRleH17QWN0aW9uSURJbnZhbGlkfSB8fCAnJyApLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgJFBhcmFte1JlbWFya30gPSAkVW5pdFJlZi0+e1JlbWFya30gfHwgJFNlcnZlckVycm9yRGF0YXskRXJyb3JJbmRleH17UmVtYXJrfSB8fCAnJzsKCiAgICAgICAgICAgIG15ICRQZXJpb2Q7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICggJFVuaXRSZWYtPntQZXJpb2R9ICYmICRVbml0UmVmLT57UGVyaW9kfSA9PSAwICkKICAgICAgICAgICAgICAgIHx8ICgKICAgICAgICAgICAgICAgICAgICBkZWZpbmVkICRTZXJ2ZXJFcnJvckRhdGF7JEVycm9ySW5kZXh9e1BlcmlvZH0KICAgICAgICAgICAgICAgICAgICAmJiAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXtQZXJpb2R9ID09IDAKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFBlcmlvZCA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkUGVyaW9kID0gJFVuaXRSZWYtPntQZXJpb2R9IHx8ICRTZXJ2ZXJFcnJvckRhdGF7JEVycm9ySW5kZXh9e1BlcmlvZH0gfHwgJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciBteSAkVGltZVBlcmlvZCAocXcoU3RhcnRUaW1lIEVuZFRpbWUpKSB7CiAgICAgICAgICAgICAgICBpZiAoJFNob3dFcnJvcikgewogICAgICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXskVGltZVBlcmlvZH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXskVGltZVBlcmlvZH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJFNlcnZlckVycm9yRGF0YXskRXJyb3JJbmRleH17JFRpbWVQZXJpb2R9IGVxICcwMDowMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJycKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJFNlcnZlckVycm9yRGF0YXskRXJyb3JJbmRleH17JFRpbWVQZXJpb2R9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFBhcmFteyRUaW1lUGVyaW9kfSA9ICcnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICggJFVuaXRSZWYtPnskVGltZVBlcmlvZH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXskVGltZVBlcmlvZH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJFVuaXRSZWYtPnskVGltZVBlcmlvZH0gZXEgJzAwOjAwJyA/ICcnIDogJFVuaXRSZWYtPnskVGltZVBlcmlvZH07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkUGFyYW17JFRpbWVQZXJpb2R9ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVW5pdCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJUZyb250ZW5kLAogICAgICAgICAgICAgICAgICAgICV7ICRFcnJvcnN7JEVycm9ySW5kZXh9IH0sCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBhZGQgcHJvcGVyIHNlcnZlciBlcnJvciBtc2cgZm9yIHRoZSBzdGFydCBhbmQgZW5kIHRpbWVzCiAgICAgICAgICAgIG15ICRTZXJ2ZXJFcnJvckJsb2NrTmFtZTsKICAgICAgICAgICAgaWYgKCAkRXJyb3JzeyRFcnJvckluZGV4fSAmJiAkRXJyb3JzeyRFcnJvckluZGV4fXtTdGFydFRpbWVJbnZhbGlkfSApIHsKICAgICAgICAgICAgICAgIGlmICggc2NhbGFyIEB7ICRFcnJvcnN7JEVycm9ySW5kZXh9e1N0YXJ0VGltZVNlcnZlckVycm9yQmxvY2t9IH0gPiAwICkgewogICAgICAgICAgICAgICAgICAgIHdoaWxlICggQHsgJEVycm9yc3skRXJyb3JJbmRleH17U3RhcnRUaW1lU2VydmVyRXJyb3JCbG9ja30gfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFNlcnZlckVycm9yQmxvY2tOYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IHNoaWZ0IEB7ICRFcnJvcnN7JEVycm9ySW5kZXh9e1N0YXJ0VGltZVNlcnZlckVycm9yQmxvY2t9IH07CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJFNlcnZlckVycm9yQmxvY2tOYW1lICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnU3RhcnRUaW1lR2VuZXJpY1NlcnZlckVycm9yJyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggJEVycm9yc3skRXJyb3JJbmRleH0gJiYgJEVycm9yc3skRXJyb3JJbmRleH17RW5kVGltZUludmFsaWR9ICkgewogICAgICAgICAgICAgICAgaWYgKCBzY2FsYXIgQHsgJEVycm9yc3skRXJyb3JJbmRleH17RW5kVGltZVNlcnZlckVycm9yQmxvY2t9IH0gPiAwICkgewogICAgICAgICAgICAgICAgICAgIHdoaWxlICggQHsgJEVycm9yc3skRXJyb3JJbmRleH17RW5kVGltZVNlcnZlckVycm9yQmxvY2t9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZXJ2ZXJFcnJvckJsb2NrTmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaGlmdCBAeyAkRXJyb3JzeyRFcnJvckluZGV4fXtFbmRUaW1lU2VydmVyRXJyb3JCbG9ja30gfTsKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAkU2VydmVyRXJyb3JCbG9ja05hbWUgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdFbmRUaW1lR2VuZXJpY1NlcnZlckVycm9yJyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17UGVyaW9kQmxvY2t9LAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUGVyaW9kID0+ICRQZXJpb2QsCiAgICAgICAgICAgICAgICAgICAgSUQgICAgID0+ICRJRCwKICAgICAgICAgICAgICAgICAgICAleyAkRXJyb3JzeyRFcnJvckluZGV4fSB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIHByb3BlciBzZXJ2ZXIgZXJyb3IgbXNnIGZvciB0aGUgcGVyaW9kCiAgICAgICAgICAgIGlmICggJEVycm9yc3skRXJyb3JJbmRleH0gJiYgJEVycm9yc3skRXJyb3JJbmRleH17UGVyaW9kSW52YWxpZH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoIHNjYWxhciBAeyAkRXJyb3JzeyRFcnJvckluZGV4fXtQZXJpb2RTZXJ2ZXJFcnJvckJsb2NrfSB9ID4gMCApIHsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIEB7ICRFcnJvcnN7JEVycm9ySW5kZXh9e1BlcmlvZFNlcnZlckVycm9yQmxvY2t9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZXJ2ZXJFcnJvckJsb2NrTmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzaGlmdCBAeyAkRXJyb3JzeyRFcnJvckluZGV4fXtQZXJpb2RTZXJ2ZXJFcnJvckJsb2NrfSB9OwogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICRTZXJ2ZXJFcnJvckJsb2NrTmFtZSApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1BlcmlvZEdlbmVyaWNTZXJ2ZXJFcnJvcicgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1BlcmlvZEdlbmVyaWNTZXJ2ZXJFcnJvcicgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB2YWxpZGl0eSBjaGVjawogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkUGFyYW17SW5zZXJ0V29ya2luZ1VuaXRzfQogICAgICAgICAgICAgICAgJiYgJFVuaXRSZWYtPntQcm9qZWN0SUR9CiAgICAgICAgICAgICAgICAmJiAkVW5pdFJlZi0+e0FjdGlvbklEfQogICAgICAgICAgICAgICAgJiYgJFBhcmFte1NpY2t9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRQYXJhbXtCbG9ja05hbWV9ID0gJ1NpY2tMZWF2ZU1lc3NhZ2UnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICRQYXJhbXtJbnNlcnRXb3JraW5nVW5pdHN9CiAgICAgICAgICAgICAgICAmJiAkVW5pdFJlZi0+e1Byb2plY3RJRH0KICAgICAgICAgICAgICAgICYmICRVbml0UmVmLT57QWN0aW9uSUR9CiAgICAgICAgICAgICAgICAmJiAkUGFyYW17TGVhdmVEYXl9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRQYXJhbXtCbG9ja05hbWV9ID0gJ1ZhY2F0aW9uTWVzc2FnZSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgJFBhcmFte0luc2VydFdvcmtpbmdVbml0c30KICAgICAgICAgICAgICAgICYmICRVbml0UmVmLT57UHJvamVjdElEfQogICAgICAgICAgICAgICAgJiYgJFVuaXRSZWYtPntBY3Rpb25JRH0KICAgICAgICAgICAgICAgICYmICRQYXJhbXtPdmVydGltZX0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFBhcmFte0Jsb2NrTmFtZX0gPSAnT3ZlcnRpbWVNZXNzYWdlJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCkKICAgICAgICAgICAgPiB0aW1lbG9jYWwoIDEsIDAsIDAsICRQYXJhbXtEYXl9LCAkUGFyYW17TW9udGh9IC0gMSwgJFBhcmFte1llYXJ9IC0gMTkwMCApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRQYXJhbXtUb3RhbH0gPSBzcHJpbnRmKCAiJS4yZiIsICggJFBhcmFte1RvdGFsfSB8fCAwICkgKTsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RvdGFsJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sICVGcm9udGVuZCB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB2YWxpZGl0eSBjaGVja3Mgc3RhcnQKICAgICAgICBteSAkRXJyb3JOb3RlOwogICAgICAgIGlmICggJFBhcmFte1RvdGFsfSAmJiAkUGFyYW17VG90YWx9ID4gMjQgKSB7CiAgICAgICAgICAgICRFcnJvck5vdGUgPSAnQ2FuXCd0IHNhdmUgc2V0dGluZ3MsIGJlY2F1c2UgYSBkYXkgaGFzIG9ubHkgMjQgaG91cnMhJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkUGFyYW17SW5zZXJ0V29ya2luZ1VuaXRzfSAmJiAkUGFyYW17VG90YWx9ICYmICRQYXJhbXtUb3RhbH0gPiAxNiApIHsKICAgICAgICAgICAgJFBhcmFte0Jsb2NrTmFtZX0gPSAnTW9yZTE2SG91cnNNZXNzYWdlJzsKICAgICAgICB9CiAgICAgICAgaWYgKCRFcnJvck5vdGUpIHsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgISRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Xb3JraW5nVW5pdHNEZWxldGUoCiAgICAgICAgICAgICAgICAgICAgWWVhciAgPT4gJFBhcmFte1llYXJ9LAogICAgICAgICAgICAgICAgICAgIE1vbnRoID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgPT4gJFBhcmFte0RheX0sCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ0NhblwndCBkZWxldGUgV29ya2luZyBVbml0cyEnCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICRQYXJhbXtCbG9ja05hbWV9ICYmICRQYXJhbXtTdWNjZXNzZnVsSW5zZXJ0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1Nob3dDb25maXJtYXRpb24nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQmxvY2tOYW1lID0+ICRQYXJhbXtCbG9ja05hbWV9LAogICAgICAgICAgICAgICAgICAgIFllYXIgICAgICA9PiAkUGFyYW17WWVhcn0sCiAgICAgICAgICAgICAgICAgICAgTW9udGggICAgID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgICAgID0+ICRQYXJhbXtEYXl9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRQYXJhbXtEYXRlfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFZhbGlkYXRlID0+IDEsCiAgICAgICAgICAgIFByZWZpeCAgID0+ICcnLAogICAgICAgICAgICBGb3JtYXQgICA9PiAnRGF0ZUlucHV0Rm9ybWF0JywKICAgICAgICApOwoKICAgICAgICBpZiAoCiAgICAgICAgICAgIHRpbWVsb2NhbCggMSwgMCwgMCwgJFBhcmFte0RheX0sICRQYXJhbXtNb250aH0gLSAxLCAkUGFyYW17WWVhcn0gLSAxOTAwICkgPCB0aW1lbG9jYWwoCiAgICAgICAgICAgICAgICAxLCAwLCAwLCAkUGFyYW17RGF5QWxsb3dlZH0sCiAgICAgICAgICAgICAgICAkUGFyYW17TW9udGhBbGxvd2VkfSAtIDEsCiAgICAgICAgICAgICAgICAkUGFyYW17WWVhckFsbG93ZWR9IC0gMTkwMAogICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRJbmNvbXBsZXRlV29ya2luZ0RheXN7SW5jb21wbGV0ZX17ICRQYXJhbXtZZWFyfSB9eyAkUGFyYW17TW9udGh9IH17ICRQYXJhbXtEYXl9IH0KICAgICAgICAgICAgICAgICYmICEkUGFyYW17U3VjY2Vzc2Z1bEluc2VydH0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdSZWFkb25seScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uID0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhpcyBEYXRlIGlzIG91dCBvZiBsaW1pdCwgYnV0IHlvdSBoYXZlblwndCBpbnNlcnQgdGhpcyBkYXkgeWV0LCBzbyB5b3UgZ2V0IG9uZSghKSBjaGFuY2UgdG8gaW5zZXJ0JwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdldCBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cwogICAgICAgIG15ICVJbmNvbXBsZXRlV29ya2luZ0RheXNMaXN0OwogICAgICAgICVJbmNvbXBsZXRlV29ya2luZ0RheXMgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+V29ya2luZ1VuaXRzQ29tcGxldG5lc3NDaGVjaygpOwoKICAgICAgICBmb3IgbXkgJFllYXJJRCAoIHNvcnQga2V5cyAleyAkSW5jb21wbGV0ZVdvcmtpbmdEYXlze0luY29tcGxldGV9IH0gKSB7CiAgICAgICAgICAgIGZvciBteSAkTW9udGhJRCAoIHNvcnQga2V5cyAleyAkSW5jb21wbGV0ZVdvcmtpbmdEYXlze0luY29tcGxldGV9eyRZZWFySUR9IH0gKSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJERheUlEICgKICAgICAgICAgICAgICAgICAgICBzb3J0IGtleXMgJXsgJEluY29tcGxldGVXb3JraW5nRGF5c3tJbmNvbXBsZXRlfXskWWVhcklEfXskTW9udGhJRH0gfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkSW5jb21wbGV0ZVdvcmtpbmdEYXlzTGlzdHsiJFllYXJJRC0kTW9udGhJRC0kRGF5SUQifQogICAgICAgICAgICAgICAgICAgICAgICA9ICIkWWVhcklELSRNb250aElELSREYXlJRCI7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFte0luY29tcGxldGV9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBTaG93IHRleHQsIGlmIGluY29tcGxldGUgd29ya2luZyBkYXlzIGFyZSBhdmFpbGFibGUKICAgICAgICBpZiAoICRQYXJhbXtJbmNvbXBsZXRlfSApIHsKCiAgICAgICAgICAgICMgaWYgbWFzcyBlbnRyeSBvcHRpb24gaXMgZW5hYmxlZCwgc2hvdyBsaXN0IG9mIHdvcmtpbmcgZGF5cwogICAgICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCJUaW1lQWNjb3VudGluZzo6QWxsb3dNYXNzRW50cnlGb3JVc2VyIikgKSB7CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJbmNvbXBsZXRlV29ya2luZ0RheXNNYXNzRW50cnknLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBmb3IgbXkgJFdvcmtpbmdEYXlzICggc29ydCBrZXlzICVJbmNvbXBsZXRlV29ya2luZ0RheXNMaXN0ICkgewogICAgICAgICAgICAgICAgICAgIG15ICggJFllYXIsICRNb250aCwgJERheSApCiAgICAgICAgICAgICAgICAgICAgICAgID0gc3BsaXQoIC8tLywgJEluY29tcGxldGVXb3JraW5nRGF5c0xpc3R7JFdvcmtpbmdEYXlzfSApOwogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luY29tcGxldGVXb3JraW5nRGF5c01hc3NFbnRyeVNpbmdsZURheScsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZSAgPT4gJEluY29tcGxldGVXb3JraW5nRGF5c0xpc3R7JFdvcmtpbmdEYXlzfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFllYXIgID0+ICRZZWFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9udGggPT4gJE1vbnRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF5ICAgPT4gJERheSwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBvdGhlcndpc2Ugc2hvdyBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cyBhcyBhIGRyb3Bkb3duCiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgY3VycmVudCBkYXkgaXMgaW5jb21wbGV0ZQogICAgICAgICAgICAgICAgIyBpZiB5ZXMsIHNlbGVjdCB0aGUgY3VycmVudCBkYXkgaW4gdGhlIGRyb3Bkb3duCiAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSBzZWxlY3QgdGhlIGVtcHR5IGVsZW1lbnQKICAgICAgICAgICAgICAgIG15ICRTZWxlY3RlZElEOwoKICAgICAgICAgICAgICAgIGlmICggJEluY29tcGxldGVXb3JraW5nRGF5c0xpc3R7IiRQYXJhbXtZZWFyfS0kUGFyYW17TW9udGh9LSRQYXJhbXtEYXl9In0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGVjdGVkSUQgPSAiJFBhcmFte1llYXJ9LSRQYXJhbXtNb250aH0tJFBhcmFte0RheX0iOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15ICRJbmNvbXBsZVdvcmtpbmdEYXlzU2VsZWN0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVJbmNvbXBsZXRlV29ya2luZ0RheXNMaXN0LAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkU2VsZWN0ZWRJRCwKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gIkluY29tcGxldGVXb3JraW5nRGF5c0xpc3QiLAogICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luY29tcGxldGVXb3JraW5nRGF5cycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEluY29tcGxldGVXb3JraW5nRGF5c1NlbGVjdCA9PiAkSW5jb21wbGVXb3JraW5nRGF5c1NlbGVjdCwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJVVzZXJEYXRhID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJHZXQoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFZhY2F0aW9uQ2hlY2sgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5WYWNhdGlvbkNoZWNrKAogICAgICAgICAgICBZZWFyICAgICA9PiAkUGFyYW17WWVhcn0sCiAgICAgICAgICAgIE1vbnRoICAgID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgICAgIERheSAgICAgID0+ICRQYXJhbXtEYXl9LAogICAgICAgICAgICBDYWxlbmRhciA9PiAkVXNlckRhdGF7Q2FsZW5kYXJ9LAogICAgICAgICk7CgogICAgICAgICRQYXJhbXtXZWVrZGF5fSA9IERheV9vZl9XZWVrKCAkUGFyYW17WWVhcn0sICRQYXJhbXtNb250aH0sICRQYXJhbXtEYXl9ICk7CgogICAgICAgICMgZ2V0IHdvcmtpbmcgZGF5cyBvZiB0aGUgdXNlcidzIGNhbGVuZGFyCiAgICAgICAgbXkgJENhbGVuZGFyTmFtZSA9ICdUaW1lV29ya2luZ0hvdXJzJzsKICAgICAgICAkQ2FsZW5kYXJOYW1lIC49ICRVc2VyRGF0YXtDYWxlbmRhcn0gPyAiOjpDYWxlbmRhciRVc2VyRGF0YXtDYWxlbmRhcn0iIDogJyc7CiAgICAgICAgbXkgJENhbGVuZGFyV29ya2luZ0hvdXJzID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJENhbGVuZGFyTmFtZSk7CgogICAgICAgICMgc2hvdyAib3RoZXIgdGltZXMiIGJsb2NrLCBpZiBuZWNlc3NhcnkKICAgICAgICBpZiAoCiAgICAgICAgICAgIEB7ICRDYWxlbmRhcldvcmtpbmdIb3Vycy0+eyAkV2Vla2RheUFycmF5WyAkUGFyYW17V2Vla2RheX0gLSAxIF0gfSB9CiAgICAgICAgICAgICYmICEkVmFjYXRpb25DaGVjawogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3RoZXJUaW1lcycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgJUZyb250ZW5kLAogICAgICAgICAgICAgICAgICAgICVFcnJvcnMsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJFBhcmFte1dlZWtkYXlfdG9fVGV4dH0gPSAkV2Vla2RheUFycmF5WyAkUGFyYW17V2Vla2RheX0gLSAxIF07CgogICAgICAgICMgaW50ZWdyYXRlIHRoZSBoYW5kbGluZyBmb3IgcmVxdWlyZWQgcmVtYXJrcyBpbiByZWxhdGlvbiB0byBwcm9qZWN0cwogICAgICAgICRQYXJhbXtSZW1hcmtSZWdFeHB9ID0gJFNlbGYtPl9Qcm9qZWN0MlJlbWFya1JlZ0V4cCgpOwoKICAgICAgICAjIGVuYWJsZSBhdXRvY29tcGxldGlvbj8KICAgICAgICAkUGFyYW17RW5hYmxlQXV0b2NvbXBsZXRpb259CiAgICAgICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpbWVBY2NvdW50aW5nOjpFbmFibGVBdXRvQ29tcGxldGlvbiIpOwoKICAgICAgICAjIGJ1aWxkIG91dHB1dAogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVGl0bGUgPT4gJ0VkaXQnICk7CgogICAgICAgIGlmICggISRJbmNvbXBsZXRlV29ya2luZ0RheXN7RW5mb3JjZUluc2VydH0gKSB7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Byb2plY3QnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJUZyb250ZW5kIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNob3cgY3JlYXRlIHByb2plY3QgbGluaywgaWYgYWxsb3dlZAogICAgICAgICAgICBteSAlVXNlckRhdGEgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+VXNlckdldCgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggJFVzZXJEYXRhe0NyZWF0ZVByb2plY3R9ICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQ3JlYXRlUHJvamVjdCcsICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICggJEluY29tcGxldGVXb3JraW5nRGF5c3tXYXJuaW5nfSApIHsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICAgICAgSW5mbyAgICAgPT4gJ1BsZWFzZSBpbnNlcnQgeW91ciB3b3JraW5nIGhvdXJzIScsCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRFcnJvck5vdGUpIHsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgICAgIEluZm8gICAgID0+ICRFcnJvck5vdGUsCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2lmICggZGVmaW5lZCAkUGFyYW17U3VjY2Vzc2Z1bEluc2VydH0gKQogICAgICAgIHsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSggSW5mbyA9PiAnU3VjY2Vzc2Z1bCBpbnNlcnQhJywgKTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyBtYXNzIGVudHJ5IG5vdGlmaWNhdGlvbgogICAgICAgIGlmICggJFBhcmFte05vdGlmaWNhdGlvbn0gZXEgJ0Vycm9yJyApIHsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgICAgIEluZm8gICAgID0+ICdFcnJvciB3aGlsZSBpbnNlcnRpbmcgbXVsdGlwbGUgZGF0ZXMhJywKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkUGFyYW17Tm90aWZpY2F0aW9ufSBlcSAnU3VjY2Vzc2Z1bCcgKSB7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICBJbmZvID0+ICdTdWNjZXNzZnVsbHkgaW5zZXJ0ZWQgZW50cmllcyBmb3Igc2V2ZXJhbCBkYXRlcyEnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IG5vdGlmaWNhdGlvbiBpZiB3cm9uZyBkYXRlIHdhcyBzZWxlY3RlZAogICAgICAgIGlmICggJFBhcmFte1dyb25nRGF0ZX0gKSB7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICBJbmZvICAgICA9PiAnRW50ZXJlZCBkYXRlIHdhcyBpbnZhbGlkISBEYXRlIHdhcyBjaGFuZ2VkIHRvIHRvZGF5LicsCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGltZUFjY291bnRpbmdFZGl0JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICVGcm9udGVuZCwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyB2aWV3IG9sZGVyIGRheSBpbnNlcnRzCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1ZpZXcnICkgewoKICAgICAgICAjIHBlcm1pc3Npb24gY2hlY2sKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKSBpZiAhJFNlbGYtPntBY2Nlc3NSb307CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhEYXkgTW9udGggWWVhciBVc2VySUQpKSB7CiAgICAgICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBuZWVkZWQgcGFyYW1zCiAgICAgICAgZm9yIG15ICROZWVkZWQgKHF3KERheSBNb250aCBZZWFyKSkgewogICAgICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbiggTWVzc2FnZSA9PiAiVmlldzogTmVlZCAkTmVlZGVkIiApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGlmIG5vIFVzZXJJRCBwb3N0ZWQgdXNlIHRoZSBjdXJyZW50IHVzZXIKICAgICAgICAkUGFyYW17VXNlcklEfSB8fD0gJFNlbGYtPntVc2VySUR9OwoKICAgICAgICAjIGdldCBjdXJyZW50IGRhdGUgYW5kIHRpbWUKICAgICAgICBteSAoICRTZWMsICRNaW4sICRIb3VyLCAkRGF5LCAkTW9udGgsICRZZWFyICkKICAgICAgICAgICAgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpLAogICAgICAgICAgICApOwoKICAgICAgICBteSAkTWF4QWxsb3dlZEluc2VydERheXMKICAgICAgICAgICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGltZUFjY291bnRpbmc6Ok1heEFsbG93ZWRJbnNlcnREYXlzJykgfHwgJzEwJzsKICAgICAgICAoICRQYXJhbXtZZWFyQWxsb3dlZH0sICRQYXJhbXtNb250aEFsbG93ZWR9LCAkUGFyYW17RGF5QWxsb3dlZH0gKQogICAgICAgICAgICA9IEFkZF9EZWx0YV9ZTUQoICRZZWFyLCAkTW9udGgsICREYXksIDAsIDAsIC0kTWF4QWxsb3dlZEluc2VydERheXMgKTsKCiAgICAgICAgIyByZWRpcmVjdCB0byB0aGUgZWRpdCBzY3JlZW4sIGlmIG5lY2Vzc2FyeQogICAgICAgIGlmICgKICAgICAgICAgICAgdGltZWxvY2FsKCAxLCAwLCAwLCAkUGFyYW17RGF5fSwgJFBhcmFte01vbnRofSAtIDEsICRQYXJhbXtZZWFyfSAtIDE5MDAgKSA+IHRpbWVsb2NhbCgKICAgICAgICAgICAgICAgIDEsIDAsIDAsICRQYXJhbXtEYXlBbGxvd2VkfSwKICAgICAgICAgICAgICAgICRQYXJhbXtNb250aEFsbG93ZWR9IC0gMSwKICAgICAgICAgICAgICAgICRQYXJhbXtZZWFyQWxsb3dlZH0gLSAxOTAwCiAgICAgICAgICAgICkgJiYgJFBhcmFte1VzZXJJRH0gPT0gJFNlbGYtPntVc2VySUR9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgT1AgPT4KICAgICAgICAgICAgICAgICAgICAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249RWRpdDtZZWFyPSRQYXJhbXtZZWFyfTtNb250aD0kUGFyYW17TW9udGh9O0RheT0kUGFyYW17RGF5fSIKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyB0aGUgbmFtaW5nIG9mIHRoZSBhZ2VudCB3aGljaCB0aW1lIGFjY291bnRpbmcgaXMgdmlzaXRlZAogICAgICAgIGlmICggJFBhcmFte1VzZXJJRH0gIT0gJFNlbGYtPntVc2VySUR9ICkgewogICAgICAgICAgICBteSAlU2hvd25Vc2VycyA9ICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJMaXN0KCBUeXBlID0+ICdMb25nJywgVmFsaWQgPT4gMSApOwogICAgICAgICAgICAkUGFyYW17VXNlcn0gPSAkU2hvd25Vc2Vyc3sgJFBhcmFte1VzZXJJRH0gfTsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1VzZXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRQYXJhbXtXZWVrZGF5fSAgICAgICAgID0gRGF5X29mX1dlZWsoICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgJFBhcmFte0RheX0gKTsKICAgICAgICAkUGFyYW17V2Vla2RheV90b19UZXh0fSA9ICRXZWVrZGF5QXJyYXlbICRQYXJhbXtXZWVrZGF5fSAtIDEgXTsKICAgICAgICAkUGFyYW17TW9udGhfdG9fVGV4dH0gICA9ICRNb250aEFycmF5WyAkUGFyYW17TW9udGh9IF07CgogICAgICAgICMgVmFsdWVzIGZvciB0aGUgbGluayBpY29ucyA8PgogICAgICAgICggJFBhcmFte1llYXJCYWNrfSwgJFBhcmFte01vbnRoQmFja30sICRQYXJhbXtEYXlCYWNrfSApCiAgICAgICAgICAgID0gQWRkX0RlbHRhX1lNRCggJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9LCAkUGFyYW17RGF5fSwgMCwgMCwgLTEgKTsKICAgICAgICAoICRQYXJhbXtZZWFyTmV4dH0sICRQYXJhbXtNb250aE5leHR9LCAkUGFyYW17RGF5TmV4dH0gKQogICAgICAgICAgICA9IEFkZF9EZWx0YV9ZTUQoICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgJFBhcmFte0RheX0sIDAsIDAsIDEgKTsKCiAgICAgICAgJFBhcmFte0RhdGVTZWxlY3Rpb259ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgUHJlZml4ICAgPT4gJycsCiAgICAgICAgICAgIEZvcm1hdCAgID0+ICdEYXRlSW5wdXRGb3JtYXQnLAogICAgICAgICAgICBWYWxpZGF0ZSA9PiAxLAogICAgICAgICAgICBDbGFzcyAgICA9PiAkUGFyYW17RXJyb3JzfS0+e0RhdGVJbnZhbGlkfSwKICAgICAgICApOwoKICAgICAgICAjIFNob3cgV29ya2luZyBVbml0cwogICAgICAgICMgZ2V0IGV4aXN0aW5nIHdvcmtpbmcgdW5pdHMKICAgICAgICBteSAlRGF0YSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Xb3JraW5nVW5pdHNHZXQoCiAgICAgICAgICAgIFllYXIgICA9PiAkUGFyYW17WWVhcn0sCiAgICAgICAgICAgIE1vbnRoICA9PiAkUGFyYW17TW9udGh9LAogICAgICAgICAgICBEYXkgICAgPT4gJFBhcmFte0RheX0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAkUGFyYW17RGF0ZX0gPSAkRGF0YXtEYXRlfTsKCiAgICAgICAgIyBnZXQgcHJvamVjdCBhbmQgYWN0aW9uIHNldHRpbmdzCiAgICAgICAgbXkgJVByb2plY3QgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdFNldHRpbmdzR2V0KCk7CiAgICAgICAgbXkgJUFjdGlvbiAgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+QWN0aW9uU2V0dGluZ3NHZXQoKTsKCiAgICAgICAgIyBnZXQgc2ljaywgbGVhdmUgZGF5IGFuZCBvdmVydGltZQogICAgICAgICRQYXJhbXtTaWNrfSAgICAgPSAkRGF0YXtTaWNrfSAgICAgPyAnY2hlY2tlZCcgOiAnJzsKICAgICAgICAkUGFyYW17TGVhdmVEYXl9ID0gJERhdGF7TGVhdmVEYXl9ID8gJ2NoZWNrZWQnIDogJyc7CiAgICAgICAgJFBhcmFte092ZXJ0aW1lfSA9ICREYXRhe092ZXJ0aW1lfSA/ICdjaGVja2VkJyA6ICcnOwoKICAgICAgICAjIG9ubHkgc2hvdyB0aGUgdW5pdCBibG9jayBpZiB0aGVyZSBpcyBzb21lIGRhdGEKICAgICAgICBteSAkVW5pdHNSZWYgPSAkRGF0YXtXb3JraW5nVW5pdHN9OwogICAgICAgIGlmICggJFVuaXRzUmVmLT5bMF0gKSB7CgogICAgICAgICAgICBmb3IgbXkgJFVuaXRSZWYgKCBAeyRVbml0c1JlZn0gKSB7CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdVbml0JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCAgID0+ICRQcm9qZWN0e1Byb2plY3R9eyAkVW5pdFJlZi0+e1Byb2plY3RJRH0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uICAgID0+ICRBY3Rpb257ICRVbml0UmVmLT57QWN0aW9uSUR9IH17QWN0aW9ufSwKICAgICAgICAgICAgICAgICAgICAgICAgUmVtYXJrICAgID0+ICRVbml0UmVmLT57UmVtYXJrfSwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRUaW1lID0+ICRVbml0UmVmLT57U3RhcnRUaW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgRW5kVGltZSAgID0+ICRVbml0UmVmLT57RW5kVGltZX0sCiAgICAgICAgICAgICAgICAgICAgICAgIFBlcmlvZCAgICA9PiAkVW5pdFJlZi0+e1BlcmlvZH0sCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdUb3RhbCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsgVG90YWwgPT4gc3ByaW50ZiggIiUuMmYiLCAkRGF0YXtUb3RhbH0gKSB9CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdOb0RhdGFGb3VuZCcgKTsKICAgICAgICB9CgogICAgICAgIGlmICggJFBhcmFte1NpY2t9IHx8ICRQYXJhbXtMZWF2ZURheX0gfHwgJFBhcmFte092ZXJ0aW1lfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ090aGVyVGltZXMnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgU2ljayAgICAgPT4gJFBhcmFte1NpY2t9LAogICAgICAgICAgICAgICAgICAgIExlYXZlRGF5ID0+ICRQYXJhbXtMZWF2ZURheX0sCiAgICAgICAgICAgICAgICAgICAgT3ZlcnRpbWUgPT4gJFBhcmFte092ZXJ0aW1lfSwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAlVXNlckRhdGEgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+VXNlckdldCgKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgIG15ICRWYWNhdGlvbiA9ICRTZWxmLT57VGltZU9iamVjdH0tPlZhY2F0aW9uQ2hlY2soCiAgICAgICAgICAgIFllYXIgICAgID0+ICRQYXJhbXtZZWFyfSwKICAgICAgICAgICAgTW9udGggICAgPT4gJFBhcmFte01vbnRofSwKICAgICAgICAgICAgRGF5ICAgICAgPT4gJFBhcmFte0RheX0sCiAgICAgICAgICAgIENhbGVuZGFyID0+ICRVc2VyRGF0YXtDYWxlbmRhcn0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRWYWNhdGlvbikgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVmFjYXRpb24nLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7IFZhY2F0aW9uID0+ICRWYWNhdGlvbiB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBwcmVzZW50YXRpb24KICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoIFRpdGxlID0+ICdWaWV3JyApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1ZpZXcnCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgZGVsZXRlIG9iamVjdCBmcm9tIGRhdGFiYXNlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0RlbGV0ZScgKSB7CiAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KERheSBNb250aCBZZWFyKSkgewogICAgICAgICAgICAkUGFyYW17JFBhcmFtZXRlcn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApIGlmICEkU2VsZi0+e0FjY2Vzc1JvfTsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAhJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0RlbGV0ZSgKICAgICAgICAgICAgICAgIFllYXIgID0+ICRQYXJhbXtZZWFyfSwKICAgICAgICAgICAgICAgIE1vbnRoID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgICAgICAgICBEYXkgICA9PiAkUGFyYW17RGF5fSwKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4KICAgICAgICAgICAgICAgICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1FZGl0O1llYXI9JFBhcmFte1llYXJ9O01vbnRoPSRQYXJhbXtNb250aH07RGF5PSRQYXJhbXtEYXl9IgogICAgICAgICk7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgb3ZlcnZpZXcgYWJvdXQgdGhlIHVzZXJzIHRpbWUgYWNjb3VudGluZwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdPdmVydmlldycgKSB7CiAgICAgICAgbXkgKCAkU2VjLCAkTWluLCAkSG91ciwgJEN1cnJlbnREYXksICRNb250aCwgJFllYXIgKQogICAgICAgICAgICA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCksCiAgICAgICAgICAgICk7CgogICAgICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApIGlmICEkU2VsZi0+e0FjY2Vzc1JvfTsKCiAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KFN0YXR1cyBEYXkgTW9udGggWWVhciBVc2VySUQgUHJvamVjdFN0YXR1c1Nob3cpKSB7CiAgICAgICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgIH0KICAgICAgICAkUGFyYW17U3ViYWN0aW9ufSA9ICdFZGl0JzsKCiAgICAgICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgICAgICRQYXJhbXtVc2VySUR9ID0gJFNlbGYtPntVc2VySUR9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKCAkUGFyYW17VXNlcklEfSAhPSAkU2VsZi0+e1VzZXJJRH0gJiYgISRTZWxmLT57QWNjZXNzUnd9ICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKCBXaXRoSGVhZGVyID0+ICd5ZXMnICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFBhcmFte1N1YmFjdGlvbn0gPSAnVmlldyc7CiAgICAgICAgfQogICAgICAgIGlmICggJFBhcmFte1VzZXJJRH0gIT0gJFNlbGYtPntVc2VySUR9ICkgewogICAgICAgICAgICBteSAlU2hvd25Vc2VycyA9ICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJMaXN0KCBUeXBlID0+ICdMb25nJywgVmFsaWQgPT4gMSApOwogICAgICAgICAgICAkUGFyYW17VXNlcn0gPSAkU2hvd25Vc2Vyc3sgJFBhcmFte1VzZXJJRH0gfTsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1VzZXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgQ2hlY2sgRGF0ZQogICAgICAgIGlmICggISRQYXJhbXtZZWFyfSB8fCAhJFBhcmFte01vbnRofSApIHsKICAgICAgICAgICAgJFBhcmFte1llYXJ9ICA9ICRZZWFyOwogICAgICAgICAgICAkUGFyYW17TW9udGh9ID0gJE1vbnRoOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFBhcmFte01vbnRofSA9IHNwcmludGYoICIlMDJkIiwgJFBhcmFte01vbnRofSApOwogICAgICAgIH0KCiAgICAgICAgIyBzdG9yZSBsYXN0IHNjcmVlbgogICAgICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuJywKICAgICAgICAgICAgVmFsdWUgPT4KICAgICAgICAgICAgICAgICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1PdmVydmlldztZZWFyPSRQYXJhbXtZZWFyfTtNb250aD0kUGFyYW17TW9udGh9IiwKICAgICAgICApOwoKICAgICAgICAkUGFyYW17TW9udGhfdG9fVGV4dH0gPSAkTW9udGhBcnJheVsgJFBhcmFte01vbnRofSBdOwoKICAgICAgICAoICRQYXJhbXtZZWFyQmFja30sICRQYXJhbXtNb250aEJhY2t9LCAkUGFyYW17RGF5QmFja30gKQogICAgICAgICAgICA9IEFkZF9EZWx0YV9ZTUQoICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgMSwgMCwgLTEsIDAgKTsKICAgICAgICAoICRQYXJhbXtZZWFyTmV4dH0sICRQYXJhbXtNb250aE5leHR9LCAkUGFyYW17RGF5TmV4dH0gKQogICAgICAgICAgICA9IEFkZF9EZWx0YV9ZTUQoICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgMSwgMCwgMSwgMCApOwoKICAgICAgICAjIE92ZXJ2aWV3IHBlciBkYXkKICAgICAgICBteSAkRGF5c09mTW9udGggPSBEYXlzX2luX01vbnRoKCAkUGFyYW17WWVhcn0sICRQYXJhbXtNb250aH0gKTsKCiAgICAgICAgbXkgJVVzZXJEYXRhID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJHZXQoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBmb3IgbXkgJERheSAoIDEgLi4gJERheXNPZk1vbnRoICkgewogICAgICAgICAgICAkUGFyYW17RGF5fSA9IHNwcmludGYoICIlMDJkIiwgJERheSApOwogICAgICAgICAgICAkUGFyYW17V2Vla2RheX0gPSBEYXlfb2ZfV2VlayggJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9LCAkRGF5ICkgLSAxOwogICAgICAgICAgICBteSAkVmFjYXRpb25DaGVjayA9ICRTZWxmLT57VGltZU9iamVjdH0tPlZhY2F0aW9uQ2hlY2soCiAgICAgICAgICAgICAgICBZZWFyICAgICA9PiAkUGFyYW17WWVhcn0sCiAgICAgICAgICAgICAgICBNb250aCAgICA9PiAkUGFyYW17TW9udGh9LAogICAgICAgICAgICAgICAgRGF5ICAgICAgPT4gJERheSwKICAgICAgICAgICAgICAgIENhbGVuZGFyID0+ICRVc2VyRGF0YXtDYWxlbmRhcn0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkRGF0ZSA9IHNwcmludGYoICIlMDRkLSUwMmQtJTAyZCIsICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgJERheSApOwogICAgICAgICAgICBteSAkRGF5U3RhcnRUaW1lCiAgICAgICAgICAgICAgICA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKCBTdHJpbmcgPT4gJERhdGUgLiAnIDAwOjAwOjAwJyApOwogICAgICAgICAgICBteSAkRGF5U3RvcFRpbWUKICAgICAgICAgICAgICAgID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoIFN0cmluZyA9PiAkRGF0ZSAuICcgMjM6NTk6NTknICk7CgogICAgICAgICAgICAjIGFkZCB0aW1lIHpvbmUgdG8gY2FsY3VsYXRpb24KICAgICAgICAgICAgbXkgJFVzZXJDYWxlbmRhciA9ICRVc2VyRGF0YXtDYWxlbmRhcn0gfHwgJyc7CiAgICAgICAgICAgIG15ICRab25lID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoICJUaW1lWm9uZTo6Q2FsZW5kYXIiIC4gJFVzZXJDYWxlbmRhciApOwogICAgICAgICAgICBpZiAoJFpvbmUpIHsKICAgICAgICAgICAgICAgIG15ICRab25lU2Vjb25kcyA9ICRab25lICogNjAgKiA2MDsKICAgICAgICAgICAgICAgICREYXlTdGFydFRpbWUgPSAkRGF5U3RhcnRUaW1lIC0gJFpvbmVTZWNvbmRzOwogICAgICAgICAgICAgICAgJERheVN0b3BUaW1lICA9ICREYXlTdG9wVGltZSAtICRab25lU2Vjb25kczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJFRoaXNEYXlXb3JraW5nVGltZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPldvcmtpbmdUaW1lKAogICAgICAgICAgICAgICAgU3RhcnRUaW1lID0+ICREYXlTdGFydFRpbWUsCiAgICAgICAgICAgICAgICBTdG9wVGltZSAgPT4gJERheVN0b3BUaW1lLAogICAgICAgICAgICAgICAgQ2FsZW5kYXIgID0+ICRVc2VyQ2FsZW5kYXIsCiAgICAgICAgICAgICkgfHwgJzAnOwoKICAgICAgICAgICAgaWYgKCAkUGFyYW17WWVhcn0gZXEgJFllYXIgJiYgJFBhcmFte01vbnRofSBlcSAkTW9udGggJiYgJEN1cnJlbnREYXkgZXEgJERheSApIHsKICAgICAgICAgICAgICAgICRQYXJhbXtDbGFzc30gPSAnQWN0aXZlJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoJFZhY2F0aW9uQ2hlY2spIHsKICAgICAgICAgICAgICAgICRQYXJhbXtDbGFzc30gICA9ICdWYWNhdGlvbic7CiAgICAgICAgICAgICAgICAkUGFyYW17Q29tbWVudH0gPSAkVmFjYXRpb25DaGVjazsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoJFRoaXNEYXlXb3JraW5nVGltZSkgewogICAgICAgICAgICAgICAgJFBhcmFte0NsYXNzfSA9ICdXb3JraW5nRGF5JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRQYXJhbXtDbGFzc30gPSAnTm9uV29ya2luZ0RheSc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICVEYXRhID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0dldCgKICAgICAgICAgICAgICAgIFllYXIgICA9PiAkUGFyYW17WWVhcn0sCiAgICAgICAgICAgICAgICBNb250aCAgPT4gJFBhcmFte01vbnRofSwKICAgICAgICAgICAgICAgIERheSAgICA9PiAkUGFyYW17RGF5fSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRQYXJhbXtDb21tZW50fSA9ICREYXRhe1NpY2t9CiAgICAgICAgICAgICAgICA/ICdTaWNrIGxlYXZlJwogICAgICAgICAgICAgICAgOiAkRGF0YXtMZWF2ZURheX0gPyAnT24gdmFjYXRpb24nCiAgICAgICAgICAgICAgICA6ICREYXRhe092ZXJ0aW1lfSA/ICdPbiBvdmVydGltZSBsZWF2ZScKICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgJyc7CgogICAgICAgICAgICAkUGFyYW17V29ya2luZ0hvdXJzfSA9ICREYXRhe1RvdGFsfSA/IHNwcmludGYoICIlLjJmIiwgJERhdGF7VG90YWx9ICkgOiAnJzsKCiAgICAgICAgICAgICRQYXJhbXtXZWVrZGF5X3RvX1RleHR9ID0gJFdlZWtkYXlBcnJheVsgJFBhcmFte1dlZWtkYXl9IF07CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFBhcmFte0NvbW1lbnR9ID0gJyc7CiAgICAgICAgfQoKICAgICAgICBteSAlVXNlclJlcG9ydCA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyUmVwb3J0aW5nKAogICAgICAgICAgICBZZWFyICA9PiAkUGFyYW17WWVhcn0sCiAgICAgICAgICAgIE1vbnRoID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgKTsKICAgICAgICBmb3IgbXkgJFJlcG9ydEVsZW1lbnQgKAogICAgICAgICAgICBxdyhUYXJnZXRTdGF0ZSBUYXJnZXRTdGF0ZVRvdGFsIFdvcmtpbmdIb3Vyc1RvdGFsIFdvcmtpbmdIb3VycwogICAgICAgICAgICBPdmVydGltZSBPdmVydGltZVRvdGFsIE92ZXJ0aW1lVW50aWwgTGVhdmVEYXkgTGVhdmVEYXlUb3RhbAogICAgICAgICAgICBMZWF2ZURheVJlbWFpbmluZyBTaWNrIFNpY2tUb3RhbCBTaWNrUmVtYWluaW5nKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkVXNlclJlcG9ydHsgJFBhcmFte1VzZXJJRH0gfXskUmVwb3J0RWxlbWVudH0gfHw9IDA7CiAgICAgICAgICAgICRQYXJhbXskUmVwb3J0RWxlbWVudH0KICAgICAgICAgICAgICAgID0gc3ByaW50ZiggIiUuMmYiLCAkVXNlclJlcG9ydHsgJFBhcmFte1VzZXJJRH0gfXskUmVwb3J0RWxlbWVudH0gKTsKICAgICAgICB9CgogICAgICAgIGlmICggJFVzZXJEYXRhe1Nob3dPdmVydGltZX0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydGltZScsCiAgICAgICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIE92ZXJ2aWV3IHBlciBwcm9qZWN0IGFuZCBhY3Rpb24KICAgICAgICBteSAlUHJvamVjdERhdGEgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdEFjdGlvblJlcG9ydGluZygKICAgICAgICAgICAgWWVhciAgID0+ICRQYXJhbXtZZWFyfSwKICAgICAgICAgICAgTW9udGggID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgdGhlIHJlcG9ydCBzb3J0IGJ5IHByb2plY3RzCiAgICAgICAgaWYgKCAhJFBhcmFte1Byb2plY3RTdGF0dXNTaG93fSB8fCAkUGFyYW17UHJvamVjdFN0YXR1c1Nob3d9IGVxICd2YWxpZCcgKSB7CiAgICAgICAgICAgICRQYXJhbXtQcm9qZWN0U3RhdHVzU2hvd30gPSAnYWxsJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkUGFyYW17UHJvamVjdFN0YXR1c1Nob3d9IGVxICdhbGwnICkgewogICAgICAgICAgICAkUGFyYW17UHJvamVjdFN0YXR1c1Nob3d9ID0gJ3ZhbGlkJzsKICAgICAgICB9CgogICAgICAgICRQYXJhbXtTaG93UHJvamVjdHN9ID0gJ1Nob3cgJyAuICRQYXJhbXtQcm9qZWN0U3RhdHVzU2hvd30gLiAnIHByb2plY3RzJzsKCiAgICAgICAgUFJPSkVDVElEOgogICAgICAgIGZvciBteSAkUHJvamVjdElEICgKICAgICAgICAgICAgc29ydCB7ICRQcm9qZWN0RGF0YXskYX17TmFtZX0gY21wICRQcm9qZWN0RGF0YXskYn17TmFtZX0gfQogICAgICAgICAgICBrZXlzICVQcm9qZWN0RGF0YQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBteSAkUHJvamVjdFJlZiA9ICRQcm9qZWN0RGF0YXskUHJvamVjdElEfTsKICAgICAgICAgICAgbXkgJEFjdGlvbnNSZWYgPSAkUHJvamVjdFJlZi0+e0FjdGlvbnN9OwoKICAgICAgICAgICAgJFBhcmFte1Byb2plY3R9ID0gJyc7CiAgICAgICAgICAgICRQYXJhbXtTdGF0dXN9ID0gJFByb2plY3RSZWYtPntTdGF0dXN9ID8gJycgOiAncGFzc2l2JzsKCiAgICAgICAgICAgIG15ICRUb3RhbCAgICAgID0gMDsKICAgICAgICAgICAgbXkgJFRvdGFsVG90YWwgPSAwOwoKICAgICAgICAgICAgbmV4dCBQUk9KRUNUSUQgaWYgJFBhcmFte1Byb2plY3RTdGF0dXNTaG93fSBlcSAnYWxsJyAmJiAkUGFyYW17U3RhdHVzfTsKCiAgICAgICAgICAgIGlmICgkQWN0aW9uc1JlZikgewogICAgICAgICAgICAgICAgZm9yIG15ICRBY3Rpb25JRCAoCiAgICAgICAgICAgICAgICAgICAgc29ydCB7ICRBY3Rpb25zUmVmLT57JGF9e05hbWV9IGNtcCAkQWN0aW9uc1JlZi0+eyRifXtOYW1lfSB9CiAgICAgICAgICAgICAgICAgICAga2V5cyAleyRBY3Rpb25zUmVmfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBteSAkQWN0aW9uUmVmID0gJEFjdGlvbnNSZWYtPnskQWN0aW9uSUR9OwoKICAgICAgICAgICAgICAgICAgICAkUGFyYW17QWN0aW9ufSAgICAgPSAkQWN0aW9uUmVmLT57TmFtZX07CiAgICAgICAgICAgICAgICAgICAgJFBhcmFte0hvdXJzfSAgICAgID0gc3ByaW50ZiggIiUuMmYiLCAkQWN0aW9uUmVmLT57UGVyTW9udGh9IHx8IDAgKTsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17SG91cnNUb3RhbH0gPSBzcHJpbnRmKCAiJS4yZiIsICRBY3Rpb25SZWYtPntUb3RhbH0gfHwgMCApOwogICAgICAgICAgICAgICAgICAgICRUb3RhbCAgICAgICs9ICRQYXJhbXtIb3Vyc307CiAgICAgICAgICAgICAgICAgICAgJFRvdGFsVG90YWwgKz0gJFBhcmFte0hvdXJzVG90YWx9OwogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICEkUGFyYW17UHJvamVjdH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtQcm9qZWN0fSA9ICRQcm9qZWN0UmVmLT57TmFtZX07CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRQcm9qZWN0RGVzY3JpcHRpb24gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0ICAgICAgICAgICA9PiAkUHJvamVjdFJlZi0+e0Rlc2NyaXB0aW9ufSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXdMaW5lICAgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdQcm9qZWN0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvd1NwYW4gPT4gKCAxICsgc2NhbGFyIGtleXMgJXskQWN0aW9uc1JlZn0gKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgID0+ICRQYXJhbXtTdGF0dXN9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUHJvamVjdERlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1Byb2plY3REZXNjcmlwdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3REZXNjcmlwdGlvbiA9PiAkUHJvamVjdERlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRVc2VyRGF0YXtDcmVhdGVQcm9qZWN0fSApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBlcnNvbnMgd2hvIGFyZSBhbGxvd2VkIHRvIHNlZSB0aGUgY3JlYXRlIG9iamVjdCBsaW5rIGFyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbGxvd2VkIHRvIHNlZSB0aGUgcHJvamVjdCByZXBvcnRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHJvamVjdExpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0ICAgPT4gJFByb2plY3RSZWYtPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdElEID0+ICRQcm9qZWN0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1Byb2plY3ROb0xpbmsnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyBQcm9qZWN0ID0+ICRQcm9qZWN0UmVmLT57TmFtZX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBOb3cgc2hvdyByb3cgd2l0aCB0b3RhbCByZXN1bHQgb2YgYWxsIGFjdGlvbnMgb2YgdGhpcyBwcm9qZWN0CiAgICAgICAgICAgICAgICAkUGFyYW17SG91cnN9ICAgICAgPSBzcHJpbnRmKCAiJS4yZiIsICRUb3RhbCApOwogICAgICAgICAgICAgICAgJFBhcmFte0hvdXJzVG90YWx9ID0gc3ByaW50ZiggIiUuMmYiLCAkVG90YWxUb3RhbCApOwogICAgICAgICAgICAgICAgJFBhcmFte1RvdGFsSG91cnN9ICAgICAgKz0gJFRvdGFsOwogICAgICAgICAgICAgICAgJFBhcmFte1RvdGFsSG91cnNUb3RhbH0gKz0gJFRvdGFsVG90YWw7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvblRvdGFsJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIGRlZmluZWQoICRQYXJhbXtUb3RhbEhvdXJzfSApICkgewogICAgICAgICAgICAkUGFyYW17VG90YWxIb3Vyc30gPSBzcHJpbnRmKCAiJS4yZiIsICRQYXJhbXtUb3RhbEhvdXJzfSApOwogICAgICAgIH0KICAgICAgICBpZiAoIGRlZmluZWQoICRQYXJhbXtUb3RhbEhvdXJzVG90YWx9ICkgKSB7CiAgICAgICAgICAgICRQYXJhbXtUb3RhbEhvdXJzVG90YWx9ID0gc3ByaW50ZiggIiUuMmYiLCAkUGFyYW17VG90YWxIb3Vyc1RvdGFsfSApOwogICAgICAgIH0KCiAgICAgICAgIyBidWlsZCBvdXRwdXQKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoIFRpdGxlID0+ICdPdmVydmlldycgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGltZUFjY291bnRpbmdPdmVydmlldycKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzZXR0aW5ncyBmb3IgaGFuZGxpbmcgdGltZSBhY2NvdW50aW5nCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NldHRpbmcnICkgewoKICAgICAgICAjIGdldCB1c2VyIGRhdGEKICAgICAgICBteSAlVXNlckRhdGEgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+VXNlckdldCgKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIHBlcm1pc3Npb24gY2hlY2sKICAgICAgICBpZiAoICRVc2VyRGF0YXtDcmVhdGVQcm9qZWN0fSB8fCAkU2VsZi0+e0FjY2Vzc1J3fSApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSB1c2VyIGFjdGlvbiB0byBzaG93IGEgbXNnIGlmIGFuIHVzZXIgd2FzIHVwZGF0ZWQgb3IgYWRkZWQKICAgICAgICAgICAgbXkgJE5vdGUgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdVc2VyJyApOwoKICAgICAgICAgICAgIyBidWlsZCBvdXRwdXQKICAgICAgICAgICAgJFNlbGYtPl9TZXR0aW5nT3ZlcnZpZXcoKTsKICAgICAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCBUaXRsZSA9PiAnU2V0dGluZycgKTsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgICAgICMgc2hvdyBhIG5vdGlmaWNhdGlvbiBtc2cgaWYgcHJvcGVyCiAgICAgICAgICAgIGlmICgkTm90ZSkgewogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkTm90ZSBlcSAnRWRpdFVzZXInCiAgICAgICAgICAgICAgICAgICAgPyAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSggSW5mbyA9PiAnVXNlciB1cGRhdGVkIScgKQogICAgICAgICAgICAgICAgICAgIDogJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoIEluZm8gPT4gJ1VzZXIgYWRkZWQhJyApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGltZUFjY291bnRpbmdTZXR0aW5nJwogICAgICAgICAgICApOwogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgIH0KCiAgICAgICAgIyByZXR1cm4gbm8gcGVybWlzc2lvbiBzY3JlZW4KICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyB0aW1lIGFjY291bnRpbmcgcmVwb3J0aW5nCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1JlcG9ydGluZycgKSB7CiAgICAgICAgbXkgJUZyb250ZW5kID0gKCk7CiAgICAgICAgbXkgJVNob3duVXNlcnMgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTGlzdCggVHlwZSA9PiAnTG9uZycsIFZhbGlkID0+IDAgKTsKICAgICAgICBteSAoICRTZWMsICRNaW4sICRIb3VyLCAkQ3VycmVudERheSwgJE1vbnRoLCAkWWVhciApCiAgICAgICAgICAgID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICAgICAgICAgKTsKCiAgICAgICAgIyBwZXJtaXNzaW9uIGNoZWNrCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKCBXaXRoSGVhZGVyID0+ICd5ZXMnICkgaWYgISRTZWxmLT57QWNjZXNzUnd9OwoKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoU3RhdHVzIE1vbnRoIFllYXIgUHJvamVjdFN0YXR1c1Nob3cpKSB7CiAgICAgICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBEYXRlCiAgICAgICAgaWYgKCAhJFBhcmFte1llYXJ9IHx8ICEkUGFyYW17TW9udGh9ICkgewogICAgICAgICAgICAkUGFyYW17WWVhcn0gID0gJFllYXI7CiAgICAgICAgICAgICRQYXJhbXtNb250aH0gPSAkTW9udGg7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUGFyYW17TW9udGh9ID0gc3ByaW50ZiggIiUwMmQiLCAkUGFyYW17TW9udGh9ICk7CiAgICAgICAgfQoKICAgICAgICAjIHN0b3JlIGxhc3Qgc2NyZWVuCiAgICAgICAgJFNlbGYtPntTZXNzaW9uT2JqZWN0fS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW4nLAogICAgICAgICAgICBWYWx1ZSA9PgogICAgICAgICAgICAgICAgIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPVJlcG9ydGluZztZZWFyPSRQYXJhbXtZZWFyfTtNb250aD0kUGFyYW17TW9udGh9IiwKICAgICAgICApOwoKICAgICAgICAkUGFyYW17TW9udGhfdG9fVGV4dH0gPSAkTW9udGhBcnJheVsgJFBhcmFte01vbnRofSBdOwoKICAgICAgICBteSAlTW9udGggPSAoKTsKICAgICAgICBmb3IgbXkgJElEICggMSAuLiAxMiApIHsKICAgICAgICAgICAgJE1vbnRoeyBzcHJpbnRmKCAiJTAyZCIsICRJRCApIH0gPSAkTW9udGhBcnJheVskSURdOwogICAgICAgIH0KCiAgICAgICAgJEZyb250ZW5ke01vbnRoT3B0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlTW9udGgsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtNb250aH0gfHwgJycsCiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdNb250aCcsCiAgICAgICAgICAgIFNvcnQgICAgICAgID0+ICdOdW1lcmljS2V5JywKICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSBAWWVhciA9ICggJFllYXIgLSA0IC4uICRZZWFyICsgMSApOwoKICAgICAgICAkRnJvbnRlbmR7WWVhck9wdGlvbn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICA9PiBcQFllYXIsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtZZWFyfSB8fCAnJywKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ1llYXInLAogICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgICk7CgogICAgICAgICggJFBhcmFte1llYXJCYWNrfSwgJFBhcmFte01vbnRoQmFja30sICRQYXJhbXtEYXlCYWNrfSApCiAgICAgICAgICAgID0gQWRkX0RlbHRhX1lNRCggJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9LCAxLCAwLCAtMSwgMCApOwogICAgICAgICggJFBhcmFte1llYXJOZXh0fSwgJFBhcmFte01vbnRoTmV4dH0sICRQYXJhbXtEYXlOZXh0fSApCiAgICAgICAgICAgID0gQWRkX0RlbHRhX1lNRCggJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9LCAxLCAwLCAxLCAwICk7CgogICAgICAgIG15ICVVc2VyUmVwb3J0ID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJSZXBvcnRpbmcoCiAgICAgICAgICAgIFllYXIgICA9PiAkUGFyYW17WWVhcn0sCiAgICAgICAgICAgIE1vbnRoICA9PiAkUGFyYW17TW9udGh9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJVVzZXJCYXNpY3MgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+VXNlckxpc3QoKTsKCiAgICAgICAgVVNFUklEOgogICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCB7ICRTaG93blVzZXJzeyRhfSBjbXAgJFNob3duVXNlcnN7JGJ9IH0ga2V5cyAlU2hvd25Vc2VycyApIHsKICAgICAgICAgICAgbmV4dCBVU0VSSUQgaWYgISRVc2VyUmVwb3J0eyRVc2VySUR9OwoKICAgICAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKAogICAgICAgICAgICAgICAgcXcoTGVhdmVEYXkgT3ZlcnRpbWUgV29ya2luZ0hvdXJzIFNpY2sgTGVhdmVEYXlSZW1haW5pbmcgT3ZlcnRpbWVUb3RhbCkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFBhcmFteyRQYXJhbWV0ZXJ9ID0gc3ByaW50ZiggIiUuMmYiLCAoICRVc2VyUmVwb3J0eyRVc2VySUR9eyRQYXJhbWV0ZXJ9IHx8IDAgKSApOwogICAgICAgICAgICAgICAgJFBhcmFteyAnVG90YWwnIC4gJFBhcmFtZXRlciB9ICs9ICRQYXJhbXskUGFyYW1ldGVyfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBTaG93IE92ZXJ0aW1lIGlmIGFsbG93ZWQKICAgICAgICAgICAgaWYgKCAhJFVzZXJCYXNpY3N7JFVzZXJJRH17U2hvd092ZXJ0aW1lfSApIHsKICAgICAgICAgICAgICAgICRQYXJhbXtPdmVydGltZX0gICAgICA9ICcnOwogICAgICAgICAgICAgICAgJFBhcmFte092ZXJ0aW1lVG90YWx9ID0gJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRQYXJhbXtVc2VyfSAgID0gJFNob3duVXNlcnN7JFVzZXJJRH07CiAgICAgICAgICAgICRQYXJhbXtVc2VySUR9ID0gJFVzZXJJRDsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1VzZXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJUZyb250ZW5kIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAoCiAgICAgICAgICAgIHF3KFRvdGFsTGVhdmVEYXkgVG90YWxPdmVydGltZSBUb3RhbFdvcmtpbmdIb3VycwogICAgICAgICAgICBUb3RhbFNpY2sgVG90YWxMZWF2ZURheVJlbWFpbmluZyBUb3RhbE92ZXJ0aW1lVG90YWwpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9IHNwcmludGYoICIlLjJmIiwgKCAkUGFyYW17JFBhcmFtZXRlcn0gKSB8fCAwICk7CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgdGhlIHJlcG9ydCBzb3J0IGJ5IHByb2plY3RzCiAgICAgICAgaWYgKCAhJFBhcmFte1Byb2plY3RTdGF0dXNTaG93fSB8fCAkUGFyYW17UHJvamVjdFN0YXR1c1Nob3d9IGVxICd2YWxpZCcgKSB7CiAgICAgICAgICAgICRQYXJhbXtQcm9qZWN0U3RhdHVzU2hvd30gPSAnYWxsJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkUGFyYW17UHJvamVjdFN0YXR1c1Nob3d9IGVxICdhbGwnICkgewogICAgICAgICAgICAkUGFyYW17UHJvamVjdFN0YXR1c1Nob3d9ID0gJ3ZhbGlkJzsKICAgICAgICB9CgogICAgICAgICRQYXJhbXtTaG93UHJvamVjdHN9ID0gJ1Nob3cgJyAuICRQYXJhbXtQcm9qZWN0U3RhdHVzU2hvd30gLiAnIHByb2plY3RzJzsKCiAgICAgICAgbXkgJVByb2plY3REYXRhID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlByb2plY3RBY3Rpb25SZXBvcnRpbmcoCiAgICAgICAgICAgIFllYXIgID0+ICRQYXJhbXtZZWFyfSwKICAgICAgICAgICAgTW9udGggPT4gJFBhcmFte01vbnRofSwKICAgICAgICApOwoKICAgICAgICAjIFJFTUFSSzptZXJnZSB0aGlzIHByb2plY3RyZXBvcnRpbmcgbGlzdCB3aXRoIHRoZSBsaXN0IGluIG92ZXJ2aWV3CiAgICAgICAgUFJPSkVDVElEOgogICAgICAgIGZvciBteSAkUHJvamVjdElEICgKICAgICAgICAgICAgc29ydCB7ICRQcm9qZWN0RGF0YXskYX0tPntOYW1lfSBjbXAgJFByb2plY3REYXRheyRifS0+e05hbWV9IH0KICAgICAgICAgICAga2V5cyAlUHJvamVjdERhdGEKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJFByb2plY3RSZWYgPSAkUHJvamVjdERhdGF7JFByb2plY3RJRH07CiAgICAgICAgICAgIG15ICRBY3Rpb25zUmVmID0gJFByb2plY3RSZWYtPntBY3Rpb25zfTsKCiAgICAgICAgICAgICRQYXJhbXtQcm9qZWN0fSA9ICcnOwogICAgICAgICAgICAkUGFyYW17U3RhdHVzfSA9ICRQcm9qZWN0UmVmLT57U3RhdHVzfSA/ICcnIDogJ3Bhc3Npdic7CgogICAgICAgICAgICBteSAkVG90YWwgICAgICA9IDA7CiAgICAgICAgICAgIG15ICRUb3RhbFRvdGFsID0gMDsKCiAgICAgICAgICAgIG5leHQgUFJPSkVDVElEIGlmICRQYXJhbXtQcm9qZWN0U3RhdHVzU2hvd30gZXEgJ2FsbCcgJiYgJFBhcmFte1N0YXR1c307CgogICAgICAgICAgICBmb3IgbXkgJEFjdGlvbklEICgKICAgICAgICAgICAgICAgIHNvcnQgeyAkQWN0aW9uc1JlZi0+eyRhfS0+e05hbWV9IGNtcCAkQWN0aW9uc1JlZi0+eyRifS0+e05hbWV9IH0KICAgICAgICAgICAgICAgIGtleXMgJXskQWN0aW9uc1JlZn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJEFjdGlvblJlZiA9ICRBY3Rpb25zUmVmLT57JEFjdGlvbklEfTsKCiAgICAgICAgICAgICAgICAkUGFyYW17QWN0aW9ufSAgICAgPSAkQWN0aW9uUmVmLT57TmFtZX07CiAgICAgICAgICAgICAgICAkUGFyYW17SG91cnN9ICAgICAgPSBzcHJpbnRmKCAiJS4yZiIsICRBY3Rpb25SZWYtPntQZXJNb250aH0gfHwgMCApOwogICAgICAgICAgICAgICAgJFBhcmFte0hvdXJzVG90YWx9ID0gc3ByaW50ZiggIiUuMmYiLCAkQWN0aW9uUmVmLT57VG90YWx9IHx8IDAgKTsKICAgICAgICAgICAgICAgICRUb3RhbCAgICAgICs9ICRQYXJhbXtIb3Vyc307CiAgICAgICAgICAgICAgICAkVG90YWxUb3RhbCArPSAkUGFyYW17SG91cnNUb3RhbH07CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhJFBhcmFte1Byb2plY3R9ICkgewogICAgICAgICAgICAgICAgICAgICRQYXJhbXtQcm9qZWN0fSA9ICRQcm9qZWN0UmVmLT57TmFtZX07CiAgICAgICAgICAgICAgICAgICAgbXkgJFByb2plY3REZXNjcmlwdGlvbiA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJFByb2plY3RSZWYtPntEZXNjcmlwdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIE5ld0xpbmUgICAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1Byb2plY3QnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvd1NwYW4gICAgICAgICAgICA9PiAoIDEgKyBzY2FsYXIga2V5cyAleyRBY3Rpb25zUmVmfSApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzICAgICAgICAgICAgID0+ICRQYXJhbXtTdGF0dXN9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdERlc2NyaXB0aW9uID0+ICRQcm9qZWN0RGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0ICAgICAgICAgICAgPT4gJFByb2plY3RSZWYtPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3RJRCAgICAgICAgICA9PiAkUHJvamVjdElELAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRQYXJhbXtIb3Vyc30gICAgICA9IHNwcmludGYoICIlLjJmIiwgJFRvdGFsICk7CiAgICAgICAgICAgICRQYXJhbXtIb3Vyc1RvdGFsfSA9IHNwcmludGYoICIlLjJmIiwgJFRvdGFsVG90YWwgKTsKICAgICAgICAgICAgJFBhcmFte1RvdGFsSG91cnN9ICAgICAgKz0gJFRvdGFsOwogICAgICAgICAgICAkUGFyYW17VG90YWxIb3Vyc1RvdGFsfSArPSAkVG90YWxUb3RhbDsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvblRvdGFsJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sICVGcm9udGVuZCB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJFBhcmFte1RvdGFsSG91cnN9ICAgICAgfHw9IDA7CiAgICAgICAgJFBhcmFte1RvdGFsSG91cnNUb3RhbH0gfHw9IDA7CgogICAgICAgICRQYXJhbXtUb3RhbEhvdXJzfSAgICAgID0gc3ByaW50ZiggIiUuMmYiLCAkUGFyYW17VG90YWxIb3Vyc30gKTsKICAgICAgICAkUGFyYW17VG90YWxIb3Vyc1RvdGFsfSA9IHNwcmludGYoICIlLjJmIiwgJFBhcmFte1RvdGFsSG91cnNUb3RhbH0gKTsKCiAgICAgICAgIyBidWlsZCBvdXRwdXQKICAgICAgICBteSAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCBUaXRsZSA9PiAnUmVwb3J0aW5nJyApOwogICAgICAgICRPdXRwdXQgICAgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAgICAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJUZyb250ZW5kIH0sCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1JlcG9ydGluZycKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyB0aW1lIGFjY291bnRpbmcgcHJvamVjdCByZXBvcnRpbmcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnUHJvamVjdFJlcG9ydGluZycgKSB7CiAgICAgICAgbXkgJUZyb250ZW5kID0gKCk7CgogICAgICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApIGlmICEkU2VsZi0+e0FjY2Vzc1JvfTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgJFBhcmFte1Byb2plY3RJRH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdQcm9qZWN0SUQnICk7CgogICAgICAgICMgY2hlY2sgbmVlZGVkIHBhcmFtcwogICAgICAgIGlmICggISRQYXJhbXtQcm9qZWN0SUR9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ1Byb2plY3RSZXBvcnRpbmc6IE5lZWQgUHJvamVjdElEJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJUFjdGlvbiAgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+QWN0aW9uU2V0dGluZ3NHZXQoKTsKICAgICAgICBteSAlUHJvamVjdCA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Qcm9qZWN0U2V0dGluZ3NHZXQoKTsKICAgICAgICAkUGFyYW17UHJvamVjdH0gPSAkUHJvamVjdHtQcm9qZWN0fXsgJFBhcmFte1Byb2plY3RJRH0gfTsKCiAgICAgICAgbXkgJVNob3duVXNlcnMgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTGlzdCggVHlwZSA9PiAnTG9uZycsIFZhbGlkID0+IDAgKTsKCiAgICAgICAgIyBuZWNhc3NhcnkgYmVjYXVzZSB0aGUgUHJvamVjdEFjdGlvblJlcG9ydGluZyBpcyBub3QgcmV3b3JrZWQKICAgICAgICBteSAoICRTZWMsICRNaW4sICRIb3VyLCAkQ3VycmVudERheSwgJE1vbnRoLCAkWWVhciApCiAgICAgICAgICAgID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICAgICAgICAgKTsKICAgICAgICBteSAlUHJvamVjdERhdGEgPSAoKTsKICAgICAgICBteSAlUHJvamVjdFRpbWUgPSAoKTsKCiAgICAgICAgIyBPbmx5IG9uZSBmdW5jdGlvbiBzaG91bGQgYmUgZW5vdWdoCiAgICAgICAgZm9yIG15ICRVc2VySUQgKCBzb3J0IGtleXMgJVNob3duVXNlcnMgKSB7CgogICAgICAgICAgICAjIE92ZXJ2aWV3IHBlciBwcm9qZWN0IGFuZCBhY3Rpb24KICAgICAgICAgICAgIyBSRU1BUks6IFRoaXMgaXMgdGhlIHdyb25nIGZ1bmN0aW9uIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uCiAgICAgICAgICAgICVQcm9qZWN0RGF0YSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Qcm9qZWN0QWN0aW9uUmVwb3J0aW5nKAogICAgICAgICAgICAgICAgWWVhciAgID0+ICRZZWFyLAogICAgICAgICAgICAgICAgTW9udGggID0+ICRNb250aCwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICRQcm9qZWN0RGF0YXsgJFBhcmFte1Byb2plY3RJRH0gfSApIHsKICAgICAgICAgICAgICAgIG15ICRBY3Rpb25zUmVmID0gJFByb2plY3REYXRheyAkUGFyYW17UHJvamVjdElEfSB9e0FjdGlvbnN9OwogICAgICAgICAgICAgICAgZm9yIG15ICRBY3Rpb25JRCAoIHNvcnQga2V5cyAleyRBY3Rpb25zUmVmfSApIHsKICAgICAgICAgICAgICAgICAgICAkUHJvamVjdFRpbWV7JEFjdGlvbklEfXskVXNlcklEfXtIb3Vyc30gPSAkQWN0aW9uc1JlZi0+eyRBY3Rpb25JRH17VG90YWx9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgZGVsZXRlICRTaG93blVzZXJzeyRVc2VySUR9OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgdGhlIGhlYWRlcmxpbmUKICAgICAgICBmb3IgbXkgJFVzZXJJRCAoIHNvcnQgeyAkU2hvd25Vc2Vyc3skYX0gY21wICRTaG93blVzZXJzeyRifSB9IGtleXMgJVNob3duVXNlcnMgKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdVc2VyTmFtZScsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsgVXNlciA9PiAkU2hvd25Vc2Vyc3skVXNlcklEfSB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBiZXR0ZXIgc29sdXRpb24gZm9yIHNvcnQgYWN0aW9ucyBuZWNlc3NhcnkKICAgICAgICBteSAlTmV3QWN0aW9uID0gKCk7CiAgICAgICAgZm9yIG15ICRBY3Rpb25JRCAoIHNvcnQga2V5cyAlUHJvamVjdFRpbWUgKSB7CiAgICAgICAgICAgICROZXdBY3Rpb257JEFjdGlvbklEfSA9ICRBY3Rpb257JEFjdGlvbklEfXtBY3Rpb259OwogICAgICAgIH0KICAgICAgICAlQWN0aW9uID0gJU5ld0FjdGlvbjsKCiAgICAgICAgIyBzaG93IHRoZSByZXN1bHRzCiAgICAgICAgbXkgJVRvdGFsID0gKCk7CiAgICAgICAgZm9yIG15ICRBY3Rpb25JRCAoIHNvcnQgeyAkQWN0aW9ueyRhfSBjbXAgJEFjdGlvbnskYn0gfSBrZXlzICVBY3Rpb24gKSB7CiAgICAgICAgICAgIG15ICRUb3RhbEhvdXJzID0gMDsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsgQWN0aW9uID0+ICRBY3Rpb257JEFjdGlvbklEfSwgfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZm9yIG15ICRVc2VySUQgKCBzb3J0IHsgJFNob3duVXNlcnN7JGF9IGNtcCAkU2hvd25Vc2Vyc3skYn0gfSBrZXlzICVTaG93blVzZXJzICkgewogICAgICAgICAgICAgICAgJFRvdGFsSG91cnMgKz0gJFByb2plY3RUaW1leyRBY3Rpb25JRH17JFVzZXJJRH17SG91cnN9IHx8IDA7CiAgICAgICAgICAgICAgICAkVG90YWx7JFVzZXJJRH0gKz0gJFByb2plY3RUaW1leyRBY3Rpb25JRH17JFVzZXJJRH17SG91cnN9IHx8IDA7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1VzZXInLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBIb3VycyA9PiBzcHJpbnRmKCAiJS4yZiIsICRQcm9qZWN0VGltZXskQWN0aW9uSUR9eyRVc2VySUR9e0hvdXJzfSB8fCAwICksCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgVG90YWwKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1VzZXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7IEhvdXJzID0+IHNwcmludGYoICIlLjJmIiwgJFRvdGFsSG91cnMgKSwgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJFBhcmFte1RvdGFsQWxsfSA9IDA7CiAgICAgICAgZm9yIG15ICRVc2VySUQgKCBzb3J0IHsgJFNob3duVXNlcnN7JGF9IGNtcCAkU2hvd25Vc2Vyc3skYn0gfSBrZXlzICVTaG93blVzZXJzICkgewogICAgICAgICAgICAkUGFyYW17VG90YWxBbGx9ICs9ICRUb3RhbHskVXNlcklEfTsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1VzZXJUb3RhbCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsgVG90YWwgPT4gc3ByaW50ZiggIiUuMmYiLCAkVG90YWx7JFVzZXJJRH0gKSwgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRQYXJhbXtUb3RhbEFsbH0gPSBzcHJpbnRmKCAiJS4yZiIsICRQYXJhbXtUb3RhbEFsbH0gKTsKCiAgICAgICAgbXkgQFByb2plY3RIaXN0b3J5QXJyYXkgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdEhpc3RvcnkoCiAgICAgICAgICAgIFByb2plY3RJRCA9PiAkUGFyYW17UHJvamVjdElEfSwKICAgICAgICApOwogICAgICAgIGZvciBteSAkUm93IChAUHJvamVjdEhpc3RvcnlBcnJheSkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnUm93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFVzZXIgICA9PiAkUm93LT57VXNlcn0sCiAgICAgICAgICAgICAgICAgICAgQWN0aW9uID0+ICRSb3ctPntBY3Rpb259LAogICAgICAgICAgICAgICAgICAgIFJlbWFyayA9PiAkUm93LT57UmVtYXJrfSB8fCAnLS0nLAogICAgICAgICAgICAgICAgICAgIFBlcmlvZCA9PiBzcHJpbnRmKCAiJS4yZiIsICRSb3ctPntQZXJpb2R9ICksCiAgICAgICAgICAgICAgICAgICAgRGF0ZSAgID0+ICRSb3ctPntEYXRlfSwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgdGhlIHRvdGFsIHN1bSBvZiBob3VycyBhdCB0aGUgZW5kIG9mIHRoZSBoaXN0b3J5IGxpc3QKICAgICAgICAjIEkgYWxzbyBjYW4gdXNlICRQYXJhbXtUb3RhbEFsbH0KICAgICAgICBteSAkUHJvamVjdFRvdGFsSG91cnMgPSBzcHJpbnRmKAogICAgICAgICAgICAiJS4yZiIsCiAgICAgICAgICAgICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Qcm9qZWN0VG90YWxIb3VycygKICAgICAgICAgICAgICAgIFByb2plY3RJRCA9PiAkUGFyYW17UHJvamVjdElEfSwKICAgICAgICAgICAgICAgICkKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdIaXN0b3J5VG90YWwnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIEhpc3RvcnlUb3RhbCA9PiAkUHJvamVjdFRvdGFsSG91cnMgfHwgMCwKICAgICAgICAgICAgICAgIH0KICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIG91dHB1dAogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVGl0bGUgPT4gJ1Byb2plY3RSZXBvcnRpbmcnICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCAlRnJvbnRlbmQgfSwKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpbWVBY2NvdW50aW5nUHJvamVjdFJlcG9ydGluZycKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQgcHJvamVjdAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGRQcm9qZWN0JyApIHsKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRTZWxmLT5fUHJvamVjdFNldHRpbmdzRWRpdCggQWN0aW9uID0+ICdBZGRQcm9qZWN0JyApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQgcHJvamVjdCBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkUHJvamVjdEFjdGlvbicgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgJE5vdGUgPSAnJzsKICAgICAgICBteSAkUHJvamVjdElEOwogICAgICAgIG15ICggJUdldFBhcmFtLCAlRXJyb3JzICk7CgogICAgICAgICMgZ2V0IHBhcmFtZXRlcnMKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoUHJvamVjdCBQcm9qZWN0RGVzY3JpcHRpb24pKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApIHx8ICcnOwogICAgICAgIH0KICAgICAgICAkR2V0UGFyYW17UHJvamVjdFN0YXR1c30gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdQcm9qZWN0U3RhdHVzJyApCiAgICAgICAgICAgIHx8ICcwJzsKCiAgICAgICAgIyBjaGVjayBmb3IgbmVlZGVkIGRhdGEKICAgICAgICBpZiAoICEkR2V0UGFyYW17UHJvamVjdH0gKSB7CiAgICAgICAgICAgICRFcnJvcnN7UHJvamVjdEludmFsaWR9ICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkRXJyb3Jze1Byb2plY3RFcnJvclR5cGV9ID0gJ1Byb2plY3RNaXNzaW5nVmFsdWUnOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgbmFtZSBpcyB1bmlxdWUKICAgICAgICAgICAgbXkgJUV4aXN0aW5nUHJvamVjdAogICAgICAgICAgICAgICAgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdEdldCggUHJvamVjdCA9PiAkR2V0UGFyYW17UHJvamVjdH0gKTsKICAgICAgICAgICAgaWYgKCVFeGlzdGluZ1Byb2plY3QpIHsKICAgICAgICAgICAgICAgICRFcnJvcnN7UHJvamVjdEludmFsaWR9ICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgJEVycm9yc3tQcm9qZWN0RXJyb3JUeXBlfSA9ICdQcm9qZWN0RHVwbGljYXRlTmFtZSc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgaWYgbm8gZXJyb3JzIG9jY3VycmVkCiAgICAgICAgaWYgKCAhJUVycm9ycyApIHsKCiAgICAgICAgICAgICMgYWRkIHByb2plY3QKICAgICAgICAgICAgJFByb2plY3RJRCA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Qcm9qZWN0U2V0dGluZ3NJbnNlcnQoJUdldFBhcmFtKTsKCiAgICAgICAgICAgIGlmICgkUHJvamVjdElEKSB7CgogICAgICAgICAgICAgICAgIyBidWlsZCB0aGUgb3V0cHV0CiAgICAgICAgICAgICAgICAkU2VsZi0+X1NldHRpbmdPdmVydmlldygpOwogICAgICAgICAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSggSW5mbyA9PiAnUHJvamVjdCBhZGRlZCEnICk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7JUdldFBhcmFtfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICROb3RlID0gJFNlbGYtPntMb2dPYmplY3R9LT5HZXRMb2dFbnRyeSgKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICAgICAgV2hhdCA9PiAnTWVzc2FnZScsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNvbWV0aGluZyB3ZW50IHdyb25nCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICROb3RlCiAgICAgICAgICAgID8gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgIEluZm8gICAgID0+ICROb3RlLAogICAgICAgICAgICApCiAgICAgICAgICAgIDogJyc7CiAgICAgICAgJFNlbGYtPl9Qcm9qZWN0U2V0dGluZ3NFZGl0KAogICAgICAgICAgICBBY3Rpb24gPT4gJ0FkZFByb2plY3QnLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVFcnJvcnMsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGltZUFjY291bnRpbmdTZXR0aW5nJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgZWRpdCBwcm9qZWN0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0VkaXRQcm9qZWN0JyApIHsKICAgICAgICBteSAkSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKTsKCiAgICAgICAgIyBnZXQgcHJvamVjdCBkYXRhCiAgICAgICAgbXkgJVByb2plY3QgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdEdldCggSUQgPT4gJElEICk7CgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJFNlbGYtPl9Qcm9qZWN0U2V0dGluZ3NFZGl0KAogICAgICAgICAgICBBY3Rpb24gPT4gJ0VkaXRQcm9qZWN0JywKICAgICAgICAgICAgJVByb2plY3QsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGltZUFjY291bnRpbmdTZXR0aW5nJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgZWRpdCBwcm9qZWN0IGFjdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdFZGl0UHJvamVjdEFjdGlvbicgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgJE5vdGUgPSAnJzsKICAgICAgICBteSAoICVHZXRQYXJhbSwgJUVycm9ycyApOwoKICAgICAgICAjIGdldCBwYXJhbWV0ZXJzCiAgICAgICAgJEdldFBhcmFte0lEfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0lEJyApIHx8ICcnOwogICAgICAgICRHZXRQYXJhbXtQcm9qZWN0U3RhdHVzfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Byb2plY3RTdGF0dXMnICkKICAgICAgICAgICAgfHwgJzAnOwogICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhQcm9qZWN0IFByb2plY3REZXNjcmlwdGlvbikpIHsKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbWV0ZXJ9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1ldGVyICkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGZvciBuZWVkZWQgZGF0YQogICAgICAgIGlmICggISRHZXRQYXJhbXtQcm9qZWN0fSApIHsKICAgICAgICAgICAgJEVycm9yc3tQcm9qZWN0SW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgbmFtZSBpcyB1bmlxdWUKICAgICAgICAgICAgbXkgJUV4aXN0aW5nUHJvamVjdAogICAgICAgICAgICAgICAgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdEdldCggUHJvamVjdCA9PiAkR2V0UGFyYW17UHJvamVjdH0gKTsKCiAgICAgICAgICAgICMgaWYgdGhlIHByb2plY3QgbmFtZSBpcyBmb3VuZCwgY2hlY2sgdGhhdCB0aGUgSUQgaXMgZGlmZmVyZW50CiAgICAgICAgICAgIGlmICggJUV4aXN0aW5nUHJvamVjdCAmJiAkRXhpc3RpbmdQcm9qZWN0e0lEfSBuZSAkR2V0UGFyYW17SUR9ICkgewogICAgICAgICAgICAgICAgJEVycm9yc3tQcm9qZWN0SW52YWxpZH0gICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAkRXJyb3Jze1Byb2plY3RFcnJvclR5cGV9ID0gJ1Byb2plY3REdXBsaWNhdGVOYW1lJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBpZiBubyBlcnJvcnMgb2NjdXJyZWQKICAgICAgICBpZiAoICElRXJyb3JzICkgewoKICAgICAgICAgICAgIyBlZGl0IHByb2plY3QKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdFNldHRpbmdzVXBkYXRlKCVHZXRQYXJhbSkgKSB7CgogICAgICAgICAgICAgICAgJFNlbGYtPl9TZXR0aW5nT3ZlcnZpZXcoKTsKICAgICAgICAgICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoIEluZm8gPT4gJ1Byb2plY3QgdXBkYXRlZCEnICk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJE5vdGUgPSAkU2VsZi0+e0xvZ09iamVjdH0tPkdldExvZ0VudHJ5KAogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgICAgICBXaGF0ID0+ICdNZXNzYWdlJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc29tZXRoaW5nIHdlbnQgd3JvbmcKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJE5vdGUKICAgICAgICAgICAgPyAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJE5vdGUsCiAgICAgICAgICAgICkKICAgICAgICAgICAgOiAnJzsKICAgICAgICAkU2VsZi0+X1Byb2plY3RTZXR0aW5nc0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnRWRpdFByb2plY3QnLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJUVycm9ycywKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQgdGFzawogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGRUYXNrJyApIHsKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRTZWxmLT5fVGFza1NldHRpbmdzRWRpdCggQWN0aW9uID0+ICdBZGRUYXNrJyApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQgdGFzayBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkVGFza0FjdGlvbicgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgJE5vdGUgPSAnJzsKICAgICAgICBteSAkVGFza0lEOwogICAgICAgIG15ICggJUdldFBhcmFtLCAlRXJyb3JzICk7CgogICAgICAgICMgZ2V0IHBhcmFtZXRlcnMKICAgICAgICAkR2V0UGFyYW17VGFza30gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdUYXNrJyApIHx8ICcnOwogICAgICAgICRHZXRQYXJhbXtUYXNrU3RhdHVzfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Rhc2tTdGF0dXMnICkKICAgICAgICAgICAgfHwgJzAnOwoKICAgICAgICAjIGNoZWNrIGZvciBuZWVkZWQgZGF0YQogICAgICAgIGlmICggISRHZXRQYXJhbXtUYXNrfSApIHsKICAgICAgICAgICAgJEVycm9yc3tUYXNrSW52YWxpZH0gICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7VGFza0Vycm9yVHlwZX0gPSAnVGFza01pc3NpbmdWYWx1ZSc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBuYW1lIGlzIHVuaXF1ZQogICAgICAgICAgICBteSAlRXhpc3RpbmdUYXNrCiAgICAgICAgICAgICAgICA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5BY3Rpb25HZXQoIEFjdGlvbiA9PiAkR2V0UGFyYW17VGFza30gKTsKICAgICAgICAgICAgaWYgKCVFeGlzdGluZ1Rhc2spIHsKICAgICAgICAgICAgICAgICRFcnJvcnN7VGFza0ludmFsaWR9ICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgJEVycm9yc3tUYXNrRXJyb3JUeXBlfSA9ICdUYXNrRHVwbGljYXRlTmFtZSc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgaWYgbm8gZXJyb3JzIG9jY3VycmVkCiAgICAgICAgaWYgKCAhJUVycm9ycyApIHsKCiAgICAgICAgICAgICMgYWRkIHRhc2sKICAgICAgICAgICAgJFRhc2tJRCA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5BY3Rpb25TZXR0aW5nc0luc2VydCgKICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgICA9PiAkR2V0UGFyYW17VGFza30sCiAgICAgICAgICAgICAgICBBY3Rpb25TdGF0dXMgPT4gJEdldFBhcmFte1Rhc2tTdGF0dXN9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRUYXNrSUQpIHsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIHRoZSBvdXRwdXQKICAgICAgICAgICAgICAgICRTZWxmLT5fU2V0dGluZ092ZXJ2aWV3KCk7CiAgICAgICAgICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KCBJbmZvID0+ICdUYXNrIGFkZGVkIScgKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpbWVBY2NvdW50aW5nU2V0dGluZycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHt9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJE5vdGUgPSAkU2VsZi0+e0xvZ09iamVjdH0tPkdldExvZ0VudHJ5KAogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgICAgICBXaGF0ID0+ICdNZXNzYWdlJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc29tZXRoaW5nIHdlbnQgd3JvbmcKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJE5vdGUKICAgICAgICAgICAgPyAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJE5vdGUsCiAgICAgICAgICAgICkKICAgICAgICAgICAgOiAnJzsKICAgICAgICAkU2VsZi0+X1Rhc2tTZXR0aW5nc0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnQWRkVGFzaycsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgJUVycm9ycywKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBlZGl0IHRhc2sKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRWRpdFRhc2snICkgewogICAgICAgIG15ICRJRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0FjdGlvbklEJyApIHx8ICcnOwoKICAgICAgICAjIGdldCBwcm9qZWN0IGRhdGEKICAgICAgICBteSAlVGFzayA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5BY3Rpb25HZXQoIElEID0+ICRJRCApOwoKICAgICAgICBteSAlVGFza0RhdGEgPSAoCiAgICAgICAgICAgIFRhc2sgICAgICAgPT4gJFRhc2t7QWN0aW9ufSwKICAgICAgICAgICAgVGFza1N0YXR1cyA9PiAkVGFza3tBY3Rpb25TdGF0dXN9LAogICAgICAgICk7CgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJFNlbGYtPl9UYXNrU2V0dGluZ3NFZGl0KAogICAgICAgICAgICBBY3Rpb24gICA9PiAnRWRpdFRhc2snLAogICAgICAgICAgICBBY3Rpb25JRCA9PiAkSUQsCiAgICAgICAgICAgICVUYXNrRGF0YSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBlZGl0IHByb2plY3QgYWN0aW9uCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0VkaXRUYXNrQWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICBteSAkTm90ZSA9ICcnOwogICAgICAgIG15ICggJUdldFBhcmFtLCAlRXJyb3JzICk7CgogICAgICAgICMgZ2V0IHBhcmFtZXRlcnMKICAgICAgICAkR2V0UGFyYW17QWN0aW9uSUR9ICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdBY3Rpb25JRCcgKSAgIHx8ICcnOwogICAgICAgICRHZXRQYXJhbXtUYXNrU3RhdHVzfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Rhc2tTdGF0dXMnICkgfHwgJzAnOwogICAgICAgICRHZXRQYXJhbXtUYXNrfSAgICAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Rhc2snICkgICAgICAgfHwgJyc7CgogICAgICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICAgICAgaWYgKCAhJEdldFBhcmFte1Rhc2t9ICkgewogICAgICAgICAgICAkRXJyb3Jze1Rhc2tJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBuYW1lIGlzIHVuaXF1ZQogICAgICAgICAgICBteSAlRXhpc3RpbmdUYXNrCiAgICAgICAgICAgICAgICA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5BY3Rpb25HZXQoIEFjdGlvbiA9PiAkR2V0UGFyYW17VGFza30gKTsKCiAgICAgICAgICAgICMgaWYgdGhlIHRhc2sgbmFtZSBpcyBmb3VuZCwgY2hlY2sgdGhhdCB0aGUgSUQgaXMgZGlmZmVyZW50CiAgICAgICAgICAgIGlmICggJUV4aXN0aW5nVGFzayAmJiAkRXhpc3RpbmdUYXNre0lEfSBuZSAkR2V0UGFyYW17QWN0aW9uSUR9ICkgewogICAgICAgICAgICAgICAgJEVycm9yc3tUYXNrSW52YWxpZH0gICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAkRXJyb3Jze1Rhc2tFcnJvclR5cGV9ID0gJ1Rhc2tEdXBsaWNhdGVOYW1lJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBpZiBubyBlcnJvcnMgb2NjdXJyZWQKICAgICAgICBpZiAoICElRXJyb3JzICkgewoKICAgICAgICAgICAgIyBlZGl0IGFjdGlvbiAodGFzaykKICAgICAgICAgICAgbXkgJEFjdGlvblVwZGF0ZSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5BY3Rpb25TZXR0aW5nc1VwZGF0ZSgKICAgICAgICAgICAgICAgIEFjdGlvbklEICAgICA9PiAkR2V0UGFyYW17QWN0aW9uSUR9LAogICAgICAgICAgICAgICAgQWN0aW9uICAgICAgID0+ICRHZXRQYXJhbXtUYXNrfSwKICAgICAgICAgICAgICAgIEFjdGlvblN0YXR1cyA9PiAkR2V0UGFyYW17VGFza1N0YXR1c30sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJEFjdGlvblVwZGF0ZSkgewogICAgICAgICAgICAgICAgJFNlbGYtPl9TZXR0aW5nT3ZlcnZpZXcoKTsKICAgICAgICAgICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoIEluZm8gPT4gJ1Rhc2sgdXBkYXRlZCEnICk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJE5vdGUgPSAkU2VsZi0+e0xvZ09iamVjdH0tPkdldExvZ0VudHJ5KAogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgICAgICBXaGF0ID0+ICdNZXNzYWdlJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc29tZXRoaW5nIHdlbnQgd3JvbmcKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJE5vdGUKICAgICAgICAgICAgPyAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJE5vdGUsCiAgICAgICAgICAgICkKICAgICAgICAgICAgOiAnJzsKICAgICAgICAkU2VsZi0+X1Rhc2tTZXR0aW5nc0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnRWRpdFRhc2snLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJUVycm9ycywKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQgdXNlcgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGRVc2VyJyApIHsKCiAgICAgICAgIyBnZXQgcGFyYW1ldGVycwogICAgICAgIG15ICROZXdVc2VySUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdOZXdVc2VySUQnICkKICAgICAgICAgICAgfHwgJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnVXNlcklEJyApCiAgICAgICAgICAgIHx8ICcnOwogICAgICAgIGlmICggISROZXdVc2VySUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAnVGhlIFVzZXJJRCBpcyBub3QgdmFsaWQhJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJE5ld1RpbWVQZXJpb2QgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdOZXdUaW1lUGVyaW9kJyApOwoKICAgICAgICBteSAkTGFzdFBlcmlvZE51bWJlciA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyTGFzdFBlcmlvZE51bWJlckdldCgKICAgICAgICAgICAgVXNlcklEID0+ICROZXdVc2VySUQsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+VXNlclNldHRpbmdzSW5zZXJ0KAogICAgICAgICAgICBVc2VySUQgPT4gJE5ld1VzZXJJRCwKICAgICAgICAgICAgUGVyaW9kID0+ICRMYXN0UGVyaW9kTnVtYmVyICsgMSwKICAgICAgICApOwoKICAgICAgICAjIGlmIGl0IGlzIG5vdCBhbiBhY3Rpb24gYWJvdXQgYWRkaW5nIGEgbmV3IHRpbWUgcGVyaW9kCiAgICAgICAgaWYgKCAhJE5ld1RpbWVQZXJpb2QgKSB7CiAgICAgICAgICAgIGlmICggISRTdWNjZXNzICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAnQ2FuXCd0IGluc2VydCB1c2VyIGRhdGEhJwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJUdyb3VwcyA9ICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cExpc3QoIFZhbGlkID0+IDEgKTsKICAgICAgICAgICAgbXkgJUdyb3VwRGF0YSA9ICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJE5ld1VzZXJJRCwKICAgICAgICAgICAgICAgIFR5cGUgICA9PiAncm8nLAogICAgICAgICAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZm9yIG15ICRHcm91cEtleSAoIHNvcnQga2V5cyAlR3JvdXBzICkgewogICAgICAgICAgICAgICAgaWYgKCAkR3JvdXBzeyRHcm91cEtleX0gZXEgJ3RpbWVfYWNjb3VudGluZycgJiYgISRHcm91cERhdGF7JEdyb3VwS2V5fSApIHsKCiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTWVtYmVyQWRkKAogICAgICAgICAgICAgICAgICAgICAgICBHSUQgICAgICAgID0+ICRHcm91cEtleSwKICAgICAgICAgICAgICAgICAgICAgICAgVUlEICAgICAgICA9PiAkTmV3VXNlcklELAogICAgICAgICAgICAgICAgICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvICAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZV9pbnRvID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGUgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyICAgICA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydyAgICAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAlVXNlciA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKCBVc2VySUQgPT4gJE5ld1VzZXJJRCApOwogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJFNlbGYtPl9Vc2VyU2V0dGluZ3NFZGl0KAogICAgICAgICAgICBBY3Rpb24gICAgPT4gJ0FkZFVzZXInLAogICAgICAgICAgICBTdWJhY3Rpb24gPT4gJ0FkZFVzZXInLAogICAgICAgICAgICAlVXNlciwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBlZGl0IHVzZXIgc2V0dGluZ3MKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRWRpdFVzZXInICkgewogICAgICAgIG15ICRJRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1VzZXJJRCcgKSB8fCAnJzsKICAgICAgICBpZiAoICEkSUQgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAnVGhlIFVzZXJJRCBpcyBub3QgdmFsaWQhJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJE5ld1RpbWVQZXJpb2QgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdOZXdUaW1lUGVyaW9kJyApOwogICAgICAgIG15ICRMYXN0UGVyaW9kTnVtYmVyID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJMYXN0UGVyaW9kTnVtYmVyR2V0KAogICAgICAgICAgICBVc2VySUQgPT4gJElELAogICAgICAgICk7CgogICAgICAgICMgaWYgaXQgaXMgYW4gYWN0aW9uIGFib3V0IGFkZGluZyBhIG5ldyB0aW1lIHBlcmlvZCwgaW5zZXJ0IGl0CiAgICAgICAgaWYgKCROZXdUaW1lUGVyaW9kKSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJTZXR0aW5nc0luc2VydCgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkSUQsCiAgICAgICAgICAgICAgICBQZXJpb2QgPT4gJExhc3RQZXJpb2ROdW1iZXIgKyAxLAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ1VuYWJsZSB0byBhZGQgdGltZSBwZXJpb2QhIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvci4nLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJUVycm9ycyA9ICgpOwoKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0FkZFBlcmlvZCcgKQogICAgICAgICAgICB8fCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTdWJtaXRVc2VyRGF0YScgKQogICAgICAgICAgICApCiAgICAgICAgewoKICAgICAgICAgICAgIyBjaGVjayB2YWxpZGl0eSBvZiBwZXJpb2RzCiAgICAgICAgICAgICVFcnJvcnMgPSAkU2VsZi0+X0NoZWNrVmFsaWRpdHlVc2VyUGVyaW9kcyggUGVyaW9kID0+ICRMYXN0UGVyaW9kTnVtYmVyICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCB1c2VyIGRhdGEKICAgICAgICBteSAlVXNlciA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKCBVc2VySUQgPT4gJElEICk7CgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJFNlbGYtPl9Vc2VyU2V0dGluZ3NFZGl0KAogICAgICAgICAgICBBY3Rpb24gICAgPT4gJ0VkaXRVc2VyJywKICAgICAgICAgICAgU3ViYWN0aW9uID0+ICdFZGl0VXNlcicsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkSUQsCiAgICAgICAgICAgIEVycm9ycyAgICA9PiBcJUVycm9ycywKICAgICAgICAgICAgUGVyaW9kcyAgID0+ICRMYXN0UGVyaW9kTnVtYmVyLAogICAgICAgICAgICAlVXNlciwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIG1hc3MgZW50cnkKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnTWFzc0VudHJ5JyApIHsKCiAgICAgICAgIyBwZXJtaXNzaW9uIGNoZWNrCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKCBXaXRoSGVhZGVyID0+ICd5ZXMnICkgaWYgISRTZWxmLT57QWNjZXNzUm99OwoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoRGF0ZXMgTGVhdmVEYXkgU2ljayBPdmVydGltZSkpIHsKICAgICAgICAgICAgJFBhcmFteyRQYXJhbWV0ZXJ9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1ldGVyICkgfHwgJyc7CiAgICAgICAgfQoKICAgICAgICAjIHNwbGl0IHVwIGRhdGVzCiAgICAgICAgbXkgQERhdGVzID0gc3BsaXQgL1t8XS8sICRQYXJhbXtEYXRlc307CiAgICAgICAgbXkgJEluc2VydEVycm9yID0gMDsKCiAgICAgICAgIyBzYXZlIGVudHJpZXMgaW4gdGhlIGRiCiAgICAgICAgZm9yIG15ICREYXRlIChARGF0ZXMpIHsKCiAgICAgICAgICAgIG15ICggJFllYXIsICRNb250aCwgJERheSApID0gc3BsaXQgL1stXS8sICREYXRlOwoKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgISRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Xb3JraW5nVW5pdHNJbnNlcnQoCiAgICAgICAgICAgICAgICAgICAgWWVhciAgICAgPT4gJFllYXIsCiAgICAgICAgICAgICAgICAgICAgTW9udGggICAgPT4gJE1vbnRoLAogICAgICAgICAgICAgICAgICAgIERheSAgICAgID0+ICREYXksCiAgICAgICAgICAgICAgICAgICAgTGVhdmVEYXkgPT4gJFBhcmFte0xlYXZlRGF5fSB8fCAwLAogICAgICAgICAgICAgICAgICAgIFNpY2sgICAgID0+ICRQYXJhbXtTaWNrfSB8fCAwLAogICAgICAgICAgICAgICAgICAgIE92ZXJ0aW1lID0+ICRQYXJhbXtPdmVydGltZX0gfHwgMCwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJEluc2VydEVycm9yID0gMTsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgICMgcmVkaXJlY3QgdG8gZWRpdCBzY3JlZW4gd2l0aCBsb2cgbWVzc2FnZQogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PiAnQWN0aW9uPUFnZW50VGltZUFjY291bnRpbmc7U3ViYWN0aW9uPUVkaXQ7Tm90aWZpY2F0aW9uPScKICAgICAgICAgICAgICAgIC4gKCAkSW5zZXJ0RXJyb3IgPyAnRXJyb3InIDogJ1N1Y2Nlc3NmdWwnICkKICAgICAgICApOwoKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzaG93IGVycm9yIHNjcmVlbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKCBNZXNzYWdlID0+ICdJbnZhbGlkIFN1YmFjdGlvbiBwcm9jZXNzIScgKTsKfQoKc3ViIF9DaGVja1ZhbGlkaXR5VXNlclBlcmlvZHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlRXJyb3JzID0gKCk7CiAgICBteSAlR2V0UGFyYW07CgogICAgZm9yICggbXkgJFBlcmlvZCA9IDE7ICRQZXJpb2QgPD0gJFBhcmFte1BlcmlvZH07ICRQZXJpb2QrKyApIHsKCiAgICAgICAgIyBjaGVjayBmb3IgbmVlZGVkIGRhdGEKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoRGF0ZVN0YXJ0IERhdGVFbmQgTGVhdmVEYXlzKSkgewogICAgICAgICAgICAkR2V0UGFyYW17JFBhcmFtZXRlcn0KICAgICAgICAgICAgICAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1ldGVyIC4gIlskUGVyaW9kXSIgKTsKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFteyRQYXJhbWV0ZXJ9ICkgewogICAgICAgICAgICAgICAgJEVycm9yc3sgJFBhcmFtZXRlciAuICctJyAuICRQZXJpb2QgLiAnSW52YWxpZCcgfSAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICRFcnJvcnN7ICRQYXJhbWV0ZXIgLiAnLScgLiAkUGVyaW9kIC4gJ0Vycm9yVHlwZScgfSA9ICdNaXNzaW5nVmFsdWUnOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG15ICggJFllYXIsICRNb250aCwgJERheSApID0gc3BsaXQoICctJywgJEdldFBhcmFte0RhdGVTdGFydH0gKTsKICAgICAgICBteSAkU3RhcnREYXRlID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+RGF0ZTJTeXN0ZW1UaW1lKAogICAgICAgICAgICBZZWFyICAgPT4gJFllYXIsCiAgICAgICAgICAgIE1vbnRoICA9PiAkTW9udGgsCiAgICAgICAgICAgIERheSAgICA9PiAkRGF5LAogICAgICAgICAgICBIb3VyICAgPT4gMCwKICAgICAgICAgICAgTWludXRlID0+IDAsCiAgICAgICAgICAgIFNlY29uZCA9PiAwLAogICAgICAgICk7CiAgICAgICAgKCAkWWVhciwgJE1vbnRoLCAkRGF5ICkgPSBzcGxpdCggJy0nLCAkR2V0UGFyYW17RGF0ZUVuZH0gKTsKICAgICAgICBteSAkRW5kRGF0ZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPkRhdGUyU3lzdGVtVGltZSgKICAgICAgICAgICAgWWVhciAgID0+ICRZZWFyLAogICAgICAgICAgICBNb250aCAgPT4gJE1vbnRoLAogICAgICAgICAgICBEYXkgICAgPT4gJERheSwKICAgICAgICAgICAgSG91ciAgID0+IDAsCiAgICAgICAgICAgIE1pbnV0ZSA9PiAwLAogICAgICAgICAgICBTZWNvbmQgPT4gMCwKICAgICAgICApOwogICAgICAgIGlmICggISRTdGFydERhdGUgKSB7CiAgICAgICAgICAgICRFcnJvcnN7ICdEYXRlU3RhcnQtJyAuICRQZXJpb2QgLiAnSW52YWxpZCcgfSAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3sgJ0RhdGVTdGFydC0nIC4gJFBlcmlvZCAuICdFcnJvclR5cGUnIH0gPSAnSW52YWxpZCc7CiAgICAgICAgfQogICAgICAgIGlmICggISRFbmREYXRlICkgewogICAgICAgICAgICAkRXJyb3JzeyAnRGF0ZUVuZC0nIC4gJFBlcmlvZCAuICdJbnZhbGlkJyB9ICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkRXJyb3JzeyAnRGF0ZUVuZC0nIC4gJFBlcmlvZCAuICdFcnJvclR5cGUnIH0gPSAnSW52YWxpZCc7CiAgICAgICAgfQogICAgICAgIGlmICggJFN0YXJ0RGF0ZSAmJiAkRW5kRGF0ZSAmJiAkU3RhcnREYXRlID49ICRFbmREYXRlICkgewogICAgICAgICAgICAkRXJyb3JzeyAnRGF0ZUVuZC0nIC4gJFBlcmlvZCAuICdJbnZhbGlkJyB9ICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkRXJyb3JzeyAnRGF0ZUVuZC0nIC4gJFBlcmlvZCAuICdFcnJvclR5cGUnIH0gPSAnQmVmb3JlRGF0ZVN0YXJ0JzsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICVFcnJvcnM7Cn0KCnN1YiBfRmlyc3RVc2VyUmVkaXJlY3QgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIGZvciBpbml0aWFsIHVzZWluZywgdGhlIGZpcnN0IGFnZW50IHdpdGggcnctcmlnaHQgd2lsbCBiZSByZWRpcmVjdGVkCiAgICAjIHRvICdTZXR0aW5nJy4gVGhlbiBoZSBjYW4gZG8gdGhlIGluaXRpYWwgc2V0dGluZ3MKCiAgICBteSAlR3JvdXBMaXN0ID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgIFJlc3VsdCA9PiAnSEFTSCcsCiAgICApOwogICAgZm9yIG15ICRHcm91cEtleSAoIHNvcnQga2V5cyAlR3JvdXBMaXN0ICkgewogICAgICAgIGlmICggJEdyb3VwTGlzdHskR3JvdXBLZXl9IGVxICd0aW1lX2FjY291bnRpbmcnICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRUaW1lQWNjb3VudGluZzsiIC4gIlN1YmFjdGlvbj1TZXR0aW5nIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgIk5vIFVzZXJQZXJpb2QgYXZhaWxhYmxlLCBwbGVhc2UgY29udGFjdCB0aGUgdGltZSBhY2NvdW50aW5nIGFkbWluIHRvIGluc2VydCB5b3VyIFVzZXJQZXJpb2QhIgogICAgKTsKfQoKc3ViIF9BY3Rpb25MaXN0IHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgbXkgJUFjdGlvbkxpc3Q7CiAgICBteSAlQWN0aW9uID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPkFjdGlvblNldHRpbmdzR2V0KCk7CgogICAgIyBnZXQgYWN0aW9uIHNldHRpbmdzCiAgICBBQ1RJT05JRDoKICAgIGZvciBteSAkQWN0aW9uSUQgKCBzb3J0IGtleXMgJUFjdGlvbiApIHsKICAgICAgICBuZXh0IEFDVElPTklEIGlmICEkQWN0aW9ueyRBY3Rpb25JRH17QWN0aW9uU3RhdHVzfTsKICAgICAgICBuZXh0IEFDVElPTklEIGlmICEkQWN0aW9ueyRBY3Rpb25JRH17QWN0aW9ufTsKICAgICAgICAkQWN0aW9uTGlzdHskQWN0aW9uSUR9ID0gJEFjdGlvbnskQWN0aW9uSUR9e0FjdGlvbn07CiAgICB9CiAgICAkQWN0aW9uTGlzdHsnJ30gPSAnJzsKCiAgICByZXR1cm4gJUFjdGlvbkxpc3Q7Cn0KCnN1YiBfQWN0aW9uTGlzdENvbnN0cmFpbnRzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJUxpc3Q7CiAgICBpZiAoICRQYXJhbXtQcm9qZWN0SUR9ICYmIGtleXMgJXsgJFBhcmFte0FjdGlvbkxpc3RDb25zdHJhaW50c30gfSApIHsKICAgICAgICBteSAkUHJvamVjdE5hbWU7CgogICAgICAgIFBST0pFQ1Q6CiAgICAgICAgZm9yIG15ICRQcm9qZWN0ICggQHsgJFBhcmFte1Byb2plY3RMaXN0fSB9ICkgewogICAgICAgICAgICBpZiAoICRQcm9qZWN0LT57S2V5fSBlcSAkUGFyYW17UHJvamVjdElEfSApIHsKICAgICAgICAgICAgICAgICRQcm9qZWN0TmFtZSA9ICRQcm9qZWN0LT57VmFsdWV9OwogICAgICAgICAgICAgICAgbGFzdCBQUk9KRUNUOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIGRlZmluZWQoJFByb2plY3ROYW1lKSApIHsKCiAgICAgICAgICAgICMgbG9vcCBvdmVyIGFjdGlvbnMgdG8gZmluZCBtYXRjaGVzIGZvciBjb25maWd1cmVkIHByb2plY3QKICAgICAgICAgICAgIyBhbmQgYWN0aW9uIHJlZ2V4cCBwYWlycwogICAgICAgICAgICBmb3IgbXkgJEFjdGlvbklEICggc29ydCBrZXlzICV7ICRQYXJhbXtBY3Rpb25MaXN0fSB9ICkgewoKICAgICAgICAgICAgICAgIG15ICRBY3Rpb25OYW1lID0gJFBhcmFte0FjdGlvbkxpc3R9LT57JEFjdGlvbklEfTsKCiAgICAgICAgICAgICAgICBSRUdFWFA6CiAgICAgICAgICAgICAgICBmb3IgbXkgJFByb2plY3ROYW1lUmVnRXhwICggc29ydCBrZXlzICV7ICRQYXJhbXtBY3Rpb25MaXN0Q29uc3RyYWludHN9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJEFjdGlvbk5hbWVSZWdFeHAgPSAkUGFyYW17QWN0aW9uTGlzdENvbnN0cmFpbnRzfS0+eyRQcm9qZWN0TmFtZVJlZ0V4cH07CiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkUHJvamVjdE5hbWUgPX4gbXskUHJvamVjdE5hbWVSZWdFeHB9c214CiAgICAgICAgICAgICAgICAgICAgICAgICYmICRBY3Rpb25OYW1lID1+IG17JEFjdGlvbk5hbWVSZWdFeHB9c214CiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRMaXN0eyRBY3Rpb25JRH0gPSAkQWN0aW9uTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBSRUdFWFA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgYWxsIGF2YWlsYWJsZSBhY3Rpb25zIHdpbGwgYmUgYWRkZWQgaWYgbm8gYWN0aW9uIHdhcyBhZGRlZCBhYm92ZSAocG9zc2libGUgbWlzY29uZmlndXJhdGlvbikKICAgIGlmICggIWtleXMgJUxpc3QgKSB7CiAgICAgICAgZm9yIG15ICRBY3Rpb25JRCAoIHNvcnQga2V5cyAleyAkUGFyYW17QWN0aW9uTGlzdH0gfSApIHsKICAgICAgICAgICAgbXkgJEFjdGlvbk5hbWUgPSAkUGFyYW17QWN0aW9uTGlzdH0tPnskQWN0aW9uSUR9OwogICAgICAgICAgICAkTGlzdHskQWN0aW9uSUR9ID0gJEFjdGlvbk5hbWU7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBcJUxpc3Q7Cn0KCnN1YiBfUHJvamVjdExpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGF0IGZpcnN0IGEgZW1wdHkgbGluZQogICAgbXkgQExpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnJywKICAgICAgICAgICAgVmFsdWUgPT4gJycsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBnZXQgcHJvamVjdCBzZXR0aW5ncwogICAgbXkgJVByb2plY3QgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdFNldHRpbmdzR2V0KAogICAgICAgIFN0YXR1cyA9PiAndmFsaWQnLAogICAgKTsKCiAgICBpZiAoICEkU2VsZi0+e0xhc3RQcm9qZWN0c1JlZn0gKSB7CgogICAgICAgICMgZ2V0IHRoZSBsYXN0IHByb2plY3RzCiAgICAgICAgbXkgQExhc3RQcm9qZWN0cyA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5MYXN0UHJvamVjdHNPZlVzZXIoKTsKCiAgICAgICAgIyBhZGQgdGhlIGZhdm9yaXRzCiAgICAgICAgJXsgJFNlbGYtPntMYXN0UHJvamVjdHNSZWZ9IH0gPSBtYXAgeyAkXyA9PiAxIH0gQExhc3RQcm9qZWN0czsKICAgIH0KCiAgICBQUk9KRUNUSUQ6CiAgICBmb3IgbXkgJFByb2plY3RJRCAoCiAgICAgICAgc29ydCB7ICRQcm9qZWN0e1Byb2plY3R9eyRhfSBjbXAgJFByb2plY3R7UHJvamVjdH17JGJ9IH0KICAgICAgICBrZXlzICV7ICRQcm9qZWN0e1Byb2plY3R9IH0KICAgICAgICApCiAgICB7CiAgICAgICAgbmV4dCBQUk9KRUNUSUQgaWYgISRTZWxmLT57TGFzdFByb2plY3RzUmVmfS0+eyRQcm9qZWN0SUR9OwogICAgICAgIG15ICVIYXNoID0gKAogICAgICAgICAgICBLZXkgICA9PiAkUHJvamVjdElELAogICAgICAgICAgICBWYWx1ZSA9PiAkUHJvamVjdHtQcm9qZWN0fXskUHJvamVjdElEfSwKICAgICAgICApOwogICAgICAgIHB1c2ggQExpc3QsIFwlSGFzaDsKCiAgICAgICAgIyBhdCB0aGUgbW9tZW50IGl0IGlzIG5vdCBwb3NzaWxiZSBtYXJrIHRoZSBzZWxlY3RlZCBwcm9qZWN0CiAgICAgICAgIyBpbiB0aGUgZmF2b3JpdCBsaXN0IChJIHRoaW5rIGEgYnVnIGluIEJ1aWxkIHNlbGVjdGlvbj8hKQogICAgfQoKICAgICMgYWRkIHRoZSBzZXBlcmF0b3IKICAgIHB1c2ggQExpc3QsIHsKICAgICAgICBLZXkgICAgICA9PiAnMCcsCiAgICAgICAgVmFsdWUgICAgPT4gJy0tLS0tLS0tLS0tLS0tLS0tLS0tJywKICAgICAgICBEaXNhYmxlZCA9PiAxLAogICAgfTsKCiAgICAjIGFkZCBhbGwgYWxsb3dlZCBwcm9qZWN0cyB0byB0aGUgbGlzdAogICAgUFJPSkVDVElEOgogICAgZm9yIG15ICRQcm9qZWN0SUQgKAogICAgICAgIHNvcnQgeyAkUHJvamVjdHtQcm9qZWN0fXskYX0gY21wICRQcm9qZWN0e1Byb2plY3R9eyRifSB9CiAgICAgICAga2V5cyAleyAkUHJvamVjdHtQcm9qZWN0fSB9CiAgICAgICAgKQogICAgewogICAgICAgIG5leHQgUFJPSkVDVElEIGlmICEkUHJvamVjdHtQcm9qZWN0fXskUHJvamVjdElEfTsKICAgICAgICBteSAlSGFzaCA9ICgKICAgICAgICAgICAgS2V5ICAgPT4gJFByb2plY3RJRCwKICAgICAgICAgICAgVmFsdWUgPT4gJFByb2plY3R7UHJvamVjdH17JFByb2plY3RJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICRQYXJhbXtTZWxlY3RlZElEfSAmJiAkUGFyYW17U2VsZWN0ZWRJRH0gZXEgJFByb2plY3RJRCApIHsKICAgICAgICAgICAgJEhhc2h7U2VsZWN0ZWR9ID0gMTsKICAgICAgICB9CgogICAgICAgIHB1c2ggQExpc3QsIFwlSGFzaDsKICAgIH0KCiAgICBATGlzdCA9ICRTZWxmLT5fUHJvamVjdExpc3RDb25zdHJhaW50cygKICAgICAgICBMaXN0ID0+IFxATGlzdCwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtTZWxlY3RlZElEfSB8fCAnJywKICAgICk7CgogICAgcmV0dXJuIFxATGlzdDsKfQoKc3ViIF9Qcm9qZWN0TGlzdENvbnN0cmFpbnRzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgQExpc3Q7CiAgICBteSAkUHJvamVjdENvdW50ID0gMDsKICAgIG15ICRQcm9qZWN0TGlzdENvbnN0cmFpbnRzCiAgICAgICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGltZUFjY291bnRpbmc6OlByb2plY3RMaXN0Q29uc3RyYWludHMnKTsKCiAgICBpZiAoIGtleXMgJXskUHJvamVjdExpc3RDb25zdHJhaW50c30gKSB7CgogICAgICAgICMgZ2V0IGdyb3VwcyBvZiBjdXJyZW50IHVzZXIKICAgICAgICBteSAlR3JvdXBzID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgVHlwZSAgID0+ICdybycsCiAgICAgICAgICAgIFJlc3VsdCA9PiAnSEFTSCcsCiAgICAgICAgKTsKICAgICAgICAlR3JvdXBzID0gbWFwIHsgJEdyb3Vwc3skX30gPT4gMSB9IGtleXMgJUdyb3VwczsKCiAgICAgICAgIyBnZXQgcHJvamVjdCBsaXN0IGNvbnN0cmFpbnRzCiAgICAgICAgbXkgJVByb2plY3RSZWdleDsKICAgICAgICBmb3IgbXkgJFByb2plY3RSZWdleCAoIHNvcnQga2V5cyAleyRQcm9qZWN0TGlzdENvbnN0cmFpbnRzfSApIHsKICAgICAgICAgICAgZm9yIG15ICRQcm9qZWN0R3JvdXAgKCBzcGxpdCAvLFxzKi8sICRQcm9qZWN0TGlzdENvbnN0cmFpbnRzLT57JFByb2plY3RSZWdleH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoICRHcm91cHN7JFByb2plY3RHcm91cH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFByb2plY3RSZWdleHskUHJvamVjdFJlZ2V4fSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbXkgQFByb2plY3RSZWdleCA9IGtleXMgJVByb2plY3RSZWdleDsKCiAgICAgICAgIyByZWR1Y2UgcHJvamVjdCBsaXN0IGFjY29yZGluZyB0byBjb25maWd1cmF0aW9uCiAgICAgICAgaWYgKCByZWYoICRQYXJhbXtMaXN0fSApICYmIEBQcm9qZWN0UmVnZXggKSB7CgogICAgICAgICAgICBteSAkRWxlbWVudENvdW50ID0gMDsKCiAgICAgICAgICAgIGZvciBteSAkUHJvamVjdCAoIEB7ICRQYXJhbXtMaXN0fSB9ICkgewogICAgICAgICAgICAgICAgbXkgJFByb2plY3ROYW1lID0gJFByb2plY3QtPntWYWx1ZX07CgogICAgICAgICAgICAgICAgIyBlbXB0eSBmaXJzdCBlbGVtZW50LCBsYXN0IHByb2plY3RzIHNlcGFyYXRvciBhbmQgY3VycmVudGx5IHNlbGVjdGVkIHByb2plY3QKICAgICAgICAgICAgICAgIGlmICggISRFbGVtZW50Q291bnQgfHwgISRQcm9qZWN0LT57S2V5fSB8fCAkUHJvamVjdC0+e0tleX0gZXEgJFBhcmFte1NlbGVjdGVkSUR9ICkgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQExpc3QsICRQcm9qZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgUFJPSkVDVFJFR0VYUDoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFByb2plY3RSZWdleCAoQFByb2plY3RSZWdleCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRQcm9qZWN0TmFtZSA9fiBteyRQcm9qZWN0UmVnZXh9c214ICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBATGlzdCwgJFByb2plY3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUHJvamVjdENvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IFBST0pFQ1RSRUdFWFA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkRWxlbWVudENvdW50Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgojIGdldCBmdWxsIHByb2plY3QgbGlzdCBpZiBjb25zdHJhaW50cyByZXN1bHRlZCBpbiBlbXB0eSBwcm9qZWN0IGxpc3Qgb3IgaWYgY29uc3RyYWludHMgYXJlbid0IGNvbmZpZ3VyZWQgKHBvc3NpYmxlIG1pc2NvbmZpZ3VyYXRpb24pCiAgICBpZiAoICEkUHJvamVjdENvdW50ICkgewogICAgICAgIEBMaXN0ID0gQHsgJFBhcmFte0xpc3R9IH07CiAgICB9CgogICAgcmV0dXJuIEBMaXN0Owp9CgojIGludGVncmF0ZSB0aGUgaGFuZGxpbmcgZm9yIHJlcXVpcmVkIHJlbWFya3MgaW4gcmVsYXRpb24gdG8gcHJvamVjdHMKCnN1YiBfUHJvamVjdDJSZW1hcmtSZWdFeHAgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICBteSBAUHJvamVjdHMyUmVtYXJrID0gKCk7CiAgICBteSAlUHJvamVjdERhdGEgICAgID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlByb2plY3RTZXR0aW5nc0dldCgKICAgICAgICBTdGF0dXMgPT4gJ3ZhbGlkJywKICAgICk7CgogICAgcmV0dXJuICcnIGlmICEkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGltZUFjY291bnRpbmc6OlByb2plY3QyUmVtYXJrUmVnRXhwJyk7CgogICAgbXkgJFByb2plY3QyUmVtYXJrUmVnRXhwID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpQcm9qZWN0MlJlbWFya1JlZ0V4cCcpOwoKICAgIGZvciBteSAkUHJvamVjdElEICggc29ydCBrZXlzICV7ICRQcm9qZWN0RGF0YXtQcm9qZWN0fSB9ICkgewogICAgICAgIGlmICggJFByb2plY3REYXRhe1Byb2plY3R9eyRQcm9qZWN0SUR9ID1+IG17JFByb2plY3QyUmVtYXJrUmVnRXhwfXNteCApIHsKICAgICAgICAgICAgcHVzaCBAUHJvamVjdHMyUmVtYXJrLCAkUHJvamVjdElEOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gam9pbiAnfCcsIEBQcm9qZWN0czJSZW1hcms7Cn0KCnN1YiBfUHJvamVjdFNldHRpbmdzRWRpdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdQcm9qZWN0JywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3RQcm9qZWN0JyApOwogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uU2V0dGluZ092ZXJ2aWV3JyApOwoKICAgICMgZGVmaW5lIHN0YXR1cyBsaXN0CiAgICBteSAlU3RhdHVzTGlzdCA9ICgKICAgICAgICAxID0+ICd2YWxpZCcsCiAgICAgICAgMCA9PiAnaW52YWxpZCcsCiAgICApOwoKICAgIG15ICRQcm9qZWN0U3RhdHVzID0gMTsKICAgIGlmICggZGVmaW5lZCAkUGFyYW17UHJvamVjdFN0YXR1c30gKSB7CiAgICAgICAgJFByb2plY3RTdGF0dXMgPSAkUGFyYW17UHJvamVjdFN0YXR1c30KICAgIH0KCiAgICAkUGFyYW17U3RhdHVzT3B0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVN0YXR1c0xpc3QsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUHJvamVjdFN0YXR1cywKICAgICAgICBOYW1lICAgICAgID0+ICdQcm9qZWN0U3RhdHVzJywKICAgICk7CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld1VwZGF0ZVByb2plY3QnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgIyBzaG93cyBoZWFkZXIKICAgIGlmICggJFBhcmFte0FjdGlvbn0gZXEgJ0VkaXRQcm9qZWN0JyApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdIZWFkZXJFZGl0UHJvamVjdCcgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0hlYWRlckFkZFByb2plY3QnICk7CiAgICB9CgogICAgIyBzaG93IHNlcnZlciBlcnJvciBtc2cgKGlmIGFueSkgZm9yIHRoZSBwcm9qZWN0IG5hbWUKICAgIGlmICggJFBhcmFte1Byb2plY3RFcnJvclR5cGV9ICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJFBhcmFte1Byb2plY3RFcnJvclR5cGV9ICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfU2V0dGluZ092ZXJ2aWV3IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJVByb2plY3QgPSAoKTsKICAgIG15ICVEYXRhICAgID0gKCk7CgogICAgIyBidWlsZCBvdXRwdXQKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1NldHRpbmcnLCApOwogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdFNldHRpbmcnICk7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25BZGRQcm9qZWN0JyApOwoKICAgICMgaGFzaCB0byBzYXZlIHJlZ2lzdGVyZWQgdXNlcnMKICAgIG15ICVVc2VyOwoKICAgIGlmICggJFNlbGYtPntBY2Nlc3NSd30gKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uQWRkVGFzaycgKTsKCiAgICAgICAgIyBnZXQgdXNlciBkYXRhCiAgICAgICAgbXkgJVNob3duVXNlcnMgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTGlzdCgKICAgICAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGxpc3Qgb2YgcmVnaXN0ZXJlZCB1c2VycyAoaWYgYW55KQogICAgICAgICVVc2VyID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJMaXN0KCk7CgogICAgICAgIFVTRVJJRDoKICAgICAgICBmb3IgbXkgJFVzZXJJbmZvICggc29ydCB7ICRTaG93blVzZXJzeyRhfSBjbXAgJFNob3duVXNlcnN7JGJ9IH0ga2V5cyAlU2hvd25Vc2VycyApIHsKICAgICAgICAgICAgbmV4dCBVU0VSSUQgaWYgISRVc2VyeyRVc2VySW5mb307CgogICAgICAgICAgICAjIGRlbGV0ZSBhbHJlYWR5IHJlZ2lzdGVyZWQgdXNlciBmcm9tIHRoZSAnbmV3JyBsaXN0CiAgICAgICAgICAgIGRlbGV0ZSAkU2hvd25Vc2Vyc3skVXNlckluZm99OwogICAgICAgIH0KCiAgICAgICAgaWYgKCVTaG93blVzZXJzKSB7CiAgICAgICAgICAgIG15ICROZXdVc2VyT3B0aW9uID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVNob3duVXNlcnMsCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICAgPT4gJycsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ05ld1VzZXJJRCcsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAwLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQWN0aW9uQWRkVXNlcicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsgTmV3VXNlck9wdGlvbiA9PiAkTmV3VXNlck9wdGlvbiwgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnUHJvamVjdEZpbHRlcicgKTsKCiAgICBpZiAoICRTZWxmLT57QWNjZXNzUnd9ICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1Rhc2tGaWx0ZXInICk7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnVXNlckZpbHRlcicgKTsKICAgIH0KCiAgICAjIFNob3cgcHJvamVjdCBkYXRhCiAgICAlUHJvamVjdCA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Qcm9qZWN0U2V0dGluZ3NHZXQoKTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3UmVzdWx0UHJvamVjdCcsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAjIGRlZmluZSBzdGF0dXMgbGlzdAogICAgbXkgJVN0YXR1c0xpc3QgPSAoCiAgICAgICAgMSA9PiAndmFsaWQnLAogICAgICAgIDAgPT4gJ2ludmFsaWQnLAogICAgKTsKCiAgICAjIHNob3cgbGlzdCBvZiBhdmFpbGFibGUgcHJvamVjdHMgKGlmIGFueSkKICAgIGlmICggJFByb2plY3R7UHJvamVjdH0gKSB7CiAgICAgICAgZm9yIG15ICRQcm9qZWN0SUQgKAogICAgICAgICAgICBzb3J0IHsgJFByb2plY3R7UHJvamVjdH17JGF9IGNtcCAkUHJvamVjdHtQcm9qZWN0fXskYn0gfQogICAgICAgICAgICBrZXlzICV7ICRQcm9qZWN0e1Byb2plY3R9IH0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFBhcmFte1Byb2plY3R9ICAgICAgICAgICAgPSAkUHJvamVjdHtQcm9qZWN0fXskUHJvamVjdElEfTsKICAgICAgICAgICAgJFBhcmFte1Byb2plY3REZXNjcmlwdGlvbn0gPSAkUHJvamVjdHtQcm9qZWN0RGVzY3JpcHRpb259eyRQcm9qZWN0SUR9OwogICAgICAgICAgICAkUGFyYW17UHJvamVjdElEfSAgICAgICAgICA9ICRQcm9qZWN0SUQ7CiAgICAgICAgICAgICRQYXJhbXtTdGF0dXN9ICAgICAgICAgICAgID0gJFN0YXR1c0xpc3R7ICRQcm9qZWN0e1Byb2plY3RTdGF0dXN9eyRQcm9qZWN0SUR9IH07CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHRQcm9qZWN0Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlLCBzaG93IGEgbm8gZGF0YSBmb3VuZCBtc2cKICAgIGVsc2UgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ05vUHJvamVjdERhdGFGb3VuZE1zZycgKTsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57QWNjZXNzUnd9ICkgewoKICAgICAgICAjIFNob3cgYWN0aW9uIGRhdGEKICAgICAgICBteSAlQWN0aW9uID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPkFjdGlvblNldHRpbmdzR2V0KCk7CgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3UmVzdWx0U2V0dGluZycsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgbGlzdCBvZiBhdmFpbGFibGUgdGFza3MvYWN0aW9ucyAoaWYgYW55KQogICAgICAgIGlmICglQWN0aW9uKSB7CiAgICAgICAgICAgIGZvciBteSAkQWN0aW9uSUQgKCBzb3J0IHsgJEFjdGlvbnskYX17QWN0aW9ufSBjbXAgJEFjdGlvbnskYn17QWN0aW9ufSB9IGtleXMgJUFjdGlvbiApIHsKICAgICAgICAgICAgICAgICRQYXJhbXtBY3Rpb259ICAgPSAkQWN0aW9ueyRBY3Rpb25JRH17QWN0aW9ufTsKICAgICAgICAgICAgICAgICRQYXJhbXtBY3Rpb25JRH0gPSAkQWN0aW9uSUQ7CiAgICAgICAgICAgICAgICAkUGFyYW17U3RhdHVzfSAgID0gJFN0YXR1c0xpc3R7ICRBY3Rpb257JEFjdGlvbklEfXtBY3Rpb25TdGF0dXN9IH07CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFNldHRpbmdSb3cnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG90aGVyd2lzZSwgc2hvdyBhIG5vIGRhdGEgZm91bmQgbXNnCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ05vU2V0dGluZ0RhdGFGb3VuZE1zZycgKTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyB1c2VyIGRhdGEKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFVzZXInLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyBzaG93IGxpc3Qgb2YgcmVnaXN0ZXJlZCB1c2VycyAoaWYgYW55KQogICAgICAgIGlmICglVXNlcikgewogICAgICAgICAgICBmb3IgbXkgJFVzZXJJRCAoIHNvcnQgeyAkVXNlcnskYX0gY21wICRVc2VyeyRifSB9IGtleXMgJVVzZXIgKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgbWlzc2luZyB1c2VyIGRhdGEKICAgICAgICAgICAgICAgIG15ICVVc2VyRGF0YSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyR2V0KCBVc2VySUQgPT4gJFVzZXJJRCApOwogICAgICAgICAgICAgICAgbXkgJVVzZXJHZW5lcmFsRGF0YSA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKCBVc2VySUQgPT4gJFVzZXJJRCApOwoKICAgICAgICAgICAgICAgICRQYXJhbXtVc2VyfQogICAgICAgICAgICAgICAgICAgID0gIiRVc2VyR2VuZXJhbERhdGF7VXNlckZpcnN0bmFtZX0gJFVzZXJHZW5lcmFsRGF0YXtVc2VyTGFzdG5hbWV9ICgkVXNlckdlbmVyYWxEYXRhe1VzZXJMb2dpbn0pIjsKICAgICAgICAgICAgICAgICRQYXJhbXtVc2VySUR9ICAgICA9ICRVc2VySUQ7CiAgICAgICAgICAgICAgICAkUGFyYW17Q29tbWVudH0gICAgPSAkVXNlckRhdGF7RGVzY3JpcHRpb259OwogICAgICAgICAgICAgICAgJFBhcmFte0NhbGVuZGFyTm99ID0gJFVzZXJEYXRhe0NhbGVuZGFyfTsKICAgICAgICAgICAgICAgICRQYXJhbXtDYWxlbmRhcn0gICA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KAogICAgICAgICAgICAgICAgICAgICJUaW1lWm9uZTo6Q2FsZW5kYXIiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gKCAkUGFyYW17Q2FsZW5kYXJOb30gfHwgJycgKSAuICJOYW1lIgogICAgICAgICAgICAgICAgKSB8fCAnRGVmYXVsdCc7CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFVzZXJSb3cnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG90aGVyd2lzZSwgc2hvdyBhIG5vIGRhdGEgZm91bmQgbXNnCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ05vVXNlckRhdGFGb3VuZE1zZycgKTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfVGFza1NldHRpbmdzRWRpdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU2V0dGluZycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0U2V0dGluZycgKTsKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3U2V0dGluZycgKTsKCiAgICAjIGRlZmluZSBzdGF0dXMgbGlzdAogICAgbXkgJVN0YXR1c0xpc3QgPSAoCiAgICAgICAgMSA9PiAndmFsaWQnLAogICAgICAgIDAgPT4gJ2ludmFsaWQnLAogICAgKTsKCiAgICBteSAkVGFza1N0YXR1cyA9IDE7CiAgICBpZiAoIGRlZmluZWQgJFBhcmFte1Rhc2tTdGF0dXN9ICkgewogICAgICAgICRUYXNrU3RhdHVzID0gJFBhcmFte1Rhc2tTdGF0dXN9CiAgICB9CgogICAgJFBhcmFte1N0YXR1c09wdGlvbn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgPT4gXCVTdGF0dXNMaXN0LAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFRhc2tTdGF0dXMsCiAgICAgICAgTmFtZSAgICAgICA9PiAnVGFza1N0YXR1cycsCiAgICApOwoKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdVcGRhdGVUYXNrJywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICMgc2hvd3MgaGVhZGVyCiAgICBpZiAoICRQYXJhbXtBY3Rpb259IGVxICdFZGl0VGFzaycgKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnSGVhZGVyRWRpdFRhc2snICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdIZWFkZXJBZGRUYXNrJyApOwogICAgfQoKICAgICMgc2hvdyBzZXJ2ZXIgZXJyb3IgbXNnIChpZiBhbnkpIGZvciB0aGUgdGFzayBuYW1lCiAgICBpZiAoICRQYXJhbXtUYXNrRXJyb3JUeXBlfSApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICRQYXJhbXtUYXNrRXJyb3JUeXBlfSApOwogICAgfQoKICAgIHJldHVybiAxOwp9CgpzdWIgX1VzZXJTZXR0aW5nc0VkaXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKICAgIG15ICVHZXRQYXJhbSA9ICgpOwoKICAgICMgZ2V0IHBhcmFtZXRlcnMKICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhEZXNjcmlwdGlvbiBTaG93T3ZlcnRpbWUgQ3JlYXRlUHJvamVjdCBDYWxlbmRhcikpIHsKICAgICAgICAkR2V0UGFyYW17JFBhcmFtZXRlcn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgKTsKICAgIH0KCiMgdGhlIGRhdGVwaWNrZXIgdXNlZCBpbiB0aGlzIHNjcmVlbiBpcyBub24tc3RhbmRhcmQKIyBUaGVyZWZvciB3ZSBoYXZlIHRvIGRlZmluZSB0aGlzIHZhciBpbiB0aGUgTGF5b3V0T2JqZWN0IGZvciBhdXRvbWF0aWMgY29uZmlnIGdlbmVyYXRpb24gaW4gdGhlIEpTIGZvb3RlcgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT57SGFzRGF0ZXBpY2tlcn0gPSAxOwoKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnU2V0dGluZycsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0U2V0dGluZycgKTsKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbk92ZXJ2aWV3U2V0dGluZycgKTsKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1JlZmVyZW5jZScgKTsKCiAgICAjIGRlZmluZSBzdGF0dXMgbGlzdAogICAgbXkgJVN0YXR1c0xpc3QgPSAoCiAgICAgICAgMSA9PiAndmFsaWQnLAogICAgICAgIDAgPT4gJ2ludmFsaWQnLAogICAgKTsKCiAgICAjIGZpbGwgdXAgdGhlIGNhbGVuZGFyIGxpc3QKICAgIG15ICRDYWxlbmRhckxpc3RSZWYgPSB7IDAgPT4gJ0RlZmF1bHQnIH07CiAgICBteSAkQ2FsZW5kYXJJbmRleCA9IDE7CiAgICB3aGlsZSAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCAiVGltZVpvbmU6OkNhbGVuZGFyIiAuICRDYWxlbmRhckluZGV4IC4gIk5hbWUiICkgKSB7CiAgICAgICAgJENhbGVuZGFyTGlzdFJlZi0+eyRDYWxlbmRhckluZGV4fQogICAgICAgICAgICA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCAiVGltZVpvbmU6OkNhbGVuZGFyIiAuICRDYWxlbmRhckluZGV4IC4gIk5hbWUiICk7CiAgICAgICAgJENhbGVuZGFySW5kZXgrKzsKICAgIH0KCiAgICAjIGdldCB1c2VyIGRhdGEKICAgIG15ICVVc2VyRGF0YSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyR2V0KCBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0gKTsKCiAgICAkUGFyYW17Q2FsZW5kYXJPcHRpb259ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgICA9PiAkQ2FsZW5kYXJMaXN0UmVmLAogICAgICAgIE5hbWUgICAgICAgID0+ICdDYWxlbmRhcicsCiAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICBTZWxlY3RlZElEICA9PiAkR2V0UGFyYW17Q2FsZW5kYXJ9IHx8ICRVc2VyRGF0YXtDYWxlbmRhcn0gfHwgMCwKICAgICk7CgogICAgJFBhcmFte0Rlc2NyaXB0aW9ufSA9ICRHZXRQYXJhbXtEZXNjcmlwdGlvbn0gfHwgJFVzZXJEYXRhe0Rlc2NyaXB0aW9ufSB8fCAnJzsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3VXBkYXRlVXNlcicsCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgU2hvd092ZXJ0aW1lID0+ICggJEdldFBhcmFte1Nob3dPdmVydGltZX0gfHwgJFVzZXJEYXRhe1Nob3dPdmVydGltZX0gKQogICAgICAgICAgICA/ICdjaGVja2VkPSJjaGVja2VkIicgOiAnJywKICAgICAgICAgICAgQ3JlYXRlUHJvamVjdCA9PiAoICRHZXRQYXJhbXtDcmVhdGVQcm9qZWN0fSB8fCAkVXNlckRhdGF7Q3JlYXRlUHJvamVjdH0gKQogICAgICAgICAgICA/ICdjaGVja2VkPSJjaGVja2VkIicgOiAnJywKICAgICAgICAgICAgfQogICAgKTsKCiAgICAjIHNob3dzIGhlYWRlcgogICAgaWYgKCAkUGFyYW17QWN0aW9ufSBlcSAnRWRpdFVzZXInICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0hlYWRlckVkaXRVc2VyJyApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyQWRkVXNlcicsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgfQoKICAgICMgaWYgdGhlcmUgYXJlIGVycm9ycyB0byBzaG93CiAgICBpZiAoICRQYXJhbXtFcnJvcnN9ICYmICV7ICRQYXJhbXtFcnJvcnN9IH0gKSB7CgogICAgICAgICMgc2hvdyBhbGwgZXhpc3RpbmcgcGVyaW9kcwogICAgICAgIGZvciAoIG15ICRQZXJpb2QgPSAxOyAkUGVyaW9kIDw9ICRQYXJhbXtQZXJpb2RzfTsgJFBlcmlvZCsrICkgewoKICAgICAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KERhdGVTdGFydCBEYXRlRW5kIExlYXZlRGF5cyBXZWVrbHlIb3VycyBPdmVydGltZSBQZXJpb2RTdGF0dXMgKSkgewogICAgICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbWV0ZXJ9CiAgICAgICAgICAgICAgICAgICAgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICIkUGFyYW1ldGVyXFskUGVyaW9kXF0iICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRQYXJhbXskUGVyaW9kfXtQZXJpb2RTdGF0dXNPcHRpb259ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgICAgIERhdGEgICAgICAgPT4gXCVTdGF0dXNMaXN0LAogICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkR2V0UGFyYW17UGVyaW9kU3RhdHVzfSB8fCAkUGFyYW17JFBlcmlvZH17UGVyaW9kU3RhdHVzfSwKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gIlBlcmlvZFN0YXR1c1skUGVyaW9kXSIsCiAgICAgICAgICAgICAgICBJRCAgICAgICAgID0+ICJQZXJpb2RTdGF0dXMtJFBlcmlvZCIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnUGVyaW9kT3ZlcnZpZXdSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUGVyaW9kICAgICAgICAgICA9PiAkUGVyaW9kLAogICAgICAgICAgICAgICAgICAgIERhdGVTdGFydEludmFsaWQgPT4gJFBhcmFte0Vycm9yc30tPnsgJ0RhdGVTdGFydC0nIC4gJFBlcmlvZCAuICdJbnZhbGlkJyB9CiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICcnLAogICAgICAgICAgICAgICAgICAgIERhdGVFbmRJbnZhbGlkID0+ICRQYXJhbXtFcnJvcnN9LT57ICdEYXRlRW5kLScgLiAkUGVyaW9kIC4gJ0ludmFsaWQnIH0gfHwgJycsCiAgICAgICAgICAgICAgICAgICAgTGVhdmVEYXlzSW52YWxpZCA9PiAkUGFyYW17RXJyb3JzfS0+eyAnTGVhdmVEYXlzLScgLiAkUGVyaW9kIC4gJ0ludmFsaWQnIH0KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgRGF0ZVN0YXJ0ICAgICAgICAgID0+ICRHZXRQYXJhbXtEYXRlU3RhcnR9LAogICAgICAgICAgICAgICAgICAgIERhdGVFbmQgICAgICAgICAgICA9PiAkR2V0UGFyYW17RGF0ZUVuZH0sCiAgICAgICAgICAgICAgICAgICAgTGVhdmVEYXlzICAgICAgICAgID0+ICRHZXRQYXJhbXtMZWF2ZURheXN9LAogICAgICAgICAgICAgICAgICAgIFdlZWtseUhvdXJzICAgICAgICA9PiAkR2V0UGFyYW17V2Vla2x5SG91cnN9LAogICAgICAgICAgICAgICAgICAgIE92ZXJ0aW1lICAgICAgICAgICA9PiAkR2V0UGFyYW17T3ZlcnRpbWV9LAogICAgICAgICAgICAgICAgICAgIFBlcmlvZFN0YXR1c09wdGlvbiA9PiAkUGFyYW17JFBlcmlvZH17UGVyaW9kU3RhdHVzT3B0aW9ufSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRGF0ZVN0YXJ0JwogICAgICAgICAgICAgICAgICAgIC4gKAogICAgICAgICAgICAgICAgICAgICRQYXJhbXtFcnJvcnN9LT57ICdEYXRlU3RhcnQtJyAuICRQZXJpb2QgLiAnRXJyb3JUeXBlJyB9CiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICdNaXNzaW5nVmFsdWUnCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIERhdGEgPT4geyBQZXJpb2QgPT4gJFBlcmlvZCB9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnRGF0ZUVuZCcKICAgICAgICAgICAgICAgICAgICAuICggJFBhcmFte0Vycm9yc30tPnsgJ0RhdGVFbmQtJyAuICRQZXJpb2QgLiAnRXJyb3JUeXBlJyB9IHx8ICdNaXNzaW5nVmFsdWUnICksCiAgICAgICAgICAgICAgICBEYXRhID0+IHsgUGVyaW9kID0+ICRQZXJpb2QgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBteSAlVXNlciA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5TaW5nbGVVc2VyU2V0dGluZ3NHZXQoIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSApOwoKICAgICAgICAjIHNob3cgdXNlciBkYXRhCiAgICAgICAgaWYgKCVVc2VyKSB7CiAgICAgICAgICAgIG15ICRMYXN0UGVyaW9kTnVtYmVyCiAgICAgICAgICAgICAgICA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyTGFzdFBlcmlvZE51bWJlckdldCgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfQogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGZvciAoIG15ICRQZXJpb2QgPSAxOyAkUGVyaW9kIDw9ICRMYXN0UGVyaW9kTnVtYmVyOyAkUGVyaW9kKysgKSB7CiAgICAgICAgICAgICAgICBteSAlUGVyaW9kUGFyYW0gPSAoKTsKCiAgICAgICAgICAgICAgICAjIGdldCBhbGwgbmVlZGVkIGRhdGEgdG8gZGlzcGxheQogICAgICAgICAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KERhdGVTdGFydCBEYXRlRW5kIExlYXZlRGF5cyBXZWVrbHlIb3VycyBPdmVydGltZSkpIHsKICAgICAgICAgICAgICAgICAgICAkUGVyaW9kUGFyYW17JFBhcmFtZXRlcn0gPSAkVXNlcnskUGVyaW9kfXskUGFyYW1ldGVyfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRQZXJpb2RQYXJhbXtQZXJpb2R9ID0gJFBlcmlvZDsKCiAgICAgICAgICAgICAgICAkUGVyaW9kUGFyYW17UGVyaW9kU3RhdHVzT3B0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJVN0YXR1c0xpc3QsCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkVXNlcnskUGVyaW9kfXtVc2VyU3RhdHVzfSwKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICJQZXJpb2RTdGF0dXNbJFBlcmlvZF0iLAogICAgICAgICAgICAgICAgICAgIElEICAgICAgICAgPT4gIlBlcmlvZFN0YXR1cy0kUGVyaW9kIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdQZXJpb2RPdmVydmlld1JvdycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiBcJVBlcmlvZFBhcmFtLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGEgbm8gZGF0YSBmb3VuZCBtc2cKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnUGVyaW9kT3ZlcnZpZXdSb3dOb0RhdGEnICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIEFnZW50VGltZUFjY291bnRpbmdEZWxldGUuZHRsIC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBkZWxldGUgYSBkYXkgb2YgdGltZWFjY291bnRpbmcKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBXMzAwcHgiPgogICAgPGxhYmVsPiRUZXh0eyJZZWFyIn06PC9sYWJlbD4KICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgJFFEYXRheyJZZWFyIn0KICAgIDwvcD4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICA8bGFiZWw+JFRleHR7Ik1vbnRoIn06PC9sYWJlbD4KICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgJFRleHR7IiREYXRheyJNb250aCJ9In0KICAgIDwvcD4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICA8bGFiZWw+JFRleHR7IkRheSJ9OjwvbGFiZWw+CiAgICA8cCBjbGFzcz0iVmFsdWUiPgogICAgICAgICRRRGF0YXsiRGF5In0KICAgIDwvcD4KICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPC9maWVsZHNldD4KPHAgY2xhc3M9IlNwYWNpbmdUb3AgQ2VudGVyIj4KICAgICRUZXh0eyJEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZGVsZXRlIHRoZSBUaW1lIEFjY291bnRpbmcgb2YgdGhpcyBkYXk/In0KPC9wPgo=
IyAtLQojIEFnZW50VGltZUFjY291bnRpbmdFZGl0LmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgdGltZSBhY2NvdW50aW5nIGVkaXQKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMSBjbGFzcz0iSGVhZGVyIj4kVGV4dHsiRWRpdCBUaW1lIFJlY29yZCJ9PC9oMT4KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdQcm9qZWN0IC0tPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkFjdGlvbnMifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1PdmVydmlldztZZWFyPSRMUURhdGF7IlllYXIifTtNb250aD0kTFFEYXRheyJNb250aCJ9IiBjbGFzcz0iQ2FsbEZvckFjdGlvbiI+PHNwYW4+JFRleHR7IkdvIHRvIG92ZXJ2aWV3In08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOkNyZWF0ZVByb2plY3QgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1TZXR0aW5nIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiI+PHNwYW4+JFRleHR7IlByb2plY3Qgc2V0dGluZ3MifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6Q3JlYXRlUHJvamVjdCAtLT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld1Byb2plY3QgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiRGF0ZSBOYXZpZ2F0aW9uIn08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJNb250aFNlbGVjdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFycm93IExlZnQiIHRpdGxlPSIkVGV4dHsiUHJldmlvdXMgZGF5In0iIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPUVkaXQ7WWVhcj0kTFFEYXRheyJZZWFyQmFjayJ9O01vbnRoPSRMUURhdGF7Ik1vbnRoQmFjayJ9O0RheT0kTFFEYXRheyJEYXlCYWNrIn0iPjwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXJyb3cgUmlnaHQiIHRpdGxlPSIkVGV4dHsiTmV4dCBkYXkifSIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249RWRpdDtZZWFyPSRMUURhdGF7IlllYXJOZXh0In07TW9udGg9JExRRGF0YXsiTW9udGhOZXh0In07RGF5PSRMUURhdGF7IkRheU5leHQifSI+PC9hPgogICAgICAgICAgICAgICAgICAgICRRRGF0YXsiWWVhciJ9LSRRRGF0YXsiTW9udGgifS0kUURhdGF7IkRheSJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgY2xhc3M9IlZhbGlkYXRlIiBuYW1lPSJEYXRlU2VsZWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJFZGl0IiAvPgogICAgICAgICAgICAgICAgICAgICREYXRheyJEYXRlIn0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImJ1dHRvbiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9IiAvPgogICAgICAgICAgICAgICAgPC9mb3JtPgo8IS0tIGR0bDpibG9jazpJbmNvbXBsZXRlV29ya2luZ0RheXMgLS0+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9IlNwYWNpbmdUb3AiPiRUZXh0eyJEYXlzIHdpdGhvdXQgZW50cmllcyJ9OjwvaDI+CiAgICAgICAgICAgICAgICAkRGF0YXsiSW5jb21wbGV0ZVdvcmtpbmdEYXlzU2VsZWN0In0KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJyNJbmNvbXBsZXRlV29ya2luZ0RheXNMaXN0JykudW5iaW5kKCdjaGFuZ2UuSW5jb21wbGV0ZVdvcmtpbmdEYXlzJykuYmluZCgnY2hhbmdlLkluY29tcGxldGVXb3JraW5nRGF5cycsIGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgRGF0ZSA9ICQodGhpcykudmFsKCkuc3BsaXQoJy0nKTsKICAgICAgICBpZiAoRGF0ZVswXSAmJiBEYXRlWzFdICYmIERhdGVbMl0pIHsKICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9ICIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1FZGl0O1llYXI9IiArIERhdGVbMF0gKyAiO01vbnRoPSIgKyBEYXRlWzFdICsgIjtEYXk9IiArIERhdGVbMl07CiAgICAgICAgfQogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KPCEtLSBkdGw6YmxvY2s6SW5jb21wbGV0ZVdvcmtpbmdEYXlzIC0tPgo8IS0tIGR0bDpibG9jazpJbmNvbXBsZXRlV29ya2luZ0RheXNNYXNzRW50cnkgLS0+CiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9IlNwYWNpbmdUb3AiPiRUZXh0eyJEYXlzIHdpdGhvdXQgZW50cmllcyJ9OjwvaDI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkluY29tcGxldGVXb3JraW5nRGF5cyI+CiAgICAgICAgICAgICAgICAgICAgPGxpIGlkPSJTZWxlY3RBbGxEYXlzIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJJbmNvbXBsZXRlV29ya2luZ0RheS1BbGwiIG5hbWU9IkluY29tcGxldGVXb3JraW5nRGF5LUFsbCIgLz48bGFiZWwgZm9yPSJJbmNvbXBsZXRlV29ya2luZ0RheS1BbGwiPjxlbT4kVGV4dHsiU2VsZWN0IGFsbCBkYXlzIn08L2VtPjwvbGFiZWw+PC9saT4KPCEtLSBkdGw6YmxvY2s6SW5jb21wbGV0ZVdvcmtpbmdEYXlzTWFzc0VudHJ5U2luZ2xlRGF5IC0tPgogICAgICAgICAgICAgICAgICAgIDxsaT48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJJbmNvbXBsZXRlV29ya2luZ0RheS0kUURhdGF7IkRhdGUifSIgbmFtZT0iSW5jb21wbGV0ZVdvcmtpbmdEYXktJFFEYXRheyJEYXRlIn0iIC8+PGxhYmVsIGZvcj0iSW5jb21wbGV0ZVdvcmtpbmdEYXktJFFEYXRheyJEYXRlIn0iPiRRRGF0YXsiRGF0ZSJ9PC9sYWJlbD4gLSA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1FZGl0O1llYXI9JExRRGF0YXsiWWVhciJ9O01vbnRoPSRMUURhdGF7Ik1vbnRoIn07RGF5PSRMUURhdGF7IkRheSJ9Ij4kVGV4dHsiRWRpdCJ9PC9hPjwvbGk+CjwhLS0gZHRsOmJsb2NrOkluY29tcGxldGVXb3JraW5nRGF5c01hc3NFbnRyeVNpbmdsZURheSAtLT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGlkPSJNYXNzRW50cnkiIG5hbWU9Ik1hc3NFbnRyeSIgY2xhc3M9IlNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9Ik1hc3NFbnRyeSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJEYXRlcyIgdmFsdWU9IiIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJMZWF2ZURheSIgdmFsdWU9IiIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTaWNrIiB2YWx1ZT0iIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik92ZXJ0aW1lIiB2YWx1ZT0iIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iYnV0dG9uIiB0eXBlPSJidXR0b24iIGlkPSJNYXNzRW50cnlTdWJtaXQiIHZhbHVlPSIkVGV4dHsiTWFzcyBlbnRyeSJ9IiAvPgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgPGRpdiBpZD0iTWFzc0VudHJ5Q29uZmlybURpYWxvZyIgY2xhc3M9IkhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJQbGVhc2UgY2hvb3NlIHRoZSByZWFzb24gZm9yIHlvdXIgYWJzZW5jZSBmb3IgdGhlIHNlbGVjdGVkIGRheXMifS48L2gyPgogICAgICAgICAgICAgICAgICAgIDx1bCBpZD0iTWFzc0VudHJ5Q29uZmlybVJhZGlvIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iTGVhdmVEYXkiIGlkPSJDb25maXJtTGVhdmVEYXkiIC8+PGxhYmVsIGZvcj0iQ29uZmlybUxlYXZlRGF5Ij4kVGV4dHsiT24gdmFjYXRpb24ifTwvbGFiZWw+PC9saT4KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2ljayIgaWQ9IkNvbmZpcm1TaWNrIiAvPjxsYWJlbCBmb3I9IkNvbmZpcm1TaWNrIj4kVGV4dHsiT24gc2ljayBsZWF2ZSJ9PC9sYWJlbD48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJPdmVydGltZSIgaWQ9IkNvbmZpcm1PdmVydGltZSIgLz48bGFiZWwgZm9yPSJDb25maXJtT3ZlcnRpbWUiPiRUZXh0eyJPbiBvdmVydGltZSBsZWF2ZSJ9PC9sYWJlbD48L2xpPgogICAgICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIFRpbWVBY2NvdW50aW5nLkFnZW50LkVkaXRUaW1lUmVjb3Jkcy5NYXNzRW50cnlJbml0KHsKICAgICAgICBNc2dDaG9vc2VPbmVEYXk6ICAgICckSlNUZXh0eyJQbGVhc2UgY2hvb3NlIGF0IGxlYXN0IG9uZSBkYXkhIn0nLAogICAgICAgIE1zZ0Fic2VuY2VSZWFzb246ICAgJyRKU1RleHR7IlBsZWFzZSBjaG9vc2UgYSByZWFzb24gZm9yIGFic2VuY2UhIn0nLAogICAgICAgIE1hc3NFbnRyeTogICAgICAgICAgJyRKU1RleHR7Ik1hc3MgRW50cnkifScsCiAgICAgICAgU3VibWl0OiAgICAgICAgICAgICAnJEpTVGV4dHsiU3VibWl0In0nLAogICAgICAgIENhbmNlbDogICAgICAgICAgICAgJyRKU1RleHR7IkNhbmNlbCJ9JwogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KPCEtLSBkdGw6YmxvY2s6SW5jb21wbGV0ZVdvcmtpbmdEYXlzTWFzc0VudHJ5IC0tPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IlJlZmVyZW5jZSJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgICAgIDxsaT4kVGV4dHsiUmVxdWlyZWQgZmllbGRzIGFyZSBtYXJrZWQgd2l0aCBhICIqIi4ifTwvbGk+CiAgICAgICAgICAgICAgICAgICAgPGxpPiRUZXh0eyJZb3UgaGF2ZSB0byBmaWxsIGluIHN0YXJ0IGFuZCBlbmQgdGltZSBvciBhIHRpbWUgcGVyaW9kLiJ9PC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJEYXRlIn06ICRUZXh0eyIkRGF0YXsiV2Vla2RheV90b19UZXh0In0ifSAkUURhdGF7IlllYXIifS0kUURhdGF7Ik1vbnRoIn0tJFFEYXRheyJEYXkifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50IEhvcml6b250YWxTY3JvbGwiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJXb3JraW5nVW5pdHMiIGlkPSJXb3JraW5nVW5pdHMiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJFZGl0IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlJlY29yZHNOdW1iZXIiIGlkPSJSZWNvcmRzTnVtYmVyIiB2YWx1ZT0iJFFEYXRheyJSZWNvcmRzTnVtYmVyIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3RhdHVzIiB2YWx1ZT0iQWN0aW9uIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlllYXIiIHZhbHVlPSIkUURhdGF7IlllYXIifSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJNb250aCIgdmFsdWU9IiRRRGF0YXsiTW9udGgifSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJEYXkiIHZhbHVlPSIkUURhdGF7IkRheSJ9IiAvPgo8IS0tIGR0bDpibG9jazpVbml0QmxvY2sgLS0+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUgTm9Ib3ZlciBIaWdoQ2VsbHMiIGlkPSJJbnNlcnRXb3JraW5nSG91cnMiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJQcm9qZWN0In08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiVGFzayJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlJlbWFyayJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlN0YXJ0In0gKEhIOk1NKTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJFbmQifSAoSEg6TU0pPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4gY2xhc3M9Ik1hcmtlciI+JFFEYXRheyJQZXJpb2ROb3RlIn08L3NwYW4+ICRUZXh0eyJQZXJpb2QifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOlVuaXQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IldvcmtpbmdIb3VycyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiUHJvamVjdE9wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlByb2plY3RJRCRRRGF0YXsiSUQifUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlByb2plY3RJRCRRRGF0YXsiSUQifVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkNvbWJvX1Byb2plY3RJRCRRRGF0YXsiSUQifUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkNvbWJvX1Byb2plY3RJRCRRRGF0YXsiSUQifVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJBY3Rpb25PcHRpb24ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJBY3Rpb25JRCRRRGF0YXsiSUQifUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkFjdGlvbklEJFFEYXRheyJJRCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ29tYm9fQWN0aW9uSUQkUURhdGF7IklEIn1FcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDb21ib19BY3Rpb25JRCRRRGF0YXsiSUQifVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJSZW1hcmtbJFFEYXRheyJJRCJ9XSIgaWQ9IlJlbWFyayRRRGF0YXsiSUQifSIgY2xhc3M9IlZhbGlkYXRlX1RpbWVBY2NvdW50aW5nX1JlbWFyayAkUURhdGF7IlJlbWFya0ludmFsaWQifSIgdmFsdWU9IiRRRGF0YXsiUmVtYXJrIn0iIHNpemU9IjM1IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJSZW1hcmskUURhdGF7IklEIn1FcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPiRUZXh0eyJQbGVhc2UgYWRkIGEgcmVtYXJrIHdpdGggbW9yZSB0aGFuIDggY2hhcmFjdGVycyEuIn08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJlbWFyayRRRGF0YXsiSUQifVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJTdGFydFRpbWVbJFFEYXRheyJJRCJ9XSIgaWQ9IlN0YXJ0VGltZSRRRGF0YXsiSUQifSIgY2xhc3M9IlN0YXJ0VGltZSBWYWxpZGF0ZV9UaW1lQWNjb3VudGluZ19TdGFydFRpbWUgJFFEYXRheyJTdGFydFRpbWVSZXF1aXJlZCJ9ICRRRGF0YXsiU3RhcnRUaW1lSW52YWxpZCJ9IiB2YWx1ZT0iJFFEYXRheyJTdGFydFRpbWUifSIgc2l6ZT0iNyIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU3RhcnRUaW1lJFFEYXRheyJJRCJ9RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJZb3UgaGF2ZSB0byBmaWxsIGluIHN0YXJ0IGFuZCBlbmQgdGltZSBvciBhIHRpbWUgcGVyaW9kLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iU3RhcnRUaW1lJFFEYXRheyJJRCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KPCEtLSBkdGw6YmxvY2s6U3RhcnRUaW1lR2VuZXJpY1NlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CjwhLS0gZHRsOmJsb2NrOlN0YXJ0VGltZUdlbmVyaWNTZXJ2ZXJFcnJvciAtLT4KPCEtLSBkdGw6YmxvY2s6U3RhcnRUaW1lTmVnYXRpdmVTZXJ2ZXJFcnJvciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJOZWdhdGl2ZSB0aW1lcyBhcmUgbm90IGFsbG93ZWQuIn08L3A+CjwhLS0gZHRsOmJsb2NrOlN0YXJ0VGltZU5lZ2F0aXZlU2VydmVyRXJyb3IgLS0+CjwhLS0gZHRsOmJsb2NrOlN0YXJ0VGltZVJlcGVhdGVkSG91clNlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlJlcGVhdGVkIGhvdXJzIGFyZSBub3QgYWxsb3dlZC4gU3RhcnQgdGltZSBtYXRjaGVzIGFub3RoZXIgaW50ZXJ2YWwuIn08L3A+CjwhLS0gZHRsOmJsb2NrOlN0YXJ0VGltZVJlcGVhdGVkSG91clNlcnZlckVycm9yIC0tPgo8IS0tIGR0bDpibG9jazpTdGFydFRpbWVJbnZhbGlkRm9ybWF0U2VydmVyRXJyb3IgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiSW52YWxpZCBmb3JtYXQhIFBsZWFzZSBlbnRlciBhIHRpbWUgd2l0aCB0aGUgZm9ybWF0IEhIOk1NLiJ9PC9wPgo8IS0tIGR0bDpibG9jazpTdGFydFRpbWVJbnZhbGlkRm9ybWF0U2VydmVyRXJyb3IgLS0+CjwhLS0gZHRsOmJsb2NrOlN0YXJ0VGltZTI0SG91cnMgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiMjQ6MDAgaXMgb25seSBwZXJtaXR0ZWQgYXMgZW5kIHRpbWUuIn08L3A+CjwhLS0gZHRsOmJsb2NrOlN0YXJ0VGltZTI0SG91cnMgLS0+CjwhLS0gZHRsOmJsb2NrOlN0YXJ0VGltZUludmFsaWQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiSW52YWxpZCB0aW1lISBBIGRheSBoYXMgb25seSAyNCBob3Vycy4ifTwvcD4KPCEtLSBkdGw6YmxvY2s6U3RhcnRUaW1lSW52YWxpZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJFbmRUaW1lWyRRRGF0YXsiSUQifV0iIGlkPSJFbmRUaW1lJFFEYXRheyJJRCJ9IiBjbGFzcz0iRW5kVGltZSBWYWxpZGF0ZV9EZXBlbmRpbmdSZXF1aXJlZEFORCBWYWxpZGF0ZV9EZXBlbmRpbmdfU3RhcnRUaW1lJFFEYXRheyJJRCJ9ICRRRGF0YXsiRW5kVGltZVJlcXVpcmVkIn0gJFFEYXRheyJFbmRUaW1lSW52YWxpZCJ9IiB2YWx1ZT0iJFFEYXRheyJFbmRUaW1lIn0iIHNpemU9IjciIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkVuZFRpbWUkUURhdGF7IklEIn1FcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IllvdSBoYXZlIHRvIGZpbGwgaW4gc3RhcnQgYW5kIGVuZCB0aW1lIG9yIGEgdGltZSBwZXJpb2QuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJFbmRUaW1lJFFEYXRheyJJRCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KPCEtLSBkdGw6YmxvY2s6RW5kVGltZUdlbmVyaWNTZXJ2ZXJFcnJvciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgo8IS0tIGR0bDpibG9jazpFbmRUaW1lR2VuZXJpY1NlcnZlckVycm9yIC0tPgo8IS0tIGR0bDpibG9jazpFbmRUaW1lQmVmb3JlU3RhcnRUaW1lU2VydmVyRXJyb3IgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiRW5kIHRpbWUgbXVzdCBiZSBhZnRlciBzdGFydCB0aW1lLiJ9PC9wPgo8IS0tIGR0bDpibG9jazpFbmRUaW1lQmVmb3JlU3RhcnRUaW1lU2VydmVyRXJyb3IgLS0+CjwhLS0gZHRsOmJsb2NrOkVuZFRpbWVOZWdhdGl2ZVNlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7Ik5lZ2F0aXZlIHRpbWVzIGFyZSBub3QgYWxsb3dlZC4ifTwvcD4KPCEtLSBkdGw6YmxvY2s6RW5kVGltZU5lZ2F0aXZlU2VydmVyRXJyb3IgLS0+CjwhLS0gZHRsOmJsb2NrOkVuZFRpbWVSZXBlYXRlZEhvdXJTZXJ2ZXJFcnJvciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJSZXBlYXRlZCBob3VycyBhcmUgbm90IGFsbG93ZWQuIEVuZCB0aW1lIG1hdGNoZXMgYW5vdGhlciBpbnRlcnZhbC4ifTwvcD4KPCEtLSBkdGw6YmxvY2s6RW5kVGltZVJlcGVhdGVkSG91clNlcnZlckVycm9yIC0tPgo8IS0tIGR0bDpibG9jazpFbmRUaW1lSW52YWxpZEZvcm1hdFNlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IkludmFsaWQgZm9ybWF0ISBQbGVhc2UgZW50ZXIgYSB0aW1lIHdpdGggdGhlIGZvcm1hdCBISDpNTS4ifTwvcD4KPCEtLSBkdGw6YmxvY2s6RW5kVGltZUludmFsaWRGb3JtYXRTZXJ2ZXJFcnJvciAtLT4KPCEtLSBkdGw6YmxvY2s6RW5kVGltZUludmFsaWQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiSW52YWxpZCB0aW1lISBBIGRheSBoYXMgb25seSAyNCBob3Vycy4ifTwvcD4KPCEtLSBkdGw6YmxvY2s6RW5kVGltZUludmFsaWQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlVuaXRJbnB1dFBlcmlvZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJQZXJpb2RbJFFEYXRheyJJRCJ9XSIgaWQ9IlBlcmlvZCRRRGF0YXsiSUQifSIgY2xhc3M9IlBlcmlvZCBWYWxpZGF0ZV9UaW1lQWNjb3VudGluZ19QZXJpb2QgVmFsaWRhdGVfVGltZVVuaXRzICRRRGF0YXsiUGVyaW9kUmVxdWlyZWQifSAkUURhdGF7IlBlcmlvZEludmFsaWQifSIgdmFsdWU9IiRRRGF0YXsiUGVyaW9kIn0iIHNpemU9IjciIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlBlcmlvZCRRRGF0YXsiSUQifUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiWW91IGhhdmUgdG8gZmlsbCBpbiBzdGFydCBhbmQgZW5kIHRpbWUgb3IgYSB0aW1lIHBlcmlvZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlBlcmlvZCRRRGF0YXsiSUQifVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CjwhLS0gZHRsOmJsb2NrOlBlcmlvZEdlbmVyaWNTZXJ2ZXJFcnJvciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgo8IS0tIGR0bDpibG9jazpQZXJpb2RHZW5lcmljU2VydmVyRXJyb3IgLS0+CjwhLS0gZHRsOmJsb2NrOkludmFsaWRIb3Vyc1BlcmlvZFNlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IkludmFsaWQgcGVyaW9kISBBIGRheSBoYXMgb25seSAyNCBob3Vycy4ifTwvcD4KPCEtLSBkdGw6YmxvY2s6SW52YWxpZEhvdXJzUGVyaW9kU2VydmVyRXJyb3IgLS0+CjwhLS0gZHRsOmJsb2NrOlplcm9Ib3Vyc1BlcmlvZFNlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IkEgdmFsaWQgcGVyaW9kIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIn08L3A+CjwhLS0gZHRsOmJsb2NrOlplcm9Ib3Vyc1BlcmlvZFNlcnZlckVycm9yIC0tPgo8IS0tIGR0bDpibG9jazpOZWdhdGl2ZVBlcmlvZFNlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IkludmFsaWQgcGVyaW9kISBOZWdhdGl2ZSBwZXJpb2RzIGFyZSBub3QgYWxsb3dlZC4ifTwvcD4KPCEtLSBkdGw6YmxvY2s6TmVnYXRpdmVQZXJpb2RTZXJ2ZXJFcnJvciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlVuaXRJbnB1dFBlcmlvZCAtLT4KPCEtLSBkdGw6YmxvY2s6VW5pdFBlcmlvZFdpdGhvdXRJbnB1dCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFFEYXRheyJQZXJpb2QifTwvdGQ+CjwhLS0gZHRsOmJsb2NrOlVuaXRQZXJpb2RXaXRob3V0SW5wdXQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpVbml0IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI2IiBjbGFzcz0iUmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFBsdXMiIHR5cGU9ImJ1dHRvbiIgaWQ9Ik1vcmVJbnB1dEZpZWxkcyIgbmFtZT0iTW9yZUlucHV0RmllbGRzIj48c3Bhbj4kVGV4dHsiQWRkIG9uZSByb3cifTwvc3Bhbj48L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6VW5pdEJsb2NrIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI0Ij48L3RkPgo8IS0tIGR0bDpibG9jazpUb3RhbCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFRleHR7IlRvdGFsIn06PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PHNwYW4gY2xhc3M9IlRvdGFsSG91cnMiPiRRRGF0YXsiVG90YWwifTwvc3Bhbj48L3RkPgo8IS0tIGR0bDpibG9jazpUb3RhbCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlJlYWRvbmx5IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IiREYXRheyJEZXNjcmlwdGlvbiJ9In0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6UmVhZG9ubHkgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KPCEtLSBkdGw6YmxvY2s6T3RoZXJUaW1lcyAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiB2YWx1ZT0iMSIgaWQ9IkxlYXZlRGF5IiBuYW1lPSJMZWF2ZURheSIgdGl0bGU9IiRUZXh0eyJPbiB2YWNhdGlvbiJ9IiBjbGFzcz0iJERhdGF7IkxlYXZlRGF5SW52YWxpZCJ9IiAkRGF0YXsiTGVhdmVEYXkifSAvPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJMZWF2ZURheSI+JFRleHR7Ik9uIHZhY2F0aW9uIn08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJMZWF2ZURheVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiWW91IGNhbiBvbmx5IHNlbGVjdCBvbmUgY2hlY2tib3ggZWxlbWVudCEifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgdmFsdWU9IjEiIGlkPSJTaWNrIiBuYW1lPSJTaWNrIiB0aXRsZT0iJFRleHR7Ik9uIHNpY2sgbGVhdmUifSIgY2xhc3M9IiREYXRheyJTaWNrSW52YWxpZCJ9IiAkRGF0YXsiU2ljayJ9IC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlNpY2siPiRUZXh0eyJPbiBzaWNrIGxlYXZlIn08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJTaWNrU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJZb3UgY2FuIG9ubHkgc2VsZWN0IG9uZSBjaGVja2JveCBlbGVtZW50ISJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiB2YWx1ZT0iMSIgaWQ9Ik92ZXJ0aW1lIiBuYW1lPSJPdmVydGltZSIgdGl0bGU9IiRUZXh0eyJPbiBvdmVydGltZSBsZWF2ZSJ9IiBjbGFzcz0iJERhdGF7Ik92ZXJ0aW1lSW52YWxpZCJ9IiAkRGF0YXsiT3ZlcnRpbWUifSAvPgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJPdmVydGltZSI+JFRleHR7Ik9uIG92ZXJ0aW1lIGxlYXZlIn08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJPdmVydGltZVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiWW91IGNhbiBvbmx5IHNlbGVjdCBvbmUgY2hlY2tib3ggZWxlbWVudCEifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk90aGVyVGltZXMgLS0+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2VudGVyIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJQcmltYXJ5IiB0eXBlPSJzdWJtaXQiIG5hbWU9Ikluc2VydFdvcmtpbmdVbml0cyIgdmFsdWU9IiRUZXh0eyJTdWJtaXQifSI+JFRleHR7IlN1Ym1pdCJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJEZWxldGVUaW1lQWNjb3VudGluZ0VudHJ5IiBocmVmPSIjIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJEZWxldGUifQogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPUVkaXQiPiRUZXh0eyJDYW5jZWwifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICBUaW1lQWNjb3VudGluZy5BZ2VudC5FZGl0VGltZVJlY29yZHMuQWN0aW9uTGlzdCA9ICRRRGF0YXsiSlNBY3Rpb25MaXN0In07CiAgICBUaW1lQWNjb3VudGluZy5BZ2VudC5FZGl0VGltZVJlY29yZHMuQWN0aW9uTGlzdENvbnN0cmFpbnRzID0gJFFEYXRheyJKU0FjdGlvbkxpc3RDb25zdHJhaW50cyJ9OwogICAgVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzLkluaXQoewogICAgICAgIFJlbWFya1JlZ0V4cENvbnRlbnQ6ICIkUURhdGF7IlJlbWFya1JlZ0V4cCJ9IiwKICAgICAgICBBdXRvY29tcGxldGlvbjogJFFEYXRheyJFbmFibGVBdXRvY29tcGxldGlvbiJ9LAogICAgICAgIExhbmd1YWdlOiB7CiAgICAgICAgICAgIFNob3dBbGxJdGVtczogIiRKU1RleHR7IlNob3cgYWxsIGl0ZW1zIn0iCiAgICAgICAgfQogICAgfSk7CiAgICBUaW1lQWNjb3VudGluZy5BZ2VudC5Db25maXJtYXRpb25EaWFsb2cuQmluZENvbmZpcm1hdGlvbkRpYWxvZyh7CiAgICAgICAgRWxlbWVudElEOiAgICAgICAgICAgICAgICAgICdEZWxldGVUaW1lQWNjb3VudGluZ0VudHJ5JywKICAgICAgICBFbGVtZW50U2VsZWN0b3I6ICAgICAgICAgICAgJyNEZWxldGVUaW1lQWNjb3VudGluZ0VudHJ5JywKICAgICAgICBEaWFsb2dDb250ZW50UXVlcnlTdHJpbmc6ICAgJ0FjdGlvbj1BZ2VudFRpbWVBY2NvdW50aW5nO0RlbGV0ZURheT0xO1llYXI9JFFEYXRheyJZZWFyIn07TW9udGg9JFFEYXRheyJNb250aCJ9O0RheT0kUURhdGF7IkRheSJ9JywKICAgICAgICBDb25maXJtZWRBY3Rpb25RdWVyeVN0cmluZzogJ0FjdGlvbj1BZ2VudFRpbWVBY2NvdW50aW5nO1N1YmFjdGlvbj1EZWxldGU7WWVhcj0kUURhdGF7IlllYXIifTtNb250aD0kUURhdGF7Ik1vbnRoIn07RGF5PSRRRGF0YXsiRGF5In0nLAogICAgICAgIERpYWxvZ1RpdGxlOiAgICAgICAgICAgICAgICAnJEpTVGV4dHsiRGVsZXRlIFRpbWUgQWNjb3VudGluZyBFbnRyeSJ9JywKICAgICAgICBUcmFuc2xhdGVkVGV4dDogICAgICAgICAgICAgewogICAgICAgICAgICBZZXM6ICckSlNUZXh0eyJZZXMifScsCiAgICAgICAgICAgIE5vOiAgJyRKU1RleHR7Ik5vIn0nCiAgICAgICAgfQogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KCjwhLS0gZHRsOmJsb2NrOlNob3dDb25maXJtYXRpb24gLS0+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAvLyBkZWZpbmUgeWVzIGFuZCBubyBidXR0b25zCiAgICB2YXIgQnV0dG9ucyA9IFt7CiAgICAgICAgTGFiZWw6ICckSlNUZXh0eyJZZXMifScsCiAgICAgICAgQ2xhc3M6ICJQcmltYXJ5IiwKICAgICAgICBUeXBlOiAiQ2xvc2UiLAogICAgICAgIH0sIHsKICAgICAgICBMYWJlbDogJyRKU1RleHR7Ik5vIn0nLAoKICAgICAgICAvLyBkZWZpbmUgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlICdObycgYnV0dG9uIGlzIHByZXNzZWQKICAgICAgICBGdW5jdGlvbjogZnVuY3Rpb24oKXsKCiAgICAgICAgICAgIC8vIGRpc2FibGUgWWVzIGFuZCBObyBidXR0b25zIHRvIHByZXZlbnQgbXVsdGlwbGUgc3VibWl0cwogICAgICAgICAgICAkKCdkaXYuRGlhbG9nOnZpc2libGUgZGl2LkNvbnRlbnRGb290ZXIgYnV0dG9uJykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTsKCiAgICAgICAgICAgIC8vIHJlZGlyZWN0IHRvIHRoZSBtb2R1bGUgdGhhdCBkZWxldGVzIHRoZSBzYXZlZCBlbnRyeSBhZnRlciBwcmVzc2luZyB0aGUgTm8gYnV0dG9uCiAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJykgKyAnQWN0aW9uPUFnZW50VGltZUFjY291bnRpbmc7U3ViYWN0aW9uPURlbGV0ZTtZZWFyPSRRRGF0YXsiWWVhciJ9O01vbnRoPSRRRGF0YXsiTW9udGgifTtEYXk9JFFEYXRheyJEYXkifSc7CiAgICAgICAgfQogICAgfV07CiAgICAvLyBzaG93IHRoZSBjb25maXJtYXRpb24gZGlhbG9nIHRvIGNvbmZpcm0gdGhlIGFjdGlvbgogICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coJCgnIyRRRGF0YXsiQmxvY2tOYW1lIn0nKSwgJyRKU1RleHR7IkNvbmZpcm0gaW5zZXJ0In0nLCAnMjAlJywgJ0NlbnRlcicsIHRydWUsIEJ1dHRvbnMpOwoKLy9dXT48L3NjcmlwdD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8IS0tIGR0bDpibG9jazpTaG93Q29uZmlybWF0aW9uIC0tPgoKICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+Cgo8cCBpZD0iU2lja0xlYXZlTWVzc2FnZSIgY2xhc3M9IkhpZGRlbiBDZW50ZXIiPgogICAgJFRleHR7IkFyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgd2hpbGUgeW91IHdlcmUgb24gc2ljayBsZWF2ZT8ifQo8L3A+Cgo8cCBpZD0iVmFjYXRpb25NZXNzYWdlIiBjbGFzcz0iSGlkZGVuIENlbnRlciI+CiAgICAkVGV4dHsiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiB2YWNhdGlvbj8ifQo8L3A+Cgo8cCBpZD0iT3ZlcnRpbWVNZXNzYWdlIiBjbGFzcz0iSGlkZGVuIENlbnRlciI+CiAgICAkVGV4dHsiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiBvdmVydGltZSBsZWF2ZT8ifQo8L3A+Cgo8cCBpZD0iTW9yZTE2SG91cnNNZXNzYWdlIiBjbGFzcz0iSGlkZGVuIENlbnRlciI+CiAgICAkVGV4dHsiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCBtb3JlIHRoYW4gMTYgaG91cnM/In0KPC9wPgo=
IyAtLQojIEFnZW50VGltZUFjY291bnRpbmdPdmVydmlldy5kdGwgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIHRpbWUgYWNjb3VudGluZyBvdmVydmlldwojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KICAgIDxoMSBjbGFzcz0iSGVhZGVyIj4kVGV4dHsiVGltZSByZXBvcnRpbmcgbW9udGhseSBvdmVydmlldyJ9PC9oMT4KCiAgICA8ZGl2IGNsYXNzPSJMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckxhc3QiPgogICAgICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgo8IS0tIGR0bDpibG9jazpPdmVydGltZSAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJPdmVydGltZSAoSG91cnMpIn08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJPdmVydGltZSAodGhpcyBtb250aCkifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPiRRRGF0YXsiT3ZlcnRpbWUifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJPdmVydGltZSAodG90YWwpIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4kUURhdGF7Ik92ZXJ0aW1lVW50aWwifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiRUZXh0eyJSZW1haW5pbmcgb3ZlcnRpbWUgbGVhdmUifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPiRRRGF0YXsiT3ZlcnRpbWVUb3RhbCJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnRpbWUgLS0+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+JFRleHR7IlZhY2F0aW9uIChEYXlzKSJ9PC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiVmFjYXRpb24gdGFrZW4gKHRoaXMgbW9udGgpIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4kUURhdGF7IkxlYXZlRGF5In08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiVmFjYXRpb24gdGFrZW4gKHRvdGFsKSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+JFFEYXRheyJMZWF2ZURheVRvdGFsIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiUmVtYWluaW5nIHZhY2F0aW9uIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4kUURhdGF7IkxlYXZlRGF5UmVtYWluaW5nIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJTaWNrIExlYXZlIChEYXlzKSJ9PC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4kVGV4dHsiU2ljayBsZWF2ZSB0YWtlbiAodGhpcyBtb250aCkifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPiRRRGF0YXsiU2ljayJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+JFRleHR7IlNpY2sgbGVhdmUgdGFrZW4gKHRvdGFsKSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+JFFEYXRheyJTaWNrVG90YWwifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+JFRleHR7Ik92ZXJ2aWV3In0KPCEtLSBkdGw6YmxvY2s6VXNlciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgLSAkUURhdGF7IlVzZXIifQo8IS0tIGR0bDpibG9jazpVc2VyIC0tPgogICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWRkaXRpb25hbEluZm9ybWF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFycm93IExlZnQiIHRpdGxlPSIkVGV4dHsiUHJldmlvdXMgbW9udGgifSIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249T3ZlcnZpZXc7WWVhcj0kTFFEYXRheyJZZWFyQmFjayJ9O01vbnRoPSRMUURhdGF7Ik1vbnRoQmFjayJ9O1VzZXJJRD0kTFFEYXRheyJVc2VySUQifSI+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXJyb3cgUmlnaHQiIHRpdGxlPSIkVGV4dHsiTmV4dCBtb250aCJ9IiBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1PdmVydmlldztZZWFyPSRMUURhdGF7IlllYXJOZXh0In07TW9udGg9JExRRGF0YXsiTW9udGhOZXh0In07VXNlcklEPSRMUURhdGF7IlVzZXJJRCJ9Ij48L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyIkRGF0YXsiTW9udGhfdG9fVGV4dCJ9In0gJFFEYXRheyJZZWFyIn0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJEYXkifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJXZWVrZGF5In08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiQ29tbWVudCJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IldvcmtpbmcgSG91cnMifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOlJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iJFFEYXRheyJDbGFzcyJ9IE1hc3RlckFjdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJGaXhlZCBEYXkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj0kTFFEYXRheyJTdWJhY3Rpb24ifTtZZWFyPSRMUURhdGF7IlllYXIifTtNb250aD0kTFFEYXRheyJNb250aCJ9O0RheT0kTFFEYXRheyJEYXkifTtVc2VySUQ9JExRRGF0YXsiVXNlcklEIn0iIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiRGF5In0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJGaXhlZCBXZWVrZGF5Ij4kVGV4dHsiJERhdGF7IldlZWtkYXlfdG9fVGV4dCJ9In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kVGV4dHsiJERhdGF7IkNvbW1lbnQifSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij4kUURhdGF7IldvcmtpbmdIb3VycyJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3AgUmlnaHQiPjxzdHJvbmc+JFRleHR7IlRvdGFsIHdvcmtlZCBob3VycyJ9Ojwvc3Ryb25nPiAkUURhdGF7IldvcmtpbmdIb3VycyJ9PC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+CiAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJVc2VyJ3MgcHJvamVjdCBvdmVydmlldyJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPU92ZXJ2aWV3O1llYXI9JExRRGF0YXsiWWVhciJ9O01vbnRoPSRMUURhdGF7Ik1vbnRoIn07UHJvamVjdFN0YXR1c1Nob3c9JExRRGF0YXsiUHJvamVjdFN0YXR1c1Nob3cifTtVc2VySUQ9JExRRGF0YXsiVXNlcklEIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRUZXh0eyIkRGF0YXsiU2hvd1Byb2plY3RzIn0ifSkKICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIE5vSG92ZXIgSGlnaENlbGxzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiUHJvamVjdCJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlRhc2sifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJIb3VycyAobW9udGhseSkifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJIb3VycyAoTGlmZXRpbWUpIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpBY3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CjwhLS0gZHRsOmJsb2NrOlByb2plY3QgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IiREYXRheyJSb3dTcGFuIn0iIGNsYXNzPSJSb3dTcGFuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz4KPCEtLSBkdGw6YmxvY2s6UHJvamVjdE5vTGluayAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IlByb2plY3QifQo8IS0tIGR0bDpibG9jazpQcm9qZWN0Tm9MaW5rIC0tPgo8IS0tIGR0bDpibG9jazpQcm9qZWN0TGluayAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249UHJvamVjdFJlcG9ydGluZztQcm9qZWN0SUQ9JExRRGF0YXsiUHJvamVjdElEIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IlByb2plY3QifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CjwhLS0gZHRsOmJsb2NrOlByb2plY3RMaW5rIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N0cm9uZz4KPCEtLSBkdGw6YmxvY2s6UHJvamVjdERlc2NyaXB0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIvPiREYXRheyJQcm9qZWN0RGVzY3JpcHRpb24ifQo8IS0tIGR0bDpibG9jazpQcm9qZWN0RGVzY3JpcHRpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6UHJvamVjdCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFFEYXRheyJBY3Rpb24ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+JFFEYXRheyJIb3VycyJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij4kUURhdGF7IkhvdXJzVG90YWwifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpBY3Rpb25Ub3RhbCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PHN0cm9uZz4kVGV4dHsiVG90YWwifTwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+PHN0cm9uZz4kUURhdGF7IkhvdXJzIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPjxzdHJvbmc+JFFEYXRheyJIb3Vyc1RvdGFsIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6QWN0aW9uVG90YWwgLS0+CjwhLS0gZHRsOmJsb2NrOkFjdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iR3JhbmRUb3RhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPjxzdHJvbmc+JFRleHR7IkdyYW5kIHRvdGFsIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPjxzdHJvbmc+JFFEYXRheyJUb3RhbEhvdXJzIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPjxzdHJvbmc+JFFEYXRheyJUb3RhbEhvdXJzVG90YWwifTwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKJCgnLk1hc3RlckFjdGlvbicpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICB2YXIgJE1hc3RlckFjdGlvbkxpbmsgPSAkKHRoaXMpLmZpbmQoJy5NYXN0ZXJBY3Rpb25MaW5rJyk7CiAgICAvLyBvbmx5IGFjdCBpZiB0aGUgbGluayB3YXMgbm90IGNsaWNrZWQgZGlyZWN0bHkKICAgIGlmIChFdmVudC50YXJnZXQgIT09ICRNYXN0ZXJBY3Rpb25MaW5rLmdldCgwKSkgewogICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9ICRNYXN0ZXJBY3Rpb25MaW5rLmF0dHIoJ2hyZWYnKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0pOwovL11dPjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4K
IyAtLQojIEFnZW50VGltZUFjY291bnRpbmdQcm9qZWN0UmVwb3J0aW5nLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgdGltZSBhY2NvdW50aW5nIHJlcG9ydGluZwojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJIZWFkZXIiPiRUZXh0eyJQcm9qZWN0IHJlcG9ydCJ9OiAkUURhdGF7IlByb2plY3QifTwvaDE+CgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiQWN0aW9ucyJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVJlcG9ydGluZyIgY2xhc3M9IkNhbGxGb3JBY3Rpb24iPjxzcGFuPiRUZXh0eyJHbyB0byBvdmVydmlldyJ9PC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJQcm9qZWN0IHJlcG9ydCJ9OiAkUURhdGF7IlByb2plY3QifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSBEYXRhVGFibGVOb0hpZ2hsaWdodCI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlRhc2sifTwvdGg+CjwhLS0gZHRsOmJsb2NrOlVzZXJOYW1lIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRRRGF0YXsiVXNlciJ9PC90aD4KPCEtLSBkdGw6YmxvY2s6VXNlck5hbWUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlRvdGFsIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CjwhLS0gZHRsOmJsb2NrOkFjdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kUURhdGF7IkFjdGlvbiJ9PC90ZD4KPCEtLSBkdGw6YmxvY2s6VXNlciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPiRRRGF0YXsiSG91cnMifTwvdGQ+CjwhLS0gZHRsOmJsb2NrOlVzZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOkFjdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJHcmFuZFRvdGFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3Ryb25nPiRUZXh0eyJUb3RhbCJ9PC9zdHJvbmc+PC90ZD4KPCEtLSBkdGw6YmxvY2s6VXNlclRvdGFsIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+PHN0cm9uZz4kUURhdGF7IlRvdGFsIn08L3N0cm9uZz48L3RkPgo8IS0tIGR0bDpibG9jazpVc2VyVG90YWwgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij48c3Ryb25nPiRRRGF0YXsiVG90YWxBbGwifTwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJIaXN0b3J5In06ICRRRGF0YXsiUHJvamVjdCJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIERhdGFUYWJsZU5vSGlnaGxpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiRGF0ZSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiVXNlciJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiVGFzayJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiUmVtYXJrIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJQZXJpb2QifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOlJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRRRGF0YXsiRGF0ZSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kUURhdGF7IlVzZXIifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFFEYXRheyJBY3Rpb24ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFFEYXRheyJSZW1hcmsifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij4kUURhdGF7IlBlcmlvZCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Um93IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IkdyYW5kVG90YWwiPgo8IS0tIGR0bDpibG9jazpIaXN0b3J5VG90YWwgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNCI+PHN0cm9uZz4kVGV4dHsiVG90YWwifTwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij48c3Ryb25nPiRRRGF0YXsiSGlzdG9yeVRvdGFsIn08L3N0cm9uZz48L3RkPgo8IS0tIGR0bDpibG9jazpIaXN0b3J5VG90YWwgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgo=
IyAtLQojIEFnZW50VGltZUFjY291bnRpbmdSZXBvcnRpbmcuZHRsIC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciB0aW1lIGFjY291bnRpbmcgcmVwb3J0aW5nCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDEgY2xhc3M9IkhlYWRlciI+JFRleHR7IlRpbWUgcmVwb3J0aW5nIn06ICRUZXh0eyIkRGF0YXsiTW9udGhfdG9fVGV4dCJ9In0gJERhdGF7IlllYXIifTwvaDE+CgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiTW9udGggTmF2aWdhdGlvbiJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTW9udGhTZWxlY3Rpb24iPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJBcnJvdyBMZWZ0IiB0aXRsZT0iJFRleHR7IlByZXZpb3VzIG1vbnRoIn0iIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVJlcG9ydGluZztZZWFyPSRMUURhdGF7IlllYXJCYWNrIn07TW9udGg9JExRRGF0YXsiTW9udGhCYWNrIn0iPjwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXJyb3cgUmlnaHQiIHRpdGxlPSIkVGV4dHsiTmV4dCBtb250aCJ9IiBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1SZXBvcnRpbmc7WWVhcj0kTFFEYXRheyJZZWFyTmV4dCJ9O01vbnRoPSRMUURhdGF7Ik1vbnRoTmV4dCJ9Ij48L2E+CiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz4kVGV4dHsiJERhdGF7Ik1vbnRoX3RvX1RleHQifSJ9ICREYXRheyJZZWFyIn08L3N0cm9uZz4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJjb21wb3NlIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iICAgIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJSZXBvcnRpbmciIC8+CiAgICAgICAgICAgICAgICAgICAgJERhdGF7Ik1vbnRoT3B0aW9uIn0KICAgICAgICAgICAgICAgICAgICAkRGF0YXsiWWVhck9wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJidXR0b24iIGFjY2Vzc2tleT0iZyIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9IiAvPgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IlVzZXIgcmVwb3J0cyJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgSG9yaXpvbnRhbFNjcm9sbCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPSJUd29Sb3dzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY29sc3Bhbj0iNCI+JFRleHR7Ik1vbnRobHkgdG90YWwifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY29sc3Bhbj0iMiI+JFRleHR7IkxpZmV0aW1lIHRvdGFsIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlVzZXIifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IldvcmtpbmcgSG91cnMifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7Ik92ZXJ0aW1lIGxlYXZlIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJWYWNhdGlvbiJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiU2ljayBsZWF2ZSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiT3ZlcnRpbWUgbGVhdmUifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlZhY2F0aW9uIHJlbWFpbmluZyJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6VXNlciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJNYXN0ZXJBY3Rpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPU92ZXJ2aWV3O1llYXI9JExRRGF0YXsiWWVhciJ9O01vbnRoPSRMUURhdGF7Ik1vbnRoIn07VXNlcklEPSRMUURhdGF7IlVzZXJJRCJ9IiBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiVXNlciJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPiRRRGF0YXsiV29ya2luZ0hvdXJzIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+JFFEYXRheyJPdmVydGltZSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPiRRRGF0YXsiTGVhdmVEYXkifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij4kUURhdGF7IlNpY2sifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij4kUURhdGF7Ik92ZXJ0aW1lVG90YWwifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij4kUURhdGF7IkxlYXZlRGF5UmVtYWluaW5nIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpVc2VyIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IkdyYW5kVG90YWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzdHJvbmc+JFRleHR7IlRvdGFsIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+PHN0cm9uZz4kUURhdGF7IlRvdGFsV29ya2luZ0hvdXJzIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+PHN0cm9uZz4kUURhdGF7IlRvdGFsT3ZlcnRpbWUifTwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij48c3Ryb25nPiRRRGF0YXsiVG90YWxMZWF2ZURheSJ9PC9zdHJvbmc+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPjxzdHJvbmc+JFFEYXRheyJUb3RhbFNpY2sifTwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij48c3Ryb25nPiRRRGF0YXsiVG90YWxPdmVydGltZVRvdGFsIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+PHN0cm9uZz4kUURhdGF7IlRvdGFsTGVhdmVEYXlSZW1haW5pbmcifTwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJQcm9qZWN0IHJlcG9ydHMifQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVJlcG9ydGluZztZZWFyPSRMUURhdGF7IlllYXIifTtNb250aD0kTFFEYXRheyJNb250aCJ9O1Byb2plY3RTdGF0dXNTaG93PSRMUURhdGF7IlByb2plY3RTdGF0dXNTaG93In0iPgogICAgICAgICAgICAgICAgICAgICAgICAoJFRleHR7IiREYXRheyJTaG93UHJvamVjdHMifSJ9KQogICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50IEhvcml6b250YWxTY3JvbGwiPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUgTm9Ib3ZlciI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlByb2plY3QifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlRhc2sifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IkhvdXJzIChtb250aGx5KSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiSG91cnMgKExpZmV0aW1lKSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6QWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9Ik1hc3RlckFjdGlvbiI+CjwhLS0gZHRsOmJsb2NrOlByb2plY3QgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iJERhdGF7IlJvd1NwYW4ifSIgY2xhc3M9IlJvd1NwYW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+PGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249UHJvamVjdFJlcG9ydGluZztQcm9qZWN0SUQ9JExRRGF0YXsiUHJvamVjdElEIn0iIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiUHJvamVjdCJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+PC9zdHJvbmc+CjwhLS0gZHRsOmJsb2NrOlByb2plY3REZXNjcmlwdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPiREYXRheyJQcm9qZWN0RGVzY3JpcHRpb24ifQo8IS0tIGR0bDpibG9jazpQcm9qZWN0RGVzY3JpcHRpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlByb2plY3QgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kUURhdGF7IkFjdGlvbiJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+JFFEYXRheyJIb3VycyJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+JFFEYXRheyJIb3Vyc1RvdGFsIn08L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOkFjdGlvblRvdGFsIC0tPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzdHJvbmc+JFRleHR7IlRvdGFsIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij48c3Ryb25nPiRRRGF0YXsiSG91cnMifTwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPjxzdHJvbmc+JFFEYXRheyJIb3Vyc1RvdGFsIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOkFjdGlvblRvdGFsIC0tPgo8IS0tIGR0bDpibG9jazpBY3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJHcmFuZFRvdGFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPjxzdHJvbmc+JFRleHR7IkdyYW5kIHRvdGFsIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij48c3Ryb25nPiRRRGF0YXsiVG90YWxIb3VycyJ9PC9zdHJvbmc+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+PHN0cm9uZz4kUURhdGF7IlRvdGFsSG91cnNUb3RhbCJ9PC9zdHJvbmc+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKJCgnLk1hc3RlckFjdGlvbicpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICB2YXIgJE1hc3RlckFjdGlvbkxpbmsgPSAkKHRoaXMpLmZpbmQoJy5NYXN0ZXJBY3Rpb25MaW5rJyk7CiAgICAvLyBvbmx5IGFjdCBpZiB0aGUgbGluayB3YXMgbm90IGNsaWNrZWQgZGlyZWN0bHkKICAgIGlmIChFdmVudC50YXJnZXQgIT09ICRNYXN0ZXJBY3Rpb25MaW5rLmdldCgwKSkgewogICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9ICRNYXN0ZXJBY3Rpb25MaW5rLmF0dHIoJ2hyZWYnKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0pOwovL11dPjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4K
IyAtLQojIEFnZW50VGltZUFjY291bnRpbmdTZXR0aW5nLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgdGltZSBhY2NvdW50aW5nIHNldHRpbmdzCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdQcm9qZWN0IC0tPgo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMSBjbGFzcz0iSGVhZGVyIj4kVGV4dHsiRWRpdCBUaW1lIEFjY291bnRpbmcgUHJvamVjdCBTZXR0aW5ncyJ9PC9oMT4KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KPCEtLSBkdGw6YmxvY2s6QWN0aW9uTGlzdFByb2plY3QgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiQWN0aW9ucyJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KPCEtLWR0bDpibG9jazpBY3Rpb25BZGRQcm9qZWN0LS0+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkFkZFByb2plY3QiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gUGx1cyIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IkFkZCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiQWRkIHByb2plY3QifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLWR0bDpibG9jazpBY3Rpb25BZGRQcm9qZWN0LS0+Cgo8IS0tIGR0bDpibG9jazpBY3Rpb25TZXR0aW5nT3ZlcnZpZXcgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1TZXR0aW5nIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiI+PHNwYW4+JFRleHR7IkdvIHRvIG92ZXJ2aWV3In08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOkFjdGlvblNldHRpbmdPdmVydmlldy0tPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkFjdGlvbkxpc3RQcm9qZWN0IC0tPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+Cgo8IS0tIGR0bDpibG9jazpPdmVydmlld1VwZGF0ZVByb2plY3QgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KPCEtLSBkdGw6YmxvY2s6SGVhZGVyQWRkUHJvamVjdCAtLT4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiQWRkIFByb2plY3QifTwvaDI+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckFkZFByb2plY3QgLS0+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckVkaXRQcm9qZWN0IC0tPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJFZGl0IFByb2plY3QgU2V0dGluZ3MifTwvaDI+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckVkaXRQcm9qZWN0IC0tPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIG5hbWU9IlByb2plY3RVcGRhdGUiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iJFFEYXRheyJBY3Rpb24ifUFjdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iSUQiIHZhbHVlPSIkUURhdGF7IklEIn0iLz4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRhdG9yeSIgZm9yPSJQcm9qZWN0Ij48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiTmFtZSJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJQcm9qZWN0IiBpZD0iUHJvamVjdCIgdmFsdWU9IiRRRGF0YXsiUHJvamVjdCJ9IiBjbGFzcz0iVzUwcGMgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJQcm9qZWN0SW52YWxpZCJ9IiBtYXhsZW5ndGg9IjUwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQcm9qZWN0RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6UHJvamVjdE1pc3NpbmdWYWx1ZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlByb2plY3RTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlByb2plY3RNaXNzaW5nVmFsdWUgLS0+Cgo8IS0tIGR0bDpibG9jazpQcm9qZWN0RHVwbGljYXRlTmFtZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlByb2plY3RTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGVyZSBpcyBhbHJlYWR5IGEgcHJvamVjdCB3aXRoIHRoaXMgbmFtZS4gUGxlYXNlLCBjaG9vc2UgYSBkaWZmZXJlbnQgb25lLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlByb2plY3REdXBsaWNhdGVOYW1lIC0tPgoKICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlByb2plY3REZXNjcmlwdGlvbiI+JFRleHR7IkRlc2NyaXB0aW9uIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlByb2plY3REZXNjcmlwdGlvbiIgaWQ9IlByb2plY3REZXNjcmlwdGlvbiIgdmFsdWU9IiRRRGF0YXsiUHJvamVjdERlc2NyaXB0aW9uIn0iIGNsYXNzPSJXNTBwYyIgbWF4bGVuZ3RoPSIxNTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlByb2plY3RTdGF0dXMiPiRUZXh0eyJTdGF0dXMifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiU3RhdHVzT3B0aW9uIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiBpZD0iU3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9Ij4kVGV4dHsiU3VibWl0In08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1TZXR0aW5nIj4kVGV4dHsiQ2FuY2VsIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3VXBkYXRlUHJvamVjdCAtLT4KICAgIDwvZGl2Pgo8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdQcm9qZWN0IC0tPgoKPCEtLSBkdGw6YmxvY2s6U2V0dGluZyAtLT4KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDEgY2xhc3M9IkhlYWRlciI+JFRleHR7IkVkaXQgVGltZSBBY2NvdW50aW5nIFNldHRpbmdzIn08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgoKPCEtLSBkdGw6YmxvY2s6QWN0aW9uTGlzdFNldHRpbmcgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiQWN0aW9ucyJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KPCEtLWR0bDpibG9jazpBY3Rpb25BZGRQcm9qZWN0LS0+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkFkZFByb2plY3QiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gUGx1cyIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IkFkZCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiQWRkIHByb2plY3QifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLWR0bDpibG9jazpBY3Rpb25BZGRQcm9qZWN0LS0+CjwhLS1kdGw6YmxvY2s6QWN0aW9uQWRkVGFzay0tPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJBZGRUYXNrIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFBsdXMiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJBZGQgdGFzayJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4kVGV4dHsiQWRkIHRhc2sifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLWR0bDpibG9jazpBY3Rpb25BZGRUYXNrLS0+CjwhLS1kdGw6YmxvY2s6QWN0aW9uQWRkVXNlci0tPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJBZGRVc2VyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiTmV3VXNlck9wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiTmV3IHVzZXIifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7Ik5ldyB1c2VyIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS1kdGw6YmxvY2s6QWN0aW9uQWRkVXNlci0tPgo8IS0tIGR0bDpibG9jazpBY3Rpb25PdmVydmlld1NldHRpbmcgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1TZXR0aW5nIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiI+PHNwYW4+JFRleHR7IkdvIHRvIG92ZXJ2aWV3In08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS0gZHRsOmJsb2NrOkFjdGlvbk92ZXJ2aWV3U2V0dGluZyAtLT4KCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6QWN0aW9uTGlzdFNldHRpbmcgLS0+Cgo8IS0tIGR0bDpibG9jazpQcm9qZWN0RmlsdGVyIC0tPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+PGxhYmVsIGZvcj0iRmlsdGVyUHJvamVjdHMiPiRUZXh0eyJGaWx0ZXIgZm9yIFByb2plY3RzIn08L2xhYmVsPjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iRmlsdGVyUHJvamVjdHMiIGNsYXNzPSJXNTBwYyIgbmFtZT0iRmlsdGVyUHJvamVjdHMiIHZhbHVlPSIiIHRpdGxlPSIkVGV4dHsiRmlsdGVyIGZvciBQcm9qZWN0cyJ9IiAvPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6UHJvamVjdEZpbHRlciAtLT4KCjwhLS0gZHRsOmJsb2NrOlRhc2tGaWx0ZXIgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj48bGFiZWwgZm9yPSJGaWx0ZXJUYXNrcyI+JFRleHR7IkZpbHRlciBmb3IgVGFza3MifTwvbGFiZWw+PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJGaWx0ZXJUYXNrcyIgY2xhc3M9Ilc1MHBjIiBuYW1lPSJGaWx0ZXJUYXNrcyIgdmFsdWU9IiIgdGl0bGU9IiRUZXh0eyJGaWx0ZXIgZm9yIFRhc2tzIn0iIC8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpUYXNrRmlsdGVyIC0tPgoKPCEtLSBkdGw6YmxvY2s6VXNlckZpbHRlciAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPjxsYWJlbCBmb3I9IkZpbHRlclVzZXJzIj4kVGV4dHsiRmlsdGVyIGZvciBVc2VycyJ9PC9sYWJlbD48L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkZpbHRlclVzZXJzIiBjbGFzcz0iVzUwcGMiIG5hbWU9IkZpbHRlclVzZXJzIiB2YWx1ZT0iIiB0aXRsZT0iJFRleHR7IkZpbHRlciBmb3IgVXNlcnMifSIgLz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlVzZXJGaWx0ZXIgLS0+Cgo8IS0tIGR0bDpibG9jazpSZWZlcmVuY2UgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIFNwYWNpbmdUb3AiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJSZWZlcmVuY2UifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgICAgICA8bGk+JFRleHR7IlJlcXVpcmVkIGZpZWxkcyBhcmUgbWFya2VkIHdpdGggYSAiKiIuIn08L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlJlZmVyZW5jZSAtLT4KCiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdSZXN1bHRQcm9qZWN0IC0tPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj48YSBocmVmPSIjIiB0aXRsZT0iJFRleHR7IlNob3cgb3IgaGlkZSB0aGUgY29udGVudCJ9Ij48aSBjbGFzcz0iaWNvbi1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJpY29uLWNhcmV0LWRvd24iPjwvaT48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IlByb2plY3QgTGlzdCJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIiBpZD0iUHJvamVjdHMiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJQcm9qZWN0In08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJDb21tZW50In08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJTdGF0dXMifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iRmlsdGVyTWVzc2FnZSBIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJObyBtYXRjaGVzIGZvdW5kLiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpOb1Byb2plY3REYXRhRm91bmRNc2cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiTm8gZGF0YSBmb3VuZC4ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Tm9Qcm9qZWN0RGF0YUZvdW5kTXNnIC0tPgoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdSZXN1bHRQcm9qZWN0Um93IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPUVkaXRQcm9qZWN0O0lEPSRMUURhdGF7IlByb2plY3RJRCJ9Ij4kUURhdGF7IlByb2plY3QifTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSIkUURhdGF7IlByb2plY3REZXNjcmlwdGlvbiJ9Ij4kUURhdGF7IlByb2plY3REZXNjcmlwdGlvbiIsIjQwIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRUZXh0eyIkRGF0YXsiU3RhdHVzIn0ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0UHJvamVjdFJvdyAtLT4KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0UHJvamVjdCAtLT4KCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIENvcmUuVUkuVGFibGUuSW5pdFRhYmxlRmlsdGVyKCQoJyNGaWx0ZXJQcm9qZWN0cycpLCAkKCcjUHJvamVjdHMnKSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdSZXN1bHRTZXR0aW5nIC0tPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRBY3Rpb24gVG9nZ2xlIj48YSBocmVmPSIjIiB0aXRsZT0iJFRleHR7IlNob3cgb3IgaGlkZSB0aGUgY29udGVudCJ9Ij48aSBjbGFzcz0iaWNvbi1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJpY29uLWNhcmV0LWRvd24iPjwvaT48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IlRhc2sgTGlzdCJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiIGlkPSJUYXNrcyI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlRhc2sifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlN0YXR1cyJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJGaWx0ZXJNZXNzYWdlIEhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Ik5vIG1hdGNoZXMgZm91bmQuIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk5vU2V0dGluZ0RhdGFGb3VuZE1zZyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJObyBkYXRhIGZvdW5kLiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpOb1NldHRpbmdEYXRhRm91bmRNc2cgLS0+Cgo8IS0tIGR0bDpibG9jazpPdmVydmlld1Jlc3VsdFNldHRpbmdSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249RWRpdFRhc2s7QWN0aW9uSUQ9JExRRGF0YXsiQWN0aW9uSUQifSI+JFFEYXRheyJBY3Rpb24ifTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRUZXh0eyIkRGF0YXsiU3RhdHVzIn0ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0U2V0dGluZ1JvdyAtLT4KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0U2V0dGluZyAtLT4KCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIENvcmUuVUkuVGFibGUuSW5pdFRhYmxlRmlsdGVyKCQoJyNGaWx0ZXJUYXNrcycpLCAkKCcjVGFza3MnKSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdVcGRhdGVUYXNrIC0tPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckFkZFRhc2sgLS0+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkFkZCBUYXNrIn08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJBZGRUYXNrIC0tPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0VGFzayAtLT4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiRWRpdCBUYXNrIFNldHRpbmdzIn08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0VGFzayAtLT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJUYXNrVXBkYXRlIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IiRRRGF0YXsiQWN0aW9uIn1BY3Rpb24iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbklEIiB2YWx1ZT0iJFFEYXRheyJBY3Rpb25JRCJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iVGFzayI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IlRhc2sifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iVGFzayIgaWQ9IlRhc2siIHZhbHVlPSIkUURhdGF7IlRhc2sifSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkICRRRGF0YXsiVGFza0ludmFsaWQifSIgbWF4bGVuZ3RoPSI1MCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVGFza0Vycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOlRhc2tNaXNzaW5nVmFsdWUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUYXNrU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpUYXNrTWlzc2luZ1ZhbHVlIC0tPgoKPCEtLSBkdGw6YmxvY2s6VGFza0R1cGxpY2F0ZU5hbWUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUYXNrU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhlcmUgaXMgYWxyZWFkeSBhIHRhc2sgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpUYXNrRHVwbGljYXRlTmFtZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlRhc2tTdGF0dXMiPiRUZXh0eyJTdGF0dXMifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiU3RhdHVzT3B0aW9uIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiBpZD0iU3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9Ij4kVGV4dHsiU3VibWl0In08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1TZXR0aW5nIj4kVGV4dHsiQ2FuY2VsIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3VXBkYXRlVGFzayAtLT4KCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0VXNlciAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IiRUZXh0eyJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQifSI+PGkgY2xhc3M9Imljb24tY2FyZXQtcmlnaHQiPjwvaT48aSBjbGFzcz0iaWNvbi1jYXJldC1kb3duIj48L2k+PC9hPjwvZGl2PgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJVc2VyIExpc3QifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIiBpZD0iVXNlcnMiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJVc2VyIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJDb21tZW50In08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJDYWxlbmRhciJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJGaWx0ZXJNZXNzYWdlIEhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Ik5vIG1hdGNoZXMgZm91bmQuIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk5vVXNlckRhdGFGb3VuZE1zZyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJObyBkYXRhIGZvdW5kLiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpOb1VzZXJEYXRhRm91bmRNc2cgLS0+Cgo8IS0tIGR0bDpibG9jazpPdmVydmlld1Jlc3VsdFVzZXJSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249RWRpdFVzZXI7VXNlcklEPSRMUURhdGF7IlVzZXJJRCJ9Ij4kUURhdGF7IlVzZXIifTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiREYXRheyJDb21tZW50In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRUZXh0eyIkRGF0YXsiQ2FsZW5kYXIifSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdSZXN1bHRVc2VyUm93IC0tPgogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdSZXN1bHRVc2VyIC0tPgoKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgQ29yZS5VSS5UYWJsZS5Jbml0VGFibGVGaWx0ZXIoJCgnI0ZpbHRlclVzZXJzJyksICQoJyNVc2VycycpKTsKICAgIENvcmUuVUkuSW5pdFdpZGdldEFjdGlvblRvZ2dsZSgpOwovL11dPjwvc2NyaXB0Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3VXBkYXRlVXNlciAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgo8IS0tIGR0bDpibG9jazpIZWFkZXJBZGRVc2VyIC0tPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJOZXcgVXNlciBTZXR0aW5ncyJ9OiAkUURhdGF7IlVzZXJGaXJzdG5hbWUifSAkUURhdGF7IlVzZXJMYXN0bmFtZSJ9ICgkUURhdGF7IlVzZXJMb2dpbiJ9KTwvaDI+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckFkZFVzZXIgLS0+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckVkaXRVc2VyIC0tPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJFZGl0IFVzZXIgU2V0dGluZ3MifTwvaDI+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckVkaXRVc2VyIC0tPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIG5hbWU9IlVzZXJVcGRhdGUiIGNsYXNzPSJWYWxpZGF0ZSBQcmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSIkUURhdGF7IlN1YmFjdGlvbiJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlVzZXJJRCIgdmFsdWU9IiRRRGF0YXsiVXNlcklEIn0iIC8+CgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTmFtZSI+JFRleHR7Ik5hbWUifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSI+JFFEYXRheyJVc2VyRmlyc3RuYW1lIn0gJFFEYXRheyJVc2VyTGFzdG5hbWUifTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOYW1lIj4kVGV4dHsiVXNlcm5hbWUifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSI+JFFEYXRheyJVc2VyTG9naW4ifTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJEZXNjcmlwdGlvbiI+JFRleHR7IkNvbW1lbnRzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9IjEiIG5hbWU9IkRlc2NyaXB0aW9uIiBpZD0iRGVzY3JpcHRpb24iIGNvbHM9IjQwIj4kRGF0YXsiRGVzY3JpcHRpb24ifTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IlNob3dPdmVydGltZSIgaWQ9IlNob3dPdmVydGltZSIgdmFsdWU9IjEiICREYXRheyJTaG93T3ZlcnRpbWUifSAvPiRUZXh0eyJTaG93IE92ZXJ0aW1lIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iQ3JlYXRlUHJvamVjdCIgaWQ9IkNyZWF0ZVByb2plY3QiIHZhbHVlPSIxIiAkRGF0YXsiQ3JlYXRlUHJvamVjdCJ9IC8+JFRleHR7IkFsbG93IHByb2plY3QgY3JlYXRpb24ifQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iQ2FsZW5kYXIiPiRUZXh0eyJDYWxlbmRhciJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJDYWxlbmRhck9wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUgTm9Ib3ZlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IlBlcmlvZCBCZWdpbiJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IlBlcmlvZCBFbmQifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJEYXlzIG9mIFZhY2F0aW9uIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiSG91cnMgcGVyIFdlZWsifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJBdXRob3JpemVkIE92ZXJ0aW1lIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiU3RhdHVzIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpQZXJpb2RPdmVydmlld1JvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iRGF0ZVN0YXJ0LSRRRGF0YXsiUGVyaW9kIn0iIG5hbWU9IkRhdGVTdGFydFskUURhdGF7IlBlcmlvZCJ9XSIgdmFsdWU9IiRRRGF0YXsiRGF0ZVN0YXJ0In0iIGNsYXNzPSJEYXRlcGlja2VyRWxlbWVudCBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7IkRhdGVTdGFydEludmFsaWQifSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRGF0ZVN0YXJ0LSRRRGF0YXsiUGVyaW9kIn1FcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9ICRUZXh0eyJQbGVhc2UgaW5zZXJ0IGEgdmFsaWQgZGF0ZS4ifTwvcD48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RGF0ZVN0YXJ0SW52YWxpZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRGF0ZVN0YXJ0LSRRRGF0YXsiUGVyaW9kIn1TZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPiRUZXh0eyJJbnZhbGlkIGRhdGUhIn08L3A+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOkRhdGVTdGFydEludmFsaWQgLS0+CjwhLS0gZHRsOmJsb2NrOkRhdGVTdGFydE1pc3NpbmdWYWx1ZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRGF0ZVN0YXJ0LSRRRGF0YXsiUGVyaW9kIn1TZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpEYXRlU3RhcnRNaXNzaW5nVmFsdWUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iRGF0ZUVuZC0kUURhdGF7IlBlcmlvZCJ9IiBuYW1lPSJEYXRlRW5kWyRRRGF0YXsiUGVyaW9kIn1dIiB2YWx1ZT0iJFFEYXRheyJEYXRlRW5kIn0iIGNsYXNzPSJEYXRlcGlja2VyRWxlbWVudCBWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7IkRhdGVFbmRJbnZhbGlkIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkRhdGVFbmQtJFFEYXRheyJQZXJpb2QifUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn0gJFRleHR7IlBsZWFzZSBpbnNlcnQgYSB2YWxpZCBkYXRlLiJ9PC9wPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpEYXRlRW5kSW52YWxpZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRGF0ZUVuZC0kUURhdGF7IlBlcmlvZCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiSW52YWxpZCBkYXRlISJ9PC9wPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpEYXRlRW5kSW52YWxpZCAtLT4KPCEtLSBkdGw6YmxvY2s6RGF0ZUVuZE1pc3NpbmdWYWx1ZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRGF0ZUVuZC0kUURhdGF7IlBlcmlvZCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RGF0ZUVuZE1pc3NpbmdWYWx1ZSAtLT4KPCEtLSBkdGw6YmxvY2s6RGF0ZUVuZEJlZm9yZURhdGVTdGFydCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRGF0ZUVuZC0kUURhdGF7IlBlcmlvZCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiUGVyaW9kIGVuZCBtdXN0IGJlIGFmdGVyIHBlcmlvZCBiZWdpbi4ifTwvcD48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RGF0ZUVuZEJlZm9yZURhdGVTdGFydCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJMZWF2ZURheXMtJFFEYXRheyJQZXJpb2QifSIgbmFtZT0iTGVhdmVEYXlzWyRRRGF0YXsiUGVyaW9kIn1dIiB2YWx1ZT0iJFFEYXRheyJMZWF2ZURheXMifSIgY2xhc3M9IlZhbGlkYXRlX1JlcXVpcmVkICRRRGF0YXsiTGVhdmVEYXlzSW52YWxpZCJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJMZWF2ZURheXMtJFFEYXRheyJQZXJpb2QifUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkxlYXZlRGF5cy0kUURhdGF7IlBlcmlvZCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJXZWVrbHlIb3Vycy0kUURhdGF7IlBlcmlvZCJ9IiBuYW1lPSJXZWVrbHlIb3Vyc1skUURhdGF7IlBlcmlvZCJ9XSIgdmFsdWU9IiRRRGF0YXsiV2Vla2x5SG91cnMifSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJPdmVydGltZS0kUURhdGF7IlBlcmlvZCJ9IiBuYW1lPSJPdmVydGltZVskUURhdGF7IlBlcmlvZCJ9XSIgdmFsdWU9IiRRRGF0YXsiT3ZlcnRpbWUifSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IlBlcmlvZFN0YXR1c09wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlBlcmlvZE92ZXJ2aWV3Um93IC0tPgoKPCEtLSBkdGw6YmxvY2s6UGVyaW9kT3ZlcnZpZXdSb3dOb0RhdGEgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiTm8gdGltZSBwZXJpb2RzIGZvdW5kLiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlBlcmlvZE92ZXJ2aWV3Um93Tm9EYXRhIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlcxMDBwYyBSaWdodCBTcGFjaW5nVG9wU21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgdGl0bGU9IiRUZXh0eyJBZGQgdGltZSBwZXJpb2QifSIgdmFsdWU9IiRUZXh0eyJBZGQgdGltZSBwZXJpb2QifSIgbmFtZT0iQWRkUGVyaW9kIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQbHVzIj48c3Bhbj4kVGV4dHsiQWRkIHRpbWUgcGVyaW9kIn08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNlbnRlciBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9IiBuYW1lPSJTdWJtaXRVc2VyRGF0YSI+JFRleHR7IlN1Ym1pdCJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVNldHRpbmciPiRUZXh0eyJDYW5jZWwifTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICBUaW1lQWNjb3VudGluZy5BZ2VudC5EYXRlcGlja2VyLkluaXQoJCgnLkRhdGVwaWNrZXJFbGVtZW50JyksIHsKICAgICAgICBEYXRlSW5GdXR1cmU6IGZhbHNlLAogICAgICAgIFdlZWtEYXlTdGFydDogMQogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS1kdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdVcGRhdGVVc2VyIC0tPgogICAgPC9kaXY+CjwvZGl2PgoKPCEtLSBkdGw6YmxvY2s6U2V0dGluZyAtLT4K
IyAtLQojIEFnZW50VGltZUFjY291bnRpbmdWaWV3LmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9yIHZpZXcgaW5zZXJ0cyBvZiBvbmUgZGF5CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDEgY2xhc3M9IkhlYWRlciI+JFRleHR7IlZpZXcgVGltZSBSZWNvcmQifQo8IS0tIGR0bDpibG9jazpVc2VyIC0tPgogICAgICAgIC0gJFRleHR7IlZpZXcgb2YgIn0gJFFEYXRheyJVc2VyIn0KPCEtLSBkdGw6YmxvY2s6VXNlciAtLT4KICAgIDwvaDE+CgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiQWN0aW9ucyJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPU92ZXJ2aWV3O1llYXI9JExRRGF0YXsiWWVhciJ9O01vbnRoPSRMUURhdGF7Ik1vbnRoIn0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIj48c3Bhbj4kVGV4dHsiR28gdG8gb3ZlcnZpZXcifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkRhdGUgTmF2aWdhdGlvbiJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iTW9udGhTZWxlY3Rpb24iPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJBcnJvdyBMZWZ0IiB0aXRsZT0iJFRleHR7IlByZXZpb3VzIGRheSJ9IiBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1WaWV3O1llYXI9JExRRGF0YXsiWWVhckJhY2sifTtNb250aD0kTFFEYXRheyJNb250aEJhY2sifTtEYXk9JExRRGF0YXsiRGF5QmFjayJ9O1VzZXJJRD0kTFFEYXRheyJVc2VySUQifSI+PC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJBcnJvdyBSaWdodCIgdGl0bGU9IiRUZXh0eyJOZXh0IGRheSJ9IiBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1WaWV3O1llYXI9JExRRGF0YXsiWWVhck5leHQifTtNb250aD0kTFFEYXRheyJNb250aE5leHQifTtEYXk9JExRRGF0YXsiRGF5TmV4dCJ9O1VzZXJJRD0kTFFEYXRheyJVc2VySUQifSI+PC9hPgogICAgICAgICAgICAgICAgICAgICRRRGF0YXsiWWVhciJ9LSRRRGF0YXsiTW9udGgifS0kUURhdGF7IkRheSJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iRGF0ZVNlbGVjdGlvbiIgY2xhc3M9IlZhbGlkYXRlIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJWaWV3IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlVzZXJJRCIgICAgdmFsdWU9IiRRRGF0YXsiVXNlcklEIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgJERhdGF7IkRhdGVTZWxlY3Rpb24ifQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iYnV0dG9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiU3VibWl0In0iIC8+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiRGF0ZSJ9OiAkVGV4dHsiJERhdGF7IldlZWtkYXlfdG9fVGV4dCJ9In0gJFFEYXRheyJEYXRlIn08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSBEYXRhVGFibGVOb0hpZ2hsaWdodCI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlByb2plY3QifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlRhc2sifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlJlbWFyayJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiU3RhcnQifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IkVuZCJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiUGVyaW9kIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpVbml0IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFFEYXRheyJQcm9qZWN0In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRRRGF0YXsiQWN0aW9uIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRRRGF0YXsiUmVtYXJrIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+JFFEYXRheyJTdGFydFRpbWUifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij4kUURhdGF7IkVuZFRpbWUifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij4kUURhdGF7IlBlcmlvZCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6VW5pdCAtLT4KCjwhLS0gZHRsOmJsb2NrOlRvdGFsIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNCI+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3Ryb25nPiRUZXh0eyJUb3RhbCJ9Ojwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij48c3Ryb25nPiRRRGF0YXsiVG90YWwifTwvc3Ryb25nPjwvdGQ+CgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpUb3RhbCAtLT4KCjwhLS0gZHRsOmJsb2NrOk5vRGF0YUZvdW5kIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNiI+JFRleHR7Ik5vIGRhdGEgZm91bmQgZm9yIHRoaXMgZGF5LiJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Tm9EYXRhRm91bmQgLS0+CgogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgoKPCEtLSBkdGw6YmxvY2s6T3RoZXJUaW1lcyAtLT4KICAgICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiB2YWx1ZT0iLTIiIGlkPSJMZWF2ZURheSIgbmFtZT0iTGVhdmVEYXkiIHRpdGxlPSIkVGV4dHsiT24gdmFjYXRpb24ifSIgJERhdGF7IkxlYXZlRGF5In0gZGlzYWJsZWQgLz4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJMZWF2ZURheSI+JFRleHR7Ik9uIHZhY2F0aW9uIn08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgdmFsdWU9Ii0xIiBpZD0iU2ljayIgbmFtZT0iU2ljayIgdGl0bGU9IiRUZXh0eyJPbiBzaWNrIGxlYXZlIn0iICREYXRheyJTaWNrIn0gZGlzYWJsZWQgLz4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJTaWNrIj4kVGV4dHsiT24gc2ljayBsZWF2ZSJ9PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIHZhbHVlPSItMyIgaWQ9Ik92ZXJ0aW1lIiBuYW1lPSJPdmVydGltZSIgdGl0bGU9IiRUZXh0eyJPbiBvdmVydGltZSBsZWF2ZSJ9IiAkRGF0YXsiT3ZlcnRpbWUifSBkaXNhYmxlZCAvPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik92ZXJ0aW1lIj4kVGV4dHsiT24gb3ZlcnRpbWUgbGVhdmUifTwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6T3RoZXJUaW1lcyAtLT4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOlZhY2F0aW9uIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICA8cD4KICAgICAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJWYWNhdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlZhY2F0aW9uIC0tPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4K
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9Ob3RpZmljYXRpb25UaW1lQWNjb3VudGluZy5wbQojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5vdGlmaWNhdGlvblRpbWVBY2NvdW50aW5nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaW1lQWNjb3VudGluZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaW1lOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgZm9yIChxdyhDb25maWdPYmplY3QgTG9nT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBVc2VySUQpKSB7CiAgICAgICAgJFNlbGYtPnskX30gPSAkUGFyYW17JF99IHx8IGRpZSAiR290IG5vICRfISI7CiAgICB9CgogICAgJFNlbGYtPntUaW1lT2JqZWN0fSAgICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VGltZS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lQWNjb3VudGluZy0+bmV3KCVQYXJhbSk7CiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAoICRTZWMsICRNaW4sICRIb3VyLCAkRGF5LCAkTW9udGgsICRZZWFyICkKICAgICAgICA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSggU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCksICk7CiAgICBteSAlVXNlciA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyQ3VycmVudFBlcmlvZEdldCgKICAgICAgICBZZWFyICA9PiAkWWVhciwKICAgICAgICBNb250aCA9PiAkTW9udGgsCiAgICAgICAgRGF5ICAgPT4gJERheSwKICAgICk7CiAgICBpZiAoICRVc2VyeyAkU2VsZi0+e1VzZXJJRH0gfSApIHsKICAgICAgICBteSAlSW5jb21wbGV0ZVdvcmtpbmdEYXlzID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0NvbXBsZXRuZXNzQ2hlY2soKTsKCiAgICAgICAgIyByZWRpcmVjdCBpZiBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5IGFyZSBvdXQgb2YgcmFuZ2UKICAgICAgICBpZiAoICRJbmNvbXBsZXRlV29ya2luZ0RheXN7V2FybmluZ30gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgICAgIEluZm8gICAgID0+ICdQbGVhc2UgaW5zZXJ0IHlvdXIgd29ya2luZyBob3VycyEnLAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJwogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAnJzsKfQoKMTsK
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9Ub29sQmFySW5jb21wbGV0ZVdvcmtpbmdEYXlzLnBtCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6VG9vbEJhckluY29tcGxldGVXb3JraW5nRGF5czsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZUFjY291bnRpbmc7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgZ2V0IG5lZWRlZCBvYmplY3RzCiAgICBmb3IgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgREJPYmplY3QgVGlja2V0T2JqZWN0IFVzZXJPYmplY3QgR3JvdXBPYmplY3QgTGF5b3V0T2JqZWN0IFVzZXJJRCBUaW1lT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+eyRffSA9ICRQYXJhbXskX30gfHwgZGllICJHb3Qgbm8gJF8hIjsKICAgIH0KCiAgICAjIGNyZWF0ZSBuZWVkZWQgb2JqZWN0cwogICAgJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6VGltZUFjY291bnRpbmctPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZGVmaW5lIGFjdGlvbiwgZ3JvdXAsIGxhYmVsLCBpbWFnZSBhbmQgcHJpbwogICAgbXkgJEFjdGlvbiAgICA9ICdBZ2VudFRpbWVBY2NvdW50aW5nJzsKICAgIG15ICRTdWJhY3Rpb24gPSAnRWRpdCc7CiAgICBteSAkR3JvdXAgICAgID0gJ3RpbWVfYWNjb3VudGluZyc7CgogICAgIyBkbyBub3Qgc2hvdyBpY29uIGlmIGZyb250ZW5kIG1vZHVsZSBpcyBub3QgcmVnaXN0ZXJlZAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57JEFjdGlvbn07CgogICAgIyBnZXQgdGhlIGdyb3VwIGlkCiAgICBteSAkR3JvdXBJRCA9ICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cExvb2t1cCggR3JvdXAgPT4gJEdyb3VwICk7CgogICAgIyBkZW55IGFjY2Vzcywgd2hlbiB0aGUgZ3JvdXAgaXMgbm90IGZvdW5kCiAgICByZXR1cm4gaWYgISRHcm91cElEOwoKICAgICMgZ2V0IHVzZXIgZ3JvdXBzLCB3aGVyZSB0aGUgdXNlciBoYXMgdGhlIGFwcHJvcHJpYXRlIHByaXZpbGVnZQogICAgbXkgJUdyb3VwcyA9ICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBUeXBlICAgPT4gJ3J3JywKICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgKTsKCiAgICAjIGRlbnkgYWNjZXNzIGlmIHRoZSBhZ2VudCBkb2Vzbid0IGhhdmUgdGhlIGFwcHJvcHJpYXRlIHR5cGUgaW4gdGhlIGFwcHJvcHJpYXRlIGdyb3VwCiAgICByZXR1cm4gaWYgISRHcm91cHN7JEdyb3VwSUR9OwoKICAgIG15ICggJFNlYywgJE1pbiwgJEhvdXIsICREYXksICRNb250aCwgJFllYXIgKSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICk7CgogICAgbXkgJVVzZXJDdXJyZW50UGVyaW9kID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJDdXJyZW50UGVyaW9kR2V0KAogICAgICAgIFllYXIgID0+ICRZZWFyLAogICAgICAgIE1vbnRoID0+ICRNb250aCwKICAgICAgICBEYXkgICA9PiAkRGF5LAogICAgKTsKCiAgICAjIGRlbnkgYWNjZXNzLCBpZiB1c2VyIGhhcyBubyB2YWxpZCBwZXJpb2QKICAgIHJldHVybiBpZiAhJFVzZXJDdXJyZW50UGVyaW9keyAkU2VsZi0+e1VzZXJJRH0gfTsKCiAgICAjIGdldCB0aGUgbnVtYmVyIG9mIGluY29tcGxldGUgd29ya2luZyBkYXlzCiAgICBteSAkQ291bnQgICAgICAgICAgICAgICAgID0gMDsKICAgIG15ICVJbmNvbXBsZXRlV29ya2luZ0RheXMgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+V29ya2luZ1VuaXRzQ29tcGxldG5lc3NDaGVjaygpOwoKICAgIFlFQVJJRDoKICAgIGZvciBteSAkWWVhcklEICggc29ydCBrZXlzICV7ICRJbmNvbXBsZXRlV29ya2luZ0RheXN7SW5jb21wbGV0ZX0gfSApIHsKCiAgICAgICAgbmV4dCBZRUFSSUQgaWYgISRZZWFySUQ7CiAgICAgICAgbmV4dCBZRUFSSUQgaWYgISRJbmNvbXBsZXRlV29ya2luZ0RheXN7SW5jb21wbGV0ZX17JFllYXJJRH07CiAgICAgICAgbmV4dCBZRUFSSUQgaWYgcmVmICRJbmNvbXBsZXRlV29ya2luZ0RheXN7SW5jb21wbGV0ZX17JFllYXJJRH0gbmUgJ0hBU0gnOwoKICAgICAgICAjIGV4dHJhY3QgeWVhcgogICAgICAgIG15ICVZZWFyID0gJXsgJEluY29tcGxldGVXb3JraW5nRGF5c3tJbmNvbXBsZXRlfXskWWVhcklEfSB9OwoKICAgICAgICBNT05USDoKICAgICAgICBmb3IgbXkgJE1vbnRoSUQgKCBzb3J0IGtleXMgJVllYXIgKSB7CgogICAgICAgICAgICBuZXh0IE1PTlRIIGlmICEkTW9udGhJRDsKICAgICAgICAgICAgbmV4dCBNT05USCBpZiAhJFllYXJ7JE1vbnRoSUR9OwogICAgICAgICAgICBuZXh0IE1PTlRIIGlmIHJlZiAkWWVhcnskTW9udGhJRH0gbmUgJ0hBU0gnOwoKICAgICAgICAgICAgIyBleHRyYWN0IG1vbnRoCiAgICAgICAgICAgIG15ICVNb250aCA9ICV7ICRZZWFyeyRNb250aElEfSB9OwoKICAgICAgICAgICAgJENvdW50ICs9IHNjYWxhciBrZXlzICVNb250aDsKICAgICAgICB9CiAgICB9CgogICAgIyByZW1vdmUgY3VycmVudCBkYXkgYmVjYXVzZSBpdCBtYWtlcyBubyBzZW5zZSB0byBzaG93IHRoZSBjdXJyZW50IGRheSBhcyBpbmNvbXBsZXRlZAogICAgaWYgKCAkQ291bnQgPiAwICkgewogICAgICAgICRDb3VudC0tOwogICAgfQoKICAgICMgZ2V0IFRvb2xCYXIgb2JqZWN0IHBhcmFtZXRlcnMKICAgIG15ICRDbGFzcyA9ICRQYXJhbXtDb25maWd9LT57Q3NzQ2xhc3N9OwogICAgbXkgJFRleHQgID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0luY29tcGxldGUgd29ya2luZyBkYXlzJyk7CiAgICBteSAkVVJMICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntCYXNlbGlua307CiAgICBteSAkSWNvbiAgPSAkUGFyYW17Q29uZmlnfS0+e0ljb259OwoKICAgIHJldHVybiAoKSBpZiAhJENvdW50OwoKICAgIG15ICVSZXR1cm4gPSAoCiAgICAgICAgMTAwMDgxMCA9PiB7CiAgICAgICAgICAgIEJsb2NrICAgICAgID0+ICdUb29sQmFySXRlbScsCiAgICAgICAgICAgIERlc2NyaXB0aW9uID0+ICRUZXh0LAogICAgICAgICAgICBDb3VudCAgICAgICA9PiAkQ291bnQsCiAgICAgICAgICAgIENsYXNzICAgICAgID0+ICRDbGFzcywKICAgICAgICAgICAgSWNvbiAgICAgICAgPT4gJEljb24sCiAgICAgICAgICAgIExpbmsgICAgICAgID0+ICRVUkwgLiAnQWN0aW9uPScgLiAkQWN0aW9uIC4gJztTdWJhY3Rpb249JyAuICRTdWJhY3Rpb24sCiAgICAgICAgICAgIEFjY2Vzc0tleSAgID0+ICcnLAogICAgICAgICAgICB9CiAgICApOwoKICAgIHJldHVybiAlUmV0dXJuOwp9CgoxOwo=
Iy0tCiMgS2VybmVsL1N5c3RlbS9UaW1lQWNjb3VudGluZy5wbSAtIGFsbCB0aW1lIGFjY291bnRpbmcgZnVuY3Rpb25zCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6VGltZUFjY291bnRpbmc7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRGF0ZTo6UGNhbGMgcXcoVG9kYXkgRGF5c19pbl9Nb250aCBEYXlfb2ZfV2VlayBjaGVja19kYXRlKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6VGltZUFjY291bnRpbmcgLSB0aW1lIGFjY291bnRpbmcgbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCB0aW1lIGFjY291bnRpbmcgZnVuY3Rpb25zCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpDb25maWc7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkVuY29kZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TG9nOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpNYWluOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpEQjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VXNlcjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZUFjY291bnRpbmc7CgogICAgbXkgJENvbmZpZ09iamVjdCA9IEtlcm5lbDo6Q29uZmlnLT5uZXcoKTsKICAgIG15ICRFbmNvZGVPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICApOwogICAgbXkgJExvZ09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpMb2ctPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICk7CiAgICBteSAkTWFpbk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpNYWluLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICApOwogICAgbXkgJERCT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRUaW1lT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlRpbWUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkVXNlck9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpVc2VyLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgICAgIFRpbWVPYmplY3QgICA9PiAkVGltZU9iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgKTsKICAgIG15ICRUaW1lQWNjb3VudGluZ09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lQWNjb3VudGluZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgICAgIERCT2JqZWN0ICAgICA9PiAkREJPYmplY3QsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEyMywKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICAgICAgVGltZU9iamVjdCAgID0+ICRUaW1lT2JqZWN0LAogICAgICAgIFVzZXJPYmplY3QgICA9PiAkVXNlck9iamVjdCwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhEQk9iamVjdCBDb25maWdPYmplY3QgTG9nT2JqZWN0IFVzZXJJRCBUaW1lT2JqZWN0IFVzZXJPYmplY3QgTWFpbk9iamVjdCkpIHsKICAgICAgICAkU2VsZi0+eyRPYmplY3R9ID0gJFBhcmFteyRPYmplY3R9IHx8IGRpZSAiR290IG5vICRPYmplY3QhIjsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFVzZXJDdXJyZW50UGVyaW9kR2V0KCkKCnJldHVybnMgYSBoYXNoIHdpdGggdGhlIGN1cnJlbnQgcGVyaW9kIGRhdGEgb2YgdGhlIHNwZWNpZmllZCB1c2VyCgogICAgbXkgJVVzZXJEYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyQ3VycmVudFBlcmlvZEdldCgKICAgICAgICBZZWFyICA9PiAnMjAwNScsCiAgICAgICAgTW9udGggPT4gJzEyJywKICAgICAgICBEYXkgICA9PiAnMjQnLAogICAgKTsKClRoZSByZXR1cm5lZCBoYXNoIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6CgogICAgJVVzZXJEYXRhID0gKAogICAgICAgIDEgPT4gewogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICBQZXJpb2QgICAgICA9PiAxMjMsCiAgICAgICAgICAgIERhdGVTdGFydCAgID0+ICcyMDA1LTEyLTI0JywKICAgICAgICAgICAgRGF0ZUVuZCAgICAgPT4gJzIwMDUtMTItMjQnLAogICAgICAgICAgICBXZWVrbHlIb3VycyA9PiA0MC40LAogICAgICAgICAgICBMZWF2ZURheXMgICA9PiAxMiwKICAgICAgICAgICAgT3ZlclRpbWUgICAgPT4gMzQsCiAgICAgICAgfSwKICAgICk7Cgo9Y3V0CgpzdWIgVXNlckN1cnJlbnRQZXJpb2RHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBwYXJhbXMKICAgIGZvciBteSAkTmVlZGVkUGFyYW0gKHF3KFllYXIgTW9udGggRGF5KSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkUGFyYW19ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVXNlckN1cnJlbnRQZXJpb2RHZXQ6IE5lZWQgJE5lZWRlZFBhcmFtISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBidWlsZCBkYXRlIHN0cmluZyBmb3IgZ2l2ZW4gcGFyYW1zCiAgICBteSAkRGF0ZSA9IHNwcmludGYoICIlMDRkLSUwMmQtJTAyZCIsICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgJFBhcmFte0RheX0gKSAuICcgMDA6MDA6MDAnOwoKICAgICMgY2hlY2sgY2FjaGUKICAgIGlmICggJFNlbGYtPnsnQ2FjaGU6OlVzZXJDdXJyZW50UGVyaW9kR2V0J317JERhdGV9ICkgewogICAgICAgIHJldHVybiAleyAkU2VsZi0+eydDYWNoZTo6VXNlckN1cnJlbnRQZXJpb2RHZXQnfXskRGF0ZX0gfTsKICAgIH0KCiAgICAjIGRiIHNlbGVjdAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCB1c2VyX2lkLCBwcmVmZXJlbmNlX3BlcmlvZCwgZGF0ZV9zdGFydCwgZGF0ZV9lbmQsICcKICAgICAgICAgICAgLiAnd2Vla2x5X2hvdXJzLCBsZWF2ZV9kYXlzLCBvdmVydGltZSAnCiAgICAgICAgICAgIC4gJ0ZST00gdGltZV9hY2NvdW50aW5nX3VzZXJfcGVyaW9kICcKICAgICAgICAgICAgLiAnV0hFUkUgZGF0ZV9zdGFydCA8PSA/IEFORCBkYXRlX2VuZCAgPj0gPyAnCiAgICAgICAgICAgIC4gJ0FORCBzdGF0dXMgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCREYXRlLCBcJERhdGUsIFwxLCBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSBkYXRhCiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJFVzZXJSZWYgPSB7CiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRSb3dbMF0sCiAgICAgICAgICAgIFBlcmlvZCAgICAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIERhdGVTdGFydCAgID0+IHN1YnN0ciggJFJvd1syXSwgMCwgMTAgKSwKICAgICAgICAgICAgRGF0ZUVuZCAgICAgPT4gc3Vic3RyKCAkUm93WzNdLCAwLCAxMCApLAogICAgICAgICAgICBXZWVrbHlIb3VycyA9PiAkUm93WzRdLAogICAgICAgICAgICBMZWF2ZURheXMgICA9PiAkUm93WzVdLAogICAgICAgICAgICBPdmVydGltZSAgICA9PiAkUm93WzZdLAogICAgICAgIH07CiAgICAgICAgJERhdGF7ICRSb3dbMF0gfSA9ICRVc2VyUmVmOwogICAgfQoKICAgICMgY2hlY2sgZm9yIHZhbGlkIHVzZXIgZGF0YQogICAgcmV0dXJuIGlmICElRGF0YTsKCiAgICAjIHN0b3JlIHVzZXIgZGF0YSBpbiBjYWNoZQogICAgJFNlbGYtPnsnQ2FjaGU6OlVzZXJDdXJyZW50UGVyaW9kR2V0J317JERhdGV9ID0gXCVEYXRhOwoKICAgIHJldHVybiAlRGF0YTsKfQoKPWl0ZW0gVXNlclJlcG9ydGluZygpCgpyZXR1cm5zIGEgaGFzaCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGxlYXZlZGF5cywgb3ZlcnRpbWVzLAp3b3JraW5naG91cnMgZXRjLiBvZiBhbGwgdXNlcnMKCiAgICBteSAlRGF0YSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+VXNlclJlcG9ydGluZygKICAgICAgICBZZWFyICA9PiAnMjAwNScsCiAgICAgICAgTW9udGggPT4gJzEyJywKICAgICAgICBEYXkgICA9PiAnMTInLCAgICAgICMgT3B0aW9uYWwKICAgICk7Cgo9Y3V0CgpzdWIgVXNlclJlcG9ydGluZyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHBhcmFtcwogICAgZm9yIG15ICROZWVkZWRQYXJhbSAocXcoWWVhciBNb250aCBEYXkpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWRQYXJhbX0gJiYgJE5lZWRlZFBhcmFtIG5lICdEYXknICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVXNlclJlcG9ydGluZzogTmVlZCAkTmVlZGVkUGFyYW0hIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgdmFsaWQgZGF0ZSB2YWx1ZXMKICAgIHJldHVybiBpZiAhY2hlY2tfZGF0ZSggJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9LCAkUGFyYW17RGF5fSB8fCAxICk7CgogICAgIyBnZXQgZGF5cyBvZiBtb250aCBpZiBub3QgcHJvdmlkZWQKICAgICRQYXJhbXtEYXl9IHx8PSBEYXlzX2luX01vbnRoKCAkUGFyYW17WWVhcn0sICRQYXJhbXtNb250aH0gKTsKCiAgICBteSAlVXNlckN1cnJlbnRQZXJpb2QgPSAkU2VsZi0+VXNlckN1cnJlbnRQZXJpb2RHZXQoJVBhcmFtKTsKICAgIG15ICRZZWFyU3RhcnQgICAgICAgICA9IDE5NzA7CiAgICBteSAkTW9udGhTdGFydCAgICAgICAgPSAxOwogICAgbXkgJERheVN0YXJ0ICAgICAgICAgID0gMTsKICAgIG15ICRZZWFyRW5kICAgICAgICAgICA9ICRQYXJhbXtZZWFyfTsKICAgIG15ICRNb250aEVuZCAgICAgICAgICA9ICRQYXJhbXtNb250aH07CiAgICBteSAkRGF5RW5kICAgICAgICAgICAgPSAkUGFyYW17RGF5fTsKCiAgICBteSAlRGF0YTsKCiAgICBVU0VSSUQ6CiAgICBmb3IgbXkgJFVzZXJJRCAoIHNvcnQga2V5cyAlVXNlckN1cnJlbnRQZXJpb2QgKSB7CgogICAgICAgIGlmICggJFVzZXJDdXJyZW50UGVyaW9keyRVc2VySUR9e0RhdGVTdGFydH0gPX4gbXsgXEEgKFxkezR9KS0oXGR7Mn0pLShcZHsyfSkgfXhtcyApIHsKICAgICAgICAgICAgJFllYXJTdGFydCAgPSAkMTsKICAgICAgICAgICAgJE1vbnRoU3RhcnQgPSAkMjsKICAgICAgICAgICAgJERheVN0YXJ0ICAgPSAkMzsKICAgICAgICB9CgogICAgICAgIGlmICggIWNoZWNrX2RhdGUoICRZZWFyU3RhcnQsICRNb250aFN0YXJ0LCAkRGF5U3RhcnQgKSApIHsKCiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnVXNlclJlcG9ydGluZzogSW52YWxpZCBzdGFydCBkYXRlIGZvciB1c2VyICcKICAgICAgICAgICAgICAgICAgICAuICIkVXNlcklEOiAkVXNlckN1cnJlbnRQZXJpb2R7JFVzZXJJRH17RGF0ZVN0YXJ0fSIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFVTRVJJRDsKICAgICAgICB9CgogICAgICAgIG15ICVDdXJyZW50VXNlckRhdGEgPSAoCiAgICAgICAgICAgIExlYXZlRGF0ZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU2ljayAgICAgICAgICAgICA9PiAwLAogICAgICAgICAgICBPdmVydGltZSAgICAgICAgID0+IDAsCiAgICAgICAgICAgIFRhcmdldFN0YXRlICAgICAgPT4gMCwKICAgICAgICAgICAgTGVhdmVEYXlUb3RhbCAgICA9PiAwLAogICAgICAgICAgICBTaWNrVG90YWwgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNpY2tUb3RhbCAgICAgICAgPT4gMCwKICAgICAgICAgICAgVGFyZ2V0U3RhdGVUb3RhbCA9PiAwLAogICAgICAgICk7CgogICAgICAgIG15ICRDYWxlbmRhciA9IHsgJFNlbGYtPlVzZXJHZXQoIFVzZXJJRCA9PiAkVXNlcklEICkgfS0+e0NhbGVuZGFyfTsKCiAgICAgICAgWUVBUjoKICAgICAgICBmb3IgbXkgJFllYXIgKCAkWWVhclN0YXJ0IC4uICRZZWFyRW5kICkgewoKICAgICAgICAgICAgbXkgJE1vbnRoU3RhcnRQb2ludCA9ICRZZWFyID09ICRZZWFyU3RhcnQgPyAkTW9udGhTdGFydCA6IDE7CiAgICAgICAgICAgIG15ICRNb250aEVuZFBvaW50ICAgPSAkWWVhciA9PSAkWWVhckVuZCAgID8gJE1vbnRoRW5kICAgOiAxMjsKCiAgICAgICAgICAgIE1PTlRIOgogICAgICAgICAgICBmb3IgbXkgJE1vbnRoICggJE1vbnRoU3RhcnRQb2ludCAuLiAkTW9udGhFbmRQb2ludCApIHsKCiAgICAgICAgICAgICAgICBteSAkRGF5U3RhcnRQb2ludCA9CiAgICAgICAgICAgICAgICAgICAgJFllYXIgPT0gJFllYXJTdGFydCAmJiAkTW9udGggPT0gJE1vbnRoU3RhcnQKICAgICAgICAgICAgICAgICAgICA/ICREYXlTdGFydAogICAgICAgICAgICAgICAgICAgIDogMQogICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICBteSAkRGF5RW5kUG9pbnQgPQogICAgICAgICAgICAgICAgICAgICRZZWFyID09ICRZZWFyRW5kICYmICRNb250aCA9PSAkTW9udGhFbmQKICAgICAgICAgICAgICAgICAgICA/ICREYXlFbmQKICAgICAgICAgICAgICAgICAgICA6IERheXNfaW5fTW9udGgoICRZZWFyLCAkTW9udGggKQogICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICBEQVk6CiAgICAgICAgICAgICAgICBmb3IgbXkgJERheSAoICREYXlTdGFydFBvaW50IC4uICREYXlFbmRQb2ludCApIHsKCiAgICAgICAgICAgICAgICAgICAgbXkgJVdvcmtpbmdVbml0ID0gJFNlbGYtPldvcmtpbmdVbml0c0dldCgKICAgICAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+ICRZZWFyLAogICAgICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gJE1vbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gJERheSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJExlYXZlRGF5ICAgID0gMDsKICAgICAgICAgICAgICAgICAgICBteSAkU2ljayAgICAgICAgPSAwOwogICAgICAgICAgICAgICAgICAgIG15ICRPdmVydGltZSAgICA9IDA7CiAgICAgICAgICAgICAgICAgICAgbXkgJFRhcmdldFN0YXRlID0gMDsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkV29ya2luZ1VuaXR7TGVhdmVEYXl9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ3VycmVudFVzZXJEYXRhe0xlYXZlRGF5VG90YWx9Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICRMZWF2ZURheSA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJFdvcmtpbmdVbml0e1NpY2t9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ3VycmVudFVzZXJEYXRhe1NpY2tUb3RhbH0rKzsKICAgICAgICAgICAgICAgICAgICAgICAgJFNpY2sgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRXb3JraW5nVW5pdHtPdmVydGltZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDdXJyZW50VXNlckRhdGF7T3ZlcnRpbWVUb3RhbH0rKzsKICAgICAgICAgICAgICAgICAgICAgICAgJE92ZXJ0aW1lID0gMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRDdXJyZW50VXNlckRhdGF7V29ya2luZ0hvdXJzVG90YWx9ICs9ICRXb3JraW5nVW5pdHtUb3RhbH07CiAgICAgICAgICAgICAgICAgICAgbXkgJFZhY2F0aW9uQ2hlY2sgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5WYWNhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgICAgICAgICBZZWFyICAgICA9PiAkWWVhciwKICAgICAgICAgICAgICAgICAgICAgICAgTW9udGggICAgPT4gJE1vbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBEYXkgICAgICA9PiAkRGF5LAogICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhciA9PiAkQ2FsZW5kYXIgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBteSAkV2Vla2RheSA9IERheV9vZl9XZWVrKCAkWWVhciwgJE1vbnRoLCAkRGF5ICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkV2Vla2RheSAhPSA2CiAgICAgICAgICAgICAgICAgICAgICAgICYmICRXZWVrZGF5ICE9IDcKICAgICAgICAgICAgICAgICAgICAgICAgJiYgISRWYWNhdGlvbkNoZWNrCiAgICAgICAgICAgICAgICAgICAgICAgICYmICEkU2ljawogICAgICAgICAgICAgICAgICAgICAgICAmJiAhJExlYXZlRGF5CiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDdXJyZW50VXNlckRhdGF7VGFyZ2V0U3RhdGVUb3RhbH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9ICRVc2VyQ3VycmVudFBlcmlvZHskVXNlcklEfXtXZWVrbHlIb3Vyc30gLyA1OwogICAgICAgICAgICAgICAgICAgICAgICAkVGFyZ2V0U3RhdGUgPSAkVXNlckN1cnJlbnRQZXJpb2R7JFVzZXJJRH17V2Vla2x5SG91cnN9IC8gNTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICggJE1vbnRoID09ICRNb250aEVuZCAmJiAkWWVhciA9PSAkWWVhckVuZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEN1cnJlbnRVc2VyRGF0YXtUYXJnZXRTdGF0ZX0gICs9ICRUYXJnZXRTdGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgJEN1cnJlbnRVc2VyRGF0YXtXb3JraW5nSG91cnN9ICs9ICRXb3JraW5nVW5pdHtUb3RhbH07CiAgICAgICAgICAgICAgICAgICAgICAgICRDdXJyZW50VXNlckRhdGF7TGVhdmVEYXl9ICAgICArPSAkTGVhdmVEYXk7CiAgICAgICAgICAgICAgICAgICAgICAgICRDdXJyZW50VXNlckRhdGF7U2lja30gICAgICAgICArPSAkU2ljazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRDdXJyZW50VXNlckRhdGF7T3ZlcnRpbWV9ID0gJEN1cnJlbnRVc2VyRGF0YXtXb3JraW5nSG91cnN9IC0gJEN1cnJlbnRVc2VyRGF0YXtUYXJnZXRTdGF0ZX07CiAgICAgICAgJEN1cnJlbnRVc2VyRGF0YXtPdmVydGltZVRvdGFsfQogICAgICAgICAgICA9ICRVc2VyQ3VycmVudFBlcmlvZHskVXNlcklEfXtPdmVydGltZX0KICAgICAgICAgICAgKyAkQ3VycmVudFVzZXJEYXRhe1dvcmtpbmdIb3Vyc1RvdGFsfQogICAgICAgICAgICAtICRDdXJyZW50VXNlckRhdGF7VGFyZ2V0U3RhdGVUb3RhbH07CiAgICAgICAgJEN1cnJlbnRVc2VyRGF0YXtPdmVydGltZVVudGlsfQogICAgICAgICAgICA9ICRDdXJyZW50VXNlckRhdGF7T3ZlcnRpbWVUb3RhbH0gLSAkQ3VycmVudFVzZXJEYXRhe092ZXJ0aW1lfTsKICAgICAgICAkQ3VycmVudFVzZXJEYXRhe0xlYXZlRGF5UmVtYWluaW5nfQogICAgICAgICAgICA9ICRVc2VyQ3VycmVudFBlcmlvZHskVXNlcklEfXtMZWF2ZURheXN9IC0gJEN1cnJlbnRVc2VyRGF0YXtMZWF2ZURheVRvdGFsfTsKCiAgICAgICAgJERhdGF7JFVzZXJJRH0gPSBcJUN1cnJlbnRVc2VyRGF0YTsKICAgIH0KCiAgICByZXR1cm4gJURhdGE7Cn0KCj1pdGVtIFByb2plY3RTZXR0aW5nc0dldCgpCgpyZXR1cm5zIGEgaGFzaCB3aXRoIGFsbCB0aGUgcHJvamVjdHMnIGRhdGEKCiAgICBteSAlUHJvamVjdERhdGEgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlByb2plY3RTZXR0aW5nc0dldCgKICAgICAgICBTdGF0dXMgPT4gJ3ZhbGlkJyB8fCAnaW52YWxpZCcsIG9wdGlvbmFsIGRlZmF1bHQgdmFsaWQgJiYgaW52YWxpZAogICAgKTsKCj1jdXQKCnN1YiBQcm9qZWN0U2V0dGluZ3NHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkV2hlcmUgPSAnJzsKICAgIGlmICggJFBhcmFte1N0YXR1c30gKSB7CiAgICAgICAgJFdoZXJlID0gJyBXSEVSRSBzdGF0dXMgPSAnOwogICAgICAgICRXaGVyZSAuPSAkUGFyYW17U3RhdHVzfSBlcSAnaW52YWxpZCcgPyAiJzAnIiA6ICInMSciOwogICAgfQoKICAgICMgZGIgc2VsZWN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgcHJvamVjdCwgZGVzY3JpcHRpb24sIHN0YXR1cyAiCiAgICAgICAgICAgIC4gIkZST00gdGltZV9hY2NvdW50aW5nX3Byb2plY3QgJFdoZXJlIiwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgZGF0YQogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG15ICRJRCA9ICRSb3dbMF07CiAgICAgICAgJERhdGF7UHJvamVjdH17JElEfSAgICAgICAgICAgID0gJFJvd1sxXTsKICAgICAgICAkRGF0YXtQcm9qZWN0RGVzY3JpcHRpb259eyRJRH0gPSAkUm93WzJdOwogICAgICAgICREYXRhe1Byb2plY3RTdGF0dXN9eyRJRH0gICAgICA9ICRSb3dbM107CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBQcm9qZWN0R2V0KCkKCnJldHVybnMgYSBoYXNoIHdpdGggdGhlIHJlcXVlc3RlZCBwcm9qZWN0IGRhdGEKCiAgICBteSAlUHJvamVjdERhdGEgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlByb2plY3RHZXQoIElEID0+IDIgKTsKClRoaXMgcmV0dXJucyBzb21ldGhpbmcgbGlrZToKCiAgICAkVGltZUFjY291bnRpbmdPYmplY3QgPSAoCiAgICAgICAgUHJvamVjdCAgICAgICAgICAgID0+ICdpbnRlcm5hbCcsCiAgICAgICAgUHJvamVjdERlc2NyaXB0aW9uID0+ICdkZXNjcmlwdGlvbicsCiAgICAgICAgUHJvamVjdFN0YXR1cyAgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgbXkgJVByb2plY3REYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Qcm9qZWN0R2V0KCBQcm9qZWN0ID0+ICdpbnRlcm5hbCcgKTsKClRoaXMgcmV0dXJucyBzb21ldGhpbmcgbGlrZToKCiAgICAkVGltZUFjY291bnRpbmdPYmplY3QgPSAoCiAgICAgICAgSUQgICAgICAgICAgICAgICAgID0+IDIsCiAgICAgICAgUHJvamVjdERlc2NyaXB0aW9uID0+ICdkZXNjcmlwdGlvbicsCiAgICAgICAgUHJvamVjdFN0YXR1cyAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFByb2plY3RHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0lEfSAmJiAhJFBhcmFte1Byb2plY3R9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKCBQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICdOZWVkIElEIG9yIHByb2plY3QgbmFtZSEnICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICVQcm9qZWN0OwoKICAgICMgbG9vayBmb3IgdGhlIHRhc2sgZGF0YSB3aXRoIHRoZSBJRAogICAgaWYgKCAkUGFyYW17SUR9ICkgewoKICAgICAgICAjIHNxbAogICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIHByb2plY3QsIGRlc2NyaXB0aW9uLCBzdGF0dXMgJwogICAgICAgICAgICAgICAgLiAnRlJPTSB0aW1lX2FjY291bnRpbmdfcHJvamVjdCBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtJRH0gXSwKICAgICAgICApOwogICAgICAgIHdoaWxlICggbXkgQERhdGEgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAlUHJvamVjdCA9ICgKICAgICAgICAgICAgICAgIElEICAgICAgICAgICAgICAgICA9PiAkUGFyYW17SUR9LAogICAgICAgICAgICAgICAgUHJvamVjdCAgICAgICAgICAgID0+ICREYXRhWzBdLAogICAgICAgICAgICAgICAgUHJvamVjdERlc2NyaXB0aW9uID0+ICREYXRhWzFdLAogICAgICAgICAgICAgICAgUHJvamVjdFN0YXR1cyAgICAgID0+ICREYXRhWzJdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGxvb2sgZm9yIHRoZSB0YXNrIGRhdGEgd2l0aCB0aGUgdGFzayBuYW1lCiAgICBlbHNlIHsKCiAgICAgICAgIyBzcWwKICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgZGVzY3JpcHRpb24sIHN0YXR1cyAnCiAgICAgICAgICAgICAgICAuICdGUk9NIHRpbWVfYWNjb3VudGluZ19wcm9qZWN0IFdIRVJFIHByb2plY3QgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17UHJvamVjdH0gXSwKICAgICAgICApOwogICAgICAgIHdoaWxlICggbXkgQERhdGEgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAlUHJvamVjdCA9ICgKICAgICAgICAgICAgICAgIFByb2plY3QgICAgICAgICAgICA9PiAkUGFyYW17UHJvamVjdH0sCiAgICAgICAgICAgICAgICBJRCAgICAgICAgICAgICAgICAgPT4gJERhdGFbMF0sCiAgICAgICAgICAgICAgICBQcm9qZWN0RGVzY3JpcHRpb24gPT4gJERhdGFbMV0sCiAgICAgICAgICAgICAgICBQcm9qZWN0U3RhdHVzICAgICAgPT4gJERhdGFbMl0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlUHJvamVjdDsKfQoKPWl0ZW0gUHJvamVjdFNldHRpbmdzSW5zZXJ0KCkKCmluc2VydHMgYSBuZXcgcHJvamVjdCBpbiB0aGUgZGIKCiAgICAkVGltZUFjY291bnRpbmdPYmplY3QtPlByb2plY3RTZXR0aW5nc0luc2VydCgKICAgICAgICBQcm9qZWN0ICAgICAgICAgICAgPT4gJ2ludGVybmFsJywgICAgIyBvcHRpb25hbAogICAgICAgIFByb2plY3REZXNjcmlwdGlvbiA9PiAnZGVzY3JpcHRpb24nLCAjIG9wdGlvbmFsCiAgICAgICAgUHJvamVjdFN0YXR1cyAgICAgID0+IDEgfHwgMCwgICAgICAgICMgb3B0aW9uYWwKICAgICk7CgogICAgcmV0dXJucyBJRCBvZiBjcmVhdGVkIHByb2plY3QKCj1jdXQKCnN1YiBQcm9qZWN0U2V0dGluZ3NJbnNlcnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkUGFyYW17UHJvamVjdH0gfHw9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6RGVmYXVsdFByb2plY3ROYW1lJyk7CiAgICAkUGFyYW17UHJvamVjdERlc2NyaXB0aW9ufSB8fD0gJyc7CgogICAgaWYgKCAkUGFyYW17UHJvamVjdFN0YXR1c30gbmUgJzAnICYmICRQYXJhbXtQcm9qZWN0U3RhdHVzfSBuZSAnMScgKSB7CiAgICAgICAgJFBhcmFte1Byb2plY3RTdGF0dXN9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpEZWZhdWx0UHJvamVjdFN0YXR1cycpOwogICAgfQoKICAgICMgaW5zZXJ0IHByb2plY3QgcmVjb3JkCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHRpbWVfYWNjb3VudGluZ19wcm9qZWN0IChwcm9qZWN0LCBkZXNjcmlwdGlvbiwgc3RhdHVzKSAnCiAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPywgPywgPyknLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1Byb2plY3R9LCBcJFBhcmFte1Byb2plY3REZXNjcmlwdGlvbn0sIFwkUGFyYW17UHJvamVjdFN0YXR1c30gXSwKICAgICk7CgogICAgIyBnZXQgaWQgb2YgbmV3bHkgY3JlYXRlZCBwcm9qZWN0IHJlY29yZAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gdGltZV9hY2NvdW50aW5nX3Byb2plY3QgV0hFUkUgcHJvamVjdCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtQcm9qZWN0fSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15ICRQcm9qZWN0SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRQcm9qZWN0SUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkUHJvamVjdElEOwp9Cgo9aXRlbSBQcm9qZWN0U2V0dGluZ3NVcGRhdGUoKQoKdXBkYXRlcyBhIHByb2plY3QKCiAgICBteSAkU3VjY2VzcyA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+UHJvamVjdFNldHRpbmdzVXBkYXRlKAogICAgICAgIElEICAgICAgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgUHJvamVjdCAgICAgICAgICAgID0+ICdpbnRlcm5hbCcsCiAgICAgICAgUHJvamVjdERlc2NyaXB0aW9uID0+ICdkZXNjcmlwdGlvbicsCiAgICAgICAgUHJvamVjdFN0YXR1cyAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFByb2plY3RTZXR0aW5nc1VwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoSUQgUHJvamVjdCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKCBQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICJOZWVkICROZWVkZWQhIiApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc3FsCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSB0aW1lX2FjY291bnRpbmdfcHJvamVjdCBTRVQgcHJvamVjdCA9ID8sIGRlc2NyaXB0aW9uID0gPywgc3RhdHVzID0gPycKICAgICAgICAgICAgLiAnIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17UHJvamVjdH0sIFwkUGFyYW17UHJvamVjdERlc2NyaXB0aW9ufSwgXCRQYXJhbXtQcm9qZWN0U3RhdHVzfSwgXCRQYXJhbXtJRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIEFjdGlvblNldHRpbmdzR2V0KCkKCnJldHVybnMgYSBoYXNoIHdpdGggYWxsIHRoZSBhY3Rpb25zIHNldHRpbmdzCgogICAgbXkgJUFjdGlvbkRhdGEgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPkFjdGlvblNldHRpbmdzR2V0KCk7Cgo9Y3V0CgpzdWIgQWN0aW9uU2V0dGluZ3NHZXQgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIGRiIHNlbGVjdAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoIFNRTCA9PiAnU0VMRUNUIGlkLCBhY3Rpb24sIHN0YXR1cyBGUk9NIHRpbWVfYWNjb3VudGluZ19hY3Rpb24nLCApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9e0FjdGlvbn0gICAgICAgPSAkUm93WzFdOwogICAgICAgICREYXRheyAkUm93WzBdIH17QWN0aW9uU3RhdHVzfSA9ICRSb3dbMl07CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBBY3Rpb25HZXQoKQoKcmV0dXJucyBhIGhhc2ggd2l0aCB0aGUgcmVxdWVzdGVkIGFjdGlvbiAodGFzaykgZGF0YQoKICAgIG15ICVBY3Rpb25EYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5BY3Rpb25HZXQoIElEID0+IDIgKTsKClRoaXMgcmV0dXJucyBzb21ldGhpbmcgbGlrZToKCiAgICAkVGltZUFjY291bnRpbmdPYmplY3QgPSAoCiAgICAgICAgQWN0aW9uICAgICAgID0+ICdNeSB0YXNrJywKICAgICAgICBBY3Rpb25TdGF0dXMgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICBteSAlQWN0aW9uRGF0YSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+QWN0aW9uR2V0KCBBY3Rpb24gPT4gJ015IHRhc2snICk7CgpUaGlzIHJldHVybnMgc29tZXRoaW5nIGxpa2U6CgogICAgJFRpbWVBY2NvdW50aW5nT2JqZWN0ID0gKAogICAgICAgIElEICAgICAgICAgICA9PiAyLAogICAgICAgIEFjdGlvblN0YXR1cyA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBBY3Rpb25HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0lEfSAmJiAhJFBhcmFte0FjdGlvbn0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coIFByaW9yaXR5ID0+ICdlcnJvcicsIE1lc3NhZ2UgPT4gJ05lZWQgSUQgb3IgQWN0aW9uIScgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJVRhc2s7CgogICAgIyBsb29rIGZvciB0aGUgdGFzayBkYXRhIHdpdGggdGhlIElECiAgICBpZiAoICRQYXJhbXtJRH0gKSB7CgogICAgICAgICMgc3FsCiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgYWN0aW9uLCBzdGF0dXMgJwogICAgICAgICAgICAgICAgLiAnRlJPTSB0aW1lX2FjY291bnRpbmdfYWN0aW9uIFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0lEfSBdLAogICAgICAgICk7CiAgICAgICAgd2hpbGUgKCBteSBARGF0YSA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICVUYXNrID0gKAogICAgICAgICAgICAgICAgSUQgICAgICAgICAgID0+ICRQYXJhbXtJRH0sCiAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgPT4gJERhdGFbMF0sCiAgICAgICAgICAgICAgICBBY3Rpb25TdGF0dXMgPT4gJERhdGFbMV0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgbG9vayBmb3IgdGhlIHRhc2sgZGF0YSB3aXRoIHRoZSB0YXNrIG5hbWUKICAgIGVsc2UgewoKICAgICAgICAjIHNxbAogICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBzdGF0dXMgJwogICAgICAgICAgICAgICAgLiAnRlJPTSB0aW1lX2FjY291bnRpbmdfYWN0aW9uIFdIRVJFIGFjdGlvbiA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtBY3Rpb259IF0sCiAgICAgICAgKTsKICAgICAgICB3aGlsZSAoIG15IEBEYXRhID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJVRhc2sgPSAoCiAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgPT4gJFBhcmFte0FjdGlvbn0sCiAgICAgICAgICAgICAgICBJRCAgICAgICAgICAgPT4gJERhdGFbMF0sCiAgICAgICAgICAgICAgICBBY3Rpb25TdGF0dXMgPT4gJERhdGFbMV0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlVGFzazsKfQoKPWl0ZW0gQWN0aW9uU2V0dGluZ3NJbnNlcnQoKQoKaW5zZXJ0cyBhIG5ldyBhY3Rpb24gaW4gdGhlIGRiCgogICAgJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5BY3Rpb25TZXR0aW5nc0luc2VydCgKICAgICAgICBBY3Rpb24gICAgICAgPT4gJ21lZXRpbmcnLCAgICMgb3B0aW9uYWwKICAgICAgICBBY3Rpb25TdGF0dXMgPT4gMSB8fCAwLCAgICAgICMgb3B0aW9uYWwKICAgICk7Cgo9Y3V0CgpzdWIgQWN0aW9uU2V0dGluZ3NJbnNlcnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkUGFyYW17QWN0aW9ufSB8fD0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpEZWZhdWx0QWN0aW9uTmFtZScpIHx8ICcnOwogICAgaWYgKCAkUGFyYW17QWN0aW9uU3RhdHVzfSBuZSAnMCcgJiYgJFBhcmFte0FjdGlvblN0YXR1c30gbmUgJzEnICkgewogICAgICAgICRQYXJhbXtBY3Rpb25TdGF0dXN9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpEZWZhdWx0QWN0aW9uU3RhdHVzJyk7CiAgICB9CgogICAgIyBkYiBpbnNlcnQKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gdGltZV9hY2NvdW50aW5nX2FjdGlvbiAoYWN0aW9uLCBzdGF0dXMpICcKICAgICAgICAgICAgLiAnVkFMVUVTICg/LCA/KScsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17QWN0aW9ufSwgXCRQYXJhbXtBY3Rpb25TdGF0dXN9LCBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQWN0aW9uU2V0dGluZ3NVcGRhdGUoKQoKdXBkYXRlcyBhbiBhY3Rpb24gKHRhc2spCgogICAgbXkgJFN1Y2Nlc3MgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPkFjdGlvblNldHRpbmdzVXBkYXRlKAogICAgICAgIEFjdGlvbklEICAgICA9PiAxMjMsCiAgICAgICAgQWN0aW9uICAgICAgID0+ICdpbnRlcm5hbCcsCiAgICAgICAgQWN0aW9uU3RhdHVzID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFjdGlvblNldHRpbmdzVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhBY3Rpb25JRCBBY3Rpb24pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyggUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAiTmVlZCAkTmVlZGVkISIgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNxbAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICdVUERBVEUgdGltZV9hY2NvdW50aW5nX2FjdGlvbiBTRVQgYWN0aW9uID0gPywgc3RhdHVzID0gPycKICAgICAgICAgICAgLiAnIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17QWN0aW9ufSwgXCRQYXJhbXtBY3Rpb25TdGF0dXN9LCBcJFBhcmFte0FjdGlvbklEfQogICAgICAgIF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBVc2VyTGlzdCgpCgpyZXR1cm5zIGEgaGFzaCB3aXRoIHRoZSB1c2VyIGRhdGEgb2YgYWxsIHVzZXJzCgogICAgbXkgJVVzZXJEYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyTGlzdCgpOwoKPWN1dAoKc3ViIFVzZXJMaXN0IHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBkYiBzZWxlY3QKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PgogICAgICAgICAgICAnU0VMRUNUIHVzZXJfaWQsIGRlc2NyaXB0aW9uLCBzaG93X292ZXJ0aW1lLCBjcmVhdGVfcHJvamVjdCwgY2FsZW5kYXIgRlJPTSB0aW1lX2FjY291bnRpbmdfdXNlcicsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9e1VzZXJJRH0gICAgICAgID0gJFJvd1swXTsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9e0Rlc2NyaXB0aW9ufSAgID0gJFJvd1sxXTsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9e1Nob3dPdmVydGltZX0gID0gJFJvd1syXTsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9e0NyZWF0ZVByb2plY3R9ID0gJFJvd1szXTsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9e0NhbGVuZGFyfSAgICAgID0gJFJvd1s0XTsKICAgIH0KCiAgICByZXR1cm4gJURhdGE7Cn0KCj1pdGVtIFVzZXJHZXQoKQoKcmV0dXJucyBhIGhhc2ggd2l0aCB0aGUgdXNlciBkYXRhIG9mIG9uZSB1c2VyCgogICAgbXkgJVVzZXJEYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyR2V0KAogICAgICAgIFVzZXJJRCA9PiAxNSwKICAgICk7Cgo9Y3V0CgpzdWIgVXNlckdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIGRhdGEKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnVXNlckdldDogTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRiIHNlbGVjdAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+CiAgICAgICAgICAgICdTRUxFQ1QgZGVzY3JpcHRpb24sIHNob3dfb3ZlcnRpbWUsIGNyZWF0ZV9wcm9qZWN0LCBjYWxlbmRhciBGUk9NIHRpbWVfYWNjb3VudGluZ191c2VyIFdIRVJFIHVzZXJfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtVc2VySUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXtVc2VySUR9ICAgICAgICA9ICRQYXJhbXtVc2VySUR9OwogICAgICAgICREYXRhe0Rlc2NyaXB0aW9ufSAgID0gJFJvd1swXTsKICAgICAgICAkRGF0YXtTaG93T3ZlcnRpbWV9ICA9ICRSb3dbMV07CiAgICAgICAgJERhdGF7Q3JlYXRlUHJvamVjdH0gPSAkUm93WzJdOwogICAgICAgICREYXRhe0NhbGVuZGFyfSAgICAgID0gJFJvd1szXTsKICAgIH0KCiAgICByZXR1cm4gJURhdGE7Cn0KCj1pdGVtIFVzZXJTZXR0aW5nc0dldCgpCgpyZXR1cm5zIGEgaGFzaCB3aXRoIHRoZSBjb21wbGV0ZSB1c2VyIHBlcmlvZCBkYXRhIGZvciBhbGwgdXNlcnMKCiAgICBteSAlVXNlckRhdGEgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlVzZXJTZXR0aW5nc0dldCgpOwoKcmV0dXJuczoKICAgICVVc2VyRGF0YSA9ICgKICAgICAgICAzID0+IHsKICAgICAgICAgICAgMSA9PiB7CiAgICAgICAgICAgICAgICBEYXRlRW5kICAgICA9PiAiMjAxMi0xMi0zMSIsCiAgICAgICAgICAgICAgICBEYXRlU3RhcnQgICA9PiAiMjAxMi0xMC0wMSIsCiAgICAgICAgICAgICAgICBMZWF2ZURheXMgICA9PiAiMjMuMDAiLAogICAgICAgICAgICAgICAgT3ZlcnRpbWUgICAgPT4gIjAuMDAiLAogICAgICAgICAgICAgICAgUGVyaW9kICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDMsCiAgICAgICAgICAgICAgICBVc2VyU3RhdHVzICA9PiAxLAogICAgICAgICAgICAgICAgV2Vla2x5SG91cnMgPT4gIjQwLjAwIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgMiA9PiB7CiAgICAgICAgICAgICAgICBEYXRlRW5kICAgICA9PiAiMjAxMy0xMi0zMSIsCiAgICAgICAgICAgICAgICBEYXRlU3RhcnQgICA9PiAiMjAxMy0wMS0wMSIsCiAgICAgICAgICAgICAgICBMZWF2ZURheXMgICA9PiAiMjMuMDAiLAogICAgICAgICAgICAgICAgT3ZlcnRpbWUgICAgPT4gIjAuMDAiLAogICAgICAgICAgICAgICAgUGVyaW9kICAgICAgPT4gMiwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDMsCiAgICAgICAgICAgICAgICBVc2VyU3RhdHVzICA9PiAxLAogICAgICAgICAgICAgICAgV2Vla2x5SG91cnMgPT4gIjMyLjAwIiwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIDQgPT4gewogICAgICAgICAgICAxID0+IHsKICAgICAgICAgICAgICAgIERhdGVFbmQgICAgID0+ICIyMDEzLTEyLTMxIiwKICAgICAgICAgICAgICAgIERhdGVTdGFydCAgID0+ICIyMDEyLTAxLTAxIiwKICAgICAgICAgICAgICAgIExlYXZlRGF5cyAgID0+ICIyMy4wMCIsCiAgICAgICAgICAgICAgICBPdmVydGltZSAgICA9PiAiMC4wMCIsCiAgICAgICAgICAgICAgICBQZXJpb2QgICAgICA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gNCwKICAgICAgICAgICAgICAgIFVzZXJTdGF0dXMgID0+IDEsCiAgICAgICAgICAgICAgICBXZWVrbHlIb3VycyA9PiAiNDAuMDAiLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIFVzZXJTZXR0aW5nc0dldCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgZGIgc2VsZWN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4KICAgICAgICAgICAgJ1NFTEVDVCB1c2VyX2lkLCBwcmVmZXJlbmNlX3BlcmlvZCwgZGF0ZV9zdGFydCwgZGF0ZV9lbmQsIHdlZWtseV9ob3VycywgbGVhdmVfZGF5cywgb3ZlcnRpbWUsIHN0YXR1cwogICAgICAgICAgICAgICAgRlJPTSB0aW1lX2FjY291bnRpbmdfdXNlcl9wZXJpb2QnCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9eyAkUm93WzFdIH17VXNlcklEfSAgICAgID0gJFJvd1swXTsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9eyAkUm93WzFdIH17UGVyaW9kfSAgICAgID0gJFJvd1sxXTsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9eyAkUm93WzFdIH17RGF0ZVN0YXJ0fSAgID0gc3Vic3RyKCAkUm93WzJdLCAwLCAxMCApOwogICAgICAgICREYXRheyAkUm93WzBdIH17ICRSb3dbMV0gfXtEYXRlRW5kfSAgICAgPSBzdWJzdHIoICRSb3dbM10sIDAsIDEwICk7CiAgICAgICAgJERhdGF7ICRSb3dbMF0gfXsgJFJvd1sxXSB9e1dlZWtseUhvdXJzfSA9ICRSb3dbNF07CiAgICAgICAgJERhdGF7ICRSb3dbMF0gfXsgJFJvd1sxXSB9e0xlYXZlRGF5c30gICA9ICRSb3dbNV07CiAgICAgICAgJERhdGF7ICRSb3dbMF0gfXsgJFJvd1sxXSB9e092ZXJ0aW1lfSAgICA9ICRSb3dbNl07CiAgICAgICAgJERhdGF7ICRSb3dbMF0gfXsgJFJvd1sxXSB9e1VzZXJTdGF0dXN9ICA9ICRSb3dbN107CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBTaW5nbGVVc2VyU2V0dGluZ3NHZXQoKQoKcmV0dXJucyBhIGhhc2ggd2l0aCB0aGUgcmVxdWVzdGVkIHVzZXIncyBwZXJpb2QgZGF0YQoKICAgIG15ICVVc2VyRGF0YSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+U2luZ2xlVXNlclNldHRpbmdzR2V0KCBVc2VySUQgPT4gMSApOwoKPWN1dAoKc3ViIFNpbmdsZVVzZXJTZXR0aW5nc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyggUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAnTmVlZCBJRCEnICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGIgc2VsZWN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4KICAgICAgICAgICAgJ1NFTEVDVCB1c2VyX2lkLCBwcmVmZXJlbmNlX3BlcmlvZCwgZGF0ZV9zdGFydCwgZGF0ZV9lbmQsIHdlZWtseV9ob3VycywgbGVhdmVfZGF5cywgb3ZlcnRpbWUsIHN0YXR1cyAnCiAgICAgICAgICAgIC4gJ0ZST00gdGltZV9hY2NvdW50aW5nX3VzZXJfcGVyaW9kIFdIRVJFIHVzZXJfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtVc2VySUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15ICVVc2VyRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFVzZXJEYXRheyAkUm93WzFdIH17VXNlcklEfSAgICAgID0gJFJvd1swXTsKICAgICAgICAkVXNlckRhdGF7ICRSb3dbMV0gfXtQZXJpb2R9ICAgICAgPSAkUm93WzFdOwogICAgICAgICRVc2VyRGF0YXsgJFJvd1sxXSB9e0RhdGVTdGFydH0gICA9IHN1YnN0ciggJFJvd1syXSwgMCwgMTAgKTsKICAgICAgICAkVXNlckRhdGF7ICRSb3dbMV0gfXtEYXRlRW5kfSAgICAgPSBzdWJzdHIoICRSb3dbM10sIDAsIDEwICk7CiAgICAgICAgJFVzZXJEYXRheyAkUm93WzFdIH17V2Vla2x5SG91cnN9ID0gJFJvd1s0XTsKICAgICAgICAkVXNlckRhdGF7ICRSb3dbMV0gfXtMZWF2ZURheXN9ICAgPSAkUm93WzVdOwogICAgICAgICRVc2VyRGF0YXsgJFJvd1sxXSB9e092ZXJ0aW1lfSAgICA9ICRSb3dbNl07CiAgICAgICAgJFVzZXJEYXRheyAkUm93WzFdIH17VXNlclN0YXR1c30gID0gJFJvd1s3XTsKICAgIH0KCiAgICByZXR1cm4gJVVzZXJEYXRhOwp9Cgo9aXRlbSBVc2VyTGFzdFBlcmlvZE51bWJlckdldCgpCgpyZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgcmVnaXN0ZXJlZCBwZXJpb2QgZm9yIHRoZSBzcGVjaWZpZWQgdXNlcgoKICAgIG15ICRMYXN0UGVyaW9kTnVtYmVyID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyTGFzdFBlcmlvZE51bWJlckdldCggVXNlcklEID0+IDEgKTsKCj1jdXQKCnN1YiBVc2VyTGFzdFBlcmlvZE51bWJlckdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyggUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAnTmVlZCBVc2VySUQhJyApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRiIHNlbGVjdAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgbWF4KHByZWZlcmVuY2VfcGVyaW9kKSAnCiAgICAgICAgICAgIC4gJ0ZST00gdGltZV9hY2NvdW50aW5nX3VzZXJfcGVyaW9kIFdIRVJFIHVzZXJfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtVc2VySUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpOwogICAgbXkgJExhc3RQZXJpb2ROdW1iZXIgPSAkUm93WzBdIHx8IDA7CgogICAgcmV0dXJuICRMYXN0UGVyaW9kTnVtYmVyOwp9Cgo9aXRlbSBVc2VyU2V0dGluZ3NJbnNlcnQoKQoKaW5zZXJ0IG5ldyB1c2VyIGRhdGEgaW4gdGhlIGRiCgogICAgJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyU2V0dGluZ3NJbnNlcnQoCiAgICAgICAgVXNlcklEICAgICAgID0+ICcyJywKICAgICAgICBQZXJpb2QgICAgICAgPT4gJzInLAogICAgKTsKCj1jdXQKCnN1YiBVc2VyU2V0dGluZ3NJbnNlcnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3IChVc2VySUQgUGVyaW9kKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coIFByaW9yaXR5ID0+ICdlcnJvcicsIE1lc3NhZ2UgPT4gIk5lZWQgJE5lZWRlZCIgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHVzZXIgZXhpc3RzCiAgICBpZiAoICEkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTG9va3VwKCBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0gKSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlVzZXJJRCAkUGFyYW17VXNlcklEfSBkb2VzIG5vdCBleGlzdCEiCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJFBhcmFte1dlZWtseUhvdXJzfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6RGVmYXVsdFVzZXJXZWVrbHlIb3VycycpCiAgICAgICAgfHwgJzQwJzsKICAgICRQYXJhbXtMZWF2ZURheXN9ICA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6RGVmYXVsdFVzZXJMZWF2ZURheXMnKSB8fCAnMjUnOwogICAgJFBhcmFte1VzZXJTdGF0dXN9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpEZWZhdWx0VXNlclN0YXR1cycpICAgIHx8ICcxJzsKICAgICRQYXJhbXtPdmVydGltZX0gICA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6RGVmYXVsdFVzZXJPdmVydGltZScpICB8fCAnMCc7CiAgICAkUGFyYW17RGF0ZUVuZH0gICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGltZUFjY291bnRpbmc6OkRlZmF1bHRVc2VyRGF0ZUVuZCcpCiAgICAgICAgfHwgJzIwMTEtMTItMzEnOwogICAgJFBhcmFte0RhdGVTdGFydH0gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGltZUFjY291bnRpbmc6OkRlZmF1bHRVc2VyRGF0ZVN0YXJ0JykKICAgICAgICB8fCAnMjAxMS0wMS0wMSc7CiAgICAkUGFyYW17RGVzY3JpcHRpb259ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpEZWZhdWx0VXNlckRlc2NyaXB0aW9uJykKICAgICAgICB8fCAnUHV0IHlvdXIgZGVzY3JpcHRpb24gaGVyZS4nOwoKICAgICRQYXJhbXtEYXRlU3RhcnR9IC49ICcgMDA6MDA6MDAnOwogICAgJFBhcmFte0RhdGVFbmR9ICAgLj0gJyAwMDowMDowMCc7CgogICAgIyBkZWxldGUgY2FjaGUKICAgIGRlbGV0ZSAkU2VsZi0+eydDYWNoZTo6VXNlckN1cnJlbnRQZXJpb2RHZXQnfTsKCiAgICAjIGRiIGluc2VydAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+CiAgICAgICAgICAgICdJTlNFUlQgSU5UTyB0aW1lX2FjY291bnRpbmdfdXNlcl9wZXJpb2QgKHVzZXJfaWQsIHByZWZlcmVuY2VfcGVyaW9kLCBkYXRlX3N0YXJ0LCBkYXRlX2VuZCwnCiAgICAgICAgICAgIC4gJyB3ZWVrbHlfaG91cnMsIGxlYXZlX2RheXMsIG92ZXJ0aW1lLCBzdGF0dXMpJwogICAgICAgICAgICAuICcgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgICAgICBcJFBhcmFte1BlcmlvZH0sICAgIFwkUGFyYW17RGF0ZVN0YXJ0fSwgXCRQYXJhbXtEYXRlRW5kfSwKICAgICAgICAgICAgXCRQYXJhbXtXZWVrbHlIb3Vyc30sIFwkUGFyYW17TGVhdmVEYXlzfSwgXCRQYXJhbXtPdmVydGltZX0sICBcJFBhcmFte1VzZXJTdGF0dXN9LAogICAgICAgIF0sCiAgICApOwoKICAgICMgc2VsZWN0IHVzZXJpZAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCB1c2VyX2lkIEZST00gdGltZV9hY2NvdW50aW5nX3VzZXIgV0hFUkUgdXNlcl9pZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtVc2VySUR9LCBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15ICRVc2VySUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRVc2VySUQgPSAkUm93WzBdOwogICAgfQoKICAgIGlmICggIWRlZmluZWQgJFVzZXJJRCApIHsKCiAgICAgICAgIyBkYiBpbnNlcnQKICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyB0aW1lX2FjY291bnRpbmdfdXNlciAodXNlcl9pZCwgZGVzY3JpcHRpb24pJwogICAgICAgICAgICAgICAgLiAnIFZBTFVFUyAoPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte0Rlc2NyaXB0aW9ufSwgXSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBVc2VyU2V0dGluZ3NVcGRhdGUoKQoKdXBkYXRlcyB1c2VyIGRhdGEgaW4gdGhlIGRiCgogICAgJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyU2V0dGluZ3NVcGRhdGUoCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1NvbWUgVGV4dCcsCiAgICAgICAgQ3JlYXRlUHJvamVjdCA9PiAxIHx8IDAsCiAgICAgICAgU2hvd092ZXJ0aW1lICA9PiAxIHx8IDAsCiAgICAgICAgUGVyaW9kICAgICAgICA9PiB7CiAgICAgICAgICAgIDEgPT4gewogICAgICAgICAgICAgICAgRGF0ZVN0YXJ0ICAgID0+ICcyMDEwLTEyLTEyJywKICAgICAgICAgICAgICAgIERhdGVFbmQgICAgICA9PiAnMjAxMC0xMi0zMScsCiAgICAgICAgICAgICAgICBXZWVrbHlIb3VycyAgPT4gJzM4JywKICAgICAgICAgICAgICAgIExlYXZlRGF5cyAgICA9PiAnMjUnLAogICAgICAgICAgICAgICAgT3ZlcnRpbWUgICAgID0+ICczOCcsCiAgICAgICAgICAgICAgICBVc2VyU3RhdHVzICAgPT4gMSB8fCAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICAyID0+IHsKICAgICAgICAgICAgICAgIERhdGVTdGFydCAgICA9PiAnMjAxMC0xMi0xMicsCiAgICAgICAgICAgICAgICBEYXRlRW5kICAgICAgPT4gJzIwMTAtMTItMzEnLAogICAgICAgICAgICAgICAgV2Vla2x5SG91cnMgID0+ICczOCcsCiAgICAgICAgICAgICAgICBMZWF2ZURheXMgICAgPT4gJzI1JywKICAgICAgICAgICAgICAgIE92ZXJ0aW1lICAgICA9PiAnMzgnLAogICAgICAgICAgICAgICAgVXNlclN0YXR1cyAgID0+IDEgfHwgMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgMyA9PiAuLi4uLi4KICAgICAgICB9CiAgICApOwoKPWN1dAoKc3ViIFVzZXJTZXR0aW5nc1VwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZGVsZXRlIGNhY2hlCiAgICBkZWxldGUgJFNlbGYtPnsnQ2FjaGU6OlVzZXJDdXJyZW50UGVyaW9kR2V0J307CgogICAgbXkgJFVzZXJJRCA9ICRQYXJhbXtVc2VySUR9OwoKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1BlcmlvZH0tPnsxfXtEYXRlU3RhcnR9ICYmICFkZWZpbmVkICRQYXJhbXtQZXJpb2R9LT57MX17RGF0ZUVuZH0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVXNlclNldHRpbmdVcGRhdGU6IE5vIGRhdGEgZm9yIHVzZXIgaWQgJFVzZXJJRCEiCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlcwogICAgJFBhcmFte1Nob3dPdmVydGltZX0gIHx8PSAwOwogICAgJFBhcmFte0NyZWF0ZVByb2plY3R9IHx8PSAwOwogICAgJFBhcmFte0NhbGVuZGFyfSAgICAgIHx8PSAwOwoKICAgICMgZGIgaW5zZXJ0CiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSB0aW1lX2FjY291bnRpbmdfdXNlciAnCiAgICAgICAgICAgIC4gJyBTRVQgZGVzY3JpcHRpb24gPSA/LCBzaG93X292ZXJ0aW1lID0gPywgY3JlYXRlX3Byb2plY3QgPSA/LCBjYWxlbmRhciA9ID8nCiAgICAgICAgICAgIC4gJyBXSEVSRSB1c2VyX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17RGVzY3JpcHRpb259LCBcJFBhcmFte1Nob3dPdmVydGltZX0sCiAgICAgICAgICAgIFwkUGFyYW17Q3JlYXRlUHJvamVjdH0sIFwkUGFyYW17Q2FsZW5kYXJ9LCBcJFBhcmFte1VzZXJJRH0KICAgICAgICBdLAogICAgKTsKCiAgICAjIHVwZGF0ZSBhbGwgcGVyaW9kcwogICAgZm9yIG15ICRQZXJpb2QgKCBzb3J0IGtleXMgJXsgJFBhcmFte1BlcmlvZH0gfSApIHsKCiAgICAgICAgIyBkYiBpbnNlcnQKICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgU1FMID0+ICJVUERBVEUgdGltZV9hY2NvdW50aW5nX3VzZXJfcGVyaW9kICIKICAgICAgICAgICAgICAgIC4gIlNFVCBsZWF2ZV9kYXlzID0gPywgZGF0ZV9zdGFydCA9ID8iCiAgICAgICAgICAgICAgICAuICIsIGRhdGVfZW5kID0gPywgb3ZlcnRpbWUgPSA/IgogICAgICAgICAgICAgICAgLiAiLCB3ZWVrbHlfaG91cnMgPSA/LCBzdGF0dXMgPSA/ICIKICAgICAgICAgICAgICAgIC4gIldIRVJFIHVzZXJfaWQgPSA/IEFORCBwcmVmZXJlbmNlX3BlcmlvZCA9ID8iLAogICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgIFwkUGFyYW17UGVyaW9kfS0+eyRQZXJpb2R9e0xlYXZlRGF5c30sICAgXCRQYXJhbXtQZXJpb2R9LT57JFBlcmlvZH17RGF0ZVN0YXJ0fSwKICAgICAgICAgICAgICAgIFwkUGFyYW17UGVyaW9kfS0+eyRQZXJpb2R9e0RhdGVFbmR9LCAgICAgXCRQYXJhbXtQZXJpb2R9LT57JFBlcmlvZH17T3ZlcnRpbWV9LAogICAgICAgICAgICAgICAgXCRQYXJhbXtQZXJpb2R9LT57JFBlcmlvZH17V2Vla2x5SG91cnN9LCBcJFBhcmFte1BlcmlvZH0tPnskUGVyaW9kfXtVc2VyU3RhdHVzfSwKICAgICAgICAgICAgICAgIFwkVXNlcklELCBcJFBlcmlvZCwKICAgICAgICAgICAgICAgIF0KICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBXb3JraW5nVW5pdHNDb21wbGV0bmVzc0NoZWNrKCkKCnJldHVybnMgYSBoYXNoIHdpdGggdGhlIGluY29tcGxldGUgd29ya2luZyBkYXlzIGFuZAp0aGUgaW5mb3JtYXRpb24gaWYgdGhlIGluY29tcGxldGUgd29ya2luZyBkYXlzIGFyZSBpbiB0aGUgYWxsb3dlZApyYW5nZS4KCiAgICBteSAlV29ya2luZ1VuaXRzQ2hlY2sgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPldvcmtpbmdVbml0c0NvbXBsZXRuZXNzQ2hlY2soCiAgICAgICAgVXNlcklEID0+ICcyJywgICMgT3B0aW9uYWwKICAgICk7Cgo9Y3V0CgpzdWIgV29ya2luZ1VuaXRzQ29tcGxldG5lc3NDaGVjayB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVEYXRhICAgICAgICAgICAgICAgID0gKCk7CiAgICBteSAkV29ya2luZ1VuaXRJRCAgICAgICA9IDA7CiAgICBteSAlQ29tcGxldGVXb3JraW5nRGF5cyA9ICgpOwogICAgbXkgKCAkU2VjLCAkTWluLCAkSG91ciwgJERheSwgJE1vbnRoLCAkWWVhciApID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpLAogICAgKTsKCiAgICBteSAkVXNlcklEID0gJFBhcmFte1VzZXJJRH0gfHwgJFNlbGYtPntVc2VySUR9OwoKICAgICMgVE9ETzogU2VhcmNoIG9ubHkgaW4gdGhlIEN1cnJlbnRVc2VyUGVyaW9kCiAgICAjIFRPRE86IFNlYXJjaCBvbmx5IHdvcmtpbmcgdW5pdHMgd2hlcmUgYWN0aW9uX2lkIGFuZCBwcm9qZWN0X2lkIGlzIHRydWUKCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICJTRUxFQ1QgRElTVElOQ1QgdGltZV9zdGFydCBGUk9NIHRpbWVfYWNjb3VudGluZ190YWJsZSBXSEVSRSB1c2VyX2lkID0gPyIsCiAgICAgICAgQmluZCA9PiBbIFwkVXNlcklEIF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgaWYgKCAkUm93WzBdID1+IC9eKFxkKyktKFxkKyktKFxkKykvICkgewogICAgICAgICAgICAkQ29tcGxldGVXb3JraW5nRGF5c3skMX17JDJ9eyQzfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgIG15ICVVc2VyQ3VycmVudFBlcmlvZCA9ICRTZWxmLT5Vc2VyQ3VycmVudFBlcmlvZEdldCgKICAgICAgICBZZWFyICA9PiAkWWVhciwKICAgICAgICBNb250aCA9PiAkTW9udGgsCiAgICAgICAgRGF5ICAgPT4gJERheSwKICAgICk7CgogICAgbXkgJFdvcmtpbmdEYXlzID0gMDsKICAgIG15ICRZZWFyU3RhcnQgICA9IDE5NzA7CiAgICBteSAkTW9udGhTdGFydCAgPSAxOwogICAgbXkgJERheVN0YXJ0ICAgID0gMTsKICAgIG15ICRZZWFyRW5kICAgICA9ICRZZWFyOwogICAgbXkgJE1vbnRoRW5kICAgID0gJE1vbnRoOwogICAgbXkgJERheUVuZCAgICAgID0gJERheTsKCiAgICBpZiAoICRVc2VyQ3VycmVudFBlcmlvZHskVXNlcklEfXtEYXRlU3RhcnR9ID1+IC9eKFxkKyktKFxkKyktKFxkKykvICkgewogICAgICAgICRZZWFyU3RhcnQgID0gJDE7CiAgICAgICAgJE1vbnRoU3RhcnQgPSAkMjsKICAgICAgICAkRGF5U3RhcnQgICA9ICQzOwogICAgfQoKICAgIG15ICRDYWxlbmRhciA9IHsgJFNlbGYtPlVzZXJHZXQoIFVzZXJJRCA9PiAkVXNlcklEICkgfS0+e0NhbGVuZGFyfTsKCiAgICBmb3IgbXkgJFllYXIgKCAkWWVhclN0YXJ0IC4uICRZZWFyRW5kICkgewoKICAgICAgICBteSAkTW9udGhTdGFydFBvaW50ID0gJFllYXIgPT0gJFllYXJTdGFydCA/ICRNb250aFN0YXJ0IDogMTsKICAgICAgICBteSAkTW9udGhFbmRQb2ludCAgID0gJFllYXIgPT0gJFllYXJFbmQgICA/ICRNb250aEVuZCAgIDogMTI7CgogICAgICAgIGZvciBteSAkTW9udGggKCAkTW9udGhTdGFydFBvaW50IC4uICRNb250aEVuZFBvaW50ICkgewoKICAgICAgICAgICAgbXkgJERheVN0YXJ0UG9pbnQgPSAkWWVhciA9PSAkWWVhclN0YXJ0ICYmICRNb250aCA9PSAkTW9udGhTdGFydCA/ICREYXlTdGFydCA6IDE7CiAgICAgICAgICAgIG15ICREYXlFbmRQb2ludCA9ICRZZWFyID09ICRZZWFyRW5kCiAgICAgICAgICAgICAgICAmJiAkTW9udGggPT0gJE1vbnRoRW5kID8gJERheUVuZCA6IERheXNfaW5fTW9udGgoICRZZWFyLCAkTW9udGggKTsKICAgICAgICAgICAgbXkgJE1vbnRoU3RyaW5nID0gc3ByaW50ZiggIiUwMmQiLCAkTW9udGggKTsKCiAgICAgICAgICAgIGZvciBteSAkRGF5ICggJERheVN0YXJ0UG9pbnQgLi4gJERheUVuZFBvaW50ICkgewoKICAgICAgICAgICAgICAgIG15ICRWYWNhdGlvbkNoZWNrID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VmFjYXRpb25DaGVjaygKICAgICAgICAgICAgICAgICAgICBZZWFyICAgICA9PiAkWWVhciwKICAgICAgICAgICAgICAgICAgICBNb250aCAgICA9PiAkTW9udGgsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgICAgPT4gJERheSwKICAgICAgICAgICAgICAgICAgICBDYWxlbmRhciA9PiAkQ2FsZW5kYXIgfHwgJycsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICREYXRlID0gc3ByaW50ZiggIiUwNGQtJTAyZC0lMDJkIiwgJFllYXIsICRNb250aCwgJERheSApOwogICAgICAgICAgICAgICAgbXkgJERheVN0YXJ0VGltZQogICAgICAgICAgICAgICAgICAgID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoIFN0cmluZyA9PiAkRGF0ZSAuICcgMDA6MDA6MDAnICk7CiAgICAgICAgICAgICAgICBteSAkRGF5U3RvcFRpbWUKICAgICAgICAgICAgICAgICAgICA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKCBTdHJpbmcgPT4gJERhdGUgLiAnIDIzOjU5OjU5JyApOwoKICAgICAgICAgICAgICAgICMgYWRkIHRpbWUgem9uZSB0byBjYWxjdWxhdGlvbgogICAgICAgICAgICAgICAgbXkgJFpvbmUgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCggIlRpbWVab25lOjpDYWxlbmRhciIgLiAoICRDYWxlbmRhciB8fCAnJyApICk7CiAgICAgICAgICAgICAgICBpZiAoJFpvbmUpIHsKICAgICAgICAgICAgICAgICAgICBteSAkWm9uZVNlY29uZHMgPSAkWm9uZSAqIDYwICogNjA7CiAgICAgICAgICAgICAgICAgICAgJERheVN0YXJ0VGltZSA9ICREYXlTdGFydFRpbWUgLSAkWm9uZVNlY29uZHM7CiAgICAgICAgICAgICAgICAgICAgJERheVN0b3BUaW1lICA9ICREYXlTdG9wVGltZSAtICRab25lU2Vjb25kczsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSAkVGhpc0RheVdvcmtpbmdUaW1lID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+V29ya2luZ1RpbWUoCiAgICAgICAgICAgICAgICAgICAgU3RhcnRUaW1lID0+ICREYXlTdGFydFRpbWUsCiAgICAgICAgICAgICAgICAgICAgU3RvcFRpbWUgID0+ICREYXlTdG9wVGltZSwKICAgICAgICAgICAgICAgICAgICBDYWxlbmRhciAgPT4gJENhbGVuZGFyIHx8ICcnLAogICAgICAgICAgICAgICAgKSB8fCAnMCc7CgogICAgICAgICAgICAgICAgbXkgJERheVN0cmluZyA9IHNwcmludGYoICIlMDJkIiwgJERheSApOwoKICAgICAgICAgICAgICAgIGlmICggJFRoaXNEYXlXb3JraW5nVGltZSAmJiAhJFZhY2F0aW9uQ2hlY2sgKSB7CiAgICAgICAgICAgICAgICAgICAgJFdvcmtpbmdEYXlzKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgJFRoaXNEYXlXb3JraW5nVGltZQogICAgICAgICAgICAgICAgICAgICYmICEkVmFjYXRpb25DaGVjawogICAgICAgICAgICAgICAgICAgICYmICEkQ29tcGxldGVXb3JraW5nRGF5c3skWWVhcn17JE1vbnRoU3RyaW5nfXskRGF5U3RyaW5nfQogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtJbmNvbXBsZXRlfXskWWVhcn17JE1vbnRoU3RyaW5nfXskRGF5U3RyaW5nfSA9ICRXb3JraW5nRGF5czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIG15ICRNYXhJbnRlcnZhbGxPZkluY29tcGxldGVEYXlzCiAgICAgICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGltZUFjY291bnRpbmc6Ok1heEludGVydmFsT2ZJbmNvbXBsZXRlRGF5cycpIHx8ICc1JzsKICAgIG15ICRNYXhJbnRlcnZhbGxPZkluY29tcGxldGVEYXlzQmVmb3JlV2FybmluZwogICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpNYXhJbnRlcnZhbE9mSW5jb21wbGV0ZURheXNCZWZvcmVXYXJuaW5nJykKICAgICAgICB8fCAnMyc7CiAgICBmb3IgbXkgJFllYXIgKCBzb3J0IGtleXMgJXsgJERhdGF7SW5jb21wbGV0ZX0gfSApIHsKCiAgICAgICAgZm9yIG15ICRNb250aCAoIHNvcnQga2V5cyAleyAkRGF0YXtJbmNvbXBsZXRlfXskWWVhcn0gfSApIHsKCiAgICAgICAgICAgIGZvciBteSAkRGF5ICggc29ydCBrZXlzICV7ICREYXRhe0luY29tcGxldGV9eyRZZWFyfXskTW9udGh9IH0gKSB7CgogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICREYXRhe0luY29tcGxldGV9eyRZZWFyfXskTW9udGh9eyREYXl9CiAgICAgICAgICAgICAgICAgICAgPCAkV29ya2luZ0RheXMgLSAkTWF4SW50ZXJ2YWxsT2ZJbmNvbXBsZXRlRGF5cwogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtFbmZvcmNlSW5zZXJ0fSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAgICAgJERhdGF7SW5jb21wbGV0ZX17JFllYXJ9eyRNb250aH17JERheX0KICAgICAgICAgICAgICAgICAgICA8ICRXb3JraW5nRGF5cyAtICRNYXhJbnRlcnZhbGxPZkluY29tcGxldGVEYXlzQmVmb3JlV2FybmluZwogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtXYXJuaW5nfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBXb3JraW5nVW5pdHNHZXQoKQoKcmV0dXJucyBhIGhhc2ggd2l0aCB0aGUgd29ya2luZyB1bml0cyBkYXRhCgogICAgbXkgJVdvcmtpbmdVbml0c0RhdGEgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPldvcmtpbmdVbml0c0dldCgKICAgICAgICBZZWFyICAgPT4gJzIwMDUnLAogICAgICAgIE1vbnRoICA9PiAnNycsCiAgICAgICAgRGF5ICAgID0+ICcxMycsCiAgICAgICAgVXNlcklEID0+ICcyJywgICAgIyBPcHRpb25hbAogICAgKTsKCj1jdXQKCnN1YiBXb3JraW5nVW5pdHNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkUGFyYW17VXNlcklEfSB8fD0gJFNlbGYtPntVc2VySUR9OwoKICAgIG15ICREYXRlICAgICAgPSBzcHJpbnRmICIlMDRkLSUwMmQtJTAyZCIsICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgJFBhcmFte0RheX07CiAgICBteSAkRGF0ZVN0YXJ0ID0gJERhdGUgLiAiIDAwOjAwOjAwIjsKICAgIG15ICREYXRlU3RvcCAgPSAkRGF0ZSAuICIgMjM6NTk6NTkiOwoKICAgICMgYXNrIHRoZSBkYXRhYmFzZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgdXNlcl9pZCwgcHJvamVjdF9pZCwgYWN0aW9uX2lkLCByZW1hcmssIHRpbWVfc3RhcnQsIHRpbWVfZW5kLCBwZXJpb2QgJwogICAgICAgICAgICAuICdGUk9NIHRpbWVfYWNjb3VudGluZ190YWJsZSAnCiAgICAgICAgICAgIC4gJ1dIRVJFIHRpbWVfc3RhcnQgPj0gPyBBTkQgdGltZV9zdGFydCA8PSA/IEFORCB1c2VyX2lkID0gPyAnCiAgICAgICAgICAgIC4gJ09SREVSIGJ5IGlkJywKICAgICAgICBCaW5kID0+IFsgXCREYXRlU3RhcnQsIFwkRGF0ZVN0b3AsIFwkUGFyYW17VXNlcklEfSBdLAogICAgKTsKCiAgICBteSAlRGF0YSA9ICgKICAgICAgICBUb3RhbCA9PiAwLAogICAgICAgIERhdGUgID0+ICREYXRlLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIFJPVzoKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgIG5leHQgUk9XIGlmICRSb3dbNF0gIX4gbXteICguKz8pIFxzIChcZCs6XGQrKSA6IChcZCspIH14bXM7CgogICAgICAgICMgY2hlY2sgaWYgaXQgaXMgYSBzcGVjaWFsIHdvcmtpbmcgdW5pdAogICAgICAgIGlmICggJFJvd1sxXSA9PSAtMSApIHsKICAgICAgICAgICAgbXkgJEFjdGlvbklEID0gJFJvd1syXTsKCiAgICAgICAgICAgICREYXRhe1NpY2t9ICAgICA9ICRBY3Rpb25JRCA9PSAtMSA/IDEgOiAwOwogICAgICAgICAgICAkRGF0YXtMZWF2ZURheX0gPSAkQWN0aW9uSUQgPT0gLTIgPyAxIDogMDsKICAgICAgICAgICAgJERhdGF7T3ZlcnRpbWV9ID0gJEFjdGlvbklEID09IC0zID8gMSA6IDA7CgogICAgICAgICAgICBuZXh0IFJPVzsKICAgICAgICB9CgogICAgICAgIG15ICRTdGFydFRpbWUgPSAkMjsKICAgICAgICBteSAkRW5kVGltZSAgID0gJyc7CiAgICAgICAgaWYgKCAkUm93WzVdID1+IG17XiguKz8pXHMoXGQrOlxkKyk6KFxkKyl9eG1zICkgewogICAgICAgICAgICAkRW5kVGltZSA9ICQyOwoKICAgICAgICAgICAgIyByZXBsYWNlIDIzOjU5OjU5IHdpdGggMjQ6MDAKICAgICAgICAgICAgaWYgKCAkRW5kVGltZSBlcSAnMjM6NTknICYmICQzIGVxICc1OScgKSB7CiAgICAgICAgICAgICAgICAkRW5kVGltZSA9ICcyNDowMCc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICVXb3JraW5nVW5pdCA9ICgKICAgICAgICAgICAgVXNlcklEICAgID0+ICRSb3dbMF0sCiAgICAgICAgICAgIFByb2plY3RJRCA9PiAkUm93WzFdLAogICAgICAgICAgICBBY3Rpb25JRCAgPT4gJFJvd1syXSwKICAgICAgICAgICAgUmVtYXJrICAgID0+ICRSb3dbM10sCiAgICAgICAgICAgIFN0YXJ0VGltZSA9PiAkU3RhcnRUaW1lLAogICAgICAgICAgICBFbmRUaW1lICAgPT4gJEVuZFRpbWUsCiAgICAgICAgICAgIFBlcmlvZCAgICA9PiBkZWZpbmVkKCAkUm93WzZdICkgPyBzcHJpbnRmKCAiJS4yZiIsICRSb3dbNl0gKSA6IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBvbmx5IGNvdW50IGNvbXBsZXRlIHdvcmtpbmcgdW5pdHMKICAgICAgICBpZiAoICRSb3dbMV0gJiYgJFJvd1syXSApIHsKICAgICAgICAgICAgJERhdGF7VG90YWx9ICs9ICRXb3JraW5nVW5pdHtQZXJpb2R9OwogICAgICAgIH0KCiAgICAgICAgcHVzaCBAeyAkRGF0YXtXb3JraW5nVW5pdHN9IH0sIFwlV29ya2luZ1VuaXQ7CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBXb3JraW5nVW5pdHNJbnNlcnQoKQoKaW5zZXJ0IHdvcmtpbmcgdW5pdHMgaW4gdGhlIGRiCgogICAgJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Xb3JraW5nVW5pdHNJbnNlcnQoCiAgICAgICAgWWVhciAgPT4gJzIwMDUnLAogICAgICAgIE1vbnRoID0+ICcwNycsCiAgICAgICAgRGF5ICAgPT4gJzAyJywKICAgICAgICBMZWF2ZURheSA9PiAxLCB8fCAwCiAgICAgICAgU2ljayAgICAgPT4gMSwgfHwgMAogICAgICAgIE92ZXJ0aW1lID0+IDEsIHx8IDAKICAgICAgICBXb3JraW5nVW5pdHMgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBQcm9qZWN0SUQgPT4gMSwKICAgICAgICAgICAgICAgIEFjdGlvbklEICA9PiAyMywKICAgICAgICAgICAgICAgIFJlbWFyayAgICA9PiAnU29tZVRleHQnLAogICAgICAgICAgICAgICAgU3RhcnRUaW1lID0+ICc3OjMwJywKICAgICAgICAgICAgICAgIEVuZFRpbWUgICA9PiAnMTE6MDAnLAogICAgICAgICAgICAgICAgUGVyaW9kICAgID0+ICc4LjUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7IC4uLi4uLiB9LAogICAgICAgIF0KICAgICk7Cgo9Y3V0CgpzdWIgV29ya2luZ1VuaXRzSW5zZXJ0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgZm9yIChxdyhZZWFyIE1vbnRoIERheSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JF99ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiV29ya2luZ1VuaXRzSW5zZXJ0OiBOZWVkICRfISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRGF0ZSA9IHNwcmludGYgIiUwNGQtJTAyZC0lMDJkIiwgJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9LCAkUGFyYW17RGF5fTsKCiAgICAjIGFkZCBzcGVjaWFsIHRpbWUgd29ya2luZyB1bml0cwogICAgbXkgJVNwZWNpYWxBY3Rpb24gPSAoCiAgICAgICAgJ1NpY2snICAgICA9PiAnLTEnLAogICAgICAgICdMZWF2ZURheScgPT4gJy0yJywKICAgICAgICAnT3ZlcnRpbWUnID0+ICctMycsCiAgICApOwoKICAgIEVMRU1FTlQ6CiAgICBmb3IgbXkgJEVsZW1lbnQgKHF3KExlYXZlRGF5IFNpY2sgT3ZlcnRpbWUpKSB7CgogICAgICAgIG5leHQgRUxFTUVOVCBpZiAhJFBhcmFteyRFbGVtZW50fTsKCiAgICAgICAgbXkgJVVuaXQgPSAoCiAgICAgICAgICAgIFByb2plY3RJRCA9PiAtMSwKICAgICAgICAgICAgQWN0aW9uSUQgID0+ICRTcGVjaWFsQWN0aW9ueyRFbGVtZW50fSwKICAgICAgICAgICAgUmVtYXJrICAgID0+ICcnLAogICAgICAgICAgICBTdGFydFRpbWUgPT4gJycsCiAgICAgICAgICAgIEVuZFRpbWUgICA9PiAnJywKICAgICAgICAgICAgUGVyaW9kICAgID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAeyAkUGFyYW17V29ya2luZ1VuaXRzfSB9LCBcJVVuaXQ7CiAgICB9CgogICAgIyBpbnNlcnQgbmV3IHdvcmtpbmcgdW5pdHMKICAgIFVOSVRSRUY6CiAgICBmb3IgbXkgJFVuaXRSZWYgKCBAeyAkUGFyYW17V29ya2luZ1VuaXRzfSB9ICkgewoKICAgICAgICBteSAkU3RhcnRUaW1lID0gJERhdGUgLiAnICcgLiAkVW5pdFJlZi0+e1N0YXJ0VGltZX07CiAgICAgICAgbXkgJEVuZFRpbWUgICA9ICREYXRlIC4gJyAnIC4gJFVuaXRSZWYtPntFbmRUaW1lfTsKCiAgICAgICAgIyAnJyBkb2VzIG5vdCB3b3JrIGluIGludGVnZXIgZmllbGQgb2YgcG9zdGdyZXMKICAgICAgICAkVW5pdFJlZi0+e1Byb2plY3RJRH0gfHw9IDA7CiAgICAgICAgJFVuaXRSZWYtPntBY3Rpb25JRH0gIHx8PSAwOwogICAgICAgICRVbml0UmVmLT57UGVyaW9kfSAgICB8fD0gMDsKCiAgICAgICAgIyBidWlsZCBzcWwKICAgICAgICBteSAkU1FMID0gIklOU0VSVCBJTlRPIHRpbWVfYWNjb3VudGluZ190YWJsZSAiCiAgICAgICAgICAgIC4gIih1c2VyX2lkLCBwcm9qZWN0X2lkLCBhY3Rpb25faWQsIHJlbWFyaywiCiAgICAgICAgICAgIC4gIiB0aW1lX3N0YXJ0LCB0aW1lX2VuZCwgcGVyaW9kLCBjcmVhdGVkICkiCiAgICAgICAgICAgIC4gIiBWQUxVRVMgICggPywgPywgPywgPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXApIjsKICAgICAgICBteSAkQmluZCA9IFsKICAgICAgICAgICAgXCRTZWxmLT57VXNlcklEfSwgXCRVbml0UmVmLT57UHJvamVjdElEfSwgXCRVbml0UmVmLT57QWN0aW9uSUR9LAogICAgICAgICAgICBcJFVuaXRSZWYtPntSZW1hcmt9LCBcJFN0YXJ0VGltZSwgXCRFbmRUaW1lLCBcJFVuaXRSZWYtPntQZXJpb2R9LAogICAgICAgIF07CgogICAgICAgICMgZGIgaW5zZXJ0CiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oIFNRTCA9PiAkU1FMLCBCaW5kID0+ICRCaW5kICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFdvcmtpbmdVbml0c0RlbGV0ZSgpCgpkZWxldGVzIHdvcmtpbmcgdW5pdHMgaW4gdGhlIGRiCgogICAgJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Xb3JraW5nVW5pdHNEZWxldGUoCiAgICAgICAgWWVhciAgPT4gJzIwMDUnLAogICAgICAgIE1vbnRoID0+ICc3JywKICAgICAgICBEYXkgICA9PiAnMTMnLAogICAgKTsKCj1jdXQKCnN1YiBXb3JraW5nVW5pdHNEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBmb3IgKHF3KFllYXIgTW9udGggRGF5KSkgewogICAgICAgIGlmICggISRQYXJhbXskX30gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJXb3JraW5nVW5pdHNJbnNlcnQ6IE5lZWQgJF8hIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICREYXRlICAgICAgPSBzcHJpbnRmICIlMDRkLSUwMmQtJTAyZCIsICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgJFBhcmFte0RheX07CiAgICBteSAkU3RhcnRUaW1lID0gJERhdGUgLiAnIDAwOjAwOjAwJzsKICAgIG15ICRFbmRUaW1lICAgPSAkRGF0ZSAuICcgMjM6NTk6NTknOwoKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAnREVMRVRFIEZST00gdGltZV9hY2NvdW50aW5nX3RhYmxlJwogICAgICAgICAgICAuICcgV0hFUkUgdGltZV9zdGFydCA+PSA/JwogICAgICAgICAgICAuICcgQU5EIHRpbWVfc3RhcnQgPD0gPycKICAgICAgICAgICAgLiAnIEFORCB1c2VyX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkU3RhcnRUaW1lLCBcJEVuZFRpbWUsIFwkU2VsZi0+e1VzZXJJRH0sIF0sCiAgICApOwogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFByb2plY3RBY3Rpb25SZXBvcnRpbmcoKQoKcmV0dXJucyBhIGhhc2ggd2l0aCB0aGUgaG91cnMgZGVwZW5kZW50IHByb2plY3QgYW5kIGFjdGlvbiBkYXRhCgogICAgbXkgJVByb2plY3REYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Qcm9qZWN0QWN0aW9uUmVwb3J0aW5nKAogICAgICAgIFllYXIgID0+IDIwMDUsCiAgICAgICAgTW9udGggPT4gNywKICAgICAgICBVc2VySUQgPT4gMTIzLCAjIG9wdGlvbmFsOyBubyBVc2VySUQgbWVhbnMgJ29mIGFsbCB1c2VycycKICAgICk7Cgo9Y3V0CgpzdWIgUHJvamVjdEFjdGlvblJlcG9ydGluZyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhZZWFyIE1vbnRoKSkgewogICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRQYXJhbWV0ZXJ9ICkgfHwgJyc7CiAgICAgICAgaWYgKCAhJFBhcmFteyRQYXJhbWV0ZXJ9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiUHJvamVjdEFjdGlvblJlcG9ydGluZzogTmVlZCAkUGFyYW1ldGVyISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGhvdXJzIHBlciBtb250aAogICAgbXkgJERheXNJbk1vbnRoID0gRGF5c19pbl9Nb250aCggJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9ICk7CiAgICBteSAkRGF0ZVN0cmluZyA9ICRQYXJhbXtZZWFyfSAuICItIiAuIHNwcmludGYoICIlMDJkIiwgJFBhcmFte01vbnRofSApOwogICAgbXkgJFNRTERhdGUgPSAiJERhdGVTdHJpbmctJERheXNJbk1vbnRoIDIzOjU5OjU5IjsKCiAgICBteSAkU1FMID0gJ1NFTEVDVCBwcm9qZWN0X2lkLCBhY3Rpb25faWQsIHBlcmlvZAogICAgICAgIEZST00gdGltZV9hY2NvdW50aW5nX3RhYmxlCiAgICAgICAgV0hFUkUgcHJvamVjdF9pZCAhPSAtMQogICAgICAgIEFORCB0aW1lX3N0YXJ0IDw9ID8nOwogICAgbXkgQEJpbmQgPSAoIFwkU1FMRGF0ZSApOwoKICAgIGlmICggJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJFNRTCAuPSAnIEFORCB1c2VyX2lkID0gPyc7CiAgICAgICAgcHVzaCBAQmluZCwgXCRQYXJhbXtVc2VySUR9OwogICAgfQoKICAgICMgdG90YWwgaG91cnMKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICBCaW5kID0+IFxAQmluZCwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgZGF0YQogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICBuZXh0IGlmICEkUm93WzJdOwoKICAgICAgICAkRGF0YXsgJFJvd1swXSB9LT57QWN0aW9uc30tPnsgJFJvd1sxXSB9LT57VG90YWx9ICs9ICRSb3dbMl07CiAgICB9CgogICAgbXkgJFNRTERhdGVTdGFydCA9ICIkRGF0ZVN0cmluZy0wMSAwMDowMDowMCI7CgogICAgJFNRTCA9ICdTRUxFQ1QgcHJvamVjdF9pZCwgYWN0aW9uX2lkLCBwZXJpb2QKICAgICAgICBGUk9NIHRpbWVfYWNjb3VudGluZ190YWJsZQogICAgICAgIFdIRVJFIHByb2plY3RfaWQgIT0gLTEKICAgICAgICBBTkQgdGltZV9zdGFydCA+PSA/CiAgICAgICAgQU5EIHRpbWVfc3RhcnQgPD0gPyc7CgogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICRTUUwsCiAgICAgICAgQmluZCA9PiBbIFwkU1FMRGF0ZVN0YXJ0LCBcJFNRTERhdGUgXSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgZGF0YQogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgbmV4dCBpZiAhJFJvd1syXTsKCiAgICAgICAgJERhdGF7ICRSb3dbMF0gfS0+e0FjdGlvbnN9LT57ICRSb3dbMV0gfS0+e1Blck1vbnRofSArPSAkUm93WzJdOwogICAgfQoKICAgICMgYWRkIHJlYWRhYmxlIGNvbXBvbmVudHMKICAgIG15ICVQcm9qZWN0ID0gJFNlbGYtPlByb2plY3RTZXR0aW5nc0dldCgpOwogICAgbXkgJUFjdGlvbiAgPSAkU2VsZi0+QWN0aW9uU2V0dGluZ3NHZXQoKTsKCiAgICBmb3IgbXkgJFByb2plY3RJRCAoIHNvcnQga2V5cyAlRGF0YSApIHsKCiAgICAgICAgJERhdGF7JFByb2plY3RJRH0tPntOYW1lfSAgICAgICAgPSAkUHJvamVjdHtQcm9qZWN0fS0+eyRQcm9qZWN0SUR9IHx8ICcnOwogICAgICAgICREYXRheyRQcm9qZWN0SUR9LT57U3RhdHVzfSAgICAgID0gJFByb2plY3R7UHJvamVjdFN0YXR1c30tPnskUHJvamVjdElEfTsKICAgICAgICAkRGF0YXskUHJvamVjdElEfS0+e0Rlc2NyaXB0aW9ufSA9ICRQcm9qZWN0e1Byb2plY3REZXNjcmlwdGlvbn0tPnskUHJvamVjdElEfTsKCiAgICAgICAgbXkgJEFjdGlvbnNSZWYgPSAkRGF0YXskUHJvamVjdElEfS0+e0FjdGlvbnN9OwoKICAgICAgICBmb3IgbXkgJEFjdGlvbklEICggc29ydCBrZXlzICV7JEFjdGlvbnNSZWZ9ICkgewogICAgICAgICAgICAkRGF0YXskUHJvamVjdElEfS0+e0FjdGlvbnN9LT57JEFjdGlvbklEfS0+e05hbWV9ID0gJEFjdGlvbnskQWN0aW9uSUR9LT57QWN0aW9ufSB8fCAnJzsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBQcm9qZWN0VG90YWxIb3VycygpCgpyZXR1cm5zIHRoZSBzdW0gb2YgYWxsIGhvdXJzIHJlbGF0ZWQgdG8gYSBwcm9qZWN0CgogICAgbXkgJFByb2plY3RUb3RhbEhvdXJzID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Qcm9qZWN0VG90YWxIb3VycygKICAgICAgICBQcm9qZWN0SUQgID0+IDE1LAogICAgKTsKCj1jdXQKCnN1YiBQcm9qZWN0VG90YWxIb3VycyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHBhcmFtCiAgICBpZiAoICEkUGFyYW17UHJvamVjdElEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1Byb2plY3RBY3Rpb25SZXBvcnRpbmc6IE5lZWQgUHJvamVjdElEIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGFzayB0aGUgZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBTVU0ocGVyaW9kKSBGUk9NIHRpbWVfYWNjb3VudGluZ190YWJsZSBXSEVSRSBwcm9qZWN0X2lkID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1Byb2plY3RJRH0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRUb3RhbCA9IDA7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRUb3RhbCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRUb3RhbDsKfQoKPWl0ZW0gUHJvamVjdEhpc3RvcnkoKQoKcmV0dXJucyBhbiBhcnJheSB3aXRoIGFsbCBXb3JraW5nVW5pdHMgcmVsYXRlZCB0byBhIHByb2plY3QKCiAgICBteSBAUHJvamVjdEhpc3RvcnlBcnJheSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+UHJvamVjdEhpc3RvcnkoCiAgICAgICAgUHJvamVjdElEICA9PiAxNSwKICAgICk7CgpUaGlzIHdvdWxkIHJldHVybgoKICAgIEBQcm9qZWN0SGlzdG9yeUFycmF5ID0gKAogICAgICAgIHsKICAgICAgICAgICAgSUQgICAgICAgID0+IDk5OSwKICAgICAgICAgICAgVXNlcklEICAgID0+IDE1LAogICAgICAgICAgICBVc2VyICAgICAgPT4gJ1RvbScsCiAgICAgICAgICAgIEFjdGlvbklEICA9PiA2LAogICAgICAgICAgICBBY3Rpb24gICAgPT4gJ21pc2MnLAogICAgICAgICAgICBSZW1hcmsgICAgPT4gJ3JlbWFyaycsCiAgICAgICAgICAgIFRpbWVTdGFydCA9PiAnNzowMCcsCiAgICAgICAgICAgIFRpbWVFbmQgICA9PiAnMTg6MDAnLAogICAgICAgICAgICBEYXRlICAgICAgPT4gJzIwMDgtMTAtMzEnLCAjIHRoZSBkYXRlIG9mIHRoZSB3b3JraW5nIHVuaXQKICAgICAgICAgICAgUGVyaW9kICAgID0+IDExLAogICAgICAgICAgICBDcmVhdGVkICAgPT4gJzIwMDgtMTEtMDEnLCAjIHRoZSBpbnNlcnQgdGltZSBvZiB0aGUgd29ya2luZyB1bml0CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIElEICAgICAgICA9PiA5OTksCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxNiwKICAgICAgICAgICAgVXNlciAgICAgID0+ICdNYW5lJywKICAgICAgICAgICAgQWN0aW9uSUQgID0+IDcsCiAgICAgICAgICAgIEFjdGlvbiAgICA9PiAnZGV2ZWxvcG1lbnQnLAogICAgICAgICAgICBSZW1hcmsgICAgPT4gJ3JlbWFyaycsCiAgICAgICAgICAgIFRpbWVTdGFydCA9PiAnNzowMCcsCiAgICAgICAgICAgIFRpbWVFbmQgICA9PiAnMTg6MDAnLAogICAgICAgICAgICBQZXJpb2QgICAgPT4gMTEsCiAgICAgICAgICAgIERhdGUgICAgICA9PiAnMjAwOC0xMS0wMycsCiAgICAgICAgICAgIENyZWF0ZWQgICA9PiAnMjAwOC0xMS0wMycsCiAgICAgICAgfQogICAgKTsKCj1jdXQKCnN1YiBQcm9qZWN0SGlzdG9yeSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHBhcmFtCiAgICBpZiAoICEkUGFyYW17UHJvamVjdElEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1Byb2plY3RBY3Rpb25SZXBvcnRpbmc6IE5lZWQgUHJvamVjdElEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjYWxsIGFjdGlvbiBkYXRhIHRvIGdldCB0aGUgcmVhZGFibGUgbmFtZSBvZiB0aGUgYWN0aW9uCiAgICBteSAlQWN0aW9uRGF0YSA9ICRTZWxmLT5BY3Rpb25TZXR0aW5nc0dldCgpOwoKICAgICMgZ2V0IHVzZXIgbGlzdAogICAgbXkgJVNob3duVXNlcnMgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTGlzdCgKICAgICAgICBUeXBlICA9PiAnTG9uZycsCiAgICAgICAgVmFsaWQgPT4gMCwKICAgICk7CgogICAgIyBhc2sgdGhlIGRhdGFiYXNlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgdXNlcl9pZCwgYWN0aW9uX2lkLCByZW1hcmssIHRpbWVfc3RhcnQsIHRpbWVfZW5kLCBwZXJpb2QsIGNyZWF0ZWQnCiAgICAgICAgICAgIC4gJyBGUk9NIHRpbWVfYWNjb3VudGluZ190YWJsZSBXSEVSRSBwcm9qZWN0X2lkID0gPyBPUkRFUiBCWSB0aW1lX3N0YXJ0JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtQcm9qZWN0SUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQERhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICBteSAkVXNlclJlZiA9IHsKICAgICAgICAgICAgSUQgICAgICAgID0+ICRSb3dbMF0sCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUm93WzFdLAogICAgICAgICAgICBVc2VyICAgICAgPT4gJFNob3duVXNlcnN7ICRSb3dbMV0gfSwKICAgICAgICAgICAgQWN0aW9uSUQgID0+ICRSb3dbMl0sCiAgICAgICAgICAgIEFjdGlvbiAgICA9PiAkQWN0aW9uRGF0YXsgJFJvd1syXSB9e0FjdGlvbn0sCiAgICAgICAgICAgIFJlbWFyayAgICA9PiAkUm93WzNdIHx8ICcnLAogICAgICAgICAgICBUaW1lU3RhcnQgPT4gJFJvd1s0XSwKICAgICAgICAgICAgVGltZUVuZCAgID0+ICRSb3dbNV0sCiAgICAgICAgICAgIERhdGUgICAgICA9PiAkUm93WzRdLAogICAgICAgICAgICBQZXJpb2QgICAgPT4gJFJvd1s2XSwKICAgICAgICAgICAgQ3JlYXRlZCAgID0+ICRSb3dbN10sCiAgICAgICAgfTsKICAgICAgICAkVXNlclJlZi0+e0RhdGV9ID1+IHN7KFxkXGRcZFxkLVxkXGQtXGRcZCkgXHMgLisgfXskMX14bXM7CgogICAgICAgIHB1c2ggQERhdGEsICRVc2VyUmVmOwogICAgfQoKICAgIHJldHVybiBARGF0YTsKfQoKPWl0ZW0gTGFzdFByb2plY3RzT2ZVc2VyKCkKCnJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgbGFzdCBwcm9qZWN0cyBvZiB0aGUgY3VycmVudCB1c2VyCgogICAgbXkgQExhc3RQcm9qZWN0cyA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+TGFzdFByb2plY3RzT2ZVc2VyKCk7Cgo9Y3V0CgpzdWIgTGFzdFByb2plY3RzT2ZVc2VyIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBkYiBzZWxlY3QKICAgICMgSSBkb24ndCB1c2UgZGlzdGluY3QgYmVjYXVzZSBvZiBPUkRFUiBCWSBwcm9ibGVtcyBvZiBwb3N0Z3JlIHNxbAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBwcm9qZWN0X2lkIEZST00gdGltZV9hY2NvdW50aW5nX3RhYmxlICcKICAgICAgICAgICAgLiAnV0hFUkUgdXNlcl9pZCA9ID8gQU5EIHByb2plY3RfaWQgPD4gLTEgT1JERVIgQlkgdGltZV9zdGFydCBERVNDJywKICAgICAgICBCaW5kICA9PiBbIFwkU2VsZi0+e1VzZXJJRH0gXSwKICAgICAgICBMaW1pdCA9PiA0MCwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlUHJvamVjdHM7CiAgICBteSAkQ291bnRlciA9IDA7CiAgICBST1c6CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICBuZXh0IFJPVyBpZiAkQ291bnRlciA+IDc7CiAgICAgICAgbmV4dCBST1cgaWYgJFByb2plY3RzeyAkUm93WzBdIH07CgogICAgICAgICRQcm9qZWN0c3sgJFJvd1swXSB9ID0gMTsKICAgICAgICAkQ291bnRlcisrOwogICAgfQoKICAgIHJldHVybiBrZXlzICVQcm9qZWN0czsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIEtlcm5lbC9TeXN0ZW0vU3RhdHMvRHluYW1pYy9UaW1lQWNjb3VudGluZy5wbSAtIGFsbCBhZHZpY2UgZnVuY3Rpb25zCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6U3RhdHM6OkR5bmFtaWM6OlRpbWVBY2NvdW50aW5nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaW1lQWNjb3VudGluZzsKdXNlIERhdGU6OlBjYWxjIHF3KCBBZGRfRGVsdGFfRGF5cyBBZGRfRGVsdGFfWU1EICk7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhEQk9iamVjdCBDb25maWdPYmplY3QgTG9nT2JqZWN0IFVzZXJPYmplY3QgVGltZU9iamVjdCBNYWluT2JqZWN0IEVuY29kZU9iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgIyBjcmVhdGUgYWRkaXRpb25hbCBuZWVkZWQgb2JqZWN0cwogICAgJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6VGltZUFjY291bnRpbmctPm5ldygKICAgICAgICAleyRTZWxmfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgR2V0T2JqZWN0TmFtZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIHJldHVybiAnVGltZUFjY291bnRpbmcnOwp9CgpzdWIgR2V0T2JqZWN0QXR0cmlidXRlcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgc2V0IHByZWRlZmluZWQgc3RhcnQgdGltZQogICAgbXkgJFRpbWVTdGFtcCA9ICRTZWxmLT57VGltZU9iamVjdH0tPkN1cnJlbnRUaW1lc3RhbXAoKTsKICAgIG15ICgkRGF0ZSkgPSBzcGxpdCAvXHMrLywgJFRpbWVTdGFtcDsKICAgIG15ICRUb2RheSA9IHNwcmludGYgIiVzIDIzOjU5OjU5IiwgJERhdGU7CgogICAgIyBnZXQgcHJvamVjdCBsaXN0CiAgICBteSAlUHJvamVjdExpc3QgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdFNldHRpbmdzR2V0KAogICAgICAgIFN0YXR1cyA9PiAndmFsaWQnLAogICAgKTsKCiAgICAjIGdldCBhY3Rpb24gbGlzdAogICAgbXkgJUFjdGlvbkxpc3RTb3VyY2UgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+QWN0aW9uU2V0dGluZ3NHZXQoKTsKICAgIG15ICVBY3Rpb25MaXN0OwoKICAgIGZvciBteSAkQWN0aW9uICggc29ydCBrZXlzICVBY3Rpb25MaXN0U291cmNlICkgewogICAgICAgICRBY3Rpb25MaXN0eyRBY3Rpb259ID0gJEFjdGlvbkxpc3RTb3VyY2V7JEFjdGlvbn0tPntBY3Rpb259OwogICAgfQoKICAgICMgZ2V0IHVzZXIgbGlzdAogICAgbXkgJVVzZXJMaXN0ID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlckxpc3QoCiAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgIFZhbGlkID0+IDAsCiAgICApOwoKICAgIG15IEBBdHRyaWJ1dGVzID0gKAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnUHJvamVjdCcsCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAwLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJ1Byb2plY3QnLAogICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICdNdWx0aVNlbGVjdEZpZWxkJywKICAgICAgICAgICAgVHJhbnNsYXRpb24gICAgICA9PiAwLAogICAgICAgICAgICBWYWx1ZXMgICAgICAgICAgID0+ICRQcm9qZWN0TGlzdHtQcm9qZWN0fSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICA9PiAnVXNlcicsCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAwLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJ1VzZXInLAogICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICdNdWx0aVNlbGVjdEZpZWxkJywKICAgICAgICAgICAgVHJhbnNsYXRpb24gICAgICA9PiAwLAogICAgICAgICAgICBWYWx1ZXMgICAgICAgICAgID0+IFwlVXNlckxpc3QsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1NvcnQgc2VxdWVuY2UnLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDAsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMSwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAwLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICdTb3J0U2VxdWVuY2UnLAogICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICdTZWxlY3RGaWVsZCcsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBVcCAgID0+ICdhc2NlbmRpbmcnLAogICAgICAgICAgICAgICAgRG93biA9PiAnZGVzY2VuZGluZycsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1Rhc2snLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDAsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMCwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICdQcm9qZWN0QWN0aW9uJywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnTXVsdGlTZWxlY3RGaWVsZCcsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiBcJUFjdGlvbkxpc3QsCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1BlcmlvZCcsCiAgICAgICAgICAgIFVzZUFzWHZhbHVlICAgICAgPT4gMCwKICAgICAgICAgICAgVXNlQXNWYWx1ZVNlcmllcyA9PiAwLAogICAgICAgICAgICBVc2VBc1Jlc3RyaWN0aW9uID0+IDEsCiAgICAgICAgICAgIEVsZW1lbnQgICAgICAgICAgPT4gJ1BlcmlvZCcsCiAgICAgICAgICAgIFRpbWVQZXJpb2RGb3JtYXQgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsICAgICMgJ0RhdGVJbnB1dEZvcm1hdExvbmcnLAogICAgICAgICAgICBCbG9jayAgICAgICAgICAgID0+ICdUaW1lJywKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiB7CiAgICAgICAgICAgICAgICBUaW1lU3RhcnQgPT4gJ1RpbWVBY2NvdW50aW5nUGVyaW9kU3RhcnQnLAogICAgICAgICAgICAgICAgVGltZVN0b3AgID0+ICdUaW1lQWNjb3VudGluZ1BlcmlvZFN0b3AnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiBAQXR0cmlidXRlczsKfQoKc3ViIEdldEhlYWRlckxpbmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKICAgIG15IEBIZWFkZXJMaW5lID0gKCIiKTsKCiAgICAjIFVzZXJzIGFzIFgtdmFsdWUKICAgIGlmICggJFBhcmFte1hWYWx1ZX17RWxlbWVudH0gJiYgJFBhcmFte1hWYWx1ZX17RWxlbWVudH0gZXEgJ1VzZXInICkgewoKICAgICAgICAjIHVzZXIgaGF2ZSBiZWVuIHNlbGVjdGVkIGFzIHgtdmFsdWUKICAgICAgICBteSBAVXNlcklEcyA9IEB7ICRQYXJhbXtYVmFsdWV9e1NlbGVjdGVkVmFsdWVzfSB9OwoKICAgICAgICAjIGl0ZXJhdGUgb3ZlciBzZWxlY3RlZCB1c2VycwogICAgICAgIFVTRVJJRDoKICAgICAgICBmb3IgbXkgJFVzZXJJRCAoQFVzZXJJRHMpIHsKICAgICAgICAgICAgbXkgJFVzZXJOYW1lID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlck5hbWUoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHB1c2ggQEhlYWRlckxpbmUsICRVc2VyTmFtZTsKICAgICAgICB9CiAgICB9CgogICAgIyBQcm9qZWN0cyBhcyBYLXZhbHVlCiAgICBlbHNlIHsKICAgICAgICAjIHByb2plY3RzIGhhdmUgYmVlbiBzZWxldnRlZCBhcyB4LXZhbHVlCiAgICAgICAgbXkgQFByb2plY3RJRHMgPSBAeyAkUGFyYW17WFZhbHVlfXtTZWxlY3RlZFZhbHVlc30gfTsKCiAgICAgICAgIyBpdGVyYXRlIG92ZXIgc2VsZWN0ZWQgcHJvamVjdHMKICAgICAgICBQUk9KRUNUSUQ6CiAgICAgICAgZm9yIG15ICRQcm9qZWN0SUQgKEBQcm9qZWN0SURzKSB7CiAgICAgICAgICAgIG15ICVQcm9qZWN0RGF0YSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Qcm9qZWN0R2V0KAogICAgICAgICAgICAgICAgSUQgPT4gJFByb2plY3RJRCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHB1c2ggQEhlYWRlckxpbmUsICRQcm9qZWN0RGF0YXtQcm9qZWN0fTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFxASGVhZGVyTGluZTsKfQoKc3ViIEdldFN0YXRUYWJsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwogICAgbXkgQFN0YXRBcnJheTsKICAgIG15IEBVc2VySURzOwoKICAgICMgVXNlcnMgYXMgWC12YWx1ZQogICAgaWYgKCAkUGFyYW17WFZhbHVlfXtFbGVtZW50fSAmJiAkUGFyYW17WFZhbHVlfXtFbGVtZW50fSBlcSAnVXNlcicgKSB7CgogICAgICAgICMgdXNlciBoYXZlIGJlZW4gc2VsZWN0ZWQgYXMgeC12YWx1ZQogICAgICAgIEBVc2VySURzID0gQHsgJFBhcmFte1hWYWx1ZX17U2VsZWN0ZWRWYWx1ZXN9IH07CgogICAgICAgICMgZ2V0IHN0YXQgZGF0YQogICAgICAgIG15ICRTdGF0RGF0YSA9ICRTZWxmLT5fR2V0U3RhdERhdGEoCiAgICAgICAgICAgIFBhcmFtICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgVXNlcklEcyA9PiBcQFVzZXJJRHMsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBzdGF0IGRhdGEKICAgICAgICByZXR1cm4gaWYgISRTdGF0RGF0YTsKICAgICAgICByZXR1cm4gaWYgcmVmICRTdGF0RGF0YSBuZSAnQVJSQVknOwoKICAgICAgICBteSBAUmF3U3RhdEFycmF5ID0gQHskU3RhdERhdGF9OwogICAgICAgIHJldHVybiBpZiAhQFJhd1N0YXRBcnJheTsKCiAgICAgICAgIyBnZXQgbGlzdCBvZiBuZWVkZWQgZGF0YQogICAgICAgIG15ICVQcm9qZWN0RGF0YSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Qcm9qZWN0U2V0dGluZ3NHZXQoKTsKICAgICAgICBteSAlUHJvamVjdExpc3QgPSAleyAkUHJvamVjdERhdGF7UHJvamVjdH0gfHwge30gfTsKCiAgICAgICAgbXkgJUFjdGlvbkRhdGEgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+QWN0aW9uU2V0dGluZ3NHZXQoKTsKICAgICAgICBteSAlQWN0aW9uTGlzdCA9IG1hcCB7ICggJF8gPT4gJEFjdGlvbkRhdGF7JF99LT57QWN0aW9ufSApIH0ga2V5cyAlQWN0aW9uRGF0YTsKCiAgICAgICAgbXkgQFNvcnRlZFByb2plY3RJRHMgPSBzb3J0IHsgJFByb2plY3RMaXN0eyRhfSBjbXAgJFByb2plY3RMaXN0eyRifSB9IGtleXMgJVByb2plY3RMaXN0OwogICAgICAgIG15IEBTb3J0ZWRBY3Rpb25JRHMgID0gc29ydCB7ICRBY3Rpb25MaXN0eyRhfSBjbXAgJEFjdGlvbkxpc3R7JGJ9IH0ga2V5cyAlQWN0aW9uTGlzdDsKCiAgICAgICAgIyByZS1zb3J0IHByb2plY3RzIGRlcGVuZGluZyBvbiBzZWxlY3RlZCBzZXF1ZW5jZQogICAgICAgIGlmICggJFBhcmFte1ZhbHVlU2VyaWVzfSAmJiAkUGFyYW17VmFsdWVTZXJpZXN9WzBde1NlbGVjdGVkVmFsdWVzfVswXSBlcSAnRG93bicgKSB7CiAgICAgICAgICAgIEBTb3J0ZWRQcm9qZWN0SURzID0gcmV2ZXJzZSBAU29ydGVkUHJvamVjdElEczsKICAgICAgICB9CgogICAgICAgICMgaXRlcmF0ZSBvdmVyIHNvcnRlZCBwcm9qZWN0IGxpc3QKICAgICAgICBTT1JURURQUk9KRUNUSUQ6CiAgICAgICAgZm9yIG15ICRTb3J0ZWRQcm9qZWN0SUQgKEBTb3J0ZWRQcm9qZWN0SURzKSB7CgogICAgICAgICAgICAjIGNoZWNrIGZvciB1bnNlbGVjdGVkIHByb2plY3RzCiAgICAgICAgICAgIG5leHQgU09SVEVEUFJPSkVDVElEIGlmICRQYXJhbXtSZXN0cmljdGlvbnN9LT57UHJvamVjdH0gJiYgIWdyZXAgewogICAgICAgICAgICAgICAgJF8gPT0gJFNvcnRlZFByb2plY3RJRAogICAgICAgICAgICB9IEB7ICRQYXJhbXtSZXN0cmljdGlvbnN9LT57UHJvamVjdH0gfHwgW10gfTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBjdXJyZW50IHByb2plY3QgZGF0YSBvZiBjdXJyZW50IHByb2plY3QKICAgICAgICAgICAgbXkgQFByb2plY3RTdGF0RGF0YSA9IGdyZXAgeyAkXy0+e1Byb2plY3RJRH0gPT0gJFNvcnRlZFByb2plY3RJRCB9IEBSYXdTdGF0QXJyYXk7CgogICAgICAgICAgICAjIGl0ZXJhdGUgb3ZlciBzb3J0ZWQgYWN0aW9uIGxpc3QKICAgICAgICAgICAgU09SVEVEQUNUSU9OSUQ6CiAgICAgICAgICAgIGZvciBteSAkU29ydGVkQWN0aW9uSUQgKEBTb3J0ZWRBY3Rpb25JRHMpIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciB1bnNlbGVjdGVkIGFjdGlvbnMKICAgICAgICAgICAgICAgIG5leHQgU09SVEVEQUNUSU9OSUQgaWYgJFBhcmFte1Jlc3RyaWN0aW9uc30tPntQcm9qZWN0QWN0aW9ufSAmJiAhZ3JlcCB7CiAgICAgICAgICAgICAgICAgICAgJF8gPT0gJFNvcnRlZEFjdGlvbklECiAgICAgICAgICAgICAgICB9IEB7ICRQYXJhbXtSZXN0cmljdGlvbnN9LT57UHJvamVjdEFjdGlvbn0gfHwgW10gfTsKCiAgICAgICAgICAgICAgICAjIGdldCB0aGUgY3VycmVudCBhY3Rpb24gb3V0IG9mIHRoZSBjdXJyZW50IHByb2plY3QKICAgICAgICAgICAgICAgIG15IEBBY3Rpb25TdGF0RGF0YSA9IGdyZXAgeyAkXy0+e0FjdGlvbklEfSA9PSAkU29ydGVkQWN0aW9uSUQgfSBAUHJvamVjdFN0YXREYXRhOwoKICAgICAgICAgICAgICAgIG15IEBSb3dEYXRhOwoKICAgICAgICAgICAgICAgICMgYWRkIGRlc2NyaXB0aXZlIGZpcnN0IGNvbHVtbgogICAgICAgICAgICAgICAgbXkgJFJvd0xhYmVsID0gIiRQcm9qZWN0TGlzdHskU29ydGVkUHJvamVjdElEfTo6JEFjdGlvbkxpc3R7JFNvcnRlZEFjdGlvbklEfSI7CiAgICAgICAgICAgICAgICBwdXNoIEBSb3dEYXRhLCAkUm93TGFiZWw7CgogICAgICAgICAgICAgICAgIyBpdGVyYXRlIG92ZXIgc2VsZWN0ZWQgdXNlcnMKICAgICAgICAgICAgICAgIFVTRVJJRDoKICAgICAgICAgICAgICAgIGZvciBteSAkVXNlcklEIChAVXNlcklEcykgewoKICAgICAgICAgICAgICAgICAgICAjIGF0IGxlYXN0IGdldCAnMCcgZm9yIHVzZXIgZGF0YQogICAgICAgICAgICAgICAgICAgIG15ICRVc2VyUGVyaW9kU3VtID0gMDsKCiAgICAgICAgICAgICAgICAgICAgIyBpdGVyYXRlIG92ZXIgcGVyaW9kIGRhdGEgb2YgdXNlcgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkUGVyaW9kRGF0YSAoIGdyZXAgeyAkXy0+e1VzZXJJRH0gPT0gJFVzZXJJRCB9IEBBY3Rpb25TdGF0RGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFVzZXJQZXJpb2RTdW0gKz0gJFBlcmlvZERhdGEtPntQZXJpb2R9OwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgIyBzYWZlIHVzZXIgZGF0YSB0byByb3cgZGF0YQogICAgICAgICAgICAgICAgICAgIHB1c2ggQFJvd0RhdGEsICRVc2VyUGVyaW9kU3VtOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgc3RvcmUgY3VycmVudCByb3cgdG8gZ2xvYmFsIHN0YXQgYXJyYXkKICAgICAgICAgICAgICAgIHB1c2ggQFN0YXRBcnJheSwgXEBSb3dEYXRhOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgUHJvamVjdHMgYXMgWC12YWx1ZQogICAgZWxzZSB7CgogICAgICAgICMgcHJvamVjdHMgaGF2ZSBiZWVuIHNlbGVjdGVkIGFzIHgtdmFsdWUKICAgICAgICBteSBAUHJvamVjdElEcyA9IEB7ICRQYXJhbXtYVmFsdWV9e1NlbGVjdGVkVmFsdWVzfSB9OwoKICAgICAgICAjIHdlIG5lZWQgdG8gZ2V0IGFsbCB1c2VycwogICAgICAgIG15ICVVc2VySURzID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlckxpc3QoCiAgICAgICAgICAgIFR5cGUgID0+ICdTaG9ydCcsCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgQFVzZXJJRHMgPSBrZXlzICVVc2VySURzOwoKICAgICAgICAjIGdldCBjYWxjdWxhdGVkIHN0YXRzIGRhdGEKICAgICAgICBteSAkU3RhdERhdGEgPSAkU2VsZi0+X0dldFN0YXREYXRhKAogICAgICAgICAgICBQYXJhbSAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgIFVzZXJJRHMgPT4gXEBVc2VySURzLAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgc3RhdCBkYXRhCiAgICAgICAgcmV0dXJuIGlmICEkU3RhdERhdGE7CiAgICAgICAgcmV0dXJuIGlmIHJlZiAkU3RhdERhdGEgbmUgJ0FSUkFZJzsKCiAgICAgICAgbXkgQFJhd1N0YXRBcnJheSA9IEB7JFN0YXREYXRhfTsKICAgICAgICByZXR1cm4gaWYgIUBSYXdTdGF0QXJyYXk7CgogICAgICAgICMgZ2V0IGxpc3Qgb2YgbmVlZGVkIGRhdGEKICAgICAgICBteSAlVXNlckxpc3QgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTGlzdCgKICAgICAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15IEBTb3J0ZWRVc2VySURzID0gc29ydCB7ICRVc2VyTGlzdHskYX0gY21wICRVc2VyTGlzdHskYn0gfSBrZXlzICVVc2VyTGlzdDsKCiAgICAgICAgIyByZS1zb3J0IHVzZXJzIGRlcGVuZGluZyBvbiBzZWxlY3RlZCBzZXF1ZW5jZQogICAgICAgIGlmICggJFBhcmFte1ZhbHVlU2VyaWVzfSAmJiAkUGFyYW17VmFsdWVTZXJpZXN9WzBde1NlbGVjdGVkVmFsdWVzfVswXSBlcSAnRG93bicgKSB7CiAgICAgICAgICAgIEBTb3J0ZWRVc2VySURzID0gcmV2ZXJzZSBAU29ydGVkVXNlcklEczsKICAgICAgICB9CgogICAgICAgICMgaXRlcmF0ZSBvdmVyIHNvcnRlZCB1c2VyIGxpc3QKICAgICAgICBTT1JURURVU0VSSUQ6CiAgICAgICAgZm9yIG15ICRTb3J0ZWRVc2VySUQgKEBTb3J0ZWRVc2VySURzKSB7CgogICAgICAgICAgICAjIGNoZWNrIGZvciB1bnNlbGVjdGVkIHVzZXJzCiAgICAgICAgICAgIG5leHQgU09SVEVEVVNFUklEIGlmICRQYXJhbXtSZXN0cmljdGlvbnN9LT57VXNlcn0gJiYgIWdyZXAgewogICAgICAgICAgICAgICAgJF8gPT0gJFNvcnRlZFVzZXJJRAogICAgICAgICAgICB9IEB7ICRQYXJhbXtSZXN0cmljdGlvbnN9LT57VXNlcn0gfHwgW10gfTsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBjdXJyZW50IHVzZXIgZGF0YSBvZiBjdXJyZW50IHVzZXIKICAgICAgICAgICAgbXkgQFVzZXJTdGF0RGF0YSA9IGdyZXAgeyAkXy0+e1VzZXJJRH0gPT0gJFNvcnRlZFVzZXJJRCB9IEBSYXdTdGF0QXJyYXk7CgogICAgICAgICAgICBteSBAUm93RGF0YTsKCiAgICAgICAgICAgICMgYWRkIGRlc2NyaXB0aXZlIGZpcnN0IGNvbHVtbgogICAgICAgICAgICBteSAkUm93TGFiZWwgPSAkVXNlckxpc3R7JFNvcnRlZFVzZXJJRH07CiAgICAgICAgICAgIHB1c2ggQFJvd0RhdGEsICRSb3dMYWJlbDsKCiAgICAgICAgICAgICMgaXRlcmF0ZSBvdmVyIHNlbGVjdGVkIHByb2plY3RzCiAgICAgICAgICAgIFBST0pFQ1RJRDoKICAgICAgICAgICAgZm9yIG15ICRQcm9qZWN0SUQgKEBQcm9qZWN0SURzKSB7CgogICAgICAgICAgICAgICAgIyBhdCBsZWFzdCBnZXQgJzAnIGZvciB1c2VyIGRhdGEKICAgICAgICAgICAgICAgIG15ICRQcm9qZWN0UGVyaW9kU3VtID0gMDsKCiAgICAgICAgICAgICAgICAjIGl0ZXJhdGUgb3ZlciBwZXJpb2QgZGF0YSBvZiB1c2VyCiAgICAgICAgICAgICAgICBmb3IgbXkgJFBlcmlvZERhdGEgKCBncmVwIHsgJF8tPntQcm9qZWN0SUR9ID09ICRQcm9qZWN0SUQgfSBAVXNlclN0YXREYXRhICkgewogICAgICAgICAgICAgICAgICAgICRQcm9qZWN0UGVyaW9kU3VtICs9ICRQZXJpb2REYXRhLT57UGVyaW9kfTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHNhZmUgdXNlciBkYXRhIHRvIHJvdyBkYXRhCiAgICAgICAgICAgICAgICBwdXNoIEBSb3dEYXRhLCAkUHJvamVjdFBlcmlvZFN1bTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBzdG9yZSBjdXJyZW50IHJvdyB0byBnbG9iYWwgc3RhdCBhcnJheQogICAgICAgICAgICBwdXNoIEBTdGF0QXJyYXksIFxAUm93RGF0YTsKICAgICAgICB9CgogICAgfQoKICAgIHJldHVybiBAU3RhdEFycmF5Owp9CgpzdWIgRXhwb3J0V3JhcHBlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgd3JhcCBpZHMgdG8gdXNlZCBzcGVsbGluZwogICAgZm9yIG15ICRVc2UgKHF3KFVzZUFzVmFsdWVTZXJpZXMgVXNlQXNSZXN0cmljdGlvbiBVc2VBc1h2YWx1ZSkpIHsKICAgICAgICBFTEVNRU5UOgogICAgICAgIGZvciBteSAkRWxlbWVudCAoIEB7ICRQYXJhbXskVXNlfSB9ICkgewogICAgICAgICAgICBuZXh0IEVMRU1FTlQgaWYgISRFbGVtZW50IHx8ICEkRWxlbWVudC0+e1NlbGVjdGVkVmFsdWVzfTsKICAgICAgICAgICAgbXkgJEVsZW1lbnROYW1lID0gJEVsZW1lbnQtPntFbGVtZW50fTsKICAgICAgICAgICAgbXkgJFZhbHVlcyAgICAgID0gJEVsZW1lbnQtPntTZWxlY3RlZFZhbHVlc307CgogICAgICAgICAgICBpZiAoICRFbGVtZW50TmFtZSBlcSAnVXNlcicgKSB7CiAgICAgICAgICAgICAgICBJRDoKICAgICAgICAgICAgICAgIGZvciBteSAkSUQgKCBAeyRWYWx1ZXN9ICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgISRJRDsKCiAgICAgICAgICAgICAgICAgICAgJElELT57Q29udGVudH0gPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTG9va3VwKCBVc2VySUQgPT4gJElELT57Q29udGVudH0gKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRFbGVtZW50TmFtZSBlcSAnUHJvamVjdCcgKSB7CiAgICAgICAgICAgICAgICBJRDoKICAgICAgICAgICAgICAgIGZvciBteSAkSUQgKCBAeyRWYWx1ZXN9ICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgISRJRDsKCiAgICAgICAgICAgICAgICAgICAgbXkgJVRtcFByb2plY3REYXRhCiAgICAgICAgICAgICAgICAgICAgICAgID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlByb2plY3RHZXQoIElEID0+ICRJRC0+e0NvbnRlbnR9ICk7CiAgICAgICAgICAgICAgICAgICAgJElELT57Q29udGVudH0gPSAkVG1wUHJvamVjdERhdGF7UHJvamVjdH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkRWxlbWVudE5hbWUgZXEgJ1Byb2plY3RBY3Rpb24nICkgewogICAgICAgICAgICAgICAgSUQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJElEICggQHskVmFsdWVzfSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IElEIGlmICEkSUQ7CgogICAgICAgICAgICAgICAgICAgIG15ICVUbXBBY3Rpb25EYXRhCiAgICAgICAgICAgICAgICAgICAgICAgID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPkFjdGlvbkdldCggSUQgPT4gJElELT57Q29udGVudH0gKTsKICAgICAgICAgICAgICAgICAgICAkSUQtPntDb250ZW50fSA9ICRUbXBBY3Rpb25EYXRhe0FjdGlvbn07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gXCVQYXJhbTsKfQoKc3ViIEltcG9ydFdyYXBwZXIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHdyYXAgdXNlZCBzcGVsbGluZyB0byBpZHMKICAgIGZvciBteSAkVXNlIChxdyhVc2VBc1ZhbHVlU2VyaWVzIFVzZUFzUmVzdHJpY3Rpb24gVXNlQXNYdmFsdWUpKSB7CiAgICAgICAgRUxFTUVOVDoKICAgICAgICBmb3IgbXkgJEVsZW1lbnQgKCBAeyAkUGFyYW17JFVzZX0gfSApIHsKICAgICAgICAgICAgbmV4dCBFTEVNRU5UIGlmICEkRWxlbWVudCB8fCAhJEVsZW1lbnQtPntTZWxlY3RlZFZhbHVlc307CgogICAgICAgICAgICBteSAkRWxlbWVudE5hbWUgPSAkRWxlbWVudC0+e0VsZW1lbnR9OwogICAgICAgICAgICBteSAkVmFsdWVzICAgICAgPSAkRWxlbWVudC0+e1NlbGVjdGVkVmFsdWVzfTsKCiAgICAgICAgICAgIGlmICggJEVsZW1lbnROYW1lIGVxICdVc2VyJyApIHsKICAgICAgICAgICAgICAgIElEOgogICAgICAgICAgICAgICAgZm9yIG15ICRJRCAoIEB7JFZhbHVlc30gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJElEOwoKICAgICAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJMb29rdXAoIFVzZXJMb2dpbiA9PiAkSUQtPntDb250ZW50fSApICkgewogICAgICAgICAgICAgICAgICAgICAgICAkSUQtPntDb250ZW50fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTG9va3VwKCBVc2VyTG9naW4gPT4gJElELT57Q29udGVudH0gKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbXBvcnQ6IENhbicgZmluZCB0aGUgdXNlciAkSUQtPntDb250ZW50fSEiCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRJRCA9IHVuZGVmOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRFbGVtZW50TmFtZSBlcSAnUHJvamVjdCcgKSB7CiAgICAgICAgICAgICAgICBJRDoKICAgICAgICAgICAgICAgIGZvciBteSAkSUQgKCBAeyRWYWx1ZXN9ICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgISRJRDsKCiAgICAgICAgICAgICAgICAgICAgbXkgJVByb2plY3QgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdEdldCgKICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCA9PiAkSUQtPntDb250ZW50fSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIGlmICggJFByb2plY3R7SUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkSUQtPntDb250ZW50fSA9ICRQcm9qZWN0e0lEfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbXBvcnQ6IENhbicgZmluZCBwcm9qZWN0ICRJRC0+e0NvbnRlbnR9ISIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJElEID0gdW5kZWY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEVsZW1lbnROYW1lIGVxICdQcm9qZWN0QWN0aW9uJyApIHsKICAgICAgICAgICAgICAgIElEOgogICAgICAgICAgICAgICAgZm9yIG15ICRJRCAoIEB7JFZhbHVlc30gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJElEOwoKICAgICAgICAgICAgICAgICAgICBteSAlQWN0aW9uID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPkFjdGlvbkdldCgKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uID0+ICRJRC0+e0NvbnRlbnR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQWN0aW9ue0lEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJElELT57Q29udGVudH0gPSAkQWN0aW9ue0lEfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbXBvcnQ6IENhbicgZmluZCBhY3Rpb24gJElELT57Q29udGVudH0hIgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAkSUQgPSB1bmRlZjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gXCVQYXJhbTsKfQoKc3ViIF9HZXRTdGF0RGF0YSB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSBAUmV0dXJuOwogICAgbXkgQFVzZXJJRHMgPSBAeyAkUGFyYW17VXNlcklEc30gfHwgW10gfTsKCiAgICBteSAlRGF0ZUluZGV4VG9OYW1lID0gKAogICAgICAgICdTZWNvbmQnID0+IDAsCiAgICAgICAgJ01pbnV0ZScgPT4gMSwKICAgICAgICAnSG91cicgICA9PiAyLAogICAgICAgICdEYXknICAgID0+IDMsCiAgICAgICAgJ01vbnRoJyAgPT4gNCwKICAgICAgICAnWWVhcicgICA9PiA1LAogICAgKTsKCiAgICAjIGxvb3Bpbmcgb3ZlciBhbGwgb3Igc2VsZWN0ZWQgdXNlcnMKICAgIGZvciBteSAkVXNlcklEIChAVXNlcklEcykgewoKICAgICAgICBteSAkU3RhcnREYXRlOwogICAgICAgIG15ICRTdG9wRGF0ZTsKCiAgICAgICAgIyBjaGVjayBpZiB0aW1lIHBlcmlvZCBoYXMgYmVlbiBzZWxlY3RlZAogICAgICAgIGlmICggJFBhcmFte1BhcmFtfXtSZXN0cmljdGlvbnN9e1RpbWVBY2NvdW50aW5nUGVyaW9kU3RhcnR9ICkgewoKICAgICAgICAgICAgIyBnZXQgdW5peCB0aW1lc3RhbXAgb2Ygc3RhcnQgYW5kIGVuZCB2YWx1ZXMKICAgICAgICAgICAgJFN0YXJ0RGF0ZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRQYXJhbXtQYXJhbX17UmVzdHJpY3Rpb25zfXtUaW1lQWNjb3VudGluZ1BlcmlvZFN0YXJ0fSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFN0b3BEYXRlID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFte1BhcmFtfXtSZXN0cmljdGlvbnN9e1RpbWVBY2NvdW50aW5nUGVyaW9kU3RvcH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBJTVBPUlRBTlQ6CiAgICAgICAgICAgICMgSWYgbm8gdGltZSBwZXJpb2QgaGFkIGJlZW4gc2VsZWN0ZWQgcHJldmlvdXMgbW9udGggd2lsbCBiZSB1c2VkIGFzIHBlcmlvZCEKCiAgICAgICAgICAgICMgZ2V0IGN1cnJlbnQgZGF0ZSB2YWx1ZXMKICAgICAgICAgICAgbXkgQEN1cnJlbnREYXRlID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCksCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBmaXJzdCBkYXkgb2YgcHJldmlvdXMgbW9udGgKICAgICAgICAgICAgbXkgQE5ld1N0YXJ0RGF0ZSA9IEFkZF9EZWx0YV9ZTUQoCiAgICAgICAgICAgICAgICAkQ3VycmVudERhdGVbICREYXRlSW5kZXhUb05hbWV7J1llYXInfSBdLAogICAgICAgICAgICAgICAgJEN1cnJlbnREYXRlWyAkRGF0ZUluZGV4VG9OYW1leydNb250aCd9IF0sCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIC0xLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IGZpcnN0IGRheSBvZiBuZXh0IG1vbnRoIHJlbGF0aXZlIHRvIHByZXZpb3VzIG1vbnRoCiAgICAgICAgICAgIG15IEBOZXdTdG9wRGF0ZSA9IEFkZF9EZWx0YV9ZTUQoCiAgICAgICAgICAgICAgICAkTmV3U3RhcnREYXRlWzBdLAogICAgICAgICAgICAgICAgJE5ld1N0YXJ0RGF0ZVsxXSwKICAgICAgICAgICAgICAgICROZXdTdGFydERhdGVbMl0sCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKzEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgbGFzdCBvZiBkYXkgcHJldmlvdXMgbW9udGgKICAgICAgICAgICAgQE5ld1N0b3BEYXRlID0gQWRkX0RlbHRhX1lNRCgKICAgICAgICAgICAgICAgICROZXdTdG9wRGF0ZVswXSwKICAgICAgICAgICAgICAgICROZXdTdG9wRGF0ZVsxXSwKICAgICAgICAgICAgICAgICROZXdTdG9wRGF0ZVsyXSwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgLTEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNhbGN1bGF0ZSB1bml4IHRpbWVzdGFtcCBmb3Igc3RhcnQgYW5kIHN0b3AgZGF0ZQogICAgICAgICAgICAkU3RhcnREYXRlID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+RGF0ZTJTeXN0ZW1UaW1lKAogICAgICAgICAgICAgICAgWWVhciAgID0+ICROZXdTdGFydERhdGVbMF0sCiAgICAgICAgICAgICAgICBNb250aCAgPT4gJE5ld1N0YXJ0RGF0ZVsxXSwKICAgICAgICAgICAgICAgIERheSAgICA9PiAkTmV3U3RhcnREYXRlWzJdLAogICAgICAgICAgICAgICAgSG91ciAgID0+IDAsCiAgICAgICAgICAgICAgICBNaW51dGUgPT4gMCwKICAgICAgICAgICAgICAgIFNlY29uZCA9PiAwLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU3RvcERhdGUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5EYXRlMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICBZZWFyICAgPT4gJE5ld1N0b3BEYXRlWzBdLAogICAgICAgICAgICAgICAgTW9udGggID0+ICROZXdTdG9wRGF0ZVsxXSwKICAgICAgICAgICAgICAgIERheSAgICA9PiAkTmV3U3RvcERhdGVbMl0sCiAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjMsCiAgICAgICAgICAgICAgICBNaW51dGUgPT4gNTksCiAgICAgICAgICAgICAgICBTZWNvbmQgPT4gNTksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNhbGN1bGF0ZSBudW1iZXIgb2YgZGF5cyB3aXRoaW4gdGhlIGdpdmVuIHJhbmdlCiAgICAgICAgbXkgJERheXMgPSBpbnQoICggJFN0b3BEYXRlIC0gJFN0YXJ0RGF0ZSApIC8gODY0MDAgKSArIDE7CgogICAgICAgIERBWToKICAgICAgICBmb3IgbXkgJERheSAoIDAgLi4gJERheXMgKSB7CgogICAgICAgICAgICAjIGdldCBkYXkgcmVsYXRpdmUgdG8gc3RhcnQgZGF0ZQogICAgICAgICAgICBteSAkRGF0ZU9mUGVyaW9kID0gJFN0YXJ0RGF0ZSArICREYXkgKiA4NjQwMDsKCiAgICAgICAgICAgICMgZ2V0IG5lZWRlZCBkYXRlIHZhbHVlcyBvdXQgb2YgdGltZXN0YW1wCiAgICAgICAgICAgIG15IEBEYXRlVmFsdWVzID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkRGF0ZU9mUGVyaW9kLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgd29ya2luZyB1bml0IGZvciB1c2VyIGFuZCBkYXkKICAgICAgICAgICAgbXkgJVdvcmtpbmdVbml0ID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0dldCgKICAgICAgICAgICAgICAgIFllYXIgICA9PiAkRGF0ZVZhbHVlc1sgJERhdGVJbmRleFRvTmFtZXsnWWVhcid9IF0sCiAgICAgICAgICAgICAgICBNb250aCAgPT4gJERhdGVWYWx1ZXNbICREYXRlSW5kZXhUb05hbWV7J01vbnRoJ30gXSwKICAgICAgICAgICAgICAgIERheSAgICA9PiAkRGF0ZVZhbHVlc1sgJERhdGVJbmRleFRvTmFtZXsnRGF5J30gXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBleHRyYWN0IGRldGFpbGVkIGluZm9ybWF0aW9uCiAgICAgICAgICAgIG15IEBEYXlXb3JraW5nVW5pdHMgPSBAeyAkV29ya2luZ1VuaXR7V29ya2luZ1VuaXRzfSB8fCBbXSB9OwoKICAgICAgICAgICAgIyBjaGVjayBmb3IgcHJvamVjdCByZXN0cmljdGlvbnMKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJFBhcmFte1BhcmFtfXtSZXN0cmljdGlvbnN9LT57UHJvamVjdH0KICAgICAgICAgICAgICAgICYmIHJlZiAkUGFyYW17UGFyYW19e1Jlc3RyaWN0aW9uc30tPntQcm9qZWN0fSBlcSAnQVJSQVknCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIG1hdGNoaW5nIGhhc2ggZm9yIHNlbGVjdGVkIHByb2plY3RzCiAgICAgICAgICAgICAgICBteSAlU2VsZWN0ZWRQcm9qZWN0SURzCiAgICAgICAgICAgICAgICAgICAgPSBtYXAgeyAoICRfID0+IDEgKSB9IEB7ICRQYXJhbXtQYXJhbX17UmVzdHJpY3Rpb25zfS0+e1Byb2plY3R9IH07CgogICAgICAgICAgICAgICAgIyBmaWx0ZXIgb25seSBzZWxlY3RlZCBwcm9qZWN0cwogICAgICAgICAgICAgICAgbXkgQEZpbHRlcmVkUHJvamVjdFdVcyA9IGdyZXAgewogICAgICAgICAgICAgICAgICAgICRTZWxlY3RlZFByb2plY3RJRHN7ICRfLT57UHJvamVjdElEfSB9CiAgICAgICAgICAgICAgICB9IEBEYXlXb3JraW5nVW5pdHM7CgogICAgICAgICAgICAgICAgQERheVdvcmtpbmdVbml0cyA9IEBGaWx0ZXJlZFByb2plY3RXVXM7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgZm9yIHRhc2sgcmVzdHJpY3Rpb25zCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRQYXJhbXtQYXJhbX17UmVzdHJpY3Rpb25zfS0+e1Byb2plY3RBY3Rpb259CiAgICAgICAgICAgICAgICAmJiByZWYgJFBhcmFte1BhcmFtfXtSZXN0cmljdGlvbnN9LT57UHJvamVjdEFjdGlvbn0gZXEgJ0FSUkFZJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBidWlsZCBtYXRjaGluZyBoYXNoIGZvciBzZWxlY3RlZCBhY3Rpb25zCiAgICAgICAgICAgICAgICBteSAlU2VsZWN0ZWRBY3Rpb25JRHMKICAgICAgICAgICAgICAgICAgICA9IG1hcCB7ICggJF8gPT4gMSApIH0gQHsgJFBhcmFte1BhcmFtfXtSZXN0cmljdGlvbnN9LT57UHJvamVjdEFjdGlvbn0gfTsKCiAgICAgICAgICAgICAgICAjIGZpbHRlciBvbmx5IHNlbGVjdGVkIGFjdGlvbnMKICAgICAgICAgICAgICAgIG15IEBGaWx0ZXJlZEFjdGlvbldVcyA9IGdyZXAgewogICAgICAgICAgICAgICAgICAgICRTZWxlY3RlZEFjdGlvbklEc3sgJF8tPntBY3Rpb25JRH0gfQogICAgICAgICAgICAgICAgfSBARGF5V29ya2luZ1VuaXRzOwoKICAgICAgICAgICAgICAgIEBEYXlXb3JraW5nVW5pdHMgPSBARmlsdGVyZWRBY3Rpb25XVXM7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgY2hlY2sgZm9yIHVzZXIgcmVzdHJpY3Rpb25zCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRQYXJhbXtQYXJhbX17UmVzdHJpY3Rpb25zfS0+e1VzZXJ9CiAgICAgICAgICAgICAgICAmJiByZWYgJFBhcmFte1BhcmFtfXtSZXN0cmljdGlvbnN9LT57VXNlcn0gZXEgJ0FSUkFZJwogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBidWlsZCBtYXRjaGluZyBoYXNoIGZvciBzZWxlY3RlZCBhY3Rpb25zCiAgICAgICAgICAgICAgICBteSAlU2VsZWN0ZWRVc2VySURzID0gbWFwIHsgKCAkXyA9PiAxICkgfSBAeyAkUGFyYW17UGFyYW19e1Jlc3RyaWN0aW9uc30tPntVc2VyfSB9OwoKICAgICAgICAgICAgICAgICMgZmlsdGVyIG9ubHkgc2VsZWN0ZWQgYWN0aW9ucwogICAgICAgICAgICAgICAgbXkgQEZpbHRlcmVkVXNlcldVcyA9IGdyZXAgewogICAgICAgICAgICAgICAgICAgICRTZWxlY3RlZFVzZXJJRHN7ICRfLT57VXNlcklEfSB9CiAgICAgICAgICAgICAgICB9IEBEYXlXb3JraW5nVW5pdHM7CgogICAgICAgICAgICAgICAgQERheVdvcmtpbmdVbml0cyA9IEBGaWx0ZXJlZFVzZXJXVXM7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZG8gbm90IHN0b3JlIGRhdGEgaWYgbm8gZGF0YSBpcyBhdmFpbGFibGUKICAgICAgICAgICAgbmV4dCBEQVkgaWYgIUBEYXlXb3JraW5nVW5pdHM7CgogICAgICAgICAgICAjIGFkZCBkYXRhIHRvIGdsb2JhbCByZXN1bHQgc2V0CiAgICAgICAgICAgIHB1c2ggQFJldHVybiwgQERheVdvcmtpbmdVbml0czsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFxAUmV0dXJuOwoKfQoKMTsK
IyAtLQojIHNjcmlwdHMvdGVzdC9UaW1lQWNjb3VudGluZy50IC0gVGltZUFjY291bnRpbmcgdGVzdHNjcmlwdAojIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgZGVjbGFyZSBleHRlcm5hbGx5IGRlZmluZWQgdmFyaWFibGVzIHRvIGF2b2lkIGVycm9ycyB1bmRlciAndXNlIHN0cmljdCcKdXNlIHZhcnMgcXcoJFNlbGYpOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaW1lQWNjb3VudGluZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpVc2VyOwoKIyBjcmVhdGUgbG9jYWwgb2JqZWN0Cm15ICRVc2VyT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlVzZXItPm5ldyggJXskU2VsZn0gKTsKCiMgZGF0YSBmb3IgbmV3IHVzZXIKbXkgJFJhbmRvbU51bWJlciA9IGludCggcmFuZCgxMDAwMCkgKTsKbXkgJVVzZXJEYXRhICAgICA9ICgKICAgIFVzZXJGaXJzdG5hbWUgPT4gJ1VuaXQgVGVzdCcsCiAgICBVc2VyTGFzdG5hbWUgID0+ICdVc2VyJywKICAgIFVzZXJMb2dpbiAgICAgPT4gJ1VuaXRUZXN0JyAuICRSYW5kb21OdW1iZXIsCiAgICBVc2VyUHcgICAgICAgID0+ICdwYXNzJywKICAgIFVzZXJFbWFpbCAgICAgPT4gJ2VtYWlsQG15ZG9tYWluLmNvbScsCiAgICBWYWxpZElEICAgICAgID0+IDEsCiAgICBDaGFuZ2VVc2VySUQgID0+IDEsCik7CgojIGNyZWF0ZSB0ZXN0IHVzZXIKbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyQWRkKCVVc2VyRGF0YSk7CgojIGNyZXRlIGxvY2FsIG9iamVjdApteSAkVGltZUFjY291bnRpbmdPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6VGltZUFjY291bnRpbmctPm5ldygKICAgICV7JFNlbGZ9LAogICAgVXNlcklEICAgICA9PiAkVXNlcklELAogICAgVXNlck9iamVjdCA9PiAkVXNlck9iamVjdCwKKTsKCiMgZGF0YSBmb3IgdGhlIG5ldyBhY3Rpb24gKHRhc2spCm15ICVOZXdBY3Rpb25EYXRhID0gKAogICAgQWN0aW9uICAgICAgID0+ICdUZXN0QWN0aW9uJyAuICRSYW5kb21OdW1iZXIsCiAgICBBY3Rpb25TdGF0dXMgPT4gMSwKKTsKCiMgY3JlYXRlIGEgbmV3IGFjdGlvbiAodGFzaykKbXkgJEluc2VydCA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+QWN0aW9uU2V0dGluZ3NJbnNlcnQoJU5ld0FjdGlvbkRhdGEpOwoKIyB2ZXJpZnkgdGhhdCB0aGUgYWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgaW5zZXJ0ZWQKJFNlbGYtPlRydWUoCiAgICAkSW5zZXJ0LAogICAgJ0luc2VydCB0ZXN0IGFjdGlvbiBzZXR0aW5ncyBpbnRvIGRhdGFiYXNlJywKKTsKCiMgZ2V0IHRoZSBhY3Rpb24gZGF0YSB0aGF0IHdhcyBpbnNlcnRlZCBhYm92ZQpteSAlQWN0aW9uRGF0YSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+QWN0aW9uR2V0KCBBY3Rpb24gPT4gJE5ld0FjdGlvbkRhdGF7QWN0aW9ufSApOwoKIyB2ZXJpZnkgdGhhdCB0aGUgZGF0YSBzYXZlZCBpbiB0aGUgREIgaXMgdGhlIHNhbWUgdGhhdCB3YXMgaW5zZXJ0ZWQKJFNlbGYtPklzKAogICAgJEFjdGlvbkRhdGF7QWN0aW9uU3RhdHVzfSwKICAgICROZXdBY3Rpb25EYXRhe0FjdGlvblN0YXR1c30sCiAgICAnQ29tcGFyZSBhY3Rpb24gc3RhdHVzIHNhdmVkIGluIERCIHdpdGggdGhlIGluc2VydGVkIG9uZScsCik7CgojIG1vZGlmeSB0aGUgYWN0aW9uIG5hbWUKbXkgJFVwZGF0ZSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+QWN0aW9uU2V0dGluZ3NVcGRhdGUoCiAgICBBY3Rpb25JRCAgICAgPT4gJEFjdGlvbkRhdGF7SUR9LAogICAgQWN0aW9uICAgICAgID0+ICROZXdBY3Rpb25EYXRhe0FjdGlvbn0gLiAnbW9kaWZpZWQnLAogICAgQWN0aW9uU3RhdHVzID0+IDEsCik7CgojIHZlcmlmeSB0aGF0IHRoZSBhY3Rpb24gd2FzIHVwZGF0ZWQKJFNlbGYtPlRydWUoCiAgICAkVXBkYXRlLAogICAgJ1VwZGF0ZSB0ZXN0IGFjdGlvbiBzZXR0aW5ncycsCik7CgojIGdldCBhbGwgYWN0aW9ucyBkYXRhCm15ICVBbGxBY3Rpb25zID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5BY3Rpb25TZXR0aW5nc0dldCgpOwoKIyB2ZXJpZnkgdGhlIGxhc3QgbW9kaWZpY2F0aW9uCiRTZWxmLT5JcygKICAgICRBbGxBY3Rpb25zeyAkQWN0aW9uRGF0YXtJRH0gfXtBY3Rpb259LAogICAgJE5ld0FjdGlvbkRhdGF7QWN0aW9ufSAuICdtb2RpZmllZCcsCiAgICAnQ29tcGFyZSBhY3Rpb24gbmFtZSBzYXZlZCBpbiBEQiB3aXRoIHRoZSBzcGVjaWZpZWQgaW4gdGhlIHVwZGF0ZScsCik7CgojIGRhdGEgZm9yIHRoZSBuZXcgcHJvamVjdApteSAlTmV3UHJvamVjdERhdGEgPSAoCiAgICBQcm9qZWN0ICAgICAgICAgICAgPT4gJ1Rlc3RQcm9qZWN0JyAuICRSYW5kb21OdW1iZXIsCiAgICBQcm9qZWN0RGVzY3JpcHRpb24gPT4gJ1Rlc3QnLAogICAgUHJvamVjdFN0YXR1cyAgICAgID0+IDEsCik7CgojIGNyZWF0ZSBhIG5ldyBwcm9qZWN0Cm15ICRQcm9qZWN0SUQgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlByb2plY3RTZXR0aW5nc0luc2VydCglTmV3UHJvamVjdERhdGEpOwoKIyB2ZXJpZnkgdGhhdCB0aGUgYWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgaW5zZXJ0ZWQKJFNlbGYtPlRydWUoCiAgICAkUHJvamVjdElELAogICAgJ0luc2VydCB0ZXN0IHByb2plY3Qgc2V0dGluZ3MgaW50byBkYXRhYmFzZScsCik7CgojIGdldCB0aGUgYWN0aW9uIGRhdGEgdGhhdCB3YXMgaW5zZXJ0ZWQgYWJvdmUKbXkgJVByb2plY3REYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Qcm9qZWN0R2V0KCBJRCA9PiAkUHJvamVjdElEICk7CgojIHZlcmlmeSB0aGF0IHRoZSBkYXRhIHNhdmVkIGluIHRoZSBEQiBpcyB0aGUgc2FtZSB0aGF0IHdhcyBpbnNlcnRlZAokU2VsZi0+SXMoCiAgICAkUHJvamVjdERhdGF7UHJvamVjdH0sCiAgICAkTmV3UHJvamVjdERhdGF7UHJvamVjdH0sCiAgICAnQ29tcGFyZSBwcm9qZWN0IG5hbWUgc2F2ZWQgaW4gREIgd2l0aCB0aGUgaW5zZXJ0ZWQgb25lJywKKTsKJFNlbGYtPklzKAogICAgJFByb2plY3REYXRhe1Byb2plY3REZXNjcmlwdGlvbn0sCiAgICAkTmV3UHJvamVjdERhdGF7UHJvamVjdERlc2NyaXB0aW9ufSwKICAgICdDb21wYXJlIHByb2plY3QgZGVzY3JpcHRpb24gc2F2ZWQgaW4gREIgd2l0aCB0aGUgaW5zZXJ0ZWQgb25lJywKKTsKJFNlbGYtPklzKAogICAgJFByb2plY3REYXRhe1Byb2plY3RTdGF0dXN9LAogICAgJE5ld1Byb2plY3REYXRhe1Byb2plY3RTdGF0dXN9LAogICAgJ0NvbXBhcmUgcHJvamVjdCBzdGF0dXMgc2F2ZWQgaW4gREIgd2l0aCB0aGUgaW5zZXJ0ZWQgb25lJywKKTsKCiMgbW9kaWZ5IHRoZSBwcm9qZWN0IG5hbWUKJFVwZGF0ZSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+UHJvamVjdFNldHRpbmdzVXBkYXRlKAogICAgSUQgICAgICAgICAgICAgICAgID0+ICRQcm9qZWN0SUQsCiAgICBQcm9qZWN0ICAgICAgICAgICAgPT4gJE5ld1Byb2plY3REYXRhe1Byb2plY3R9IC4gJ21vZGlmaWVkJywKICAgIFByb2plY3REZXNjcmlwdGlvbiA9PiAnVGVzdCcsCiAgICBQcm9qZWN0U3RhdHVzICAgICAgPT4gMSwKKTsKCiMgdmVyaWZ5IHRoYXQgdGhlIGFjdGlvbiB3YXMgdXBkYXRlZAokU2VsZi0+VHJ1ZSgKICAgICRVcGRhdGUsCiAgICAnVXBkYXRlIHRlc3QgcHJvamVjdCBzZXR0aW5ncycsCik7CgojIGdldCBhbGwgcHJvamVjdHMgZGF0YQpteSAlQWxsUHJvamVjdHMgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlByb2plY3RTZXR0aW5nc0dldCggU3RhdHVzID0+ICd2YWxpZCcgKTsKCiMgdmVyaWZ5IHRoZSBsYXN0IG1vZGlmaWNhdGlvbgokU2VsZi0+SXMoCiAgICAkQWxsUHJvamVjdHN7UHJvamVjdH17JFByb2plY3RJRH0sCiAgICAkTmV3UHJvamVjdERhdGF7UHJvamVjdH0gLiAnbW9kaWZpZWQnLAogICAgJ0NvbXBhcmUgcHJvamVjdCBuYW1lIHNhdmVkIGluIERCIHdpdGggdGhlIHNwZWNpZmllZCBpbiB0aGUgdXBkYXRlJywKKTsKCiMgb2J0YWluIHRoZSBsYXN0IHJlZ2lzdGVyZWQgcGVyaW9kIG9mIHRoZSB0ZXN0IHVzZXIKbXkgJExhc3RQZXJpb2ROdW1iZXIgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlVzZXJMYXN0UGVyaW9kTnVtYmVyR2V0KCBVc2VySUQgPT4gJFVzZXJJRCApICsgMTsKCiMgY3JlYXRlIHJlZ2lzdHJ5IGZvciB0aGUgbmV3IHVzZXIgaW4gVEEKJEluc2VydCA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+VXNlclNldHRpbmdzSW5zZXJ0KAogICAgVXNlcklEID0+ICRVc2VySUQsCiAgICBQZXJpb2QgPT4gJExhc3RQZXJpb2ROdW1iZXIsCik7CgojIHZlcmlmeSB0aGF0IHRoZSB1c2VyIHdhcyBzdWNjZXNzZnVsbHkgaW5zZXJ0ZWQKJFNlbGYtPlRydWUoCiAgICAkSW5zZXJ0LAogICAgJ0luc2VydCB0ZXN0IHVzZXIgc2V0dGluZ3MgaW50byBkYXRhYmFzZScsCik7CgojIGluc2VydCBhbm90aGVyIHBlcmlvZCBlbnRyeSBmb3IgdGhlIHNhbWUgdXNlcgokSW5zZXJ0ID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyU2V0dGluZ3NJbnNlcnQoCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgIFBlcmlvZCA9PiAkTGFzdFBlcmlvZE51bWJlciArIDEsCik7CgojIHZlcmlmeSB0aGF0IHRoZSB1c2VyIHdhcyBzdWNjZXNzZnVsbHkgaW5zZXJ0ZWQKJFNlbGYtPlRydWUoCiAgICAkSW5zZXJ0LAogICAgJ0luc2VydCB0aW1lIHBlcmlvZCBmb3IgdGVzdCB1c2VyIHNldHRpbmdzIGludG8gZGF0YWJhc2UnLAopOwoKJFJhbmRvbU51bWJlciA9IGludCggcmFuZCgxMDApICk7CgojIHVwZGF0ZSB1c2VyIGRhdGEKJFVwZGF0ZSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+VXNlclNldHRpbmdzVXBkYXRlKAogICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgRGVzY3JpcHRpb24gICA9PiAnVGVzdCB1c2VyJyAuICRSYW5kb21OdW1iZXIsCiAgICBDcmVhdGVQcm9qZWN0ID0+IDEsCiAgICBTaG93T3ZlcnRpbWUgID0+IDEsCiAgICBQZXJpb2QgICAgICAgID0+IHsKICAgICAgICAxID0+IHsKICAgICAgICAgICAgRGF0ZVN0YXJ0ICAgPT4gJzIwMTEtMDEtMDEnLAogICAgICAgICAgICBEYXRlRW5kICAgICA9PiAnMjAxMS0wMS0zMScsCiAgICAgICAgICAgIFdlZWtseUhvdXJzID0+ICRSYW5kb21OdW1iZXIsCiAgICAgICAgICAgIExlYXZlRGF5cyAgID0+ICcxMCcsCiAgICAgICAgICAgIE92ZXJ0aW1lICAgID0+ICcyMCcsCiAgICAgICAgICAgIFVzZXJTdGF0dXMgID0+IDEsCiAgICAgICAgfSwKICAgICAgICAyID0+IHsKICAgICAgICAgICAgRGF0ZVN0YXJ0ICAgPT4gJzIwMTEtMDItMDEnLAogICAgICAgICAgICBEYXRlRW5kICAgICA9PiAnMjAxMS0xMi0zMScsCiAgICAgICAgICAgIFdlZWtseUhvdXJzID0+ICRSYW5kb21OdW1iZXIgKyAxMCwKICAgICAgICAgICAgTGVhdmVEYXlzICAgPT4gJzUnLAogICAgICAgICAgICBPdmVydGltZSAgICA9PiAnMTAnLAogICAgICAgICAgICBVc2VyU3RhdHVzICA9PiAxLAogICAgICAgIH0sCiAgICB9LAopOwoKIyB2ZXJpZnkgdGhhdCB0aGUgYWN0aW9uIHdhcyB1cGRhdGVkCiRTZWxmLT5UcnVlKAogICAgJFVwZGF0ZSwKICAgICdVcGRhdGUgdGVzdCB1c2VyIHNldHRpbmdzJywKKTsKCiMgZ2V0IHVzZXIgc2V0dGluZ3MKbXkgJVNpbmdsZVVzZXJEYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5TaW5nbGVVc2VyU2V0dGluZ3NHZXQoIFVzZXJJRCA9PiAkVXNlcklEICk7CgojIHZlcmlmeSB0aGUgbGFzdCBtb2RpZmljYXRpb24KJFNlbGYtPklzKAogICAgaW50ICRTaW5nbGVVc2VyRGF0YXsxfXtXZWVrbHlIb3Vyc30sCiAgICAkUmFuZG9tTnVtYmVyLAogICAgJ0NvbXBhcmUgd2Vla2x5IGhvdXJzIGZvciBwZXJpb2QgMSBzYXZlZCBpbiBEQiB3aXRoIHRoZSBzcGVjaWZpZWQgaW4gdGhlIHVwZGF0ZScsCik7CgokU2VsZi0+SXMoCiAgICBpbnQgJFNpbmdsZVVzZXJEYXRhezJ9e1dlZWtseUhvdXJzfSwKICAgICRSYW5kb21OdW1iZXIgKyAxMCwKICAgICdDb21wYXJlIHdlZWtseSBob3VycyBmb3IgcGVyaW9kIDIgc2F2ZWQgaW4gREIgd2l0aCB0aGUgc3BlY2lmaWVkIGluIHRoZSB1cGRhdGUnLAopOwoKIyBnZXQgdXNlciBkYXRhCiVTaW5nbGVVc2VyRGF0YSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+VXNlckdldCggVXNlcklEID0+ICRVc2VySUQgKTsKCiMgY29tcGFyZSBkYXRhIHNhdmVkIG9uIHRoZSBEQiB3aXRoIHRoZSBpbnNlcnRlZCBvbmUKJFNlbGYtPklzKAogICAgJFNpbmdsZVVzZXJEYXRhe0Rlc2NyaXB0aW9ufSwKICAgICdUZXN0IHVzZXInIC4gJFJhbmRvbU51bWJlciwKICAgICdDb21wYXJlIGRlc2NyaXB0aW9uIHNhdmVkIG9uIHRoZSBEQiB3aXRoIHRoZSBzcGVjaWZpZWQgaW4gdGhlIGluc2VydGlvbicsCik7CgojIGdldCBhbGwgdXNlcnMgZGF0YQpteSAlQWxsVXNlcnNEYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyTGlzdCgpOwoKIyB2ZXJpZnkgdGhhdCB0aGUgdGVzdCB1c2VyIGlzIGluIHRoZSBsaXN0CiRTZWxmLT5UcnVlKAogICAgJEFsbFVzZXJzRGF0YXskVXNlcklEfXtEZXNjcmlwdGlvbn0sCiAgICAnVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIHRlc3QgdXNlciBpbiB0aGUgbGlzdCcKKTsKCiMgZ2V0IGFsbCBwZXJpb2RzIG9mIGRhdGEgb2YgYWxsIHVzZXJzCm15ICVBbGxVc2Vyc1BlcmlvZERhdGEgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlVzZXJTZXR0aW5nc0dldCgpOwoKIyB2ZXJpZnkgdGhlIHBlcmlvZCBkYXRhIG9mIHRoZSB0ZXN0IHVzZXIKbXkgJENvcnJlY3RVc2VyRGF0YSA9CiAgICAoCiAgICAkQWxsVXNlcnNQZXJpb2REYXRheyRVc2VySUR9ezF9e1dlZWtseUhvdXJzfSA9PSAkUmFuZG9tTnVtYmVyCiAgICAgICAgJiYgJEFsbFVzZXJzUGVyaW9kRGF0YXskVXNlcklEfXsxfXtMZWF2ZURheXN9ID09IDEwCiAgICAgICAgJiYgJEFsbFVzZXJzUGVyaW9kRGF0YXskVXNlcklEfXsxfXtPdmVydGltZX0gPT0gMjAKICAgICAgICAmJiAkQWxsVXNlcnNQZXJpb2REYXRheyRVc2VySUR9ezF9e1VzZXJTdGF0dXN9CiAgICAgICAgJiYgJEFsbFVzZXJzUGVyaW9kRGF0YXskVXNlcklEfXsyfXtXZWVrbHlIb3Vyc30gPT0gJFJhbmRvbU51bWJlciArIDEwCiAgICAgICAgJiYgJEFsbFVzZXJzUGVyaW9kRGF0YXskVXNlcklEfXsyfXtMZWF2ZURheXN9ID09IDUKICAgICAgICAmJiAkQWxsVXNlcnNQZXJpb2REYXRheyRVc2VySUR9ezJ9e092ZXJ0aW1lfSA9PSAxMAogICAgICAgICYmICRBbGxVc2Vyc1BlcmlvZERhdGF7JFVzZXJJRH17Mn17VXNlclN0YXR1c30KICAgICkgPyAxIDogMDsKCiRTZWxmLT5UcnVlKAogICAgJENvcnJlY3RVc2VyRGF0YSwKICAgICdWZXJpZnkgdGhlIHBlcmlvZCBkYXRhIG9mIHRoZSB0ZXN0IHVzZXIgaW4gdGhlIGxpc3QnCik7CgojIGdldCBjdXJyZW50IHBlcmlvZCBvZiB1c2VyCm15ICVVc2VyQ3VycmVudFBlcmlvZCA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+VXNlckN1cnJlbnRQZXJpb2RHZXQoCiAgICBZZWFyICA9PiAnMjAxMScsCiAgICBNb250aCA9PiAnMDEnLAogICAgRGF5ICAgPT4gJzE1JywKKTsKCiMgY2hlY2sgdGhlIHBlcmlvZAokU2VsZi0+SXMoCiAgICAkVXNlckN1cnJlbnRQZXJpb2R7JFVzZXJJRH0tPntQZXJpb2R9LAogICAgMSwKICAgICdWZXJpZnkgY3VycmVudCBwZXJpb2QnLAopOwoKJFNlbGYtPklzKAogICAgJFVzZXJDdXJyZW50UGVyaW9keyRVc2VySUR9LT57RGF0ZVN0YXJ0fSwKICAgICcyMDExLTAxLTAxJywKICAgICdWZXJpZnkgc3RhcnQgZGF0ZSBvZiBjdXJyZW50IHBlcmlvZCcsCik7CgokU2VsZi0+SXMoCiAgICAkVXNlckN1cnJlbnRQZXJpb2R7JFVzZXJJRH0tPntEYXRlRW5kfSwKICAgICcyMDExLTAxLTMxJywKICAgICdWZXJpZnkgZW5kIGRhdGUgb2YgY3VycmVudCBwZXJpb2QnLAopOwoKIyBoYXNoIHdpdGggdGhlIHdvcmtpbmcgdW5pdHMgZm9yIEphbi4gMTV0aCwgMjAxMQpteSAlV29ya2luZ1VuaXRzID0gKAogICAgWWVhciAgICAgICAgID0+ICcyMDExJywKICAgIE1vbnRoICAgICAgICA9PiAnMDEnLAogICAgRGF5ICAgICAgICAgID0+ICcxNScsCiAgICBMZWF2ZURheSAgICAgPT4gMCwKICAgIFNpY2sgICAgICAgICA9PiAwLAogICAgT3ZlcnRpbWUgICAgID0+IDAsCiAgICBXb3JraW5nVW5pdHMgPT4gWwogICAgICAgIHsKICAgICAgICAgICAgUHJvamVjdElEID0+ICRQcm9qZWN0SUQsCiAgICAgICAgICAgIEFjdGlvbklEICA9PiAkQWN0aW9uRGF0YXtJRH0sCiAgICAgICAgICAgIFJlbWFyayAgICA9PiAnTXkgY29tbWVudCcsCiAgICAgICAgICAgIFN0YXJ0VGltZSA9PiAnNzowMCcsCiAgICAgICAgICAgIEVuZFRpbWUgICA9PiAnMTA6MDAnLAogICAgICAgICAgICBQZXJpb2QgICAgPT4gMy4wLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBQcm9qZWN0SUQgPT4gJFByb2plY3RJRCwKICAgICAgICAgICAgQWN0aW9uSUQgID0+ICRBY3Rpb25EYXRhe0lEfSwKICAgICAgICAgICAgUmVtYXJrICAgID0+ICdNeSBjb21tZW50JywKICAgICAgICAgICAgU3RhcnRUaW1lID0+ICcxMzowMCcsCiAgICAgICAgICAgIEVuZFRpbWUgICA9PiAnMTU6MDAnLAogICAgICAgICAgICBQZXJpb2QgICAgPT4gMi4wLAogICAgICAgIH0sCiAgICBdLAopOwoKIyBpbnNlcnQgd29ya2luZyB1bml0cyBpbiB0aGUgREIKJEluc2VydCA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+V29ya2luZ1VuaXRzSW5zZXJ0KCVXb3JraW5nVW5pdHMpOwoKIyB2ZXJpZnkgdGhhdCB0aGUgd29ya2luZyB1bml0cyB3ZXJlIHN1Y2Nlc3NmdWxseSBpbnNlcnRlZAokU2VsZi0+VHJ1ZSgKICAgICRJbnNlcnQsCiAgICAnSW5zZXJ0IHdvcmtpbmcgdW5pdHMgZm9yIHRlc3QgdXNlciBpbnRvIGRhdGFiYXNlJywKKTsKCiMgZ2V0IGFsbCBkYXlzIHdpdGhvdXQgd29ya2luZyB1bml0cyBlbnRyeQpteSAlV29ya2luZ1VuaXRzQ2hlY2sgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPldvcmtpbmdVbml0c0NvbXBsZXRuZXNzQ2hlY2soCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKKTsKCiMgdmVyaWZ5IHRoYXQgSmFuIDE1dGgsIDIwMTEgaXMgbm90IGluIHRoZSBsaXN0IG9mIGRheXMgd2l0aG91dCBlbnRyeQokU2VsZi0+RmFsc2UoCiAgICBkZWZpbmVkICRXb3JraW5nVW5pdHNDaGVja3snSW5jb21wbGV0ZSd9eycyMDExJ317JzAxJ317JzE1J30sCiAgICAnVmVyaWZ5IGNvbXBsZXRpb24gb2Ygd29ya2luZyB1bml0cycKKTsKCiMgZ2V0IHdvcmtpbmcgdW5pdHMgb2YgYWxsIHVzZXJzCm15ICVEYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyUmVwb3J0aW5nKAogICAgWWVhciAgPT4gJzIwMTEnLAogICAgTW9udGggPT4gJzAxJywKICAgIERheSAgID0+ICcxNScsCik7CgojIHZlcmlmeSB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHdvcmtpbmcgdW5pdHMgZm9yIHRoZSB0ZXN0IHVzZXIKJFNlbGYtPklzKAogICAgJERhdGF7JFVzZXJJRH17V29ya2luZ0hvdXJzVG90YWx9LAogICAgNSwKICAgICdWZXJpZnkgbnVtYmVyIG9mIHdvcmtpbmcgaG91cnMgb2YgdGhlIHRlc3QgdXNlcicsCik7CgojIGdldCBwcm9qZWN0cyBpbiB3aGljaCB0aGUgdGVzdCB1c2VyIGhhcyB3b3JrZWQgb24KbXkgQExhc3RQcm9qZWN0cyA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+TGFzdFByb2plY3RzT2ZVc2VyKCk7CgpteSAkVGVzdFByb2plY3RFeGlzdGVuY2U7Cgpmb3IgbXkgJElEIChATGFzdFByb2plY3RzKSB7CiAgICBuZXh0IGlmICRJRCAhPSAkUHJvamVjdElEOwogICAgJFRlc3RQcm9qZWN0RXhpc3RlbmNlID0gMTsKfQoKIyB2ZXJpZnkgdGhhdCBleGlzdGVuY2Ugb2YgdGhlIHRlc3QgcHJvamVjdCBpbnRvIHRoZSB1c2VyJ3MgbGlzdAokU2VsZi0+VHJ1ZSgKICAgICRUZXN0UHJvamVjdEV4aXN0ZW5jZSwKICAgICdWZXJpZnkgdGhhdCBleGlzdGVuY2Ugb2YgdGhlIHRlc3QgcHJvamVjdCBpbnRvIHRoZSB1c2VyXCdzIGxpc3QnLAopOwoKIyBnZXQgcHJvamVjdCAtIGFjdGlvbiB3b3JraW5nIGhvdXJzCm15ICVQcm9qZWN0QWN0aW9uV29ya2luZ0hvdXJzID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Qcm9qZWN0QWN0aW9uUmVwb3J0aW5nKAogICAgWWVhciAgID0+IDIwMTEsCiAgICBNb250aCAgPT4gMSwKICAgIFVzZXJJRCA9PiAkVXNlcklELAopOwoKIyB2ZXJpZnkgdG90YWwgcmVwb3J0ZWQgaG91cnMgZm9yIHRoZSB0ZXN0IGFjdGlvbiAodGFzaykgYW5kIHRlc3QgcHJvamVjdAokU2VsZi0+SXMoCiAgICAkUHJvamVjdEFjdGlvbldvcmtpbmdIb3Vyc3skUHJvamVjdElEfXtBY3Rpb25zfXsgJEFjdGlvbkRhdGF7SUR9IH17VG90YWx9LAogICAgJzUnLAogICAgJ1ZlcmlmeSB0b3RhbCByZXBvcnRlZCBob3VycyBmb3IgdGhlIHRlc3QgYWN0aW9uICh0YXNrKSBhbmQgdGVzdCBwcm9qZWN0JywKKTsKCiMgZ2V0IHByb2plY3Qgd29ya2luZyB1bml0cwpteSBAUHJvamVjdEhpc3RvcnlBcnJheSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+UHJvamVjdEhpc3RvcnkoIFByb2plY3RJRCA9PiAkUHJvamVjdElEICk7CgpteSAkVG90YWxIb3VyczsKCiMgZ2V0IHN1bSBvZiBhbGwgd29ya2luZyB1bml0IGZvciB0aGUgdGVzdCBwcm9qZWN0CmZvciBteSAkUHJvamVjdCAoQFByb2plY3RIaXN0b3J5QXJyYXkpIHsKICAgICRUb3RhbEhvdXJzICs9ICRQcm9qZWN0LT57UGVyaW9kfTsKfQoKbXkgJFRlc3RQcm9qZWN0VG90YWxIb3VycyA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+UHJvamVjdFRvdGFsSG91cnMoCiAgICBQcm9qZWN0SUQgPT4gJFByb2plY3RJRCwKKTsKCiMgdmVyaWZ5IHRvdGFsIHdvcmtpbmcgdW5pdHMgZm9yIHRoZSB0ZXN0IHByb2plY3QKJFNlbGYtPklzKAogICAgaW50ICRUb3RhbEhvdXJzLAogICAgaW50ICRUZXN0UHJvamVjdFRvdGFsSG91cnMsCiAgICAnVmVyaWZ5IHRvdGFsIGhvdXJzIG9mIHRlc3QgcHJvamVjdCcsCik7CgojIGRlbGV0ZSB3b3JraW5nIHVuaXRzIGZvciBKYW4uIDE1dGgsIDIwMTEKbXkgJERlbGV0ZSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+V29ya2luZ1VuaXRzRGVsZXRlKAogICAgWWVhciAgPT4gJzIwMTEnLAogICAgTW9udGggPT4gJzEnLAogICAgRGF5ICAgPT4gJzE1JywKKTsKCiMgdmVyaWZ5IHRoYXQgdGhlIHdvcmtpbmcgdW5pdHMgd2VyZSBzdWNjZXNzZnVsbHkgZGVsZXRlZAokU2VsZi0+VHJ1ZSgKICAgICREZWxldGUsCiAgICAnRGVsZXRlIHdvcmtpbmcgdW5pdHMgZm9yIHRlc3QnLAopOwoKIyBnZXQgd29ya2luZyB1bml0cyBmb3IgSmFuLiAxNXRoLCAyMDExCm15ICVXb3JraW5nVW5pdHNEYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Xb3JraW5nVW5pdHNHZXQoCiAgICBZZWFyICAgPT4gJzIwMTEnLAogICAgTW9udGggID0+ICcxJywKICAgIERheSAgICA9PiAnMTUnLAogICAgVXNlcklEID0+ICRVc2VySUQsCik7CgojIHZlcmlmeSBpbmV4aXN0ZW5jZSBvZiB0aGUgZGVsZXRlZCB3b3JraW5nIHVuaXRzCiRTZWxmLT5JcygKICAgICRXb3JraW5nVW5pdHNEYXRhe1RvdGFsfSwKICAgICcwJywKICAgICdWZXJpZnkgaW5leGlzdGVuY2Ugb2YgdGhlIGRlbGV0ZWQgd29ya2luZyB1bml0cycsCik7CgojIHNldCB0byBpbnZhbGlkIGFsbCByZWdpc3RyaWVzIHVzZWQgZm9yIHRoZSB0ZXN0cwokVGltZUFjY291bnRpbmdPYmplY3QtPkFjdGlvblNldHRpbmdzVXBkYXRlKAogICAgQWN0aW9uSUQgICAgID0+ICRBY3Rpb25EYXRhe0lEfSwKICAgIEFjdGlvbiAgICAgICA9PiAkTmV3QWN0aW9uRGF0YXtBY3Rpb259IC4gJ21vZGlmaWVkJywKICAgIEFjdGlvblN0YXR1cyA9PiAwLAopOwoKJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Qcm9qZWN0U2V0dGluZ3NVcGRhdGUoCiAgICBJRCAgICAgICAgICAgICAgICAgPT4gJFByb2plY3RJRCwKICAgIFByb2plY3QgICAgICAgICAgICA9PiAkTmV3UHJvamVjdERhdGF7UHJvamVjdH0gLiAnbW9kaWZpZWQnLAogICAgUHJvamVjdERlc2NyaXB0aW9uID0+ICdUZXN0JywKICAgIFByb2plY3RTdGF0dXMgICAgICA9PiAwLAopOwoKJFVzZXJEYXRhe1ZhbGlkSUR9ID0gMjsKJFVzZXJEYXRhe1VzZXJJRH0gID0gJFVzZXJJRDsKJFVzZXJPYmplY3QtPlVzZXJVcGRhdGUoJVVzZXJEYXRhKTsKJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyU2V0dGluZ3NVcGRhdGUoCiAgICBVc2VySUQgICAgICAgID0+ICRVc2VySUQsCiAgICBEZXNjcmlwdGlvbiAgID0+ICdUZXN0IHVzZXInLAogICAgQ3JlYXRlUHJvamVjdCA9PiAwLAogICAgU2hvd092ZXJ0aW1lICA9PiAwLAogICAgUGVyaW9kICAgICAgICA9PiB7CiAgICAgICAgMSA9PiB7CiAgICAgICAgICAgIERhdGVTdGFydCAgID0+ICcyMDExLTAxLTAxJywKICAgICAgICAgICAgRGF0ZUVuZCAgICAgPT4gJzIwMTEtMDEtMzEnLAogICAgICAgICAgICBXZWVrbHlIb3VycyA9PiAnNTAnLAogICAgICAgICAgICBMZWF2ZURheXMgICA9PiAnMTAnLAogICAgICAgICAgICBPdmVydGltZSAgICA9PiAnMjAnLAogICAgICAgICAgICBVc2VyU3RhdHVzICA9PiAwLAogICAgICAgIH0sCiAgICAgICAgMiA9PiB7CiAgICAgICAgICAgIERhdGVTdGFydCAgID0+ICcyMDExLTAyLTAxJywKICAgICAgICAgICAgRGF0ZUVuZCAgICAgPT4gJzIwMTEtMDItMjgnLAogICAgICAgICAgICBXZWVrbHlIb3VycyA9PiAnMzAnLAogICAgICAgICAgICBMZWF2ZURheXMgICA9PiAnNScsCiAgICAgICAgICAgIE92ZXJ0aW1lICAgID0+ICcxMCcsCiAgICAgICAgICAgIFVzZXJTdGF0dXMgID0+IDAsCiAgICAgICAgfSwKICAgIH0sCik7CgoxOwo=
Ly8gLS0KLy8ganF1ZXJ5LWNvbWJvYm94LmpzIC0gc3BlY2lhbCBqcXVlcnkgdWkgY29tYm9ib3gKLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTAgT1RSUyBBRywgaHR0cDovL290cnMub3JnL1xuIjsKLy8gLS0KLy8gJElkOiBqcXVlcnktY29tYm9ib3guanMsdiAxLjQgMjAxMi0wMS0zMSAxMzo1NDozOCBtbiBFeHAgJAovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgooZnVuY3Rpb24oJCkgewogICAgJC53aWRnZXQoInVpLmNvbWJvYm94IiwgewogICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgQ2xhc3M6ICcnLAogICAgICAgICAgICBJRFByZWZpeElucHV0OiAnQ29tYm9fJywKICAgICAgICAgICAgSURQcmVmaXhCdXR0b246ICdDb21ib0J0bl8nLAogICAgICAgICAgICBWYWxpZGF0aW9uVG9vbHRpcDogJycsCiAgICAgICAgICAgIExhbmc6IHsKICAgICAgICAgICAgICAgIFNob3dBbGxJdGVtczogJ1Nob3cgYWxsIGl0ZW1zJwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBfY3JlYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIFNlbGYgPSB0aGlzLAogICAgICAgICAgICAgICAgJFNlbGVjdCA9IHRoaXMuZWxlbWVudC5oaWRlKCksCiAgICAgICAgICAgICAgICAkU2VsZWN0ZWQgPSAkU2VsZWN0LmNoaWxkcmVuKCI6c2VsZWN0ZWQiKSwKICAgICAgICAgICAgICAgIFZhbHVlID0gJFNlbGVjdGVkLnZhbCgpID8gJFNlbGVjdGVkLnRleHQoKSA6ICIiLAogICAgICAgICAgICAgICAgJElucHV0ID0gdGhpcy5pbnB1dCA9ICQoIjxpbnB1dD4iKQogICAgICAgICAgICAgICAgLmFkZENsYXNzKHRoaXMub3B0aW9ucy5DbGFzcykKICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsIHRoaXMub3B0aW9ucy5JRFByZWZpeElucHV0ICsgJFNlbGVjdFswXS5pZCkKICAgICAgICAgICAgICAgIC5pbnNlcnRBZnRlcigkU2VsZWN0KQogICAgICAgICAgICAgICAgLmNzcygnd2lkdGgnLCAkU2VsZWN0LndpZHRoKCkpCiAgICAgICAgICAgICAgICAudmFsKFZhbHVlKQogICAgICAgICAgICAgICAgLmF1dG9jb21wbGV0ZSh7CiAgICAgICAgICAgICAgICAgICAgZGVsYXk6IDAsCiAgICAgICAgICAgICAgICAgICAgbWluTGVuZ3RoOiAwLAogICAgICAgICAgICAgICAgICAgIHNvdXJjZTogZnVuY3Rpb24oUmVxdWVzdCwgUmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1hdGNoZXIgPSBuZXcgUmVnRXhwKCQudWkuYXV0b2NvbXBsZXRlLmVzY2FwZVJlZ2V4KFJlcXVlc3QudGVybSksICJpIiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2UoJFNlbGVjdC5jaGlsZHJlbigib3B0aW9uIikubWFwKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFRleHQgPSAkKHRoaXMpLnRleHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmICghUmVxdWVzdC50ZXJtIHx8IE1hdGNoZXIudGVzdChUZXh0KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFRleHQucmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIig/IVteJjtdKzspKD8hPFtePD5dKikoIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC51aS5hdXRvY29tcGxldGUuZXNjYXBlUmVnZXgoUmVxdWVzdC50ZXJtKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikoPyFbXjw+XSo+KSg/IVteJjtdKzspIiwgImdpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgIjxzdHJvbmc+JDE8L3N0cm9uZz4iICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBUZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb246IHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uKEV2ZW50LCBVSSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoVUkuaXRlbS5vcHRpb24uZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBVSS5pdGVtLm9wdGlvbi5zZWxlY3RlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIFNlbGYuX3RyaWdnZXIoInNlbGVjdGVkIiwgRXZlbnQsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IFVJLml0ZW0ub3B0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgb3BlbjogZnVuY3Rpb24oRXZlbnQsIFVJKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJ3VsLnVpLWF1dG9jb21wbGV0ZS51aS1tZW51JykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSAkKHRoaXMpLndpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLndpZHRoKHdpZHRoICsgMzApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oRXZlbnQsIFVJKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVUkuaXRlbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1hdGNoZXIgPSBuZXcgUmVnRXhwKCAiXiIgKyAkLnVpLmF1dG9jb21wbGV0ZS5lc2NhcGVSZWdleCggJCh0aGlzKS52YWwoKSApICsgIiQiLCAiaSIgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGVjdC5jaGlsZHJlbigib3B0aW9uIikuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS50ZXh0KCkubWF0Y2goTWF0Y2hlcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFZhbGlkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFWYWxpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBpbnZhbGlkIHZhbHVlLCBhcyBpdCBkaWRuJ3QgbWF0Y2ggYW55dGhpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnZhbCgiIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGVjdC52YWwoIiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRJbnB1dC5kYXRhKCJ1aUF1dG9jb21wbGV0ZSIpLnRlcm0gPSAiIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLmFkZENsYXNzKCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWxlZnQiKQogICAgICAgICAgICAgICAgLmFmdGVyKHRoaXMub3B0aW9ucy5WYWxpZGF0aW9uVG9vbHRpcCk7CgogICAgICAgICAgICAkSW5wdXQuZGF0YSgidWlBdXRvY29tcGxldGUiKS5fcmVuZGVySXRlbSA9IGZ1bmN0aW9uKFVMLCBJdGVtKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJCgiPGxpPjwvbGk+IikKICAgICAgICAgICAgICAgICAgICAuZGF0YSgiaXRlbS5hdXRvY29tcGxldGUiLCBJdGVtKQogICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoIjxhPiIgKyBJdGVtLmxhYmVsICsgIjwvYT4iKQogICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyhVTCk7CiAgICAgICAgICAgIH07CgogICAgICAgICAgICB0aGlzLmJ1dHRvbiA9ICQoIjxidXR0b24gdHlwZT0nYnV0dG9uJz4mbmJzcDs8L2J1dHRvbj4iKQogICAgICAgICAgICAgICAgLmF0dHIoInRhYkluZGV4IiwgLTEpCiAgICAgICAgICAgICAgICAuYXR0cigidGl0bGUiLCB0aGlzLm9wdGlvbnMuTGFuZy5TaG93QWxsSXRlbXMpCiAgICAgICAgICAgICAgICAuYXR0cignaWQnLCB0aGlzLm9wdGlvbnMuSURQcmVmaXhCdXR0b24gKyAkU2VsZWN0WzBdLmlkKQogICAgICAgICAgICAgICAgLmluc2VydEFmdGVyKCRJbnB1dCkKICAgICAgICAgICAgICAgIC5idXR0b24oewogICAgICAgICAgICAgICAgICAgIGljb25zOiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnk6ICJ1aS1pY29uLXRyaWFuZ2xlLTEtcyIKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIHRleHQ6IGZhbHNlCiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIikKICAgICAgICAgICAgICAgIC5hZGRDbGFzcygidWktY29ybmVyLXJpZ2h0IHVpLWJ1dHRvbi1pY29uIikKICAgICAgICAgICAgICAgIC5jbGljayhmdW5jdGlvbihFdmVudCkgewogICAgICAgICAgICAgICAgICAgIC8vIGNsb3NlIGlmIGFscmVhZHkgdmlzaWJsZQogICAgICAgICAgICAgICAgICAgIGlmICgkSW5wdXQuYXV0b2NvbXBsZXRlKCJ3aWRnZXQiKS5pcygiOnZpc2libGUiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkSW5wdXQuYXV0b2NvbXBsZXRlKCJjbG9zZSIpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBwYXNzIGVtcHR5IHN0cmluZyBhcyB2YWx1ZSB0byBzZWFyY2ggZm9yLCBkaXNwbGF5aW5nIGFsbCByZXN1bHRzCiAgICAgICAgICAgICAgICAgICAgJElucHV0LmF1dG9jb21wbGV0ZSgic2VhcmNoIiwgIiIpLmZvY3VzKCk7CiAgICAgICAgICAgICAgICAgICAgRXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICBFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICB9LAoKICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdGhpcy5pbnB1dC5yZW1vdmUoKTsKICAgICAgICAgICAgdGhpcy5idXR0b24ucmVtb3ZlKCk7CiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zaG93KCk7CiAgICAgICAgICAgICQuV2lkZ2V0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyk7CiAgICAgICAgfQogICAgfSk7Cn0pKGpRdWVyeSk7
LyohIGpRdWVyeSBVSSAtIHYxLjEwLjMgLSAyMDEzLTA4LTI3CiogaHR0cDovL2pxdWVyeXVpLmNvbQoqIEluY2x1ZGVzOiBqcXVlcnkudWkuYnV0dG9uLmpzCiogQ29weXJpZ2h0IDIwMTMgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyBMaWNlbnNlZCBNSVQgKi8KCihmdW5jdGlvbiggJCwgdW5kZWZpbmVkICkgewoKdmFyIGxhc3RBY3RpdmUsIHN0YXJ0WFBvcywgc3RhcnRZUG9zLCBjbGlja0RyYWdnZWQsCgliYXNlQ2xhc3NlcyA9ICJ1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIsCglzdGF0ZUNsYXNzZXMgPSAidWktc3RhdGUtaG92ZXIgdWktc3RhdGUtYWN0aXZlICIsCgl0eXBlQ2xhc3NlcyA9ICJ1aS1idXR0b24taWNvbnMtb25seSB1aS1idXR0b24taWNvbi1vbmx5IHVpLWJ1dHRvbi10ZXh0LWljb25zIHVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSB1aS1idXR0b24tdGV4dC1pY29uLXNlY29uZGFyeSB1aS1idXR0b24tdGV4dC1vbmx5IiwKCWZvcm1SZXNldEhhbmRsZXIgPSBmdW5jdGlvbigpIHsKCQl2YXIgZm9ybSA9ICQoIHRoaXMgKTsKCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewoJCQlmb3JtLmZpbmQoICI6dWktYnV0dG9uIiApLmJ1dHRvbiggInJlZnJlc2giICk7CgkJfSwgMSApOwoJfSwKCXJhZGlvR3JvdXAgPSBmdW5jdGlvbiggcmFkaW8gKSB7CgkJdmFyIG5hbWUgPSByYWRpby5uYW1lLAoJCQlmb3JtID0gcmFkaW8uZm9ybSwKCQkJcmFkaW9zID0gJCggW10gKTsKCQlpZiAoIG5hbWUgKSB7CgkJCW5hbWUgPSBuYW1lLnJlcGxhY2UoIC8nL2csICJcXCciICk7CgkJCWlmICggZm9ybSApIHsKCQkJCXJhZGlvcyA9ICQoIGZvcm0gKS5maW5kKCAiW25hbWU9JyIgKyBuYW1lICsgIiddIiApOwoJCQl9IGVsc2UgewoJCQkJcmFkaW9zID0gJCggIltuYW1lPSciICsgbmFtZSArICInXSIsIHJhZGlvLm93bmVyRG9jdW1lbnQgKQoJCQkJCS5maWx0ZXIoZnVuY3Rpb24oKSB7CgkJCQkJCXJldHVybiAhdGhpcy5mb3JtOwoJCQkJCX0pOwoJCQl9CgkJfQoJCXJldHVybiByYWRpb3M7Cgl9OwoKJC53aWRnZXQoICJ1aS5idXR0b24iLCB7Cgl2ZXJzaW9uOiAiMS4xMC4zIiwKCWRlZmF1bHRFbGVtZW50OiAiPGJ1dHRvbj4iLAoJb3B0aW9uczogewoJCWRpc2FibGVkOiBudWxsLAoJCXRleHQ6IHRydWUsCgkJbGFiZWw6IG51bGwsCgkJaWNvbnM6IHsKCQkJcHJpbWFyeTogbnVsbCwKCQkJc2Vjb25kYXJ5OiBudWxsCgkJfQoJfSwKCV9jcmVhdGU6IGZ1bmN0aW9uKCkgewoJCXRoaXMuZWxlbWVudC5jbG9zZXN0KCAiZm9ybSIgKQoJCQkudW5iaW5kKCAicmVzZXQiICsgdGhpcy5ldmVudE5hbWVzcGFjZSApCgkJCS5iaW5kKCAicmVzZXQiICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgZm9ybVJlc2V0SGFuZGxlciApOwoKCQlpZiAoIHR5cGVvZiB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgIT09ICJib29sZWFuIiApIHsKCQkJdGhpcy5vcHRpb25zLmRpc2FibGVkID0gISF0aGlzLmVsZW1lbnQucHJvcCggImRpc2FibGVkIiApOwoJCX0gZWxzZSB7CgkJCXRoaXMuZWxlbWVudC5wcm9wKCAiZGlzYWJsZWQiLCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgKTsKCQl9CgoJCXRoaXMuX2RldGVybWluZUJ1dHRvblR5cGUoKTsKCQl0aGlzLmhhc1RpdGxlID0gISF0aGlzLmJ1dHRvbkVsZW1lbnQuYXR0ciggInRpdGxlIiApOwoKCQl2YXIgdGhhdCA9IHRoaXMsCgkJCW9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsCgkJCXRvZ2dsZUJ1dHRvbiA9IHRoaXMudHlwZSA9PT0gImNoZWNrYm94IiB8fCB0aGlzLnR5cGUgPT09ICJyYWRpbyIsCgkJCWFjdGl2ZUNsYXNzID0gIXRvZ2dsZUJ1dHRvbiA/ICJ1aS1zdGF0ZS1hY3RpdmUiIDogIiIsCgkJCWZvY3VzQ2xhc3MgPSAidWktc3RhdGUtZm9jdXMiOwoKCQlpZiAoIG9wdGlvbnMubGFiZWwgPT09IG51bGwgKSB7CgkJCW9wdGlvbnMubGFiZWwgPSAodGhpcy50eXBlID09PSAiaW5wdXQiID8gdGhpcy5idXR0b25FbGVtZW50LnZhbCgpIDogdGhpcy5idXR0b25FbGVtZW50Lmh0bWwoKSk7CgkJfQoKCQl0aGlzLl9ob3ZlcmFibGUoIHRoaXMuYnV0dG9uRWxlbWVudCApOwoKCQl0aGlzLmJ1dHRvbkVsZW1lbnQKCQkJLmFkZENsYXNzKCBiYXNlQ2xhc3NlcyApCgkJCS5hdHRyKCAicm9sZSIsICJidXR0b24iICkKCQkJLmJpbmQoICJtb3VzZWVudGVyIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uKCkgewoJCQkJaWYgKCBvcHRpb25zLmRpc2FibGVkICkgewoJCQkJCXJldHVybjsKCQkJCX0KCQkJCWlmICggdGhpcyA9PT0gbGFzdEFjdGl2ZSApIHsKCQkJCQkkKCB0aGlzICkuYWRkQ2xhc3MoICJ1aS1zdGF0ZS1hY3RpdmUiICk7CgkJCQl9CgkJCX0pCgkJCS5iaW5kKCAibW91c2VsZWF2ZSIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlLCBmdW5jdGlvbigpIHsKCQkJCWlmICggb3B0aW9ucy5kaXNhYmxlZCApIHsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQkkKCB0aGlzICkucmVtb3ZlQ2xhc3MoIGFjdGl2ZUNsYXNzICk7CgkJCX0pCgkJCS5iaW5kKCAiY2xpY2siICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgZnVuY3Rpb24oIGV2ZW50ICkgewoJCQkJaWYgKCBvcHRpb25zLmRpc2FibGVkICkgewoJCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCQkJZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CgkJCQl9CgkJCX0pOwoKCQl0aGlzLmVsZW1lbnQKCQkJLmJpbmQoICJmb2N1cyIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlLCBmdW5jdGlvbigpIHsKCQkJCS8vIG5vIG5lZWQgdG8gY2hlY2sgZGlzYWJsZWQsIGZvY3VzIHdvbid0IGJlIHRyaWdnZXJlZCBhbnl3YXkKCQkJCXRoYXQuYnV0dG9uRWxlbWVudC5hZGRDbGFzcyggZm9jdXNDbGFzcyApOwoJCQl9KQoJCQkuYmluZCggImJsdXIiICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgZnVuY3Rpb24oKSB7CgkJCQl0aGF0LmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoIGZvY3VzQ2xhc3MgKTsKCQkJfSk7CgoJCWlmICggdG9nZ2xlQnV0dG9uICkgewoJCQl0aGlzLmVsZW1lbnQuYmluZCggImNoYW5nZSIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlLCBmdW5jdGlvbigpIHsKCQkJCWlmICggY2xpY2tEcmFnZ2VkICkgewoJCQkJCXJldHVybjsKCQkJCX0KCQkJCXRoYXQucmVmcmVzaCgpOwoJCQl9KTsKCQkJLy8gaWYgbW91c2UgbW92ZXMgYmV0d2VlbiBtb3VzZWRvd24gYW5kIG1vdXNldXAgKGRyYWcpIHNldCBjbGlja0RyYWdnZWQgZmxhZwoJCQkvLyBwcmV2ZW50cyBpc3N1ZSB3aGVyZSBidXR0b24gc3RhdGUgY2hhbmdlcyBidXQgY2hlY2tib3gvcmFkaW8gY2hlY2tlZCBzdGF0ZQoJCQkvLyBkb2VzIG5vdCBpbiBGaXJlZm94IChzZWUgdGlja2V0ICM2OTcwKQoJCQl0aGlzLmJ1dHRvbkVsZW1lbnQKCQkJCS5iaW5kKCAibW91c2Vkb3duIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uKCBldmVudCApIHsKCQkJCQlpZiAoIG9wdGlvbnMuZGlzYWJsZWQgKSB7CgkJCQkJCXJldHVybjsKCQkJCQl9CgkJCQkJY2xpY2tEcmFnZ2VkID0gZmFsc2U7CgkJCQkJc3RhcnRYUG9zID0gZXZlbnQucGFnZVg7CgkJCQkJc3RhcnRZUG9zID0gZXZlbnQucGFnZVk7CgkJCQl9KQoJCQkJLmJpbmQoICJtb3VzZXVwIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uKCBldmVudCApIHsKCQkJCQlpZiAoIG9wdGlvbnMuZGlzYWJsZWQgKSB7CgkJCQkJCXJldHVybjsKCQkJCQl9CgkJCQkJaWYgKCBzdGFydFhQb3MgIT09IGV2ZW50LnBhZ2VYIHx8IHN0YXJ0WVBvcyAhPT0gZXZlbnQucGFnZVkgKSB7CgkJCQkJCWNsaWNrRHJhZ2dlZCA9IHRydWU7CgkJCQkJfQoJCQl9KTsKCQl9CgoJCWlmICggdGhpcy50eXBlID09PSAiY2hlY2tib3giICkgewoJCQl0aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCggImNsaWNrIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uKCkgewoJCQkJaWYgKCBvcHRpb25zLmRpc2FibGVkIHx8IGNsaWNrRHJhZ2dlZCApIHsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCX0pOwoJCX0gZWxzZSBpZiAoIHRoaXMudHlwZSA9PT0gInJhZGlvIiApIHsKCQkJdGhpcy5idXR0b25FbGVtZW50LmJpbmQoICJjbGljayIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlLCBmdW5jdGlvbigpIHsKCQkJCWlmICggb3B0aW9ucy5kaXNhYmxlZCB8fCBjbGlja0RyYWdnZWQgKSB7CgkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJfQoJCQkJJCggdGhpcyApLmFkZENsYXNzKCAidWktc3RhdGUtYWN0aXZlIiApOwoJCQkJdGhhdC5idXR0b25FbGVtZW50LmF0dHIoICJhcmlhLXByZXNzZWQiLCAidHJ1ZSIgKTsKCgkJCQl2YXIgcmFkaW8gPSB0aGF0LmVsZW1lbnRbIDAgXTsKCQkJCXJhZGlvR3JvdXAoIHJhZGlvICkKCQkJCQkubm90KCByYWRpbyApCgkJCQkJLm1hcChmdW5jdGlvbigpIHsKCQkJCQkJcmV0dXJuICQoIHRoaXMgKS5idXR0b24oICJ3aWRnZXQiIClbIDAgXTsKCQkJCQl9KQoJCQkJCS5yZW1vdmVDbGFzcyggInVpLXN0YXRlLWFjdGl2ZSIgKQoJCQkJCS5hdHRyKCAiYXJpYS1wcmVzc2VkIiwgImZhbHNlIiApOwoJCQl9KTsKCQl9IGVsc2UgewoJCQl0aGlzLmJ1dHRvbkVsZW1lbnQKCQkJCS5iaW5kKCAibW91c2Vkb3duIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uKCkgewoJCQkJCWlmICggb3B0aW9ucy5kaXNhYmxlZCApIHsKCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCX0KCQkJCQkkKCB0aGlzICkuYWRkQ2xhc3MoICJ1aS1zdGF0ZS1hY3RpdmUiICk7CgkJCQkJbGFzdEFjdGl2ZSA9IHRoaXM7CgkJCQkJdGhhdC5kb2N1bWVudC5vbmUoICJtb3VzZXVwIiwgZnVuY3Rpb24oKSB7CgkJCQkJCWxhc3RBY3RpdmUgPSBudWxsOwoJCQkJCX0pOwoJCQkJfSkKCQkJCS5iaW5kKCAibW91c2V1cCIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlLCBmdW5jdGlvbigpIHsKCQkJCQlpZiAoIG9wdGlvbnMuZGlzYWJsZWQgKSB7CgkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQl9CgkJCQkJJCggdGhpcyApLnJlbW92ZUNsYXNzKCAidWktc3RhdGUtYWN0aXZlIiApOwoJCQkJfSkKCQkJCS5iaW5kKCAia2V5ZG93biIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlLCBmdW5jdGlvbihldmVudCkgewoJCQkJCWlmICggb3B0aW9ucy5kaXNhYmxlZCApIHsKCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCX0KCQkJCQlpZiAoIGV2ZW50LmtleUNvZGUgPT09ICQudWkua2V5Q29kZS5TUEFDRSB8fCBldmVudC5rZXlDb2RlID09PSAkLnVpLmtleUNvZGUuRU5URVIgKSB7CgkJCQkJCSQoIHRoaXMgKS5hZGRDbGFzcyggInVpLXN0YXRlLWFjdGl2ZSIgKTsKCQkJCQl9CgkJCQl9KQoJCQkJLy8gc2VlICM4NTU5LCB3ZSBiaW5kIHRvIGJsdXIgaGVyZSBpbiBjYXNlIHRoZSBidXR0b24gZWxlbWVudCBsb3NlcwoJCQkJLy8gZm9jdXMgYmV0d2VlbiBrZXlkb3duIGFuZCBrZXl1cCwgaXQgd291bGQgYmUgbGVmdCBpbiBhbiAiYWN0aXZlIiBzdGF0ZQoJCQkJLmJpbmQoICJrZXl1cCIgKyB0aGlzLmV2ZW50TmFtZXNwYWNlICsgIiBibHVyIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uKCkgewoJCQkJCSQoIHRoaXMgKS5yZW1vdmVDbGFzcyggInVpLXN0YXRlLWFjdGl2ZSIgKTsKCQkJCX0pOwoKCQkJaWYgKCB0aGlzLmJ1dHRvbkVsZW1lbnQuaXMoImEiKSApIHsKCQkJCXRoaXMuYnV0dG9uRWxlbWVudC5rZXl1cChmdW5jdGlvbihldmVudCkgewoJCQkJCWlmICggZXZlbnQua2V5Q29kZSA9PT0gJC51aS5rZXlDb2RlLlNQQUNFICkgewoJCQkJCQkvLyBUT0RPIHBhc3MgdGhyb3VnaCBvcmlnaW5hbCBldmVudCBjb3JyZWN0bHkgKGp1c3QgYXMgMm5kIGFyZ3VtZW50IGRvZXNuJ3Qgd29yaykKCQkJCQkJJCggdGhpcyApLmNsaWNrKCk7CgkJCQkJfQoJCQkJfSk7CgkJCX0KCQl9CgoJCS8vIFRPRE86IHB1bGwgb3V0ICQuV2lkZ2V0J3MgaGFuZGxpbmcgZm9yIHRoZSBkaXNhYmxlZCBvcHRpb24gaW50bwoJCS8vICQuV2lkZ2V0LnByb3RvdHlwZS5fc2V0T3B0aW9uRGlzYWJsZWQgc28gaXQncyBlYXN5IHRvIHByb3h5IGFuZCBjYW4KCQkvLyBiZSBvdmVycmlkZGVuIGJ5IGluZGl2aWR1YWwgcGx1Z2lucwoJCXRoaXMuX3NldE9wdGlvbiggImRpc2FibGVkIiwgb3B0aW9ucy5kaXNhYmxlZCApOwoJCXRoaXMuX3Jlc2V0QnV0dG9uKCk7Cgl9LAoKCV9kZXRlcm1pbmVCdXR0b25UeXBlOiBmdW5jdGlvbigpIHsKCQl2YXIgYW5jZXN0b3IsIGxhYmVsU2VsZWN0b3IsIGNoZWNrZWQ7CgoJCWlmICggdGhpcy5lbGVtZW50LmlzKCJbdHlwZT1jaGVja2JveF0iKSApIHsKCQkJdGhpcy50eXBlID0gImNoZWNrYm94IjsKCQl9IGVsc2UgaWYgKCB0aGlzLmVsZW1lbnQuaXMoIlt0eXBlPXJhZGlvXSIpICkgewoJCQl0aGlzLnR5cGUgPSAicmFkaW8iOwoJCX0gZWxzZSBpZiAoIHRoaXMuZWxlbWVudC5pcygiaW5wdXQiKSApIHsKCQkJdGhpcy50eXBlID0gImlucHV0IjsKCQl9IGVsc2UgewoJCQl0aGlzLnR5cGUgPSAiYnV0dG9uIjsKCQl9CgoJCWlmICggdGhpcy50eXBlID09PSAiY2hlY2tib3giIHx8IHRoaXMudHlwZSA9PT0gInJhZGlvIiApIHsKCQkJLy8gd2UgZG9uJ3Qgc2VhcmNoIGFnYWluc3QgdGhlIGRvY3VtZW50IGluIGNhc2UgdGhlIGVsZW1lbnQKCQkJLy8gaXMgZGlzY29ubmVjdGVkIGZyb20gdGhlIERPTQoJCQlhbmNlc3RvciA9IHRoaXMuZWxlbWVudC5wYXJlbnRzKCkubGFzdCgpOwoJCQlsYWJlbFNlbGVjdG9yID0gImxhYmVsW2Zvcj0nIiArIHRoaXMuZWxlbWVudC5hdHRyKCJpZCIpICsgIiddIjsKCQkJdGhpcy5idXR0b25FbGVtZW50ID0gYW5jZXN0b3IuZmluZCggbGFiZWxTZWxlY3RvciApOwoJCQlpZiAoICF0aGlzLmJ1dHRvbkVsZW1lbnQubGVuZ3RoICkgewoJCQkJYW5jZXN0b3IgPSBhbmNlc3Rvci5sZW5ndGggPyBhbmNlc3Rvci5zaWJsaW5ncygpIDogdGhpcy5lbGVtZW50LnNpYmxpbmdzKCk7CgkJCQl0aGlzLmJ1dHRvbkVsZW1lbnQgPSBhbmNlc3Rvci5maWx0ZXIoIGxhYmVsU2VsZWN0b3IgKTsKCQkJCWlmICggIXRoaXMuYnV0dG9uRWxlbWVudC5sZW5ndGggKSB7CgkJCQkJdGhpcy5idXR0b25FbGVtZW50ID0gYW5jZXN0b3IuZmluZCggbGFiZWxTZWxlY3RvciApOwoJCQkJfQoJCQl9CgkJCXRoaXMuZWxlbWVudC5hZGRDbGFzcyggInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIgKTsKCgkJCWNoZWNrZWQgPSB0aGlzLmVsZW1lbnQuaXMoICI6Y2hlY2tlZCIgKTsKCQkJaWYgKCBjaGVja2VkICkgewoJCQkJdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCAidWktc3RhdGUtYWN0aXZlIiApOwoJCQl9CgkJCXRoaXMuYnV0dG9uRWxlbWVudC5wcm9wKCAiYXJpYS1wcmVzc2VkIiwgY2hlY2tlZCApOwoJCX0gZWxzZSB7CgkJCXRoaXMuYnV0dG9uRWxlbWVudCA9IHRoaXMuZWxlbWVudDsKCQl9Cgl9LAoKCXdpZGdldDogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMuYnV0dG9uRWxlbWVudDsKCX0sCgoJX2Rlc3Ryb3k6IGZ1bmN0aW9uKCkgewoJCXRoaXMuZWxlbWVudAoJCQkucmVtb3ZlQ2xhc3MoICJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiICk7CgkJdGhpcy5idXR0b25FbGVtZW50CgkJCS5yZW1vdmVDbGFzcyggYmFzZUNsYXNzZXMgKyAiICIgKyBzdGF0ZUNsYXNzZXMgKyAiICIgKyB0eXBlQ2xhc3NlcyApCgkJCS5yZW1vdmVBdHRyKCAicm9sZSIgKQoJCQkucmVtb3ZlQXR0ciggImFyaWEtcHJlc3NlZCIgKQoJCQkuaHRtbCggdGhpcy5idXR0b25FbGVtZW50LmZpbmQoIi51aS1idXR0b24tdGV4dCIpLmh0bWwoKSApOwoKCQlpZiAoICF0aGlzLmhhc1RpdGxlICkgewoJCQl0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQXR0ciggInRpdGxlIiApOwoJCX0KCX0sCgoJX3NldE9wdGlvbjogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7CgkJdGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTsKCQlpZiAoIGtleSA9PT0gImRpc2FibGVkIiApIHsKCQkJaWYgKCB2YWx1ZSApIHsKCQkJCXRoaXMuZWxlbWVudC5wcm9wKCAiZGlzYWJsZWQiLCB0cnVlICk7CgkJCX0gZWxzZSB7CgkJCQl0aGlzLmVsZW1lbnQucHJvcCggImRpc2FibGVkIiwgZmFsc2UgKTsKCQkJfQoJCQlyZXR1cm47CgkJfQoJCXRoaXMuX3Jlc2V0QnV0dG9uKCk7Cgl9LAoKCXJlZnJlc2g6IGZ1bmN0aW9uKCkgewoJCS8vU2VlICM4MjM3ICYgIzg4MjgKCQl2YXIgaXNEaXNhYmxlZCA9IHRoaXMuZWxlbWVudC5pcyggImlucHV0LCBidXR0b24iICkgPyB0aGlzLmVsZW1lbnQuaXMoICI6ZGlzYWJsZWQiICkgOiB0aGlzLmVsZW1lbnQuaGFzQ2xhc3MoICJ1aS1idXR0b24tZGlzYWJsZWQiICk7CgoJCWlmICggaXNEaXNhYmxlZCAhPT0gdGhpcy5vcHRpb25zLmRpc2FibGVkICkgewoJCQl0aGlzLl9zZXRPcHRpb24oICJkaXNhYmxlZCIsIGlzRGlzYWJsZWQgKTsKCQl9CgkJaWYgKCB0aGlzLnR5cGUgPT09ICJyYWRpbyIgKSB7CgkJCXJhZGlvR3JvdXAoIHRoaXMuZWxlbWVudFswXSApLmVhY2goZnVuY3Rpb24oKSB7CgkJCQlpZiAoICQoIHRoaXMgKS5pcyggIjpjaGVja2VkIiApICkgewoJCQkJCSQoIHRoaXMgKS5idXR0b24oICJ3aWRnZXQiICkKCQkJCQkJLmFkZENsYXNzKCAidWktc3RhdGUtYWN0aXZlIiApCgkJCQkJCS5hdHRyKCAiYXJpYS1wcmVzc2VkIiwgInRydWUiICk7CgkJCQl9IGVsc2UgewoJCQkJCSQoIHRoaXMgKS5idXR0b24oICJ3aWRnZXQiICkKCQkJCQkJLnJlbW92ZUNsYXNzKCAidWktc3RhdGUtYWN0aXZlIiApCgkJCQkJCS5hdHRyKCAiYXJpYS1wcmVzc2VkIiwgImZhbHNlIiApOwoJCQkJfQoJCQl9KTsKCQl9IGVsc2UgaWYgKCB0aGlzLnR5cGUgPT09ICJjaGVja2JveCIgKSB7CgkJCWlmICggdGhpcy5lbGVtZW50LmlzKCAiOmNoZWNrZWQiICkgKSB7CgkJCQl0aGlzLmJ1dHRvbkVsZW1lbnQKCQkJCQkuYWRkQ2xhc3MoICJ1aS1zdGF0ZS1hY3RpdmUiICkKCQkJCQkuYXR0ciggImFyaWEtcHJlc3NlZCIsICJ0cnVlIiApOwoJCQl9IGVsc2UgewoJCQkJdGhpcy5idXR0b25FbGVtZW50CgkJCQkJLnJlbW92ZUNsYXNzKCAidWktc3RhdGUtYWN0aXZlIiApCgkJCQkJLmF0dHIoICJhcmlhLXByZXNzZWQiLCAiZmFsc2UiICk7CgkJCX0KCQl9Cgl9LAoKCV9yZXNldEJ1dHRvbjogZnVuY3Rpb24oKSB7CgkJaWYgKCB0aGlzLnR5cGUgPT09ICJpbnB1dCIgKSB7CgkJCWlmICggdGhpcy5vcHRpb25zLmxhYmVsICkgewoJCQkJdGhpcy5lbGVtZW50LnZhbCggdGhpcy5vcHRpb25zLmxhYmVsICk7CgkJCX0KCQkJcmV0dXJuOwoJCX0KCQl2YXIgYnV0dG9uRWxlbWVudCA9IHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyggdHlwZUNsYXNzZXMgKSwKCQkJYnV0dG9uVGV4dCA9ICQoICI8c3Bhbj48L3NwYW4+IiwgdGhpcy5kb2N1bWVudFswXSApCgkJCQkuYWRkQ2xhc3MoICJ1aS1idXR0b24tdGV4dCIgKQoJCQkJLmh0bWwoIHRoaXMub3B0aW9ucy5sYWJlbCApCgkJCQkuYXBwZW5kVG8oIGJ1dHRvbkVsZW1lbnQuZW1wdHkoKSApCgkJCQkudGV4dCgpLAoJCQlpY29ucyA9IHRoaXMub3B0aW9ucy5pY29ucywKCQkJbXVsdGlwbGVJY29ucyA9IGljb25zLnByaW1hcnkgJiYgaWNvbnMuc2Vjb25kYXJ5LAoJCQlidXR0b25DbGFzc2VzID0gW107CgoJCWlmICggaWNvbnMucHJpbWFyeSB8fCBpY29ucy5zZWNvbmRhcnkgKSB7CgkJCWlmICggdGhpcy5vcHRpb25zLnRleHQgKSB7CgkJCQlidXR0b25DbGFzc2VzLnB1c2goICJ1aS1idXR0b24tdGV4dC1pY29uIiArICggbXVsdGlwbGVJY29ucyA/ICJzIiA6ICggaWNvbnMucHJpbWFyeSA/ICItcHJpbWFyeSIgOiAiLXNlY29uZGFyeSIgKSApICk7CgkJCX0KCgkJCWlmICggaWNvbnMucHJpbWFyeSApIHsKCQkJCWJ1dHRvbkVsZW1lbnQucHJlcGVuZCggIjxzcGFuIGNsYXNzPSd1aS1idXR0b24taWNvbi1wcmltYXJ5IHVpLWljb24gIiArIGljb25zLnByaW1hcnkgKyAiJz48L3NwYW4+IiApOwoJCQl9CgoJCQlpZiAoIGljb25zLnNlY29uZGFyeSApIHsKCQkJCWJ1dHRvbkVsZW1lbnQuYXBwZW5kKCAiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXNlY29uZGFyeSB1aS1pY29uICIgKyBpY29ucy5zZWNvbmRhcnkgKyAiJz48L3NwYW4+IiApOwoJCQl9CgoJCQlpZiAoICF0aGlzLm9wdGlvbnMudGV4dCApIHsKCQkJCWJ1dHRvbkNsYXNzZXMucHVzaCggbXVsdGlwbGVJY29ucyA/ICJ1aS1idXR0b24taWNvbnMtb25seSIgOiAidWktYnV0dG9uLWljb24tb25seSIgKTsKCgkJCQlpZiAoICF0aGlzLmhhc1RpdGxlICkgewoJCQkJCWJ1dHRvbkVsZW1lbnQuYXR0ciggInRpdGxlIiwgJC50cmltKCBidXR0b25UZXh0ICkgKTsKCQkJCX0KCQkJfQoJCX0gZWxzZSB7CgkJCWJ1dHRvbkNsYXNzZXMucHVzaCggInVpLWJ1dHRvbi10ZXh0LW9ubHkiICk7CgkJfQoJCWJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MoIGJ1dHRvbkNsYXNzZXMuam9pbiggIiAiICkgKTsKCX0KfSk7CgokLndpZGdldCggInVpLmJ1dHRvbnNldCIsIHsKCXZlcnNpb246ICIxLjEwLjMiLAoJb3B0aW9uczogewoJCWl0ZW1zOiAiYnV0dG9uLCBpbnB1dFt0eXBlPWJ1dHRvbl0sIGlucHV0W3R5cGU9c3VibWl0XSwgaW5wdXRbdHlwZT1yZXNldF0sIGlucHV0W3R5cGU9Y2hlY2tib3hdLCBpbnB1dFt0eXBlPXJhZGlvXSwgYSwgOmRhdGEodWktYnV0dG9uKSIKCX0sCgoJX2NyZWF0ZTogZnVuY3Rpb24oKSB7CgkJdGhpcy5lbGVtZW50LmFkZENsYXNzKCAidWktYnV0dG9uc2V0IiApOwoJfSwKCglfaW5pdDogZnVuY3Rpb24oKSB7CgkJdGhpcy5yZWZyZXNoKCk7Cgl9LAoKCV9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewoJCWlmICgga2V5ID09PSAiZGlzYWJsZWQiICkgewoJCQl0aGlzLmJ1dHRvbnMuYnV0dG9uKCAib3B0aW9uIiwga2V5LCB2YWx1ZSApOwoJCX0KCgkJdGhpcy5fc3VwZXIoIGtleSwgdmFsdWUgKTsKCX0sCgoJcmVmcmVzaDogZnVuY3Rpb24oKSB7CgkJdmFyIHJ0bCA9IHRoaXMuZWxlbWVudC5jc3MoICJkaXJlY3Rpb24iICkgPT09ICJydGwiOwoKCQl0aGlzLmJ1dHRvbnMgPSB0aGlzLmVsZW1lbnQuZmluZCggdGhpcy5vcHRpb25zLml0ZW1zICkKCQkJLmZpbHRlciggIjp1aS1idXR0b24iICkKCQkJCS5idXR0b24oICJyZWZyZXNoIiApCgkJCS5lbmQoKQoJCQkubm90KCAiOnVpLWJ1dHRvbiIgKQoJCQkJLmJ1dHRvbigpCgkJCS5lbmQoKQoJCQkubWFwKGZ1bmN0aW9uKCkgewoJCQkJcmV0dXJuICQoIHRoaXMgKS5idXR0b24oICJ3aWRnZXQiIClbIDAgXTsKCQkJfSkKCQkJCS5yZW1vdmVDbGFzcyggInVpLWNvcm5lci1hbGwgdWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IiApCgkJCQkuZmlsdGVyKCAiOmZpcnN0IiApCgkJCQkJLmFkZENsYXNzKCBydGwgPyAidWktY29ybmVyLXJpZ2h0IiA6ICJ1aS1jb3JuZXItbGVmdCIgKQoJCQkJLmVuZCgpCgkJCQkuZmlsdGVyKCAiOmxhc3QiICkKCQkJCQkuYWRkQ2xhc3MoIHJ0bCA/ICJ1aS1jb3JuZXItbGVmdCIgOiAidWktY29ybmVyLXJpZ2h0IiApCgkJCQkuZW5kKCkKCQkJLmVuZCgpOwoJfSwKCglfZGVzdHJveTogZnVuY3Rpb24oKSB7CgkJdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCAidWktYnV0dG9uc2V0IiApOwoJCXRoaXMuYnV0dG9ucwoJCQkubWFwKGZ1bmN0aW9uKCkgewoJCQkJcmV0dXJuICQoIHRoaXMgKS5idXR0b24oICJ3aWRnZXQiIClbIDAgXTsKCQkJfSkKCQkJCS5yZW1vdmVDbGFzcyggInVpLWNvcm5lci1sZWZ0IHVpLWNvcm5lci1yaWdodCIgKQoJCQkuZW5kKCkKCQkJLmJ1dHRvbiggImRlc3Ryb3kiICk7Cgl9Cn0pOwoKfSggalF1ZXJ5ICkgKTsK
Ly8gLS0KLy8gQ29yZS5VSS5Db21ib0JveC5qcyAtIHByb3ZpZGVzIENvbWJvQm94IGZ1bmN0aW9uYWxpdHkKLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTEgT1RSUyBBRywgaHR0cDovL290cnMub3JnL1xuIjsKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQovLyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIENvcmUgPSBDb3JlIHx8IHt9OwpDb3JlLlVJID0gQ29yZS5VSSB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlCiAqIEBleHBvcnRzIFRhcmdldE5TIGFzIENvcmUuVUkuQ29tYm9Cb3gKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBmb3IgdGhlIGNvbWJvYm94IGVsZW1lbnQuCiAqLwpDb3JlLlVJLkNvbWJvQm94ID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBTZWxlY3RvciBUaGUgalF1ZXJ5IHNlbGVjdG9yIGZvciB0aGUgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYXMgY29tYm9ib3hlcwogICAgICogQHBhcmFtIHtPYmplY3R9IE9wdGlvbnMgVGhlIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGNvbWJvYm94OgogICAgICogICAgICAgICAgICAgICAgICAgICAgQ2xhc3M6IGEgc3RyaW5nIHdpdGggdGhlIGNsYXNzKGVzKSB0byBiZSBhZGRlZCB0byB0aGUgaW5wdXQgZmllbGQgb2YgdGhlIGNvbWJvYm94CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBMYW5nOiBhbiBvYmplY3Qgd2l0aCBrZXkvdmFsdWUgcGFpcnMgb2YgdHJhbnNsYXRpb25zIGZvciB0aGUgY29tYm9ib3gKICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBjb21ib2JveGVzCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uIChTZWxlY3RvciwgT3B0aW9ucykgewogICAgICAgIFNlbGVjdG9yID0gU2VsZWN0b3IgfHwgJ3NlbGVjdCc7CiAgICAgICAgJChTZWxlY3RvcikuY29tYm9ib3goT3B0aW9ucyk7CiAgICB9OwoKICAgIHJldHVybiBUYXJnZXROUzsKfShDb3JlLlVJLkNvbWJvQm94IHx8IHt9KSk7Cg==
Ly8gLS0KLy8gVGltZUFjY291bnRpbmcuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nLmpzIC0gcHJvdmlkZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlCi8vIGNvbmZpcm1hdGlvbiBkaWFsb2dzCi8vIENvcHlyaWdodCAoQykgMjAwMS0yMDEwIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy9cbiI7Ci8vIC0tCi8vIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCi8vIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKLy8gZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KLy8gLS0KCiJ1c2Ugc3RyaWN0IjsKCnZhciBUaW1lQWNjb3VudGluZyA9IFRpbWVBY2NvdW50aW5nIHx8IHt9OwpUaW1lQWNjb3VudGluZy5BZ2VudCA9IFRpbWVBY2NvdW50aW5nLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UKICogQGV4cG9ydHMgVGFyZ2V0TlMgYXMgVGltZUFjY291bnRpbmcuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIENvbmZpcm1hdGlvbkRpYWxvZy4KICovClRpbWVBY2NvdW50aW5nLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZyA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEB2YXJpYWJsZQogICAgICogQHByaXZhdGUKICAgICAqICAgICBUaGlzIHZhcmlhYmxlIHN0b3JlcyB0aGUgcGFyYW1ldGVycyB0aGF0IGFyZSBwYXNzZWQgZnJvbSB0aGUgRFRMIGFuZCBjb250YWluIGFsbCB0aGUgZGF0YSB0aGF0IHRoZSBkaWFsb2cgbmVlZHMuCiAgICAgKi8KICAgIHZhciBEaWFsb2dEYXRhID0gW107CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwcml2YXRlCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqIEBkZXNjcmlwdGlvbiBTaG93cyB3YWl0aW5nIGRpYWxvZyB1bnRpbCBzZWFyY2ggc2NyZWVuIGlzIHJlYWR5LgogICAgICovCiAgICBmdW5jdGlvbiBTaG93V2FpdGluZ0RpYWxvZyhQb3NpdGlvblRvcCl7CiAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coJzxkaXYgY2xhc3M9IlNwYWNpbmcgQ2VudGVyIj48c3BhbiBjbGFzcz0iQUpBWExvYWRlciIgdGl0bGU9IicgKyBDb3JlLkNvbmZpZy5HZXQoJ0xvYWRpbmdNc2cnKSArICciPjwvc3Bhbj48L2Rpdj4nLCAnJywgUG9zaXRpb25Ub3AsICdDZW50ZXInLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtFdmVudE9iamVjdH0gZXZlbnQgb2JqZWN0IG9mIHRoZSBjbGlja2VkIGVsZW1lbnQuCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBzaG93cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgd2l0aCAyIGJ1dHRvbnM6IFllcyBhbmQgTm8gb3IgYSBtZXNzYWdlIGRpYWxvZyB3aXRoIG9uZSBidXR0b246IE9rLgogICAgICovCiAgICBUYXJnZXROUy5TaG93Q29uZmlybWF0aW9uRGlhbG9nID0gZnVuY3Rpb24gKEV2ZW50KSB7CgogICAgICAgIHZhciBMb2NhbERpYWxvZ0RhdGEsCiAgICAgICAgICAgIFBvc2l0aW9uVG9wLAogICAgICAgICAgICBEYXRhLAogICAgICAgICAgICBCdXR0b25zOwoKICAgICAgICAvLyBnZXQgZ2xvYmFsIHNhdmVkIERpYWxvZ0RhdGEgZm9yIHRoaXMgZnVuY3Rpb24KICAgICAgICBMb2NhbERpYWxvZ0RhdGEgPSBEaWFsb2dEYXRhWyQoRXZlbnQudGFyZ2V0KS5hdHRyKCdpZCcpXTsKCiAgICAgICAgLy8gZGVmaW5lIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGlhbG9nCiAgICAgICAgUG9zaXRpb25Ub3AgPSAkKHdpbmRvdykuaGVpZ2h0KCkgKiAwLjM7CgogICAgICAgIC8vIHNob3cgd2FpdGluZyBkaWFsb2cKICAgICAgICBTaG93V2FpdGluZ0RpYWxvZyhQb3NpdGlvblRvcCk7CgogICAgICAgIC8vIGFqYXggY2FsbCB0byB0aGUgbW9kdWxlIHRoYXQgZXhlY3V0ZXMgdGhlIGFjdGlvbiB3aGVuIHByZXNzaW5nIHRoZSBjb25maXJtYXRpb24gYnV0dG9uCiAgICAgICAgRGF0YSA9IExvY2FsRGlhbG9nRGF0YS5EaWFsb2dDb250ZW50UXVlcnlTdHJpbmc7CiAgICAgICAgQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbChDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJyksIERhdGEsIGZ1bmN0aW9uIChSZXNwb25zZSkgewoKICAgICAgICAgICAgLy8gJ0NvbmZpcm1hdGlvbicgb3BlbnMgYSBkaWFsb2cgd2l0aCAyIGJ1dHRvbnM6IFllcyBhbmQgTm8KICAgICAgICAgICAgaWYgKFJlc3BvbnNlLkRpYWxvZ1R5cGUgPT09ICdDb25maXJtYXRpb24nKSB7CgogICAgICAgICAgICAgICAgLy8gZGVmaW5lIHllcyBhbmQgbm8gYnV0dG9ucwogICAgICAgICAgICAgICAgQnV0dG9ucyA9IFt7CiAgICAgICAgICAgICAgICAgICAgTGFiZWw6IExvY2FsRGlhbG9nRGF0YS5UcmFuc2xhdGVkVGV4dC5ZZXMsCiAgICAgICAgICAgICAgICAgICAgQ2xhc3M6ICJQcmltYXJ5IiwKCiAgICAgICAgICAgICAgICAgICAgLy8gZGVmaW5lIHRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aGVuIHRoZSAnWWVzJyBidXR0b24gaXMgcHJlc3NlZAogICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOiBmdW5jdGlvbigpewoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBZZXMgYW5kIE5vIGJ1dHRvbnMgdG8gcHJldmVudCBtdWx0aXBsZSBzdWJtaXRzCiAgICAgICAgICAgICAgICAgICAgICAgICQoJ2Rpdi5EaWFsb2c6dmlzaWJsZSBkaXYuQ29udGVudEZvb3RlciBidXR0b24nKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVkaXJlY3QgdG8gdGhlIG1vZHVsZSB0aGF0IGRvZXMgdGhlIGNvbmZpcm1lZCBhY3Rpb24gYWZ0ZXIgcHJlc3NpbmcgdGhlIFllcyBidXR0b24KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSArIExvY2FsRGlhbG9nRGF0YS5Db25maXJtZWRBY3Rpb25RdWVyeVN0cmluZzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgTGFiZWw6IExvY2FsRGlhbG9nRGF0YS5UcmFuc2xhdGVkVGV4dC5ObywKICAgICAgICAgICAgICAgICAgICBUeXBlOiAiQ2xvc2UiCiAgICAgICAgICAgICAgICB9XTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gJ01lc3NhZ2UnIG9wZW5zIGEgZGlhbG9nIHdpdGggMSBidXR0b246IE9rCiAgICAgICAgICAgIGVsc2UgaWYgKFJlc3BvbnNlLkRpYWxvZ1R5cGUgPT09ICdNZXNzYWdlJykgewoKICAgICAgICAgICAgICAgIC8vIGRlZmluZSBPayBidXR0b24KICAgICAgICAgICAgICAgIEJ1dHRvbnMgPSBbewogICAgICAgICAgICAgICAgICAgIExhYmVsOiBMb2NhbERpYWxvZ0RhdGEuVHJhbnNsYXRlZFRleHQuT2ssCiAgICAgICAgICAgICAgICAgICAgQ2xhc3M6ICJQcmltYXJ5IiwKICAgICAgICAgICAgICAgICAgICBUeXBlOiAiQ2xvc2UiCiAgICAgICAgICAgICAgICB9XTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gc2hvdyB0aGUgY29uZmlybWF0aW9uIGRpYWxvZyB0byBjb25maXJtIHRoZSBhY3Rpb24KICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coUmVzcG9uc2UuSFRNTCwgTG9jYWxEaWFsb2dEYXRhLkRpYWxvZ1RpdGxlLCBQb3NpdGlvblRvcCwgIkNlbnRlciIsIHRydWUsIEJ1dHRvbnMpOwogICAgICAgIH0sICdqc29uJyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfTsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtFdmVudE9iamVjdH0gZXZlbnQgb2JqZWN0IG9mIHRoZSBjbGlja2VkIGVsZW1lbnQuCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBzaG93cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgd2l0aCAyIGJ1dHRvbnM6IFllcyBhbmQgTm8KICAgICAqLwogICAgVGFyZ2V0TlMuQmluZENvbmZpcm1hdGlvbkRpYWxvZyA9IGZ1bmN0aW9uIChEYXRhKSB7CiAgICAgICAgRGlhbG9nRGF0YVtEYXRhLkVsZW1lbnRJRF0gPSBEYXRhOwoKICAgICAgICAvLyBiaW5kaW5nIGEgY2xpY2sgZXZlbnQgdG8gdGhlIGRlZmluZWQgZWxlbWVudAogICAgICAgICQoRGlhbG9nRGF0YVtEYXRhLkVsZW1lbnRJRF0uRWxlbWVudFNlbGVjdG9yKS5iaW5kKCdjbGljaycsIFRpbWVBY2NvdW50aW5nLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZy5TaG93Q29uZmlybWF0aW9uRGlhbG9nKTsKICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KFRpbWVBY2NvdW50aW5nLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZyB8fCB7fSkpOwo=
Ly8gLS0KLy8gVGltZUFjY291bnRpbmcuQWdlbnQuRGF0ZXBpY2tlci5qcyAtIHByb3ZpZGVzIHRoZSBzcGVjaWFsIGRhdGVwaWNrZXIgZnVuY3Rpb25zIGZvciBUQQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvXG4iOwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgVGltZUFjY291bnRpbmcgPSBUaW1lQWNjb3VudGluZyB8fCB7fTsKVGltZUFjY291bnRpbmcuQWdlbnQgPSBUaW1lQWNjb3VudGluZy5BZ2VudCB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlCiAqIEBleHBvcnRzIFRhcmdldE5TIGFzIFRpbWVBY2NvdW50aW5nLkFnZW50LkRhdGVwaWNrZXIKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgZGF0ZXBpY2tlciBmdW5jdGlvbmQgZm9yIFRBLgogKi8KVGltZUFjY291bnRpbmcuQWdlbnQuRGF0ZXBpY2tlciA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICB2YXIgVmFjYXRpb25EYXlzLAogICAgICAgIFZhY2F0aW9uRGF5c09uZVRpbWUsCiAgICAgICAgTG9jYWxpemF0aW9uRGF0YSwKICAgICAgICBEYXRlcGlja2VyQ291bnQgPSAwOwoKICAgIGlmICghQ29yZS5EZWJ1Zy5DaGVja0RlcGVuZGVuY3koJ0NvcmUuVUkuRGF0ZXBpY2tlcicsICckKFtdKS5kYXRlcGlja2VyJywgJ2pRdWVyeSBVSSBkYXRlcGlja2VyJykpIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwcml2YXRlCiAgICAgKiBAcGFyYW0gQSBib29sZWFuIHZhbHVlCiAgICAgKiBAcGFyYW0ge2pRdWVyeU9iamVjdH0gRWxlbWVudCB0aGF0IHdpbGwgYmUgY2hlY2tlZAogICAgICogQGRlc2NyaXB0aW9uIFJldmlldyBpZiBhIGRhdGUgb2JqZWN0IGhhdmUgY29ycmVjdCB2YWx1ZXMKICAgICAqLwogICAgZnVuY3Rpb24gQ2hlY2tEYXRlKERhdGVPYmplY3QpIHsKICAgICAgICB2YXIgRGF5RGVzY3JpcHRpb24gPSAnJywKICAgICAgICAgICAgRGF5Q2xhc3MgPSAnJzsKCiAgICAgICAgLy8gR2V0IGRlZmluZWQgZGF5cyBmcm9tIENvbmZpZywgaWYgbm90IGRvbmUgYWxyZWFkeQogICAgICAgIGlmICh0eXBlb2YgVmFjYXRpb25EYXlzID09PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICBWYWNhdGlvbkRheXMgPSBDb3JlLkNvbmZpZy5HZXQoJ0RhdGVwaWNrZXIuVmFjYXRpb25EYXlzJykuVGltZVZhY2F0aW9uRGF5czsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBWYWNhdGlvbkRheXNPbmVUaW1lID09PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICBWYWNhdGlvbkRheXNPbmVUaW1lID0gQ29yZS5Db25maWcuR2V0KCdEYXRlcGlja2VyLlZhY2F0aW9uRGF5cycpLlRpbWVWYWNhdGlvbkRheXNPbmVUaW1lOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgZGF0ZSBpcyBvbmUgb2YgdGhlIHZhY2F0aW9uIGRheXMKICAgICAgICBpZiAodHlwZW9mIFZhY2F0aW9uRGF5c1tEYXRlT2JqZWN0LmdldE1vbnRoKCkgKyAxXSAhPT0gJ3VuZGVmaW5lZCcgJiYKICAgICAgICAgICAgdHlwZW9mIFZhY2F0aW9uRGF5c1tEYXRlT2JqZWN0LmdldE1vbnRoKCkgKyAxXVtEYXRlT2JqZWN0LmdldERhdGUoKV0gIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIERheURlc2NyaXB0aW9uICs9IFZhY2F0aW9uRGF5c1tEYXRlT2JqZWN0LmdldE1vbnRoKCkgKyAxXVtEYXRlT2JqZWN0LmdldERhdGUoKV07CiAgICAgICAgICAgIERheUNsYXNzID0gJ0hpZ2hsaWdodCAnOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgZGF0ZSBpcyBvbmUgb2YgdGhlIG9uZSB0aW1lIHZhY2F0aW9uIGRheXMKICAgICAgICBpZiAodHlwZW9mIFZhY2F0aW9uRGF5c09uZVRpbWVbRGF0ZU9iamVjdC5nZXRGdWxsWWVhcigpXSAhPT0gJ3VuZGVmaW5lZCcgJiYKICAgICAgICAgICAgdHlwZW9mIFZhY2F0aW9uRGF5c09uZVRpbWVbRGF0ZU9iamVjdC5nZXRGdWxsWWVhcigpXVtEYXRlT2JqZWN0LmdldE1vbnRoKCkgKyAxXSAhPT0gJ3VuZGVmaW5lZCcgJiYKICAgICAgICAgICAgdHlwZW9mIFZhY2F0aW9uRGF5c09uZVRpbWVbRGF0ZU9iamVjdC5nZXRGdWxsWWVhcigpXVtEYXRlT2JqZWN0LmdldE1vbnRoKCkgKyAxXVtEYXRlT2JqZWN0LmdldERhdGUoKV0gIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIERheURlc2NyaXB0aW9uICs9IFZhY2F0aW9uRGF5c09uZVRpbWVbRGF0ZU9iamVjdC5nZXRGdWxsWWVhcigpXVtEYXRlT2JqZWN0LmdldE1vbnRoKCkgKyAxXVtEYXRlT2JqZWN0LmdldERhdGUoKV07CiAgICAgICAgICAgIERheUNsYXNzID0gJ0hpZ2hsaWdodCAnOwogICAgICAgIH0KCiAgICAgICAgaWYgKERheUNsYXNzLmxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gW3RydWUsIERheUNsYXNzLCBEYXlEZXNjcmlwdGlvbl07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gW3RydWUsICcnXTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBkYXRlcGlja2VyIG9uIHNpbmdsZSBlbGVtZW50cyBmb3IgVEEuCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHlldCBhdmFpbGFibGUgaW4gdGhlIE9UUlMgQ29yZS4KICAgICAqICAgICAgSWYgaXQgd2lsbCBiZSBpbXBsZW1lbnRlZCBpbiBPVFJTIENvcmUgd2UgY291bGQgcmVtb3ZlIHRoaXMgZmlsZSBoZXJlLgogICAgICogQHBhcmFtIHtPYmplY3R9ICRFbGVtZW50IFRoZSBqUXVlcnkgb2JqZWN0KHMpIG9mIGEgdGV4dCBpbnB1dCBmaWVsZCB3aGljaCBzaG91bGQgZ2V0IGEgZGF0ZXBpY2tlci4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBEYXRlcGlja2VyT3B0aW9ucyBPYmplY3Qgd2l0aCB0d28gcG9zc2libGUga2V5czoKICAgICAqICAgICAgICAgICAgICAgICAgICAgIERhdGVJbkZ1dHVyZTogdHJ1ZXxmYWxzZSwKICAgICAqICAgICAgICAgICAgICAgICAgICAgIFdlZWtEYXlTdGFydDogMC03IChzdW5kYXkgLSBzYXR1cmRheSkKICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCRFbGVtZW50LCBEYXRlcGlja2VyT3B0aW9ucykgewogICAgICAgIGZ1bmN0aW9uIExlYWRpbmdaZXJvKE51bWJlcikgewogICAgICAgICAgICBpZiAoTnVtYmVyLnRvU3RyaW5nKCkubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJzAnICsgTnVtYmVyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdmFyICREYXRlcGlja2VyRWxlbWVudCwKICAgICAgICAgICAgT3B0aW9ucywKICAgICAgICAgICAgSSwKICAgICAgICAgICAgRXJyb3JNZXNzYWdlOwoKICAgICAgICBpZiAodHlwZW9mIExvY2FsaXphdGlvbkRhdGEgPT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgIExvY2FsaXphdGlvbkRhdGEgPSBDb3JlLkNvbmZpZy5HZXQoJ0RhdGVwaWNrZXIuTG9jYWxpemF0aW9uJyk7CiAgICAgICAgICAgIGlmICh0eXBlb2YgTG9jYWxpemF0aW9uRGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb3JlLkV4Y2VwdGlvbi5BcHBsaWNhdGlvbkVycm9yKCdEYXRlcGlja2VyIGxvY2FsaXphdGlvbiBkYXRhIGNvdWxkIG5vdCBiZSBmb3VuZCEnLCAnSW50ZXJuYWxFcnJvcicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBEZWZpbmUgb3B0aW9ucyBoYXNoCiAgICAgICAgT3B0aW9ucyA9IHsKICAgICAgICAgICAgICAgIGJlZm9yZVNob3dEYXk6IGZ1bmN0aW9uIChEYXRlT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENoZWNrRGF0ZShEYXRlT2JqZWN0KTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBzaG93T246ICdmb2N1cycsCiAgICAgICAgICAgICAgICBwcmV2VGV4dDogTG9jYWxpemF0aW9uRGF0YS5QcmV2VGV4dCwKICAgICAgICAgICAgICAgIG5leHRUZXh0OiBMb2NhbGl6YXRpb25EYXRhLk5leHRUZXh0LAogICAgICAgICAgICAgICAgc2hvd01vbnRoQWZ0ZXJZZWFyOiAwLAogICAgICAgICAgICAgICAgZGF0ZUZvcm1hdDogJ3l5LW1tLWRkJywKICAgICAgICAgICAgICAgIG1vbnRoTmFtZXM6IExvY2FsaXphdGlvbkRhdGEuTW9udGhOYW1lcywKICAgICAgICAgICAgICAgIG1vbnRoTmFtZXNTaG9ydDogTG9jYWxpemF0aW9uRGF0YS5Nb250aE5hbWVzU2hvcnQsCiAgICAgICAgICAgICAgICBkYXlOYW1lczogTG9jYWxpemF0aW9uRGF0YS5EYXlOYW1lcywKICAgICAgICAgICAgICAgIGRheU5hbWVzU2hvcnQ6IExvY2FsaXphdGlvbkRhdGEuRGF5TmFtZXNTaG9ydCwKICAgICAgICAgICAgICAgIGRheU5hbWVzTWluOiBMb2NhbGl6YXRpb25EYXRhLkRheU5hbWVzTWluLAogICAgICAgICAgICAgICAgaXNSVEw6IExvY2FsaXphdGlvbkRhdGEuSXNSVEwKICAgICAgICB9OwoKICAgICAgICBPcHRpb25zLmJlZm9yZVNob3cgPSBmdW5jdGlvbiAoSW5wdXQsIEluc3RhbmNlKSB7CiAgICAgICAgICAgIHZhciBWYWx1ZSA9ICQoSW5wdXQpLnByZXZBbGwoJ2lucHV0OnRleHQnKS52YWwoKTsKICAgICAgICAgICAgJChJbnB1dCkudmFsKCcnKTsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIGRlZmF1bHREYXRlOiBuZXcgRGF0ZShWYWx1ZSkKICAgICAgICAgICAgfTsKICAgICAgICB9OwoKICAgICAgICBPcHRpb25zLm9uU2VsZWN0ID0gZnVuY3Rpb24gKERhdGVUZXh0LCBJbnN0YW5jZSkgewogICAgICAgICAgICAkKHRoaXMpLnByZXZBbGwoJ2lucHV0OnRleHQnKS52YWwoRGF0ZVRleHQpOwogICAgICAgIH07CgogICAgICAgIGlmIChpc0pRdWVyeU9iamVjdCgkRWxlbWVudCkpIHsKICAgICAgICAgICAgJEVsZW1lbnQuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgJFNpbmdsZUVsZW1lbnQgPSAkKHRoaXMpOwogICAgICAgICAgICAgICAgaWYgKCRTaW5nbGVFbGVtZW50LmlzKCdpbnB1dDp0ZXh0JykpIHsKICAgICAgICAgICAgICAgICAgICAvLyBJbmNyZW1lbnQgbnVtYmVyIG9mIGluaXRpYWxpemVkIGRhdGVwaWNrZXJzIG9uIHRoaXMgc2l0ZQogICAgICAgICAgICAgICAgICAgIERhdGVwaWNrZXJDb3VudCsrOwoKICAgICAgICAgICAgICAgICAgICAkRGF0ZXBpY2tlckVsZW1lbnQgPSAkKCc8aW5wdXQ+JykuYXR0cigndHlwZScsICdoaWRkZW4nKS5hdHRyKCdpZCcsICdEYXRlcGlja2VyJyArIERhdGVwaWNrZXJDb3VudCk7CiAgICAgICAgICAgICAgICAgICAgJFNpbmdsZUVsZW1lbnQuYWZ0ZXIoJERhdGVwaWNrZXJFbGVtZW50KTsKCiAgICAgICAgICAgICAgICAgICAgT3B0aW9ucy5maXJzdERheSA9IERhdGVwaWNrZXJPcHRpb25zLldlZWtEYXlTdGFydDsKICAgICAgICAgICAgICAgICAgICAkRGF0ZXBpY2tlckVsZW1lbnQuZGF0ZXBpY2tlcihPcHRpb25zKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGRhdGVwaWNrZXIgaWNvbiBhbmQgY2xpY2sgZXZlbnQKICAgICAgICAgICAgICAgICAgICAkRGF0ZXBpY2tlckVsZW1lbnQuYWZ0ZXIoJzxhIGhyZWY9IiMiIGNsYXNzPSJEYXRlcGlja2VySWNvbiBEYXRlcGlja2VyTnVtYmVyJyArIERhdGVwaWNrZXJDb3VudCArICciIHRpdGxlPSInICsgTG9jYWxpemF0aW9uRGF0YS5JY29uVGV4dCArICciPjwvYT4nKTsKICAgICAgICAgICAgICAgICAgICAkRGF0ZXBpY2tlckVsZW1lbnQubmV4dCgnYS5EYXRlcGlja2VySWNvbicpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIENsYXNzZXMgPSAkKHRoaXMpLmF0dHIoJ2NsYXNzJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlcGlja2VyTnVtYmVyID0gQ2xhc3Nlcy5yZXBsYWNlKC9eLipEYXRlcGlja2VyTnVtYmVyKFswLTldKykuKi9nLCAiJDEiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNEYXRlcGlja2VyJyArIERhdGVwaWNrZXJOdW1iZXIpLmRhdGVwaWNrZXIoJ3Nob3cnKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3Qgc2hvdyB0aGUgZGF0ZXBpY2tlciBjb250YWluZXIgZGl2LgogICAgICAgICAgICAgICAgICAgICQoJyN1aS1kYXRlcGlja2VyLWRpdicpLmhpZGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oVGltZUFjY291bnRpbmcuQWdlbnQuRGF0ZXBpY2tlciB8fCB7fSkpOwo=
Ly8gLS0KLy8gVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzLmpzIC0gcHJvdmlkZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlCi8vIGVkaXQgc2NyZWVuCi8vIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy9cbiI7Ci8vIC0tCi8vIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCi8vIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKLy8gZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KLy8gLS0KCiJ1c2Ugc3RyaWN0IjsKCnZhciBUaW1lQWNjb3VudGluZyA9IFRpbWVBY2NvdW50aW5nIHx8IHt9OwpUaW1lQWNjb3VudGluZy5BZ2VudCA9IFRpbWVBY2NvdW50aW5nLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UKICogQGV4cG9ydHMgVGFyZ2V0TlMgYXMgVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIHRoZSBlZGl0IHNjcmVlbi4KICovClRpbWVBY2NvdW50aW5nLkFnZW50LkVkaXRUaW1lUmVjb3JkcyA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICBUYXJnZXROUy5BY3Rpb25MaXN0ID0gIiI7CiAgICBUYXJnZXROUy5BY3Rpb25MaXN0Q29uc3RyYWludHMgPSAiIjsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtTdHJpbmd9IFRoZSBJRCBvZiB0aGUgd29ya2luZyB1bml0IHdlIGFyZSBpbgogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIEZpbGxzIG9wdGlvbnMgb2YgYWN0aW9uIHNlbGVjdGlvbiBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgcHJvamVjdAogICAgICovCiAgICBUYXJnZXROUy5GaWxsQWN0aW9uTGlzdCA9IGZ1bmN0aW9uIChXb3JraW5nVW5pdElEKSB7CiAgICAgICAgdmFyIFByb2plY3ROYW1lID0gJCgnI1Byb2plY3RJRCcgKyBXb3JraW5nVW5pdElEICsgJyBvcHRpb246c2VsZWN0ZWQnKS50ZXh0KCksCiAgICAgICAgICAgIEFjdGlvbkxpc3QgPSBUYXJnZXROUy5BY3Rpb25MaXN0LAogICAgICAgICAgICBBY3Rpb25MaXN0Q29uc3RyYWludHMgPSBUYXJnZXROUy5BY3Rpb25MaXN0Q29uc3RyYWludHMsCiAgICAgICAgICAgICRBY3Rpb25TZWxlY3Rpb24gPSAkKCIjQWN0aW9uSUQiICsgV29ya2luZ1VuaXRJRCksCiAgICAgICAgICAgIFNlbGVjdGVkQWN0aW9uSUQgPSAkQWN0aW9uU2VsZWN0aW9uLnZhbCgpLAogICAgICAgICAgICBPcHRpb25Db3VudCA9IDA7CgogICAgICAgIC8vIHJlbW92ZSBwcmV2aW91cyBhY3Rpb25zLCBsZWF2ZSBmaXJzdCBlbGVtZW50IChlbXB0eSBlbGVtZW50KQogICAgICAgICRBY3Rpb25TZWxlY3Rpb24uZmluZCgnb3B0aW9uJykuZmlsdGVyKCc6bm90KDpmaXJzdCknKS5yZW1vdmUoKTsKCgogICAgICAgICQuZWFjaChBY3Rpb25MaXN0LCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBBY3Rpb25JRCA9IHRoaXNbMF0sCiAgICAgICAgICAgICAgICBBY3Rpb25OYW1lID0gdGhpc1sxXTsKCiAgICAgICAgICAgICQuZWFjaChBY3Rpb25MaXN0Q29uc3RyYWludHMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBQcm9qZWN0TmFtZVJlZ0V4cCA9IG5ldyBSZWdFeHAodGhpc1swXSk7CiAgICAgICAgICAgICAgICB2YXIgQWN0aW9uTmFtZVJlZ0V4cCA9IG5ldyBSZWdFeHAodGhpc1sxXSk7CgogICAgICAgICAgICAgICAgLy8gYWRkIGFjdGlvbiB0byBzZWxlY3Rpb24KICAgICAgICAgICAgICAgIGlmIChQcm9qZWN0TmFtZVJlZ0V4cC50ZXN0KFByb2plY3ROYW1lKSAmJiBBY3Rpb25OYW1lUmVnRXhwLnRlc3QoQWN0aW9uTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICBBZGRTZWxlY3Rpb25PcHRpb24oJEFjdGlvblNlbGVjdGlvbiwgQWN0aW9uTmFtZSwgQWN0aW9uSUQsIFNlbGVjdGVkQWN0aW9uSUQpOwogICAgICAgICAgICAgICAgICAgIE9wdGlvbkNvdW50Kys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwoKICAgICAgICAvLyBhbGwgYWN0aW9ucyB3aWxsIGJlIGFkZGVkIGlmIG5vIGFjdGlvbiB3YXMgYWRkZWQgYWJvdmUgKHBvc3NpYmxlIG1pc2NvbmZpZ3VyYXRpb24pCiAgICAgICAgaWYgKCFPcHRpb25Db3VudCkgewogICAgICAgICAgICAvLyBpZ25vcmUgZmlyc3QgZWxlbWVudCBiZWNhdXNlIGl0J3MgdGhlIGVtcHR5IGVsZW1lbnQgd2hpY2ggaXMgYWxyZWFkeSBwYXJ0IG9mIHRoZSBsaXN0CiAgICAgICAgICAgICQuZWFjaChBY3Rpb25MaXN0LCBmdW5jdGlvbiAoSW5kZXgpIHsKICAgICAgICAgICAgICAgIHZhciBBY3Rpb25JRCA9IHRoaXNbMF0sCiAgICAgICAgICAgICAgICAgICAgQWN0aW9uTmFtZSA9IHRoaXNbMV07CiAgICAgICAgICAgICAgICBpZiAoSW5kZXggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgQWRkU2VsZWN0aW9uT3B0aW9uKCRBY3Rpb25TZWxlY3Rpb24sIEFjdGlvbk5hbWUsIEFjdGlvbklELCBTZWxlY3RlZEFjdGlvbklEKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQoKICAgIC8vIEFkZHMgb3B0aW9uIHRvIGEgc2VsZWN0aW9uCiAgICBmdW5jdGlvbiBBZGRTZWxlY3Rpb25PcHRpb24oJFNlbGVjdGlvbkVsZW1lbnQsIE9wdGlvblRleHQsIE9wdGlvblZhbHVlLCBTZWxlY3RlZE9wdGlvbikgewogICAgICAgIHZhciAkT3B0aW9uID0gJCgnPG9wdGlvbiB2YWx1ZT0iJyArIE9wdGlvblZhbHVlICsgJyI+JyArIE9wdGlvblRleHQgKyAnPC9vcHRpb24+Jyk7CgogICAgICAgIGlmIChPcHRpb25WYWx1ZSA9PSBTZWxlY3RlZE9wdGlvbikgewogICAgICAgICAgICAkT3B0aW9uLnByb3AoJ3NlbGVjdGVkJywgdHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICAkU2VsZWN0aW9uRWxlbWVudC5hcHBlbmQoJE9wdGlvbik7CiAgICB9CgogICAgZnVuY3Rpb24gSW5pdEF1dG9Db21wbGV0aW9uKExhbmd1YWdlKSB7CiAgICAgICAgLy8gSW5pdGlhbGl6ZSBDb21ib0JveCBvbiBQcm9qZWN0IGRyb3Bkb3duCiAgICAgICAgQ29yZS5VSS5Db21ib0JveC5Jbml0KCcuUHJvamVjdFNlbGVjdGlvbicsIHsKICAgICAgICAgICAgQ2xhc3M6ICJWYWxpZGF0ZV9UaW1lQWNjb3VudGluZ19Qcm9qZWN0IiwKICAgICAgICAgICAgTGFuZzogewogICAgICAgICAgICAgICAgU2hvd0FsbEl0ZW1zOiBMYW5ndWFnZS5TaG93QWxsSXRlbXMKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIC8vIEluaXRpYWxpemUgQ29tYm9Cb3ggb24gdGFzayBkcm9wZG93bgogICAgICAgIENvcmUuVUkuQ29tYm9Cb3guSW5pdCgnLkFjdGlvblNlbGVjdGlvbicsIHsKICAgICAgICAgICAgQ2xhc3M6ICJWYWxpZGF0ZV9EZXBlbmRpbmdSZXF1aXJlZEFORCIsCiAgICAgICAgICAgIExhbmc6IHsKICAgICAgICAgICAgICAgIFNob3dBbGxJdGVtczogTGFuZ3VhZ2UuU2hvd0FsbEl0ZW1zCiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAvLyBBZGQgc3BlY2lhbCB2YWxpZGF0aW9uIGNsYXNzIHRvIEFjdGlvblNlbGVjdGlvbgogICAgICAgICQoJy5BY3Rpb25TZWxlY3Rpb24nKS5uZXh0KCdpbnB1dDp0ZXh0JykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBJRCA9IHRoaXMuaWQucmVwbGFjZSgnQ29tYm9fQWN0aW9uSUQnLCAnJyk7CiAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ1ZhbGlkYXRlX0RlcGVuZGluZ19Db21ib19Qcm9qZWN0SUQnICsgSUQpOwogICAgICAgIH0pOwogICAgICAgIC8vIFJlbW92ZSB2YWxpZGF0aW9uIGNsYXNzZXMgZnJvbSB1bmRlcmx5aW5nIHNlbGVjdAogICAgICAgICQoJy5Qcm9qZWN0U2VsZWN0aW9uJykucmVtb3ZlQ2xhc3MoJ1ZhbGlkYXRlX1RpbWVBY2NvdW50aW5nX1Byb2plY3QnKTsKICAgICAgICAkKCcuQWN0aW9uU2VsZWN0aW9uJykucmVtb3ZlQ2xhc3MoJ1ZhbGlkYXRlX0RlcGVuZGluZ1JlcXVpcmVkQU5EJyk7CgogICAgICAgIC8vIENvcHkgU2VydmVyRXJyb3IgY2xhc3NlcyB0byBhY2NvcmRpbmcgY29tYm9ib3hlcwogICAgICAgICQoJy5Qcm9qZWN0U2VsZWN0aW9uLlNlcnZlckVycm9yJykubmV4dCgnaW5wdXRbaWRePUNvbWJvX10nKS5hZGRDbGFzcygnU2VydmVyRXJyb3InKTsKICAgICAgICAkKCcuQWN0aW9uU2VsZWN0aW9uLlNlcnZlckVycm9yJykubmV4dCgnaW5wdXRbaWRePUNvbWJvX10nKS5hZGRDbGFzcygnU2VydmVyRXJyb3InKTsKCiAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkluaXQoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBJbml0QWRkUm93KExhbmd1YWdlKSB7CiAgICAgICAgJCgnI01vcmVJbnB1dEZpZWxkcycpLnVuYmluZCgnY2xpY2suTW9yZUlucHV0RmllbGRzJykuYmluZCgnY2xpY2suTW9yZUlucHV0RmllbGRzJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgJExhc3RSb3cgPSAkKCcjSW5zZXJ0V29ya2luZ0hvdXJzIHRib2R5IHRyLldvcmtpbmdIb3VyczpsYXN0JyksCiAgICAgICAgICAgICAgICAkTmV3Um93ID0gJExhc3RSb3cuY2xvbmUoKSwKICAgICAgICAgICAgICAgIE5ld1Jvd0hUTUwgPSAkTmV3Um93Lmh0bWwoKSwKICAgICAgICAgICAgICAgIFJlY29yZE51bWJlciA9IHBhcnNlSW50KCQoJyNSZWNvcmRzTnVtYmVyJykudmFsKCksIDEwKSArIDE7CgogICAgICAgICAgICAvLyBOb3cgdGFrZSB0aGUgbGFzdCByb3cgYW5kIHJlcGxhY2UgYWxsIG51bWJlcnMgd2l0aCB0aGUgbmV3IHJlY29yZCBudW1iZXIKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvUHJvamVjdElEWzAtOV0rL2csICdQcm9qZWN0SUQnICsgUmVjb3JkTnVtYmVyKTsKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvUHJvamVjdElEXFtbMC05XSsvZywgJ1Byb2plY3RJRFsnICsgUmVjb3JkTnVtYmVyKTsKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvRmlsbEFjdGlvbkxpc3RcKFswLTldKy9nLCAnRmlsbEFjdGlvbkxpc3QoJyArIFJlY29yZE51bWJlcik7CiAgICAgICAgICAgIE5ld1Jvd0hUTUwgPSBOZXdSb3dIVE1MLnJlcGxhY2UoL0FjdGlvbklEWzAtOV0rL2csICdBY3Rpb25JRCcgKyBSZWNvcmROdW1iZXIpOwogICAgICAgICAgICBOZXdSb3dIVE1MID0gTmV3Um93SFRNTC5yZXBsYWNlKC9BY3Rpb25JRFxbWzAtOV0rL2csICdBY3Rpb25JRFsnICsgUmVjb3JkTnVtYmVyKTsKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvUmVtYXJrWzAtOV0rL2csICdSZW1hcmsnICsgUmVjb3JkTnVtYmVyKTsKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvUmVtYXJrXFtbMC05XSsvZywgJ1JlbWFya1snICsgUmVjb3JkTnVtYmVyKTsKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvU3RhcnRUaW1lWzAtOV0rL2csICdTdGFydFRpbWUnICsgUmVjb3JkTnVtYmVyKTsKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvU3RhcnRUaW1lXFtbMC05XSsvZywgJ1N0YXJ0VGltZVsnICsgUmVjb3JkTnVtYmVyKTsKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvRW5kVGltZVswLTldKy9nLCAnRW5kVGltZScgKyBSZWNvcmROdW1iZXIpOwogICAgICAgICAgICBOZXdSb3dIVE1MID0gTmV3Um93SFRNTC5yZXBsYWNlKC9FbmRUaW1lXFtbMC05XSsvZywgJ0VuZFRpbWVbJyArIFJlY29yZE51bWJlcik7CiAgICAgICAgICAgIE5ld1Jvd0hUTUwgPSBOZXdSb3dIVE1MLnJlcGxhY2UoL1BlcmlvZFswLTldKy9nLCAnUGVyaW9kJyArIFJlY29yZE51bWJlcik7CiAgICAgICAgICAgIE5ld1Jvd0hUTUwgPSBOZXdSb3dIVE1MLnJlcGxhY2UoL1BlcmlvZFxbWzAtOV0rL2csICdQZXJpb2RbJyArIFJlY29yZE51bWJlcik7CgogICAgICAgICAgICAvLyBOb3cgd3JpdGUgdGhpcyBIVE1MIGJhY2sgdG8gdGhlIGpxdWVyeSBvYmplY3QKICAgICAgICAgICAgJE5ld1Jvdy5odG1sKE5ld1Jvd0hUTUwpOwoKICAgICAgICAgICAgLy8gSWYgbGFzdCByb3cgY29udGFpbmVkIHZhbHVlcywgdGhlc2UgbXVzdCBiZSByZW1vdmVkCiAgICAgICAgICAgICROZXdSb3cKICAgICAgICAgICAgICAgIC5maW5kKCdpbnB1dDp0ZXh0JykudmFsKCcnKS5lbmQoKQogICAgICAgICAgICAgICAgLmZpbmQoJ3NlbGVjdCBvcHRpb24nKS5wcm9wKCdzZWxlY3RlZCcsIGZhbHNlKTsKCiAgICAgICAgICAgIC8vIFJlbW92ZSBhdXRvY29tcGxldGlvbiBmcm9tIHRoaXMgcm93ICh3aWxsIGJlIHJlLWluaXRpYXRlZCBsYXRlcikKICAgICAgICAgICAgJE5ld1JvdwogICAgICAgICAgICAgICAgLmZpbmQoJ2lucHV0W2lkXj1Db21ib19dJykucmVtb3ZlKCkuZW5kKCkKICAgICAgICAgICAgICAgIC5maW5kKCdidXR0b25baWRePUNvbWJvQnRuX10nKS5yZW1vdmUoKTsKCiAgICAgICAgICAgIC8vIE5vdyBhZGQgdGhpcyByb3cgdG8gdGhlIHRhYmxlCiAgICAgICAgICAgICRMYXN0Um93LmFmdGVyKCROZXdSb3cpOwoKICAgICAgICAgICAgLy8gU2F2ZSBuZXcgUmVjb3JkTnVtYmVyCiAgICAgICAgICAgICQoJyNSZWNvcmRzTnVtYmVyJykudmFsKFJlY29yZE51bWJlcik7CgogICAgICAgICAgICAvLyBSZS1pbml0aWF0ZSB0aGUgJ29kZC9ldmVuJyBjb2xvdXJzIG9mIHRoZSB0YWJsZQogICAgICAgICAgICAkKCcjSW5zZXJ0V29ya2luZ0hvdXJzIHRib2R5IHRyJykKICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnRXZlbicpCiAgICAgICAgICAgICAgICAuZmlsdGVyKCc6b2RkJykuYWRkQ2xhc3MoJ0V2ZW4nKTsKCiAgICAgICAgICAgIC8vIFJlLWluaXRpYXRlIGF1dG9jb21wbGV0aW9uIGNvbWJvYm94CiAgICAgICAgICAgIGlmIChUYXJnZXROUy5BdXRvY29tcGxldGlvbikgewogICAgICAgICAgICAgICAgSW5pdEF1dG9Db21wbGV0aW9uKExhbmd1YWdlKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIFJlY2FsY3VsYXRlVG90YWxIb3VycygpIHsKICAgICAgICB2YXIgVG90YWwgPSAwOwogICAgICAgICQoJy5QZXJpb2QnKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIFZhbHVlID0gcGFyc2VGbG9hdCgkKHRoaXMpLnZhbCgpKTsKICAgICAgICAgICAgaWYgKCFpc05hTihWYWx1ZSkpIHsKICAgICAgICAgICAgICAgIFRvdGFsICs9IFZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgJCgnLlRvdGFsSG91cnMnKS50ZXh0KFRvdGFsLnRvRml4ZWQoMikpOwogICAgfQoKICAgIGZ1bmN0aW9uIEluaXRQZXJpb2RDYWxjdWxhdGlvbigpIHsKICAgICAgICAvLyBpbml0IGNhbGN1bGF0aW9uIG9mIHBlcmlvZCBmaWVsZCBhZnRlciB3b3JraW5nIGhvdXJzIHdoZXJlIGFkZGVkL3N1YnN0cmFjdGVkL3doYXRldmVyLi4uCiAgICAgICAgJCgnLlBlcmlvZCcpLnVuYmluZCgnY2hhbmdlLlBlcmlvZENhbGN1bGF0aW9uJykuYmluZCgnY2hhbmdlLlBlcmlvZENhbGN1bGF0aW9uJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgIHZhciBGaWVsZFZhbHVlID0gJCh0aGlzKS52YWwoKTsKCiAgICAgICAgICAgLy8gcmVwbGFjZSAsIHdpdGggLgogICAgICAgICAgIEZpZWxkVmFsdWUgPSBGaWVsZFZhbHVlLnJlcGxhY2UoLywvZywgIi4iKTsKCiAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGVudGVyZWQgdmFsdWUgb25seSBjb25zaXN0cyBvZiBhbGxvd2VkIHZhbHVlcwogICAgICAgICAgIC8vIGlmIG5vdCwgd2UgZG8gbm90IGV2YWwgZm9yIHNlY3VyaXR5IHJlYXNvbnMKICAgICAgICAgICBpZiAoRmllbGRWYWx1ZS5tYXRjaCgvXlswLTlcLitcLSBdKyQvKSkgewogICAgICAgICAgICAgICAvLyBDYWxjdWxhdGlvbgogICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgRmllbGRWYWx1ZSA9IGV2YWwoRmllbGRWYWx1ZSk7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgY2F0Y2ggKENhbGNFcnJvcikgewogICAgICAgICAgICAgICAgICAgRmllbGRWYWx1ZSA9IDA7CiAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgIC8vIHNldCBuZXcgdmFsdWUKICAgICAgICAgICAgICAgJCh0aGlzKS52YWwoRmllbGRWYWx1ZS50b0ZpeGVkKDIpKTsKCiAgICAgICAgICAgICAgIC8vIG5vdyBTdGFydFRpbWUgYW5kIEVuZFRpbWUgd2lsbCBub3QgbWF0Y2ggdGhlIHBlcmlvZCBhbnltb3JlCiAgICAgICAgICAgICAgIC8vIGRlbGV0ZSB0aGVzZSBlbnRyaWVzCiAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgndHInKS5maW5kKCcuU3RhcnRUaW1lLCAuRW5kVGltZScpLnZhbCgnJyk7CgogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgJCh0aGlzKS52YWwoJycpOwogICAgICAgICAgIH0KCiAgICAgICAgICAgLy8gbm93IHJlLWNhbGN1bGF0ZSB0aGUgdG90YWwgaG91cnMgc3VtCiAgICAgICAgICAgUmVjYWxjdWxhdGVUb3RhbEhvdXJzKCk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIGluaXQgcGVyaW9kIGNhbGN1bGF0aW9uIG9uIHN0YXJ0dGltZSBhbmQgZW5kdGltZSBmaWVsZHMKICAgICAgICAkKCcuU3RhcnRUaW1lLCAuRW5kVGltZScpLnVuYmluZCgnY2hhbmdlLlBlcmlvZENhbGN1bGF0aW9uJykuYmluZCgnY2hhbmdlLlBlcmlvZENhbGN1bGF0aW9uJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgJFN0YXJ0VGltZSwgJEVuZFRpbWUsCiAgICAgICAgICAgICAgICBTdGFydFRpbWVIb3VyLCBTdGFydFRpbWVNaW51dGUsIEVuZFRpbWVIb3VyLCBFbmRUaW1lTWludXRlLAogICAgICAgICAgICAgICAgU3RhcnREYXRlLCBFbmREYXRlLCBUb2RheSwKICAgICAgICAgICAgICAgIFBlcmlvZCwgUGVyaW9kSG91ciwgUGVyaW9kTWludXRlOwoKICAgICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ1N0YXJ0VGltZScpKSB7CiAgICAgICAgICAgICAgICAkU3RhcnRUaW1lID0gJCh0aGlzKTsKICAgICAgICAgICAgICAgICRFbmRUaW1lID0gJFN0YXJ0VGltZS5jbG9zZXN0KCd0cicpLmZpbmQoJy5FbmRUaW1lJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkU3RhcnRUaW1lID0gJCh0aGlzKS5jbG9zZXN0KCd0cicpLmZpbmQoJy5TdGFydFRpbWUnKTsKICAgICAgICAgICAgICAgICRFbmRUaW1lID0gJCh0aGlzKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gb25seSBjYWxjdWxhdGUgaWYgYm90aCBmaWVsZHMgYXJlIGZpbGxlZAogICAgICAgICAgICBpZiAoJFN0YXJ0VGltZS52YWwoKSAmJiAkRW5kVGltZS52YWwoKSkgewogICAgICAgICAgICAgICAgLy8gZXh0cmFjdCBob3VycyBhbmQgbWludXRlcwogICAgICAgICAgICAgICAgU3RhcnRUaW1lSG91ciA9ICRTdGFydFRpbWUudmFsKCkuc3BsaXQoLzovKVswXSB8fCAwOwogICAgICAgICAgICAgICAgU3RhcnRUaW1lTWludXRlID0gJFN0YXJ0VGltZS52YWwoKS5zcGxpdCgvOi8pWzFdIHx8IDA7CiAgICAgICAgICAgICAgICBFbmRUaW1lSG91ciA9ICRFbmRUaW1lLnZhbCgpLnNwbGl0KC86LylbMF0gfHwgMDsKICAgICAgICAgICAgICAgIEVuZFRpbWVNaW51dGUgPSAkRW5kVGltZS52YWwoKS5zcGxpdCgvOi8pWzFdIHx8IDA7CgogICAgICAgICAgICAgICAgLy8gZGVmaW5lIGRhdGUgb2JqZWN0cwogICAgICAgICAgICAgICAgVG9kYXkgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgICAgICAgU3RhcnREYXRlID0gbmV3IERhdGUoVG9kYXkuZ2V0WWVhcigpLCBUb2RheS5nZXRNb250aCgpLCBUb2RheS5nZXREYXRlKCksIFN0YXJ0VGltZUhvdXIsIFN0YXJ0VGltZU1pbnV0ZSwgMCk7CiAgICAgICAgICAgICAgICBFbmREYXRlID0gbmV3IERhdGUoVG9kYXkuZ2V0WWVhcigpLCBUb2RheS5nZXRNb250aCgpLCBUb2RheS5nZXREYXRlKCksIEVuZFRpbWVIb3VyLCBFbmRUaW1lTWludXRlLCAwKTsKCiAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgZGlmZmVyZW5jZXMKICAgICAgICAgICAgICAgIFBlcmlvZCA9IEVuZERhdGUuZ2V0VGltZSgpIC0gU3RhcnREYXRlLmdldFRpbWUoKTsKICAgICAgICAgICAgICAgIFBlcmlvZCA9IFBlcmlvZCAvICgxMDAwICogNjAgKiA2MCk7CgogICAgICAgICAgICAgICAgLy8gc2V0IG5ldyB2YWx1ZQogICAgICAgICAgICAgICAgaWYgKCFpc05hTihQZXJpb2QpKSB7CiAgICAgICAgICAgICAgICAgICAgJFN0YXJ0VGltZS5jbG9zZXN0KCd0cicpLmZpbmQoJy5QZXJpb2QnKS52YWwoUGVyaW9kLnRvRml4ZWQoMikpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFN0YXJ0VGltZS5jbG9zZXN0KCd0cicpLmZpbmQoJy5QZXJpb2QnKS52YWwoJycpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIFJlY2FsY3VsYXRlVG90YWxIb3VycygpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgVGFyZ2V0TlMuQXV0b2NvbXBsZXRpb24gPSB0cnVlOwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge09iamVjdH0gT3B0aW9ucyB0aGVkaWZmZXJlbnQgcG9zc2libGUgb3B0aW9uczoKICAgICAqICAgICAgICAgICAgICAgICAgUmVtYXJrUmVnRXhwQ29udGVudCAtIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHRoZSByZW1hcmsgdmFsaWRhdGlvbiBjaGVjawogICAgICogICAgICAgICAgICAgICAgICBMYW5ndWFnZSAtIG9iamVjdCB3aXRoIHRleHQgdHJhbnNsYXRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgIEF1dG9jb21wbGV0aW9uIC0gYm9vbGVhbgogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYWxsIG5lZWRlZCBKUyBmb3IgdGhlIEVkaXQgc2NyZWVuCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbiAoT3B0aW9ucykgewogICAgICAgIHZhciBPcHRpb25zID0gT3B0aW9ucyB8fCB7fSwKICAgICAgICAgICAgUmVtYXJrUmVnRXhwQ29udGVudCA9IE9wdGlvbnMuUmVtYXJrUmVnRXhwQ29udGVudCwKICAgICAgICAgICAgTGFuZ3VhZ2UgPSBPcHRpb25zLkxhbmd1YWdlOwogICAgICAgIC8vIEFkZCBzb21lIHNwZWNpYWwgdmFsaWRhdGlvbiBtZXRob2RzIGZvciB0aGUgZWRpdCBzY3JlZW4KICAgICAgICAvLyBEZWZpbmUgYWxsIGF2YWlsYWJsZSBlbGVtZW50cyAob25seSB0aGUgcHJlZml4ZXMpIGluIGEgcm93CiAgICAgICAgdmFyIEVsZW1lbnRQcmVmaXhlcyA9IFsnUHJvamVjdElEJywgJ0FjdGlvbklEJywgJ1JlbWFyaycsICdTdGFydFRpbWUnLCAnRW5kVGltZScsICdQZXJpb2QnXTsKCiAgICAgICAgLy8gVmFsaWRhdGVzIHRoZSBwcm9qZWN0OiBpZiBzb21lIG90aGVyIGZpZWxkIGluIHRoaXMgcm93IGlzIGZpbGxlZCwgdGhlIHByb2plY3Qgc2VsZWN0IG11c3QgYmUgZmlsbGVkLCB0b28KICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkTWV0aG9kKCdWYWxpZGF0ZV9UaW1lQWNjb3VudGluZ19Qcm9qZWN0JywgZnVuY3Rpb24gKFZhbHVlLCBFbGVtZW50KSB7CiAgICAgICAgICAgIHZhciBJRCwKICAgICAgICAgICAgICAgIFJlc3VsdCA9IHRydWU7CgogICAgICAgICAgICAvLyBHZXQgSUQKICAgICAgICAgICAgLy8gT3VyIEVsZW1lbnQgY2FuIGJlIHRoZSBzZWxlY3QgZWxlbWVudCBvciB0aGUgYXV0b2NvbXBsZXRpb24gaW5wdXQgZmllbGQKICAgICAgICAgICAgaWYgKCQoRWxlbWVudCkuaXMoJ3NlbGVjdCcpKSB7CiAgICAgICAgICAgICAgICBJRCA9ICQoRWxlbWVudCkuYXR0cignaWQnKS5yZXBsYWNlKCdQcm9qZWN0SUQnLCAnJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBJRCA9ICQoRWxlbWVudCkucHJldkFsbCgnc2VsZWN0JykuYXR0cignaWQnKS5yZXBsYWNlKCdQcm9qZWN0SUQnLCAnJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghVmFsdWUpIHsKICAgICAgICAgICAgICAgICQuZWFjaChFbGVtZW50UHJlZml4ZXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIVJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcyAhPT0gJ1Byb2plY3RJRCcgJiYgJCgnIycgKyB0aGlzICsgSUQpLnZhbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gUmVzdWx0OwogICAgICAgIH0pOwoKICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkUnVsZSgnVmFsaWRhdGVfVGltZUFjY291bnRpbmdfUHJvamVjdCcsIHsgVmFsaWRhdGVfVGltZUFjY291bnRpbmdfUHJvamVjdDogdHJ1ZSB9KTsKCiAgICAgICAgLy8gVmFsaWRhdGVzIHRoZSByZW1hcmtzOiBkZXBlbmRpbmcgb24gdGhlIHByb2plY3QsIHJlbWFya3MgbXVzdCBiZSBlbnRlcmVkIG9yIG5vdAogICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5BZGRNZXRob2QoJ1ZhbGlkYXRlX1RpbWVBY2NvdW50aW5nX1JlbWFyaycsIGZ1bmN0aW9uIChWYWx1ZSwgRWxlbWVudCkgewogICAgICAgICAgICB2YXIgSUQgPSAkKEVsZW1lbnQpLmF0dHIoJ2lkJykucmVwbGFjZSgnUmVtYXJrJywgJycpLAogICAgICAgICAgICAgICAgUmVtYXJrUmVnRXhwID0gbmV3IFJlZ0V4cCgiXigiICsgUmVtYXJrUmVnRXhwQ29udGVudCArICIpJCIpLAogICAgICAgICAgICAgICAgUmVtYXJrQ2hlY2sgPSBSZW1hcmtSZWdFeHAudGVzdCgkKCcjUHJvamVjdElEJyArIElEKS52YWwoKSk7CgogICAgICAgICAgICBpZiAoJCgnI1Byb2plY3RJRCcgKyBJRCkudmFsKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAhKFJlbWFya0NoZWNrICYmIFZhbHVlLmxlbmd0aCA8IDgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9KTsKCiAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkFkZFJ1bGUoJ1ZhbGlkYXRlX1RpbWVBY2NvdW50aW5nX1JlbWFyaycsIHsgVmFsaWRhdGVfVGltZUFjY291bnRpbmdfUmVtYXJrOiB0cnVlIH0pOwoKICAgICAgICAvLyBWYWxpZGF0ZXMgdGhlIHN0YXJ0IHRpbWU6IGlmIGEgcHJvamVjdCBpcyBnaXZlbiBhbmQgbm8gdGltZSBwZXJpb2QgaXMgZ2l2ZW4sIHRoaXMgZmllbGQgaXMgcmVxdWlyZWQKICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkTWV0aG9kKCdWYWxpZGF0ZV9UaW1lQWNjb3VudGluZ19TdGFydFRpbWUnLCBmdW5jdGlvbiAoVmFsdWUsIEVsZW1lbnQpIHsKICAgICAgICAgICAgdmFyIElEID0gJChFbGVtZW50KS5hdHRyKCdpZCcpLnJlcGxhY2UoJ1N0YXJ0VGltZScsICcnKTsKCiAgICAgICAgICAgIGlmICghVmFsdWUgJiYgJCgnI1Byb2plY3RJRCcgKyBJRCkudmFsKCkgJiYgISQoJyNQZXJpb2QnICsgSUQpLnZhbCgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0pOwoKICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkUnVsZSgnVmFsaWRhdGVfVGltZUFjY291bnRpbmdfU3RhcnRUaW1lJywgeyBWYWxpZGF0ZV9UaW1lQWNjb3VudGluZ19TdGFydFRpbWU6IHRydWUgfSk7CgogICAgICAgIC8vIFZhbGlkYXRlcyB0aGUgdGltZSBwZXJpb2Q6IGlmIGEgcHJvamVjdCBpcyBnaXZlbiBhbmQgbm8gc3RhcnQgdGltZSBpcyBnaXZlbiwgdGhpcyBmaWVsZCBpcyByZXF1aXJlZAogICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5BZGRNZXRob2QoJ1ZhbGlkYXRlX1RpbWVBY2NvdW50aW5nX1BlcmlvZCcsIGZ1bmN0aW9uIChWYWx1ZSwgRWxlbWVudCkgewogICAgICAgICAgICB2YXIgSUQgPSAkKEVsZW1lbnQpLmF0dHIoJ2lkJykucmVwbGFjZSgnUGVyaW9kJywgJycpOwoKICAgICAgICAgICAgaWYgKCFWYWx1ZSAmJiAkKCcjUHJvamVjdElEJyArIElEKS52YWwoKSAmJiAhJCgnI1N0YXJ0VGltZScgKyBJRCkudmFsKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSk7CgogICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5BZGRSdWxlKCdWYWxpZGF0ZV9UaW1lQWNjb3VudGluZ19QZXJpb2QnLCB7IFZhbGlkYXRlX1RpbWVBY2NvdW50aW5nX1BlcmlvZDogdHJ1ZSB9KTsKCiAgICAgICAgLy8gRW5hYmxlIGF1dG9jb21wbGV0aW9uLCBpZiBjb25maWd1cmVkCiAgICAgICAgVGFyZ2V0TlMuQXV0b2NvbXBsZXRpb24gPSBPcHRpb25zLkF1dG9jb21wbGV0aW9uOwogICAgICAgIGlmIChPcHRpb25zLkF1dG9jb21wbGV0aW9uKSB7CiAgICAgICAgICAgIEluaXRBdXRvQ29tcGxldGlvbihMYW5ndWFnZSk7CiAgICAgICAgfQoKICAgICAgICAvLyBpbml0aWF0ZSAibW9yZSBpbnB1dCBmaWVsZHMiIGZ1bmN0aW9uYWxpdHkKICAgICAgICBJbml0QWRkUm93KExhbmd1YWdlKTsKCiAgICAgICAgLy8gaW5pdGlhdGUgcGVyaW9kIGNhbGN1bGF0aW9uCiAgICAgICAgSW5pdFBlcmlvZENhbGN1bGF0aW9uKCk7CiAgICB9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge09iamVjdH0gTGFuZ3VhZ2Ugb2JqZWN0IHdpdGggdGV4dCB0cmFuc2xhdGlvbnMKICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBqYXZhc2NyaXB0IGZvciB0aGUgbWFzcyBlbnRyeSBmdW5jdGlvbmFsaXR5CiAgICAgKi8KICAgIFRhcmdldE5TLk1hc3NFbnRyeUluaXQgPSBmdW5jdGlvbihMYW5ndWFnZSkgewogICAgICAgICQoJyNJbmNvbXBsZXRlV29ya2luZ0RheS1BbGwnKS51bmJpbmQoJ2NsaWNrLlNlbGVjdEFsbERheXMnKS5iaW5kKCdjbGljay5TZWxlY3RBbGxEYXlzJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgICAgIHZhciBTdGF0ZSA9ICQodGhpcykucHJvcCgnY2hlY2tlZCcpOwogICAgICAgICAgICAkKCd1bC5JbmNvbXBsZXRlV29ya2luZ0RheXMgbGkgaW5wdXQ6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgU3RhdGUpOwogICAgICAgIH0pOwogICAgICAgICQoJyNNYXNzRW50cnlTdWJtaXQnKS51bmJpbmQoJ2NsaWNrLk1hc3NFbnRyeVN1Ym1pdCcpLmJpbmQoJ2NsaWNrLk1hc3NFbnRyeVN1Ym1pdCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyICRXb3JraW5nRGF5Q2hlY2tib3hlcyA9ICQoJ3VsLkluY29tcGxldGVXb3JraW5nRGF5cyBsaSBpbnB1dDpjaGVja2JveDpjaGVja2VkJykuZmlsdGVyKCdbbmFtZSE9SW5jb21wbGV0ZVdvcmtpbmdEYXktQWxsXScpOwoKICAgICAgICAgICAgaWYgKCEkV29ya2luZ0RheUNoZWNrYm94ZXMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBhbGVydChMYW5ndWFnZS5Nc2dDaG9vc2VPbmVEYXkpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBTaG93IG92ZXJsYXkKICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuU2hvd0NvbnRlbnREaWFsb2coJCgnI01hc3NFbnRyeUNvbmZpcm1EaWFsb2cnKSwgTGFuZ3VhZ2UuTWFzc0VudHJ5LCAnMTUwcHgnLCAnQ2VudGVyJywgdHJ1ZSwgWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIExhYmVsOiBMYW5ndWFnZS5TdWJtaXQsCiAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb246IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRTZWxlY3RlZFJhZGlvID0gJCgnI01hc3NFbnRyeUNvbmZpcm1SYWRpbyBsaSBpbnB1dDpyYWRpbzpjaGVja2VkJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYnNlbmNlUmVhc29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGVjdGVkRGF0ZXMgPSAnJzsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJFNlbGVjdGVkUmFkaW8ubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydChMYW5ndWFnZS5Nc2dBYnNlbmNlUmVhc29uKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGFic2VuY2UgcmVhc29uCiAgICAgICAgICAgICAgICAgICAgICAgIEFic2VuY2VSZWFzb24gPSAkU2VsZWN0ZWRSYWRpby5hdHRyKCduYW1lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBYnNlbmNlUmVhc29uID09PSAnTGVhdmVEYXknKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjTWFzc0VudHJ5IGlucHV0W25hbWU9TGVhdmVEYXldJykudmFsKDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFic2VuY2VSZWFzb24gPT09ICdTaWNrJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI01hc3NFbnRyeSBpbnB1dFtuYW1lPVNpY2tdJykudmFsKDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFic2VuY2VSZWFzb24gPT09ICdPdmVydGltZScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNNYXNzRW50cnkgaW5wdXRbbmFtZT1PdmVydGltZV0nKS52YWwoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgZGF0ZXMKICAgICAgICAgICAgICAgICAgICAgICAgJCgndWwuSW5jb21wbGV0ZVdvcmtpbmdEYXlzIGxpIGlucHV0OmNoZWNrYm94OmNoZWNrZWQnKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBEYXRlID0gJCh0aGlzKS5hdHRyKCduYW1lJykucmVwbGFjZSgvSW5jb21wbGV0ZVdvcmtpbmdEYXktLywgIiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERhdGUgIT09ICdBbGwnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGVjdGVkRGF0ZXMgKz0gRGF0ZSArICd8JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNNYXNzRW50cnkgaW5wdXRbbmFtZT1EYXRlc10nKS52YWwoQ29sbGVjdGVkRGF0ZXMpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdyB3YWl0aW5nIGljb24KICAgICAgICAgICAgICAgICAgICAgICAgJCgnLkRpYWxvZzp2aXNpYmxlJykKICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoJy5Db250ZW50Rm9vdGVyJykKICAgICAgICAgICAgICAgICAgICAgICAgLmVtcHR5KCkKICAgICAgICAgICAgICAgICAgICAgICAgLmVuZCgpCiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKCcuSW5uZXJDb250ZW50JykKICAgICAgICAgICAgICAgICAgICAgICAgLndpZHRoKCQoJy5EaWFsb2c6dmlzaWJsZScpLmZpbmQoJy5Jbm5lckNvbnRlbnQnKS53aWR0aCgpKQogICAgICAgICAgICAgICAgICAgICAgICAuZW1wdHkoKQogICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCc8c3BhbiBjbGFzcz0iQUpBWExvYWRlciI+PC9zcGFuPicpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VibWl0IGZvcm0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnI01hc3NFbnRyeScpLnN1Ym1pdCgpOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgQ2xhc3M6ICdQcmltYXJ5JwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBMYWJlbDogTGFuZ3VhZ2UuQ2FuY2VsLAogICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIENvcmUuVUkuRGlhbG9nLkNsb3NlRGlhbG9nKCQoJy5EaWFsb2c6dmlzaWJsZScpKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzIHx8IHt9KSk7Cg==
PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgo8aGVhZD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhpcmRwYXJ0eS9xdW5pdC0xLjExLjAvcXVuaXQtMS4xMS4wLmNzcyIgdHlwZT0idGV4dC9jc3MiLz4KCiAgICA8dGl0bGU+VGltZUFjY291bnRpbmcgZm9yIE9UUlMgMy4wICZuZGFzaDsgVW5pdFRlc3QgUmVzdWx0czwvdGl0bGU+CjwvaGVhZD4KPGJvZHk+CiAgICA8aDEgaWQ9InF1bml0LWhlYWRlciI+VGltZUFjY291bnRpbmcgZm9yIE9UUlMgMy4wICZuZGFzaDsgVW5pdFRlc3QgUmVzdWx0czwvaDE+CiAgICA8aDIgaWQ9InF1bml0LWJhbm5lciI+PC9oMj4KICAgIDxoMiBpZD0icXVuaXQtdXNlckFnZW50Ij48L2gyPgogICAgPG9sIGlkPSJxdW5pdC10ZXN0cyI+PC9vbD4KCgogICAgPCEtLSBVbml0VGVzdCBjb2RlIGdvZXMgaGVyZSAtLT4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL3RoaXJkcGFydHkvcXVuaXQtMS4xMS4wL3F1bml0LTEuMTEuMC5qcyI+PC9zY3JpcHQ+CiAgICA8IS0tCiAgICAgICAgTm93IGFsd2F5cyBsb2FkIGxpYnJhcnkgZmlyc3QgYW5kIHRoZW4gdGhlIFVuaXRUZXN0IGZpbGUgZm9yIGl0LgogICAgICAgIFRoZSBVbml0VGVzdCBmaWxlIGlzIHJlc3BvbnNpYmxlIGZvciBydW5uaW50IHRoZSB0ZXN0cy4KICAgIC0tPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vdGhpcmRwYXJ0eS9qcXVlcnktMS4xMC4wL2pxdWVyeS5qcyI+PC9zY3JpcHQ+CgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vQ29yZS5FeGNlcHRpb24uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vQ29yZS5EZWJ1Zy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9Db3JlLkRhdGEuanMiPjwvc2NyaXB0PgoKICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL3RoaXJkcGFydHkvanNvbi9qc29uMi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9Db3JlLkpTT04uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vQ29yZS5Db25maWcuanMiPjwvc2NyaXB0PgoKICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL3RoaXJkcGFydHkvanF1ZXJ5LXVpLTEuMTAuMy9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vdGhpcmRwYXJ0eS9qcXVlcnktdmFsaWRhdGUtMS4xMS4xL2pxdWVyeS52YWxpZGF0ZS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9Db3JlLkFwcC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9Db3JlLlVJLkRpYWxvZy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9Db3JlLkZvcm0uRXJyb3JUb29sdGlwcy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9Db3JlLlVJLkFjY2Vzc2liaWxpdHkuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vQ29yZS5VSS5SaWNoVGV4dEVkaXRvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9Db3JlLkZvcm0uVmFsaWRhdGUuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRpbWVBY2NvdW50aW5nLkFnZW50LkVkaXRUaW1lUmVjb3Jkcy5Vbml0VGVzdC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzLlJ1blVuaXRUZXN0cygpOwogICAgPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=
Ly8gLS0KLy8gVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzLlVuaXRUZXN0LmpzIC0gVW5pdFRlc3RzCi8vIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy9cbiI7Ci8vIC0tCi8vIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCi8vIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKLy8gZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KLy8gLS0KCiJ1c2Ugc3RyaWN0IjsKCnZhciBUaW1lQWNjb3VudGluZyA9IFRpbWVBY2NvdW50aW5nIHx8IHt9OwpUaW1lQWNjb3VudGluZy5BZ2VudCA9IFRpbWVBY2NvdW50aW5nLkFnZW50IHx8IHt9OwoKVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzID0gKGZ1bmN0aW9uIChOYW1lc3BhY2UpIHsKICAgIE5hbWVzcGFjZS5SdW5Vbml0VGVzdHMgPSBmdW5jdGlvbigpewogICAgICAgIG1vZHVsZSgnVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzJyk7CiAgICAgICAgdGVzdCgnY2xpZW50LXNpZGUgdGltZSBwZXJpb2QgY2FsY3VsYXRpb25zJywgZnVuY3Rpb24oKXsKCiAgICAgICAgICAgIGV4cGVjdCgyMCk7CgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBDcmVhdGUgYSBmb3JtIGNvbnRhaW5lciBmb3IgdGhlIHRlc3RzCiAgICAgICAgICAgICAqLwogICAgICAgICAgICB2YXIgJFRlc3RGb3JtID0gJCgnPGZvcm0gaWQ9IlRlc3RGb3JtIj48L2Zvcm0+JyksCiAgICAgICAgICAgICAgICAkVGFibGU7CiAgICAgICAgICAgICRUZXN0Rm9ybS5hcHBlbmQoJzx0YWJsZT48dHI+PHRkPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PC90cj48L3RhYmxlPicpOwogICAgICAgICAgICAkVGFibGUgPSAkVGVzdEZvcm0uZmluZCgndHI6ZXEoMCkgdGQnKTsKICAgICAgICAgICAgJFRhYmxlLmFwcGVuZCgnPGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSIiIGlkPSJTdGFydFRpbWUxIiBuYW1lPSJTdGFydFRpbWUxIiBjbGFzcz0iU3RhcnRUaW1lIiAvPicpOwogICAgICAgICAgICAkVGFibGUuYXBwZW5kKCc8aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9IiIgaWQ9IkVuZFRpbWUxIiBuYW1lPSJFbmRUaW1lMSIgY2xhc3M9IkVuZFRpbWUiIC8+Jyk7CiAgICAgICAgICAgICRUYWJsZS5hcHBlbmQoJzxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iIiBpZD0iUGVyaW9kMSIgbmFtZT0iUGVyaW9kMSIgY2xhc3M9IlBlcmlvZCIgLz4nKTsKICAgICAgICAgICAgJFRhYmxlID0gJFRlc3RGb3JtLmZpbmQoJ3RyOmVxKDEpIHRkJyk7CiAgICAgICAgICAgICRUYWJsZS5hcHBlbmQoJzxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iIiBpZD0iU3RhcnRUaW1lMiIgbmFtZT0iU3RhcnRUaW1lMiIgY2xhc3M9IlN0YXJ0VGltZSIgLz4nKTsKICAgICAgICAgICAgJFRhYmxlLmFwcGVuZCgnPGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSIiIGlkPSJFbmRUaW1lMiIgbmFtZT0iRW5kVGltZTIiIGNsYXNzPSJFbmRUaW1lIiAvPicpOwogICAgICAgICAgICAkVGFibGUuYXBwZW5kKCc8aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9IiIgaWQ9IlBlcmlvZDIiIG5hbWU9IlBlcmlvZDIiIGNsYXNzPSJQZXJpb2QiIC8+Jyk7CiAgICAgICAgICAgICRUYWJsZSA9ICRUZXN0Rm9ybS5maW5kKCd0cjplcSgyKSB0ZCcpOwogICAgICAgICAgICAkVGFibGUuYXBwZW5kKCc8aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9IiIgaWQ9IlN0YXJ0VGltZTMiIG5hbWU9IlN0YXJ0VGltZTMiIGNsYXNzPSJTdGFydFRpbWUiIC8+Jyk7CiAgICAgICAgICAgICRUYWJsZS5hcHBlbmQoJzxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iIiBpZD0iRW5kVGltZTMiIG5hbWU9IkVuZFRpbWUzIiBjbGFzcz0iRW5kVGltZSIgLz4nKTsKICAgICAgICAgICAgJFRhYmxlLmFwcGVuZCgnPGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSIiIGlkPSJQZXJpb2QzIiBuYW1lPSJQZXJpb2QzIiBjbGFzcz0iUGVyaW9kIiAvPicpOwogICAgICAgICAgICAkVGFibGUuYXBwZW5kKCc8c3BhbiBpZD0iVG90YWxIb3VycyIgbmFtZT0iVG90YWxIb3VycyIgY2xhc3M9IlRvdGFsSG91cnMiPjwvc3Bhbj4nKTsKICAgICAgICAgICAgJCgnYm9keScpLmFwcGVuZCgkVGVzdEZvcm0pOwoKICAgICAgICAgICAgLyoKICAgICAgICAgICAgICogUnVuIHRoZSB0ZXN0cwogICAgICAgICAgICAgKi8KCiAgICAgICAgICAgIFRpbWVBY2NvdW50aW5nLkFnZW50LkVkaXRUaW1lUmVjb3Jkcy5Jbml0KCk7CgogICAgICAgICAgICAvLyBUZXN0OiB0aW1lIGNhbGN1bGF0aW9uIG9uIHRpbWUgcGVyaW9kIGZpZWxkCiAgICAgICAgICAgICQoJyNQZXJpb2QxJykudmFsKCcyJyk7CiAgICAgICAgICAgICQoJyNQZXJpb2QxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgIGVxdWFsKCQoJyNQZXJpb2QxJykudmFsKCksICcyLjAwJywgJ05vcm1hbCBudW1iZXIgZW50cnknKTsKCiAgICAgICAgICAgICQoJyNQZXJpb2QxJykudmFsKCdmb29iYXInKTsKICAgICAgICAgICAgJCgnI1BlcmlvZDEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWwoJCgnI1BlcmlvZDEnKS52YWwoKSwgJycsICdOb3QgYSBudW1iZXIgKD0iZm9vYmFyIiknKTsKCiAgICAgICAgICAgICQoJyNQZXJpb2QxJykudmFsKCcyICsgMycpOwogICAgICAgICAgICAkKCcjUGVyaW9kMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICBlcXVhbCgkKCcjUGVyaW9kMScpLnZhbCgpLCAnNS4wMCcsICdFYXN5IGNhbGN1bGF0aW9uJyk7CgogICAgICAgICAgICAkKCcjUGVyaW9kMScpLnZhbCgnYWxlcnQoImh1aHUiKTsnKTsKICAgICAgICAgICAgJCgnI1BlcmlvZDEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWwoJCgnI1BlcmlvZDEnKS52YWwoKSwgJycsICdFdmlsIGphdmFzY3JpcHQgY29kZScpOwoKICAgICAgICAgICAgJCgnI1BlcmlvZDEnKS52YWwoJzIuMjMgKyAxLjA5Jyk7CiAgICAgICAgICAgICQoJyNQZXJpb2QxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgIGVxdWFsKCQoJyNQZXJpb2QxJykudmFsKCksICczLjMyJywgJ0NhbGN1bGF0aW9uIHdpdGggbm9uLWludGVnZXJzJyk7CgogICAgICAgICAgICAkKCcjUGVyaW9kMScpLnZhbCgnMi4wMDAxICsgMS41Jyk7CiAgICAgICAgICAgICQoJyNQZXJpb2QxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgIGVxdWFsKCQoJyNQZXJpb2QxJykudmFsKCksICczLjUwJywgJ0NhbGN1bGF0aW9uIHdpdGggYSBudW1iZXIgd2l0aCBtb3JlIHRoYW4gMiBkZWNpbWFscycpOwoKICAgICAgICAgICAgJCgnI1BlcmlvZDEnKS52YWwoJzEsMiArIDEsMycpOwogICAgICAgICAgICAkKCcjUGVyaW9kMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICBlcXVhbCgkKCcjUGVyaW9kMScpLnZhbCgpLCAnMi41MCcsICdOdW1iZXJzIHdpdGggLCBpbnN0ZWFkIG9mIC4nKTsKCiAgICAgICAgICAgICQoJyNQZXJpb2QxJykudmFsKCc1LjggLSAxLjInKTsKICAgICAgICAgICAgJCgnI1BlcmlvZDEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWwoJCgnI1BlcmlvZDEnKS52YWwoKSwgJzQuNjAnLCAnU3Vic3RyYWN0aW9uJyk7CgogICAgICAgICAgICAkKCcjUGVyaW9kMScpLnZhbCgnJyk7CgogICAgICAgICAgICAvLyBUZXN0OiBjYWxjdWxhdGUgcGVyaW9kIGZyb20gZW50ZXJlZCBzdGFydCBhbmQgZW5kIHRpbWUKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS52YWwoJzEnKTsKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgJCgnI0VuZFRpbWUxJykudmFsKCcnKTsKICAgICAgICAgICAgJCgnI0VuZFRpbWUxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgIGVxdWFsKCQoJyNQZXJpb2QxJykudmFsKCksICcnLCAnT25seSBzdGFydCB0aW1lIGVudGVyZWQnKTsKCiAgICAgICAgICAgICQoJyNTdGFydFRpbWUxJykudmFsKCcnKTsKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgJCgnI0VuZFRpbWUxJykudmFsKCcyJyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICBlcXVhbCgkKCcjUGVyaW9kMScpLnZhbCgpLCAnJywgJ09ubHkgZW5kIHRpbWUgZW50ZXJlZCcpOwoKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS52YWwoJzEnKTsKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgJCgnI0VuZFRpbWUxJykudmFsKCcyJyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICBlcXVhbCgkKCcjUGVyaW9kMScpLnZhbCgpLCAnMS4wMCcsICdCb3RoIHRpbWVzIGVudGVyZWQnKTsKCiAgICAgICAgICAgICQoJyNTdGFydFRpbWUxJykudmFsKCc5OjA2Jyk7CiAgICAgICAgICAgICQoJyNTdGFydFRpbWUxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnZhbCgnMTA6MDAnKTsKICAgICAgICAgICAgJCgnI0VuZFRpbWUxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgIGVxdWFsKCQoJyNQZXJpb2QxJykudmFsKCksICcwLjkwJywgJ0Vhc3kgY2FsY3VsYXRpb24gd2l0aCB0d28gdGltZXMgb2YgdGhlIGZvcm1hdCBISDpNTScpOwoKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS52YWwoJzk6MDAnKTsKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgJCgnI0VuZFRpbWUxJykudmFsKCcxMTozMCcpOwogICAgICAgICAgICAkKCcjRW5kVGltZTEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWwoJCgnI1BlcmlvZDEnKS52YWwoKSwgJzIuNTAnLCAnRWFzeSBjYWxjdWxhdGlvbiB3aXRoIHR3byB0aW1lcyBvZiB0aGUgZm9ybWF0IEhIOk1NJyk7CgogICAgICAgICAgICAkKCcjU3RhcnRUaW1lMScpLnZhbCgnOSw1Jyk7CiAgICAgICAgICAgICQoJyNTdGFydFRpbWUxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnZhbCgnMTAsNScpOwogICAgICAgICAgICAkKCcjRW5kVGltZTEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWwoJCgnI1BlcmlvZDEnKS52YWwoKSwgJycsICdTdGFydFRpbWUgYW5kIEVuZFRpbWUgZm9ybWF0IGFyZSB3cm9uZycpOwoKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS52YWwoJzk6NScpOwogICAgICAgICAgICAkKCcjU3RhcnRUaW1lMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICAkKCcjRW5kVGltZTEnKS52YWwoJzEwOjUnKTsKICAgICAgICAgICAgJCgnI0VuZFRpbWUxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgIGVxdWFsKCQoJyNQZXJpb2QxJykudmFsKCksICcxLjAwJywgJ1N0YXJ0VGltZSBhbmQgRW5kVGltZSBmb3JtYXQgYXJlIHNsaWdodGx5IHdyb25nJyk7CgogICAgICAgICAgICAvLyBUZXN0OiBDYWxjdWxhdGlvbiBvZiB0b3RhbCBob3VycwogICAgICAgICAgICAkKCcjU3RhcnRUaW1lMScpLnZhbCgnOTo1Jyk7CiAgICAgICAgICAgICQoJyNTdGFydFRpbWUxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnZhbCgnMTA6NScpOwogICAgICAgICAgICAkKCcjRW5kVGltZTEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWwoJCgnI1RvdGFsSG91cnMnKS50ZXh0KCksICcxLjAwJywgJ0Vhc3kgc3RhcnQnKTsKCiAgICAgICAgICAgICQoJyNQZXJpb2QyJykudmFsKCcyLjUnKTsKICAgICAgICAgICAgJCgnI1BlcmlvZDInKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWwoJCgnI1RvdGFsSG91cnMnKS50ZXh0KCksICczLjUwJywgJ1NlY29uZCBwZXJpb2QgZmllbGQnKTsKCiAgICAgICAgICAgICQoJyNQZXJpb2QyJykudmFsKCcxLjUgKyA5LDUnKTsKICAgICAgICAgICAgJCgnI1BlcmlvZDInKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWwoJCgnI1RvdGFsSG91cnMnKS50ZXh0KCksICcxMi4wMCcsICdTZWNvbmQgcGVyaW9kIGZpZWxkIGdldHMgYW4gYWRkaXRpb25hbCBjYWxjdWxhdGlvbiB3aXRoIG9uZSB3cm9uZyBjb21tYScpOwoKICAgICAgICAgICAgJCgnI1BlcmlvZDMnKS52YWwoJzQuMzUnKTsKICAgICAgICAgICAgJCgnI1BlcmlvZDMnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWwoJCgnI1RvdGFsSG91cnMnKS50ZXh0KCksICcxNi4zNScsICdUaGlyZCBmaWVsZCcpOwoKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS52YWwoJzE0OjAwJyk7CiAgICAgICAgICAgICQoJyNTdGFydFRpbWUxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnZhbCgnb3BlbmVuZCcpOwogICAgICAgICAgICAkKCcjRW5kVGltZTEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWwoJCgnI1RvdGFsSG91cnMnKS50ZXh0KCksICcxNS4zNScsICdGaXJzdCByb3c6IHN0YXJ0dGltZSBhbmQgZW5kdGltZSBmaWVsZHMgaGF2ZSB3cm9uZyBpbnB1dCcpOwoKCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIENsZWFudXAgZGl2IGNvbnRhaW5lciBhbmQgY29udGVudHMKICAgICAgICAgICAgICovCiAgICAgICAgICAgICQoJyNUZXN0Rm9ybScpLnJlbW92ZSgpOwogICAgICAgIH0pOwogICAgfTsKCiAgICByZXR1cm4gTmFtZXNwYWNlOwp9KFRpbWVBY2NvdW50aW5nLkFnZW50LkVkaXRUaW1lUmVjb3JkcyB8fCB7fSkpOw==
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgVGltZSBBY2NvdW50aW5nIERlZmF1bHQgQ1NTCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCi8qKgogKiBAc3Vic2VjdGlvbiAgbGVmdCBhbmQgcmlnaHQgYXJyb3dzCiAqLwoKLkFycm93IHsKICAgIHRleHQtaW5kZW50OiAtOTk5OXB4OwogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTJweDsKICAgIGhlaWdodDogMTJweDsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXRvcDogNXB4OwogICAgbWFyZ2luLXJpZ2h0OiA0cHg7Cn0KCi5BcnJvdy5MZWZ0IHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWcvYXJyb3dfbGVmdHJpZ2h0LnBuZyk7Cn0KCi5BcnJvdy5SaWdodCB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL2Fycm93X2xlZnRyaWdodC5wbmcpOwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEycHggMHB4Owp9CgovKioKICogQHN1YnNlY3Rpb24gIHNwZWNpYWwgc2V0dGluZ3M6IHJlcG9ydGluZwogKi8KCmRpdi5Nb250aFNlbGVjdGlvbiB7CiAgICBsaW5lLWhlaWdodDogMjRweDsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgc3BlY2lhbCBvdmVyd3JpdGluZyBzZXR0aW5ncyBmb3IgYXV0b2NvbXBsZXRpb24gYnV0dG9uCiAqLwoKdGFibGUjSW5zZXJ0V29ya2luZ0hvdXJzIHRib2R5IHRkIHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBwYWRkaW5nLXRvcDogNXB4Owp9CgoudWktYnV0dG9uLWljb24tb25seSAudWktYnV0dG9uLXRleHQgewogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiAxOHB4ICFpbXBvcnRhbnQ7Cn0KCi51aS1idXR0b24gLnVpLWJ1dHRvbi10ZXh0IHsKICAgIGxpbmUtaGVpZ2h0OiAwICFpbXBvcnRhbnQ7Cn0KCmJ1dHRvbi51aS1idXR0b24taWNvbi1vbmx5IHsKICAgIHdpZHRoOiAyNHB4ICFpbXBvcnRhbnQ7CiAgICB0b3A6IC05cHg7Cn0KCi51aS1hdXRvY29tcGxldGUgLnVpLW1lbnUtaWV0bSB7CiAgICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi5Ib3Jpem9udGFsU2Nyb2xsIHsKICAgIG92ZXJmbG93LXg6IHNjcm9sbDsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uICBJbmNvbXBsZXRlV29ya2luZ0RheXMgc2VsZWN0CiAqLwojSW5jb21wbGV0ZVdvcmtpbmdEYXlzTGlzdCBvcHRpb25bc2VsZWN0ZWQ9c2VsZWN0ZWRdIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgovKioKICogQHN1YnNlY3Rpb24gIHByb2plY3QgYW5kIGFjdGlvbiBkcm9wZG93bnMKICovCi5Qcm9qZWN0U2VsZWN0aW9uIHsKICAgIHdpZHRoOiAzMDBweDsKfQoKLkFjdGlvblNlbGVjdGlvbiB7CiAgICB3aWR0aDogMzAwcHg7Cn0KCnVsLnVpLWF1dG9jb21wbGV0ZS51aS1tZW51IHsKICAgIG1heC1oZWlnaHQ6IDMwMHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKfQoKfSAvKiBlbmQgQG1lZGlhICov
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgVGltZSBBY2NvdW50aW5nIEFkZGl0aW9uYWwgVGFibGUgU2V0dGluZ3MKICovCgpAbWVkaWEgc2NyZWVuLHByb2plY3Rpb24sdHYsaGFuZGhlbGQgewoKLyoqCiAqIEBzdWJzZWN0aW9uICBkYXRhIHRhYmxlIGVsZW1lbnRzIHdpdGhvdXQgaG92ZXIKICovCgouTm9Ib3ZlciB0Ym9keSB0cjpob3ZlciB0ZCB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKICAgIGJveC1zaGFkb3c6IG5vbmU7Cn0KCi5Ob0hvdmVyIHRyLkV2ZW46aG92ZXIgdGQgewogICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTsKfQoKLk5vSG92ZXIgdHIuR3JhbmRUb3RhbDpob3ZlciB0ZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0ZDRkNGOwp9CgovKioKICogQHN1YnNlY3Rpb24gIHNwZWNpYWwgdGFibGUgaGVpZ2h0CiAqLwoKLkhpZ2hDZWxscyB0Ym9keSB0ZCB7CiAgICBoZWlnaHQ6IDMwcHg7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgZml4ZWQgZGF0YSB0YWJsZSB3aWR0aHMKICovCgouRGF0YVRhYmxlIHRkLkZpeGVkLkRheSB7CiAgICB3aWR0aDogNTBweDsKfQoKLkRhdGFUYWJsZSB0ZC5GaXhlZC5XZWVrZGF5IHsKICAgIHdpZHRoOiA4MHB4Owp9CgovKioKICogQHN1YnNlY3Rpb24gIHRhYmxlIGNvbG91cnMgZm9yIG92ZXJ2aWV3CiAqLwoKLkRhdGFUYWJsZSB0ci5WYWNhdGlvbiB0ZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUJDQ0NDOwp9CgouRGF0YVRhYmxlIHRyLk5vbldvcmtpbmdEYXkgdGQgewogICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRTBFMDsKfQoKLkRhdGFUYWJsZSB0ci5BY3RpdmUgdGQgewogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDA7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgIzAwMDAwMDsKICAgIGNvbG9yOiAjMUExQTFBOwp9CgouRGF0YVRhYmxlIHRyLkFjdGl2ZSB0ZDpmaXJzdC1jaGlsZCB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICMwMDAwMDA7Cn0KCi5EYXRhVGFibGUgdHIuQWN0aXZlIHRkOmxhc3QtY2hpbGQsCi5EYXRhVGFibGUgdHIuQWN0aXZlIHRkLkxhc3QgewogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzAwMDAwMDsKfQoKLkRhdGFUYWJsZSB0ci5HcmFuZFRvdGFsIHRkIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNDRkNGQ0Y7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgZGF0YSB0YWJsZSB3aXRoIHR3byBoZWFkZXIgcm93cwogKi8KCi5EYXRhVGFibGUgdGhlYWQuVHdvUm93cyB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwp9CgouRGF0YVRhYmxlIHRoZWFkLlR3b1Jvd3MgdHI6Zmlyc3QtY2hpbGQgewogICAgYmFja2dyb3VuZDogI2VlZWVlZTsKICAgIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgICNlZWVlZWUgMCUsICNlY2VjZWMgMTAwJSk7CiAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAlLCNlZWVlZWUpLCBjb2xvci1zdG9wKDEwMCUsI2VjZWNlYykpOwogICAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAgI2VlZWVlZSAwJSwjZWNlY2VjIDEwMCUpOwogICAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgICNlZWVlZWUgMCUsI2VjZWNlYyAxMDAlKTsKICAgIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAgI2VlZWVlZSAwJSwjZWNlY2VjIDEwMCUpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgICNlZWVlZWUgMCUsI2VjZWNlYyAxMDAlKTsKfQoKLkRhdGFUYWJsZSB0aGVhZC5Ud29Sb3dzIHRyIHsKICAgIGJhY2tncm91bmQ6ICNlZWVlZWU7CiAgICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICAjZWJlYmViIDAlLCAjZTBlMGUwIDEwMCUpOwogICAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwJSwjZWJlYmViKSwgY29sb3Itc3RvcCgxMDAlLCNlMGUwZTApKTsKICAgIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgICNlYmViZWIgMCUsI2UwZTBlMCAxMDAlKTsKICAgIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICAjZWJlYmViIDAlLCNlMGUwZTAgMTAwJSk7CiAgICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgICNlYmViZWIgMCUsI2UwZTBlMCAxMDAlKTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICAjZWJlYmViIDAlLCNlMGUwZTAgMTAwJSk7Cn0KCi5EYXRhVGFibGUgdGhlYWQuVHdvUm93cyB0cjpmaXJzdC1jaGlsZCB0aCB7CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgcGFkZGluZy1ib3R0b206IDJweDsKfQoKLkRhdGFUYWJsZSB0aGVhZC5Ud29Sb3dzIHRyOmxhc3QtY2hpbGQgdGgsCi5EYXRhVGFibGUgdGhlYWQuVHdvUm93cyB0ci5MYXN0IHRoIHsKICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICBwYWRkaW5nLXRvcDogM3B4Owp9Cgp0ci5NYXN0ZXJBY3Rpb24gdGQuUm93U3BhbiB7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9Cgp9IC8qIGVuZCBAbWVkaWEgKi8=
iVBORw0KGgoAAAANSUhEUgAAABgAAAANCAYAAACzbK7QAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAOpJREFUeNpi/P//PwMtASMRasRABNAhr1A0MjIKA6nfQPwJn2YmPHKsQJwOxIeAWAGLvDIQHwXiSHJ85gLEx4D4GRSbgYISGYPEkOR3Q/kEfaAGxEuBeBEOV+MC2kC8AYinArE0Ngv4gLgeiPcCsSMFcRoIxIeBuAiIOWAWcAPxWmh4M1Mh4YAMLgHizSCzQRZ8BWJfIO4B4h9UsOAvEM8E4mCQ2bAgAhncB8S2QLyeAsP3A7EzEDcSSr5m0JRBbCo6Bk15JANQGr+Mx4Ib0LhjpSQng1IYK9DQt2g5WQzKfIW3qKB1WQQQYAAqT1loJfuiDwAAAABJRU5ErkJggg==
IyAtLQojIFRpbWVBY2NvdW50aW5nLnBtIC0gY29kZSB0byBleGNlY3V0ZSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24KIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIHZhcjo6cGFja2FnZXNldHVwOjpUaW1lQWNjb3VudGluZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6U3lzQ29uZmlnOwp1c2UgS2VybmVsOjpTeXN0ZW06OkNhY2hlSW50ZXJuYWw7CnVzZSBLZXJuZWw6OlN5c3RlbTo6R3JvdXA7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQ7Cgo9aGVhZDEgTkFNRQoKVGltZUFjY291bnRpbmcucG0gLSBjb2RlIHRvIGV4Y2VjdXRlIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgZnVuY3Rpb25zCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpDb25maWc7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkxvZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TWFpbjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6REI7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OlhNTDsKICAgIHVzZSB2YXI6OnBhY2thZ2VzZXR1cDo6VGltZUFjY291bnRpbmc7CgogICAgbXkgJENvbmZpZ09iamVjdCA9IEtlcm5lbDo6Q29uZmlnLT5uZXcoKTsKICAgIG15ICRMb2dPYmplY3QgICAgPSBLZXJuZWw6OlN5c3RlbTo6TG9nLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICApOwogICAgbXkgJE1haW5PYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6TWFpbi0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgKTsKICAgIG15ICRUaW1lT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlRpbWUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkREJPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6REItPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgbXkgJFhNTE9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpYTUwtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICA9PiAkTWFpbk9iamVjdCwKICAgICk7CiAgICBteSAkQ29kZU9iamVjdCA9IHZhcjo6cGFja2FnZXNldHVwOjpUaW1lQWNjb3VudGluZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgICAgIE1haW5PYmplY3QgICA9PiAkTWFpbk9iamVjdCwKICAgICAgICBUaW1lT2JqZWN0ICAgPT4gJFRpbWVPYmplY3QsCiAgICAgICAgREJPYmplY3QgICAgID0+ICREQk9iamVjdCwKICAgICAgICBYTUxPYmplY3QgICAgPT4gJFhNTE9iamVjdCwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0ICgKICAgICAgICBxdyhDb25maWdPYmplY3QgRW5jb2RlT2JqZWN0IExvZ09iamVjdCBNYWluT2JqZWN0IFRpbWVPYmplY3QgREJPYmplY3QgWE1MT2JqZWN0KQogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+eyRPYmplY3R9ID0gJFBhcmFteyRPYmplY3R9IHx8IGRpZSAiR290IG5vICRPYmplY3QhIjsKICAgIH0KCiAgICAjIGNyZWF0ZSBuZWVkZWQgc3lzY29uZmlnIG9iamVjdAogICAgJFNlbGYtPntTeXNDb25maWdPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OlN5c0NvbmZpZy0+bmV3KCAleyRTZWxmfSApOwoKICAgICMgcmVidWlsZCBaWloqIGZpbGVzCiAgICAkU2VsZi0+e1N5c0NvbmZpZ09iamVjdH0tPldyaXRlRGVmYXVsdCgpOwoKICAgICMgZGVmaW5lIHRoZSBaWlogZmlsZXMKICAgIG15IEBaWlpGaWxlcyA9ICgKICAgICAgICAnWlpaQUF1dG8ucG0nLAogICAgICAgICdaWlpBdXRvLnBtJywKICAgICk7CgogICAgIyByZWxvYWQgdGhlIFpaWiBmaWxlcyAobW9kX3Blcmwgd29ya2Fyb3VuZCkKICAgIGZvciBteSAkWlpaRmlsZSAoQFpaWkZpbGVzKSB7CgogICAgICAgIFBSRUZJWDoKICAgICAgICBmb3IgbXkgJFByZWZpeCAoQElOQykgewogICAgICAgICAgICBteSAkRmlsZSA9ICRQcmVmaXggLiAnL0tlcm5lbC9Db25maWcvRmlsZXMvJyAuICRaWlpGaWxlOwogICAgICAgICAgICBuZXh0IFBSRUZJWCBpZiAhLWYgJEZpbGU7CiAgICAgICAgICAgIGRvICRGaWxlOwogICAgICAgICAgICBsYXN0IFBSRUZJWDsKICAgICAgICB9CiAgICB9CgogICAgJFNlbGYtPntHcm91cE9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpHcm91cC0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntWYWxpZE9iamVjdH0gICAgICAgICA9IEtlcm5lbDo6U3lzdGVtOjpWYWxpZC0+bmV3KCAleyRTZWxmfSApOwogICAgJFNlbGYtPntDYWNoZUludGVybmFsT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpDYWNoZUludGVybmFsLT5uZXcoCiAgICAgICAgJXskU2VsZn0sCiAgICAgICAgVHlwZSA9PiAnR3JvdXAnLAogICAgICAgIFRUTCAgPT4gNjAgKiA2MCAqIDMsCiAgICApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gQ29kZUluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIGluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZUluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlSW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWRkIHRoZSBncm91cCB0aW1lX2FjY291bnRpbmcKICAgICRTZWxmLT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3RpbWVfYWNjb3VudGluZycsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ0dyb3VwIGZvciBhbGwgdGltZSBhY2NvdW50aW5nIHVzZXIuJywKICAgICk7CgogICAgIyBkZWxldGUgdGhlIGdyb3VwIGNhY2hlIHRvIGF2b2lkIHBlcm1pc3Npb24gcHJvYmxlbXMKICAgICRTZWxmLT57Q2FjaGVJbnRlcm5hbE9iamVjdH0tPkNsZWFuVXAoIE90aGVyVHlwZSA9PiAnR3JvdXAnICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvZGVVbmluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIHVuaW5zdGFsbCBwYXJ0CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5Db2RlVW5pbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZVVuaW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZGVhY3RpdmF0ZSB0aGUgZ3JvdXAgdGltZV9hY2NvdW50aW5nCiAgICAkU2VsZi0+X0dyb3VwRGVhY3RpdmF0ZSgKICAgICAgICBOYW1lID0+ICd0aW1lX2FjY291bnRpbmcnLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0dyb3VwQWRkKCkKCmFkZCBhIGdyb3VwCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3RoZS1ncm91cC1uYW1lJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGhlIGdyb3VwIGRlc2NyaXB0aW9uLicsCiAgICApOwoKPWN1dAoKc3ViIF9Hcm91cEFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIERlc2NyaXB0aW9uKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ID0gJFNlbGYtPntWYWxpZE9iamVjdH0tPlZhbGlkTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAjIGdldCBsaXN0IG9mIGFsbCBncm91cHMKICAgIG15ICVHcm91cExpc3QgPSAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBMaXN0KCk7CgogICAgIyByZXZlcnNlIHRoZSBncm91cCBsaXN0IGZvciBlYXNpZXIgbG9va3VwCiAgICBteSAlR3JvdXBMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJUdyb3VwTGlzdDsKCiAgICAjIGNoZWNrIGlmIGdyb3VwIGFscmVhZHkgZXhpc3RzCiAgICBteSAkR3JvdXBJRCA9ICRHcm91cExpc3RSZXZlcnNleyAkUGFyYW17TmFtZX0gfTsKCiAgICAjIHJlYWN0aXZhdGUgdGhlIGdyb3VwCiAgICBpZiAoJEdyb3VwSUQpIHsKCiAgICAgICAgIyBnZXQgY3VycmVudCBncm91cCBkYXRhCiAgICAgICAgbXkgJUdyb3VwRGF0YSA9ICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cEdldCgKICAgICAgICAgICAgSUQgICAgID0+ICRHcm91cElELAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIHJlYWN0aXZhdGUgZ3JvdXAKICAgICAgICAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBVcGRhdGUoCiAgICAgICAgICAgICVHcm91cERhdGEsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgIyBhZGQgdGhlIGdyb3VwCiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cEFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIENvbW1lbnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9ufSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgbG9va3VwIHRoZSBuZXcgZ3JvdXAgaWQKICAgIG15ICROZXdHcm91cElEID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgYWRkIHVzZXIgcm9vdCB0byB0aGUgZ3JvdXAKICAgICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cE1lbWJlckFkZCgKICAgICAgICBHSUQgICAgICAgID0+ICROZXdHcm91cElELAogICAgICAgIFVJRCAgICAgICAgPT4gMSwKICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgcm8gICAgICAgID0+IDEsCiAgICAgICAgICAgIG1vdmVfaW50byA9PiAxLAogICAgICAgICAgICBjcmVhdGUgICAgPT4gMSwKICAgICAgICAgICAgb3duZXIgICAgID0+IDEsCiAgICAgICAgICAgIHByaW9yaXR5ICA9PiAxLAogICAgICAgICAgICBydyAgICAgICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0dyb3VwRGVhY3RpdmF0ZSgpCgpkZWFjdGl2YXRlIGEgZ3JvdXAKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9Hcm91cERlYWN0aXZhdGUoCiAgICAgICAgTmFtZSA9PiAndGhlLWdyb3VwLW5hbWUnLAogICAgKTsKCj1jdXQKCnN1YiBfR3JvdXBEZWFjdGl2YXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgTmFtZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9va3VwIGdyb3VwIGlkCiAgICBteSAkR3JvdXBJRCA9ICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cExvb2t1cCgKICAgICAgICBHcm91cCA9PiAkUGFyYW17TmFtZX0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJEdyb3VwSUQ7CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCA9ICRTZWxmLT57VmFsaWRPYmplY3R9LT5WYWxpZExpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CgogICAgIyBnZXQgY3VycmVudCBncm91cCBkYXRhCiAgICBteSAlR3JvdXBEYXRhID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwR2V0KAogICAgICAgIElEICAgICA9PiAkR3JvdXBJRCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBkZWFjdGl2YXRlIGdyb3VwCiAgICAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBVcGRhdGUoCiAgICAgICAgJUdyb3VwRGF0YSwKICAgICAgICBWYWxpZElEID0+ICRWYWxpZExpc3RSZXZlcnNle2ludmFsaWR9LAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==