ImportExportTicket
10.1.2
Rother OSS GmbH
https://rother-oss.com/
GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007
Fix article identification.
ImportExport plugin for tickets.
Ticket backend for the ImportExport module.
10.1.x
ImportExport
2022-09-05 06:10:23
opms
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdG9ib19jb25maWcgdmVyc2lvbj0iMi4wIiBpbml0PSJBcHBsaWNhdGlvbiI+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmRSZWdpc3RyYXRpb24jIyNUaWNrZXQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+T2JqZWN0IGJhY2tlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGltcG9ydC9leHBvcnQgbW9kdWxlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5hbWUiPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6U3luY2hyb25pemVXaXRoRm9yZWlnbkRCIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPklmIGFjdGl2YXRlZCBhZGRpdGlvbmFsIGRhdGEgc3VjaCBhcyB0aGUgaGlzdG9yeSBhbmQgbGlua3Mgd2lsbCBiZSByZWFkIGZyb20gYSBmb3JlaWduIERCIGNvbnRhaW5pbmcgdGhlIGV4cG9ydGVkIHRpY2tldHMgYW5kIGFkZGVkIHRvIHRoZSBpbXBvcnRlZCB0aWNrZXRzIG9uIHRoaXMgc3lzdGVtLiBUaGlzIGlzIG9ubHkgYXZhaWxhYmxlIGZvciBjcmVhdGVkLCBub3QgZm9yIHVwZGF0ZWQgdGlja2V0cy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0PC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRhdGFiYXNlRFNOIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRhdGFiYXNlVXNlciI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEYXRhYmFzZVB3Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMDEtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPlF1ZXVlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik90aGVyU3lzdGVtTWlzYyI+TWlzYzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDAyLUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij5BcnRpY2xlX0R5bmFtaWNGaWVsZF9Ob011bHRpPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik90aGVyU3lzdGVtNSI+NzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDAzLUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAwNC1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMDUtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDA2LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAwNy1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMDgtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDA5LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAxMC1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMTEtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDEyLUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAxMy1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMTQtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDE1LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAxNi1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMTctQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDE4LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAxOS1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMjAtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDIxLUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAyMi1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJJbXBvcnRFeHBvcnQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXAjIyMwMjMtQ3VzdG9tIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlZhbHVlIG1hcC4gRGVmaW5lIGEga2V5IGFuZCBhIHZhbHVlIG1hcCBmcm9tIGltcG9ydCBmaWxlIHRvIE9UT0JPLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPE5hdmlnYXRpb24+Q29yZTo6SW1wb3J0RXhwb3J0OjpPYmplY3RCYWNrZW5kOjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwczwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJLZXkiPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTWFwIj4KICAgICAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0iSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OkltcG9ydFZhbHVlTWFwIyMjMDI0LUN1c3RvbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5WYWx1ZSBtYXAuIERlZmluZSBhIGtleSBhbmQgYSB2YWx1ZSBtYXAgZnJvbSBpbXBvcnQgZmlsZSB0byBPVE9CTy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkNvcmU6OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcHM8L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iS2V5Ij48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1hcCI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IkltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCMjIzAyNS1DdXN0b20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMCI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VmFsdWUgbWFwLiBEZWZpbmUgYSBrZXkgYW5kIGEgdmFsdWUgbWFwIGZyb20gaW1wb3J0IGZpbGUgdG8gT1RPQk8uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDo6SW1wb3J0VmFsdWVNYXBzPC9OYXZpZ2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IktleSI+PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNYXAiPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+Cjwvb3RvYm9fY29uZmlnPgo=
IyAtLQojIE9UT0JPIGlzIGEgd2ViLWJhc2VkIHRpY2tldGluZyBzeXN0ZW0gZm9yIHNlcnZpY2Ugb3JnYW5pc2F0aW9ucy4KIyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDIwIE9UUlMgQUcsIGh0dHBzOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgUm90aGVyIE9TUyBHbWJILCBodHRwczovL290b2JvLmRlLwojIC0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKIyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCiMgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQ6Ok9iamVjdEJhY2tlbmQ6OlRpY2tldDsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6Okxhbmd1YWdlIHF3KFRyYW5zbGF0YWJsZSk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnVzZSBFbmNvZGU7CnVzZSBNSU1FOjpCYXNlNjQgcXcoZW5jb2RlX2Jhc2U2NCBkZWNvZGVfYmFzZTY0KTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkJhY2tlbmQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9jaycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5JywKICAgICdLZXJuZWw6OlN5c3RlbTo6UXVldWUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTTEEnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6U3RhdGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkFydGljbGUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6VXNlcicsCik7Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6VGlja2V0IC0gaW1wb3J0L2V4cG9ydCBiYWNrZW5kIGZvciBUaWNrZXRzCgo9aGVhZDEgREVTQ1JJUFRJT04KCkFsbCBmdW5jdGlvbnMgdG8gaW1wb3J0IGFuZCBleHBvcnQgdGlja2V0cy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9aGVhZDIgbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkltcG9ydEV4cG9ydDo6T2JqZWN0QmFja2VuZDo6SVRTTUNvbmZpZ0l0ZW0nKTsKCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0gewogICAgICAgIENvbmZpZ09iamVjdCAgICAgICAgICAgPT4gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKSwKICAgICAgICBJbXBvcnRFeHBvcnRPYmplY3QgICAgID0+ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpJbXBvcnRFeHBvcnQnKSwKICAgICAgICBUaWNrZXRJRFJlbGF0aW9uICAgICAgID0+IHt9LAogICAgICAgIFRpY2tldE51bWJlcklEUmVsYXRpb24gPT4ge30sCiAgICB9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWhlYWQyIE9iamVjdEF0dHJpYnV0ZXNHZXQoKQoKZ2V0IHRoZSBvYmplY3QgYXR0cmlidXRlcyBvZiBhbiBvYmplY3QgYXMgYSByZWYgdG8gYW4gYXJyYXkgb2YgaGFzaCByZWZlcmVuY2VzCgogICAgbXkgJEF0dHJpYnV0ZXMgPSAkT2JqZWN0QmFja2VuZC0+T2JqZWN0QXR0cmlidXRlc0dldCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0QXR0cmlidXRlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdAogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICVRdWV1ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVMaXN0KCk7CiAgICBteSAlU3RhdGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRlJyktPlN0YXRlTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlUHJpb3JpdHlMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5JyktPlByaW9yaXR5TGlzdCgKICAgICAgICBWYWxpZCA9PiAxLAogICAgKTsKICAgIG15ICVMb2NrTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2NrJyktPkxvY2tMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIG15ICVVc2VyTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyktPlVzZXJMaXN0KCk7CgogICAgbXkgQEF0dHJpYnV0ZXMgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnUXVldWVJRCcsCiAgICAgICAgICAgIE5hbWUgID0+ICdEZWZhdWx0IFF1ZXVlJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiBcJVF1ZXVlTGlzdCwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICk7CgogICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGlja2V0OjpUeXBlJykgKSB7CiAgICAgICAgbXkgJVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKS0+VHlwZUxpc3QoCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAQXR0cmlidXRlcywgewogICAgICAgICAgICBLZXkgICA9PiAnVHlwZUlEJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0RlZmF1bHQgVHlwZScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgPT4gXCVUeXBlTGlzdCB8fCB7fSwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSApIHsKICAgICAgICBteSAlU2VydmljZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAQXR0cmlidXRlcywgewogICAgICAgICAgICBLZXkgICA9PiAnU2VydmljZUlEJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0RlZmF1bHQgU2VydmljZScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVNlcnZpY2VMaXN0IHx8IHt9LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDAsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH07CgogICAgICAgIG15ICVTTEFMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBBdHRyaWJ1dGVzLCB7CiAgICAgICAgICAgIEtleSAgID0+ICdTTEFJRCcsCiAgICAgICAgICAgIE5hbWUgID0+ICdEZWZhdWx0IFNMQScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVNMQUxpc3QgfHwge30sCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKICAgIH0KCiAgICBteSAlU2VuZGVyVHlwZSA9IG1hcCB7ICRfID0+ICRfIH0gcXcoYWdlbnQgY3VzdG9tZXIgc3lzdGVtKTsKCiAgICBwdXNoIEBBdHRyaWJ1dGVzLCAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnU3RhdGVJRCcsCiAgICAgICAgICAgIE5hbWUgID0+ICdEZWZhdWx0IHN0YXRlJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiBcJVN0YXRlTGlzdCwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdQcmlvcml0eUlEJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0RlZmF1bHQgcHJpb3JpdHknLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlUHJpb3JpdHlMaXN0LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ093bmVySUQnLAogICAgICAgICAgICBOYW1lICA9PiAnRGVmYXVsdCBvd25lcicsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVVzZXJMaXN0LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1Jlc3BvbnNpYmxlSUQnLAogICAgICAgICAgICBOYW1lICA9PiAnRGVmYXVsdCByZXNwb25zaWJsZScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVVzZXJMaXN0LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDAsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnTG9ja0lEJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0RlZmF1bHQgbG9jaycsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgPT4gXCVMb2NrTGlzdCwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdDdXN0b21lcklEJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0RlZmF1bHQgQ3VzdG9tZXJJRCcsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgPT4gMCwKICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAyNTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdDdXN0b21lclVzZXJJRCcsCiAgICAgICAgICAgIE5hbWUgID0+ICdEZWZhdWx0IEN1c3RvbWVyVXNlcklEJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIFJlcXVpcmVkICA9PiAwLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDI1MCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0FyY2hpdmVGbGFnJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0RlZmF1bHQgQXJjaGl2ZUZsYWcnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4geyBtYXAgeyAkXyA9PiAkXyB9IHF3KCB5IG4gKSB9LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgICAgIFZhbHVlRGVmYXVsdCA9PiAnbicsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdJbmNsdWRlQXJ0aWNsZXMnLAogICAgICAgICAgICBOYW1lICA9PiAnSW1wb3J0L0V4cG9ydCBhcnRpY2xlcycsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NoZWNrYm94JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0FydGljbGVCYWNrZW5kJywKICAgICAgICAgICAgTmFtZSAgPT4gJ0RlZmF1bHQgQmFja2VuZCcsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnU2VsZWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7IG1hcCB7ICRfID0+ICRfIH0gcXcoIEVtYWlsIFBob25lIEludGVybmFsICkgfSwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgICAgICBWYWx1ZURlZmF1bHQgPT4gJ24nLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnU3ViamVjdCcsCiAgICAgICAgICAgIE5hbWUgID0+ICdEZWZhdWx0IHN1YmplY3QnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDAsCiAgICAgICAgICAgICAgICBTaXplICAgICAgICAgPT4gNTAsCiAgICAgICAgICAgICAgICBNYXhMZW5ndGggICAgPT4gMjUwLAogICAgICAgICAgICAgICAgVmFsdWVEZWZhdWx0ID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaWNrZXRJbXBvcnQ6OkRlZmF1bHRTdWJqZWN0JyksCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdCb2R5JywKICAgICAgICAgICAgTmFtZSAgPT4gJ0RlZmF1bHQgYm9keScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgIE1heExlbmd0aCAgICA9PiAyNTAsCiAgICAgICAgICAgICAgICBWYWx1ZURlZmF1bHQgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpY2tldEltcG9ydDo6RGVmYXVsdEJvZHknKSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1NlbmRlclR5cGUnLAogICAgICAgICAgICBOYW1lICA9PiAnRGVmYXVsdCBzZW5kZXIgdHlwZScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgPT4gXCVTZW5kZXJUeXBlLAogICAgICAgICAgICAgICAgUmVxdWlyZWQgPT4gMSwKICAgICAgICAgICAgICAgIENsYXNzICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnSXNWaXNpYmxlVG9DdXN0b21lcicsCiAgICAgICAgICAgIE5hbWUgID0+ICdEZWZhdWx0IGlzIHZpc2libGUgdG8gY3VzdG9tZXInLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlID0+ICdDaGVja2JveCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdBcnRpY2xlU2VwYXJhdGVMaW5lcycsCiAgICAgICAgICAgIE5hbWUgID0+ICdTdG9yZSBhcnRpY2xlcyBvbiBzZXBhcmF0ZSBsaW5lcyBpbmRpY2F0ZWQgYnkgYSBibGFuayBmaXJzdCBlbnRyeScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NoZWNrYm94JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0luY2x1ZGVBdHRhY2htZW50cycsCiAgICAgICAgICAgIE5hbWUgID0+ICdJbXBvcnQvRXhwb3J0IGF0dGFjaG1lbnRzIChhcyB0aGUgbGFzdCBlbnRyaWVzIHBlciBsaW5lKScsCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NoZWNrYm94JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ0VtcHR5RmllbGRzTGVhdmVUaGVPbGRWYWx1ZXMnLAogICAgICAgICAgICBOYW1lICA9PiAnRW1wdHkgZmllbGRzIGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgdmFsdWVzIGFyZSBrZXB0JywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSA9PiAnQ2hlY2tib3gnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiBcQEF0dHJpYnV0ZXM7Cn0KCj1oZWFkMiBNYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCgpCgpnZXQgdGhlIG1hcHBpbmcgYXR0cmlidXRlcyBvZiBhbiBvYmplY3QgYXMgYXJyYXkvaGFzaCByZWZlcmVuY2UKCiAgICBteSAkQXR0cmlidXRlcyA9ICRPYmplY3RCYWNrZW5kLT5NYXBwaW5nT2JqZWN0QXR0cmlidXRlc0dldCgKICAgICAgICBUZW1wbGF0ZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIE1hcHBpbmdPYmplY3RBdHRyaWJ1dGVzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBvYmplY3QgZGF0YQogICAgbXkgJE9iamVjdERhdGEgPSAkU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0tPk9iamVjdERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIFtdIGlmICEkT2JqZWN0RGF0YTsKICAgIHJldHVybiBbXSBpZiByZWYgJE9iamVjdERhdGEgbmUgJ0hBU0gnOwoKICAgIG15IEBFbGVtZW50TGlzdCA9IG1hcCB7IHsgS2V5ID0+ICRfLCBWYWx1ZSA9PiAkXyB9IH0KICAgICAgICBxdyggVGlja2V0SUQgVGlja2V0TnVtYmVyIFRpdGxlIFR5cGUgVHlwZUlEIFF1ZXVlIFF1ZXVlSUQgU2VydmljZSBTZXJ2aWNlSUQgU0xBCiAgICAgICAgU0xBSUQgU3RhdGUgU3RhdGVJRCBQcmlvcml0eSBQcmlvcml0eUlEIEN1c3RvbWVySUQgQ3VzdG9tZXJVc2VySUQgT3duZXIgT3duZXJJRCBMb2NrCiAgICAgICAgTG9ja0lEIFJlc3BvbnNpYmxlIFJlc3BvbnNpYmxlSUQgQXJjaGl2ZUZsYWcgQ3JlYXRlZCApOwoKICAgIG15ICREeW5hbWljRmllbGRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyk7CgogICAgIyBjb2x1bW5zIGZvciBkeW5hbWljIGZpZWxkcwogICAgbXkgJER5bkZpZWxkTGlzdCA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3QoCiAgICAgICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgICAgICBSZXN1bHRUeXBlID0+ICdIQVNIJywKICAgICk7CiAgICBwdXNoIEBFbGVtZW50TGlzdCwgbWFwIHsgeyBLZXkgPT4gIkR5bmFtaWNGaWVsZF8kXyIsIFZhbHVlID0+ICJEeW5hbWljRmllbGRfJF8iIH0gfSBzb3J0IHZhbHVlcyAleyREeW5GaWVsZExpc3R9OwoKICAgIGlmICggJE9iamVjdERhdGEtPntJbmNsdWRlQXJ0aWNsZXN9ICkgewogICAgICAgIGlmICggJE9iamVjdERhdGEtPntBcnRpY2xlU2VwYXJhdGVMaW5lc30gKSB7CiAgICAgICAgICAgIHB1c2ggQEVsZW1lbnRMaXN0LCB7CiAgICAgICAgICAgICAgICBLZXkgICA9PiAnQXJ0aWNsZV9UaWNrZXRJRCcsCiAgICAgICAgICAgICAgICBWYWx1ZSA9PiAnQXJ0aWNsZV9UaWNrZXRJRCcsCiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICAjIGNvbHVtbnMgZm9yIGFydGljbGVzCiAgICAgICAgcHVzaCBARWxlbWVudExpc3QsIG1hcCB7IHsgS2V5ID0+ICJBcnRpY2xlXyRfIiwgVmFsdWUgPT4gIkFydGljbGVfJF8iIH0gfQogICAgICAgICAgICBxdyggQXJ0aWNsZUlEIEFydGljbGVCYWNrZW5kIEZyb20gVG8gQ2MgQmNjIFN1YmplY3QgQm9keSBTZW5kZXJUeXBlIElzVmlzaWJsZUZvckN1c3RvbWVyCiAgICAgICAgICAgIE1lc3NhZ2VJRCBSZXBseVRvIEluUmVwbHlUbyBSZWZlcmVuY2VzIENoYXJzZXQgTWltZVR5cGUgUGxhaW5FbWFpbCBDcmVhdGVUaW1lICk7CgogICAgICAgICMgY29sdW1ucyBmb3IgYXJ0aWNsZSBkeW5hbWljIGZpZWxkcwogICAgICAgIG15ICREeW5GaWVsZExpc3QgPSAkRHluYW1pY0ZpZWxkT2JqZWN0LT5EeW5hbWljRmllbGRMaXN0KAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICdBcnRpY2xlJywKICAgICAgICAgICAgUmVzdWx0VHlwZSA9PiAnSEFTSCcsCiAgICAgICAgKTsKICAgICAgICBwdXNoIEBFbGVtZW50TGlzdCwgbWFwIHsgeyBLZXkgPT4gIkFydGljbGVfRHluYW1pY0ZpZWxkXyRfIiwgVmFsdWUgPT4gIkFydGljbGVfRHluYW1pY0ZpZWxkXyRfIiB9IH0gdmFsdWVzICV7JER5bkZpZWxkTGlzdH07CiAgICB9CgogICAgbXkgJEF0dHJpYnV0ZXMgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnS2V5JywKICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdLZXknKSwKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFxARWxlbWVudExpc3QsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdJZGVudGlmaWVyJywKICAgICAgICAgICAgTmFtZSAgPT4gVHJhbnNsYXRhYmxlKCdJZGVudGlmaWVyJyksCiAgICAgICAgICAgIElucHV0ID0+IHsKICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0NoZWNrYm94JywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgXTsKCiAgICByZXR1cm4gJEF0dHJpYnV0ZXM7Cn0KCj1oZWFkMiBTZWFyY2hBdHRyaWJ1dGVzR2V0KCkKCmdldCB0aGUgc2VhcmNoIG9iamVjdCBhdHRyaWJ1dGVzIG9mIGFuIG9iamVjdCBhcyBhcnJheS9oYXNoIHJlZmVyZW5jZQoKICAgIG15ICRBdHRyaWJ1dGVMaXN0ID0gJE9iamVjdEJhY2tlbmQtPlNlYXJjaEF0dHJpYnV0ZXNHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBTZWFyY2hBdHRyaWJ1dGVzR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBvYmplY3QgZGF0YQogICAgbXkgJE9iamVjdERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPk9iamVjdERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgcmV0dXJuIFtdIGlmICEkT2JqZWN0RGF0YTsKICAgIHJldHVybiBbXSBpZiByZWYgJE9iamVjdERhdGEgbmUgJ0hBU0gnOwoKICAgIG15ICVRdWV1ZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVMaXN0KCk7CgogICAgbXkgJVN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTdGF0ZScpLT5TdGF0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIG15ICVQcmlvcml0eUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKS0+UHJpb3JpdHlMaXN0KAogICAgICAgIFZhbGlkID0+IDEsCiAgICApOwoKICAgIG15IEBBdHRyaWJ1dGVzID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1F1ZXVlSURzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1F1ZXVlJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUXVldWVMaXN0LAogICAgICAgICAgICAgICAgUmVxdWlyZWQgICAgID0+IDAsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgICAgID0+IDUsCiAgICAgICAgICAgICAgICBNdWx0aXBsZSAgICAgPT4gMSwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgICA9PiAnTW9kZXJuaXplJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgKTsKCiAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaWNrZXQ6OlR5cGUnKSApIHsKICAgICAgICBteSAlVHlwZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VHlwZScpLT5UeXBlTGlzdCgKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBBdHRyaWJ1dGVzLCB7CiAgICAgICAgICAgIEtleSAgID0+ICdUeXBlSURzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1R5cGUnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVUeXBlTGlzdCB8fCB7fSwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAwLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiA1LAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKICAgIH0KCiAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSApIHsKICAgICAgICBteSAlU2VydmljZUxpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlTGlzdCgKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAQXR0cmlidXRlcywgewogICAgICAgICAgICBLZXkgICA9PiAnU2VydmljZUlEcycsCiAgICAgICAgICAgIE5hbWUgID0+ICdTZXJ2aWNlJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlU2VydmljZUxpc3QgfHwge30sCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICBTaXplICAgICAgICAgPT4gNSwKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH07CgogICAgICAgIG15ICVTTEFMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBBdHRyaWJ1dGVzLCB7CiAgICAgICAgICAgIEtleSAgID0+ICdTTEFJRHMnLAogICAgICAgICAgICBOYW1lICA9PiAnU0xBJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgICAgID0+ICdTZWxlY3Rpb24nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlU0xBTGlzdCB8fCB7fSwKICAgICAgICAgICAgICAgIFJlcXVpcmVkICAgICA9PiAwLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgICAgIFNpemUgICAgICAgICA9PiA1LAogICAgICAgICAgICAgICAgTXVsdGlwbGUgICAgID0+IDEsCiAgICAgICAgICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgfTsKICAgIH0KCiAgICBwdXNoIEBBdHRyaWJ1dGVzLCAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnU3RhdGVJRHMnLAogICAgICAgICAgICBOYW1lICA9PiAnU3RhdGUnLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVTdGF0ZUxpc3QsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICBTaXplICAgICAgICAgPT4gNSwKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnUHJpb3JpdHlJRHMnLAogICAgICAgICAgICBOYW1lICA9PiAnUHJpb3JpdHknLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgICAgPT4gJ1NlbGVjdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQcmlvcml0eUxpc3QsCiAgICAgICAgICAgICAgICBSZXF1aXJlZCAgICAgPT4gMCwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDEsCiAgICAgICAgICAgICAgICBTaXplICAgICAgICAgPT4gNSwKICAgICAgICAgICAgICAgIE11bHRpcGxlICAgICA9PiAxLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgID0+ICdNb2Rlcm5pemUnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnQ3VzdG9tZXJJRCcsCiAgICAgICAgICAgIE5hbWUgID0+ICdDdXN0b21lcklEJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAyNTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXRDcmVhdGVUaW1lT2xkZXJNaW51dGVzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1RpY2tldCBDcmVhdGUgVGltZSAob2xkZXIpIFttaW5dJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAyNTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXRDcmVhdGVUaW1lTmV3ZXJNaW51dGVzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1RpY2tldCBDcmVhdGUgVGltZSAobmV3ZXIpIFttaW5dJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiAyNTAsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICdUaWNrZXRDaGFuZ2VUaW1lT2xkZXJNaW51dGVzJywKICAgICAgICAgICAgTmFtZSAgPT4gJ1RpY2tldCBDaGFuZ2UgVGltZSAob2xkZXIpIFttaW5dJywKICAgICAgICAgICAgSW5wdXQgPT4gewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIFNpemUgICAgICA9PiA1MCwKICAgICAgICAgICAgICAgIE1heExlbmd0aCA9PiA1MCwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1RpY2tldENoYW5nZVRpbWVOZXdlck1pbnV0ZXMnLAogICAgICAgICAgICBOYW1lICA9PiAnVGlja2V0IENoYW5nZSBUaW1lIChuZXdlcikgW21pbl0nLAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgU2l6ZSAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDUwLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICApOwoKICAgIG15ICVEYXRlUmVzdHJpY3Rpb25zID0gKAogICAgICAgIFRpY2tldENyZWF0ZVRpbWVPbGRlckRhdGUgICAgID0+ICdUaWNrZXQgQ3JlYXRlIFRpbWUgKGJlZm9yZSknLAogICAgICAgIFRpY2tldENyZWF0ZVRpbWVOZXdlckRhdGUgICAgID0+ICdUaWNrZXQgQ3JlYXRlIFRpbWUgKGFmdGVyKScsCiAgICAgICAgVGlja2V0TGFzdENoYW5nZVRpbWVPbGRlckRhdGUgPT4gJ1RpY2tldCBMYXN0IENoYW5nZSBUaW1lIChiZWZvcmUpJywKICAgICAgICBUaWNrZXRMYXN0Q2hhbmdlVGltZU5ld2VyRGF0ZSA9PiAnVGlja2V0IExhc3QgQ2hhbmdlIFRpbWUgKGFmdGVyKScsCiAgICApOwoKICAgIGZvciBteSAkS2V5ICgga2V5cyAlRGF0ZVJlc3RyaWN0aW9ucyApIHsKICAgICAgICBwdXNoIEBBdHRyaWJ1dGVzLCB7CiAgICAgICAgICAgIEtleSAgID0+ICRLZXksCiAgICAgICAgICAgIE5hbWUgID0+ICREYXRlUmVzdHJpY3Rpb25zeyRLZXl9LAogICAgICAgICAgICBJbnB1dCA9PiB7CiAgICAgICAgICAgICAgICBUeXBlICAgICA9PiAnRGF0ZVRpbWUnLAogICAgICAgICAgICAgICAgT3B0aW9uYWwgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiBcQEF0dHJpYnV0ZXM7Cn0KCj1oZWFkMiBFeHBvcnREYXRhR2V0KCkKCmdldCBleHBvcnQgZGF0YSBhcyBDPDJELWFycmF5LWhhc2g+IHJlZmVyZW5jZQoKICAgIG15ICRFeHBvcnREYXRhID0gJE9iamVjdEJhY2tlbmQtPkV4cG9ydERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBFeHBvcnREYXRhR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFRlbXBsYXRlSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBvYmplY3QgZGF0YQogICAgbXkgJE9iamVjdERhdGEgPSAkU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0tPk9iamVjdERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgIyBjaGVjayBvYmplY3QgZGF0YQogICAgaWYgKCAhJE9iamVjdERhdGEgfHwgcmVmICRPYmplY3REYXRhIG5lICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIG9iamVjdCBkYXRhIGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9IiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCB0aGUgbWFwcGluZyBsaXN0CiAgICBteSAkTWFwcGluZ0xpc3QgPSAkU2VsZi0+e0ltcG9ydEV4cG9ydE9iamVjdH0tPk1hcHBpbmdMaXN0KAogICAgICAgIFRlbXBsYXRlSUQgPT4gJFBhcmFte1RlbXBsYXRlSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICApOwoKICAgICMgY2hlY2sgdGhlIG1hcHBpbmcgbGlzdAogICAgaWYgKCAhJE1hcHBpbmdMaXN0IHx8IHJlZiAkTWFwcGluZ0xpc3QgbmUgJ0FSUkFZJyB8fCAhQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHZhbGlkIG1hcHBpbmcgbGlzdCBmb3VuZCBmb3IgdGhlIHRlbXBsYXRlIGlkICRQYXJhbXtUZW1wbGF0ZUlEfSIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIG1hcHBpbmcgb2JqZWN0IGxpc3QKICAgIG15IEBNYXBwaW5nT2JqZWN0TGlzdDsKICAgIGZvciBteSAkTWFwcGluZ0lEICggQHskTWFwcGluZ0xpc3R9ICkgewoKICAgICAgICAjIGdldCBtYXBwaW5nIG9iamVjdCBkYXRhCiAgICAgICAgbXkgJE1hcHBpbmdPYmplY3REYXRhID0gJFNlbGYtPntJbXBvcnRFeHBvcnRPYmplY3R9LT5NYXBwaW5nT2JqZWN0RGF0YUdldCgKICAgICAgICAgICAgTWFwcGluZ0lEID0+ICRNYXBwaW5nSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIG1hcHBpbmcgb2JqZWN0IGRhdGEKICAgICAgICBpZiAoICEkTWFwcGluZ09iamVjdERhdGEgfHwgcmVmICRNYXBwaW5nT2JqZWN0RGF0YSBuZSAnSEFTSCcgKSB7CgogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTm8gdmFsaWQgbWFwcGluZyBsaXN0IGZvdW5kIGZvciB0aGUgdGVtcGxhdGUgaWQgJFBhcmFte1RlbXBsYXRlSUR9IiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcHVzaCBATWFwcGluZ09iamVjdExpc3QsICRNYXBwaW5nT2JqZWN0RGF0YTsKICAgIH0KCiAgICAjIGdldCBzZWFyY2ggZGF0YQogICAgbXkgJFNlYXJjaERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPlNlYXJjaERhdGFHZXQoCiAgICAgICAgVGVtcGxhdGVJRCA9PiAkUGFyYW17VGVtcGxhdGVJRH0sCiAgICAgICAgVXNlcklEICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgJUlzU2VsZWN0aW9uID0gbWFwIHsgJF8gPT4gMSB9IHF3KCBUeXBlSURzIFF1ZXVlSURzIFNlcnZpY2VJRHMgU0xBSURzIFN0YXRlSURzIFByaW9yaXR5SURzIEN1c3RvbWVySUQgKTsKCiAgICBteSAlU2VhcmNoRGF0YVByZXBhcmVkOwogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKCBrZXlzICRTZWFyY2hEYXRhLT4lKiApIHsKICAgICAgICBuZXh0IEtFWSBpZiAhZGVmaW5lZCAkU2VhcmNoRGF0YS0+eyRLZXl9OwoKICAgICAgICAkU2VhcmNoRGF0YVByZXBhcmVkeyRLZXl9ID0gJElzU2VsZWN0aW9ueyRLZXl9ID8gWyBzcGxpdCAnIyMjIyMnLCAkU2VhcmNoRGF0YS0+eyRLZXl9IF0gOiAkU2VhcmNoRGF0YS0+eyRLZXl9OwogICAgfQoKICAgIG15ICRUaWNrZXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VGlja2V0Jyk7CgogICAgIyBTZWFyY2ggYWxsIFRpY2tldF9JRHMKICAgIG15IEBUaWNrZXRJRHMgPSBzb3J0IHsgJGEgPD0+ICRiIH0gJFRpY2tldE9iamVjdC0+VGlja2V0U2VhcmNoKAogICAgICAgICVTZWFyY2hEYXRhUHJlcGFyZWQsCiAgICAgICAgUmVzdWx0ID0+ICdBUlJBWScsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgIG15IEBFeHBvcnREYXRhOwogICAgbXkgJVRpY2tldERhdGE7CiAgICBteSAlQXJ0aWNsZURhdGE7CgogICAgbXkgQFRpY2tldE1hcHBpbmc7CiAgICBteSBAQXJ0aWNsZU1hcHBpbmc7CiAgICBteSAkVGlja2V0TWFwcGluZ0xhc3Q7CiAgICBteSAkQXJ0aWNsZU1hcHBpbmdMYXN0ID0gMDsgICAgIyBpbiBjYXNlIG9mIHNlcGFyYXRlIGxpbmVzIGFuIGVtcHR5IGVudHJ5IHdpbGwgcHJlY2VkZSAodGh1cyBub3QgLTEpCiAgICBteSAkU3RvcmVQbGFpbkVtYWlsICAgID0gMDsKCiAgICBmb3IgbXkgJGkgKCAwIC4uICQjTWFwcGluZ09iamVjdExpc3QgKSB7CgogICAgICAgICMgaGFuZGxlIGVtcHR5IGtleQogICAgICAgIGlmICggISRNYXBwaW5nT2JqZWN0TGlzdFskaV17S2V5fSApIHsKICAgICAgICAgICAgJFRpY2tldE1hcHBpbmdbJGlde0tleX0gPSAnJzsKICAgICAgICAgICAgaWYgKCAhJE9iamVjdERhdGEtPntBcnRpY2xlU2VwYXJhdGVMaW5lc30gKSB7CiAgICAgICAgICAgICAgICAkVGlja2V0TWFwcGluZ0xhc3QgPSAkaTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBhcnRpY2xlIGtleXMKICAgICAgICBlbHNpZiAoICRNYXBwaW5nT2JqZWN0TGlzdFskaV17S2V5fSA9fiAvXkFydGljbGVfKC4rKSQvICkgewogICAgICAgICAgICBpZiAoICRPYmplY3REYXRhLT57QXJ0aWNsZVNlcGFyYXRlTGluZXN9ICkgewogICAgICAgICAgICAgICAgcHVzaCBAQXJ0aWNsZU1hcHBpbmcsICRNYXBwaW5nT2JqZWN0TGlzdFskaV07CiAgICAgICAgICAgICAgICAkQXJ0aWNsZU1hcHBpbmdbICsrJEFydGljbGVNYXBwaW5nTGFzdCBde0tleX0gPSAkMTsKICAgICAgICAgICAgICAgICRUaWNrZXRNYXBwaW5nWyRpXXtLZXl9ID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkQXJ0aWNsZU1hcHBpbmdbJGldICAgICAgPSAkTWFwcGluZ09iamVjdExpc3RbJGldOwogICAgICAgICAgICAgICAgJEFydGljbGVNYXBwaW5nWyRpXXtLZXl9ID0gJDE7CiAgICAgICAgICAgICAgICAkQXJ0aWNsZU1hcHBpbmdMYXN0ICAgICAgPSAkaTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAkMSBlcSAnUGxhaW5FbWFpbCcgKSB7CiAgICAgICAgICAgICAgICAkU3RvcmVQbGFpbkVtYWlsID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyB0aWNrZXQga2V5cwogICAgICAgIGVsc2UgewogICAgICAgICAgICAkVGlja2V0TWFwcGluZ1skaV0gPSAkTWFwcGluZ09iamVjdExpc3RbJGldOwogICAgICAgICAgICAkVGlja2V0TWFwcGluZ0xhc3QgPSAkaTsKICAgICAgICB9CgogICAgfQoKICAgICMgZXhwb3J0IHRpY2tldHMgLi4uCiAgICBmb3IgbXkgJFRpY2tldElEIChAVGlja2V0SURzKSB7CgogICAgICAgICVUaWNrZXREYXRhID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICBUaWNrZXRJRCAgICAgID0+ICRUaWNrZXRJRCwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgICAgICBEeW5hbWljRmllbGRzID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgZGF0YSB0byB0aGUgZXhwb3J0IGRhdGEgYXJyYXkKICAgICAgICBteSBAVGlja2V0SXRlbTsKICAgICAgICBmb3IgbXkgJGkgKCAwIC4uICRUaWNrZXRNYXBwaW5nTGFzdCApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBrZXkKICAgICAgICAgICAgbXkgJEtleSA9ICRUaWNrZXRNYXBwaW5nWyRpXXtLZXl9OwoKICAgICAgICAgICAgJFRpY2tldEl0ZW1bJGldID0gJEtleSAmJiBkZWZpbmVkICRUaWNrZXREYXRheyRLZXl9CiAgICAgICAgICAgICAgICA/IElzQXJyYXlSZWZXaXRoRGF0YSggJFRpY2tldERhdGF7JEtleX0gKSA/IGpvaW4oICcjIyMnLCAoIG1hcCB7IGVuY29kZV9iYXNlNjQoIEVuY29kZTo6ZW5jb2RlKCAnVVRGLTgnLCAkXyApICkgfSAkVGlja2V0RGF0YXskS2V5fS0+QCogKSApCiAgICAgICAgICAgICAgICA6ICRUaWNrZXREYXRheyRLZXl9IDogJyc7CiAgICAgICAgfQoKICAgICAgICBpZiAoICEkT2JqZWN0RGF0YS0+e0luY2x1ZGVBcnRpY2xlc30gfHwgJE9iamVjdERhdGEtPntBcnRpY2xlU2VwYXJhdGVMaW5lc30gKSB7CiAgICAgICAgICAgIHB1c2ggQEV4cG9ydERhdGEsIFxAVGlja2V0SXRlbTsKICAgICAgICB9CgogICAgICAgIGlmICggJE9iamVjdERhdGEtPntJbmNsdWRlQXJ0aWNsZXN9ICkgewoKICAgICAgICAgICAgIyBHZXQgYXJ0aWNsZSBkYXRhLgogICAgICAgICAgICBteSBAQXJ0aWNsZXMgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBteSAkQXJ0aWNsZUNvdW50ID0gMDsKICAgICAgICAgICAgZm9yIG15ICRBcnRpY2xlIChAQXJ0aWNsZXMpIHsKCiAgICAgICAgICAgICAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckFydGljbGUoICV7JEFydGljbGV9ICk7CgogICAgICAgICAgICAgICAgbXkgJUFydGljbGVGdWxsID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlR2V0KAogICAgICAgICAgICAgICAgICAgIFRpY2tldElEICAgICAgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgIEFydGljbGVJRCAgICAgPT4gJEFydGljbGUtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRBcnRpY2xlRnVsbHtBcnRpY2xlQmFja2VuZH0gPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkNoYW5uZWxOYW1lR2V0KCk7CgogICAgICAgICAgICAgICAgaWYgKCAkU3RvcmVQbGFpbkVtYWlsICYmICRBcnRpY2xlQmFja2VuZE9iamVjdC0+Y2FuKCdBcnRpY2xlUGxhaW4nKSApIHsKICAgICAgICAgICAgICAgICAgICAkQXJ0aWNsZUZ1bGx7UGxhaW5FbWFpbH0gPSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPkFydGljbGVQbGFpbigKICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBteSBAQXJ0aWNsZUl0ZW0gPSAkT2JqZWN0RGF0YS0+e0FydGljbGVTZXBhcmF0ZUxpbmVzfSA/ICgnJykgOiBAVGlja2V0SXRlbTsKICAgICAgICAgICAgICAgIEFSVElDTEVNQVA6CiAgICAgICAgICAgICAgICBmb3IgbXkgJGkgKCAwIC4uICRBcnRpY2xlTWFwcGluZ0xhc3QgKSB7CgogICAgICAgICAgICAgICAgICAgICMgZW1wdHkgZmllbGRzIGFyZSBkb25lIGluIHRoZSB0aWNrZXQgcGFydAogICAgICAgICAgICAgICAgICAgIG5leHQgQVJUSUNMRU1BUCBpZiAhJEFydGljbGVNYXBwaW5nWyRpXTsKCiAgICAgICAgICAgICAgICAgICAgIyBleHRyYWN0IGtleQogICAgICAgICAgICAgICAgICAgIG15ICRLZXkgPSAkQXJ0aWNsZU1hcHBpbmdbJGlde0tleX07CgogICAgICAgICAgICAgICAgICAgICRBcnRpY2xlSXRlbVskaV0gPSBkZWZpbmVkICRBcnRpY2xlRnVsbHskS2V5fQogICAgICAgICAgICAgICAgICAgICAgICA/IElzQXJyYXlSZWZXaXRoRGF0YSggJEFydGljbGVGdWxseyRLZXl9ICkgPyBqb2luKCAnIyMjJywgKCBtYXAgeyBlbmNvZGVfYmFzZTY0KCBFbmNvZGU6OmVuY29kZSggJ1VURi04JywgJF8gKSApIH0gJEFydGljbGVGdWxseyRLZXl9LT5AKiApICkKICAgICAgICAgICAgICAgICAgICAgICAgOiAkQXJ0aWNsZUZ1bGx7JEtleX0gOiAnJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICRPYmplY3REYXRhLT57SW5jbHVkZUF0dGFjaG1lbnRzfSAmJiAkQXJ0aWNsZUJhY2tlbmRPYmplY3QtPmNhbignQXJ0aWNsZUF0dGFjaG1lbnRJbmRleCcpICkgewogICAgICAgICAgICAgICAgICAgIG15ICVJbmRleCA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZUF0dGFjaG1lbnRJbmRleCgKICAgICAgICAgICAgICAgICAgICAgICAgQXJ0aWNsZUlEID0+ICRBcnRpY2xlLT57QXJ0aWNsZUlEfSwKICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEtleSAoIHNvcnQga2V5cyAlSW5kZXggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG15ICVBdHRhY2htZW50ID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQXR0YWNobWVudCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGUtPntBcnRpY2xlSUR9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZUlEICAgID0+ICRLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEtleSAocXcoIEZpbGVuYW1lIENvbnRlbnRUeXBlIERpc3Bvc2l0aW9uICkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBdHRhY2htZW50eyRLZXl9ID0gRW5jb2RlOjplbmNvZGUoICdVVEYtOCcsICRBdHRhY2htZW50eyRLZXl9ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIG15ICRBdHRhY2htZW50U3RyaW5nOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJEtleSAocXcoIEZpbGVuYW1lIENvbnRlbnRJRCBDb250ZW50VHlwZSBEaXNwb3NpdGlvbiBDb250ZW50IENvbnRlbnRBbHRlcm5hdGl2ZSApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQXR0YWNobWVudHskS2V5fSAvLz0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQXR0YWNobWVudFN0cmluZyAgLj0gJEF0dGFjaG1lbnRTdHJpbmcgPyAnIyMjJyA6ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEF0dGFjaG1lbnRTdHJpbmcgIC49ICRLZXkgLiAnIyMjJyAuIGVuY29kZV9iYXNlNjQoICRBdHRhY2htZW50eyRLZXl9ICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEFydGljbGVJdGVtLCAkQXR0YWNobWVudFN0cmluZzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcHVzaCBARXhwb3J0RGF0YSwgXEBBcnRpY2xlSXRlbTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXEBFeHBvcnREYXRhOwp9Cgo9aGVhZDIgSW1wb3J0RGF0YVNhdmUoKQoKaW1wb3J0cyBhIHNpbmdsZSBlbnRpdHkgb2YgdGhlIGltcG9ydCBkYXRhLiBUaGUgQzxUZW1wbGF0ZUlEPiBwb2ludHMgdG8gdGhlIGRlZmluaXRpb24Kb2YgdGhlIGN1cnJlbnQgaW1wb3J0LiBDPEltcG9ydERhdGFSb3c+IGhvbGRzIHRoZSBkYXRhLiBDPENvdW50ZXI+IGlzIG9ubHkgdXNlZCBpbgplcnJvciBtZXNzYWdlcywgZm9yIGluZGljYXRpbmcgd2hpY2ggaXRlbSB3YXMgbm90IGltcG9ydGVkIHN1Y2Nlc3NmdWxseS4KClRoZSBkZWNpc2lvbiB3aGF0IGNvbnN0aXR1dGUgYW4gZW1wdHkgdmFsdWUgaXMgYSBiaXQgaGFpcnkuCkhlcmUgYXJlIHRoZSBydWxlcy4KRmllbGRzIHRoYXQgYXJlIG5vdCBldmVuIG1lbnRpb25lZCBpbiB0aGUgSW1wb3J0IGRlZmluaXRpb24gYXJlIGVtcHR5LiBUaGVzZSBhcmUgdGhlICdub3QgZGVmaW5lZCcgZmllbGRzLgpFbXB0eSBzdHJpbmdzIGFuZCB1bmRlZmluZWQgdmFsdWVzIGNvbnN0aXR1dGUgZW1wdHkgZmllbGRzLgpGaWVsZHMgd2l0aCB3aXRoIG9ubHkgb25lIG9yIG1vcmUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZSBub3QgZW1wdHkuCkZpZWxkcyB3aXRoIHRoZSBkaWdpdCAnMCcgYXJlIG5vdCBlbXB0eS4KCiAgICBteSAoICRUaWNrZXRJRCwgJFJldENvZGUgKSA9ICRPYmplY3RCYWNrZW5kLT5JbXBvcnREYXRhU2F2ZSgKICAgICAgICBUZW1wbGF0ZUlEICAgID0+IDEyMywKICAgICAgICBJbXBvcnREYXRhUm93ID0+ICRBcnJheVJlZiwKICAgICAgICBDb3VudGVyICAgICAgID0+IDM2NywKICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICApOwoKQW4gZW1wdHkgQzxUaWNrZXRJRD4gaW5kaWNhdGVzIGZhaWx1cmUuIE90aGVyd2lzZSBpdCBpbmRpY2F0ZXMgdGhlCmxvY2F0aW9uIG9mIHRoZSBpbXBvcnRlZCBkYXRhLgpDPFJldENvZGU+IGlzIGVpdGhlciAnQ3JlYXRlZCcsICdVcGRhdGVkJyBvciAnU2tpcHBlZCcuCidDcmVhdGVkJyBtZWFucyB0aGF0IGEgbmV3IHRpY2tldCBoYXMgYmVlbiBjcmVhdGVkLgonVXBkYXRlZCcgbWVhbnMgdGhhdCB0aGUgdGlja2V0IGhhcyBiZWVuIHVwZGF0ZWQuCidTa2lwcGVkJyBtZWFucyB0aGF0IHRoZSBkYXRhIGlzIGlkZW50aWNhbCBhbmQgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCgo9Y3V0CgpzdWIgSW1wb3J0RGF0YVNhdmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoVGVtcGxhdGVJRCBJbXBvcnREYXRhUm93IENvdW50ZXIgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGltcG9ydCBkYXRhIHJvdwogICAgaWYgKCByZWYgJFBhcmFte0ltcG9ydERhdGFSb3d9IG5lICdBUlJBWScgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgIC4gIkltcG9ydERhdGFSb3cgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IG9iamVjdCBkYXRhCiAgICBteSAkT2JqZWN0RGF0YSA9ICRTZWxmLT57SW1wb3J0RXhwb3J0T2JqZWN0fS0+T2JqZWN0RGF0YUdldCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIG9iamVjdCBkYXRhCiAgICBpZiAoICEkT2JqZWN0RGF0YSB8fCByZWYgJE9iamVjdERhdGEgbmUgJ0hBU0gnICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PgogICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAuICJObyBvYmplY3QgZGF0YSBmb3VuZCBmb3IgdGhlIHRlbXBsYXRlIGlkICckUGFyYW17VGVtcGxhdGVJRH0nIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGp1c3QgZm9yIGNvbnZlbmllbmNlCiAgICBteSAkRW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlcyA9ICRPYmplY3REYXRhLT57RW1wdHlGaWVsZHNMZWF2ZVRoZU9sZFZhbHVlc307CgogICAgIyBnZXQgdGhlIG1hcHBpbmcgbGlzdAogICAgbXkgJE1hcHBpbmdMaXN0ID0gJFNlbGYtPntJbXBvcnRFeHBvcnRPYmplY3R9LT5NYXBwaW5nTGlzdCgKICAgICAgICBUZW1wbGF0ZUlEID0+ICRQYXJhbXtUZW1wbGF0ZUlEfSwKICAgICAgICBVc2VySUQgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgKTsKCiAgICAjIGNoZWNrIHRoZSBtYXBwaW5nIGxpc3QKICAgIGlmICggISRNYXBwaW5nTGlzdCB8fCByZWYgJE1hcHBpbmdMaXN0IG5lICdBUlJBWScgfHwgIUB7JE1hcHBpbmdMaXN0fSApIHsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgIC4gIk5vIHZhbGlkIG1hcHBpbmcgbGlzdCBmb3VuZCBmb3IgdGhlIHRlbXBsYXRlIGlkICckUGFyYW17VGVtcGxhdGVJRH0nIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSB0aGUgbWFwcGluZyBvYmplY3QgbGlzdAogICAgbXkgQE1hcHBpbmdPYmplY3RMaXN0OwogICAgZm9yIG15ICRNYXBwaW5nSUQgKCBAeyRNYXBwaW5nTGlzdH0gKSB7CgogICAgICAgICMgZ2V0IG1hcHBpbmcgb2JqZWN0IGRhdGEKICAgICAgICBteSAkTWFwcGluZ09iamVjdERhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SW1wb3J0RXhwb3J0JyktPk1hcHBpbmdPYmplY3REYXRhR2V0KAogICAgICAgICAgICBNYXBwaW5nSUQgPT4gJE1hcHBpbmdJRCwKICAgICAgICAgICAgVXNlcklEICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgbWFwcGluZyBvYmplY3QgZGF0YQogICAgICAgIGlmICggISRNYXBwaW5nT2JqZWN0RGF0YSB8fCByZWYgJE1hcHBpbmdPYmplY3REYXRhIG5lICdIQVNIJyApIHsKCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgLiAiTm8gbWFwcGluZyBvYmplY3QgZGF0YSBmb3VuZCBmb3IgdGhlIG1hcHBpbmcgaWQgJyRNYXBwaW5nSUQnIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcHVzaCBATWFwcGluZ09iamVjdExpc3QsICRNYXBwaW5nT2JqZWN0RGF0YTsKICAgIH0KCiAgICAjIHByZXBhcmUgaW1wb3J0IGRhdGEKICAgIG15ICVUaWNrZXQ7CiAgICBteSAlQXJ0aWNsZTsKICAgIG15ICVJZGVudGlmaWVyOwoKICAgIG15ICRNYXBwaW5nQ29uZmlnID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ltcG9ydEV4cG9ydDo6VGlja2V0OjpJbXBvcnRWYWx1ZU1hcCcpIC8vIHt9OwogICAgbXkgJVZhbHVlTWFwICAgICAgPSBtYXAgeyAkXy0+e0tleX0gPT4gJF8tPntNYXB9IH0gdmFsdWVzICRNYXBwaW5nQ29uZmlnLT4lKjsKCiAgICAjIGhhbmRsZSBhIHNlcGFyYXRlIGFydGljbGUKICAgIGlmICggJE9iamVjdERhdGEtPntJbmNsdWRlQXJ0aWNsZXN9ICYmICRPYmplY3REYXRhLT57QXJ0aWNsZVNlcGFyYXRlTGluZXN9ICYmICEkUGFyYW17SW1wb3J0RGF0YVJvd31bMF0gKSB7CiAgICAgICAgbXkgJGkgPSAxOwogICAgICAgIE1BUFBJTkdPQkpFQ1REQVRBOgogICAgICAgIGZvciBteSAkTWFwcGluZ09iamVjdERhdGEgKEBNYXBwaW5nT2JqZWN0TGlzdCkgewoKICAgICAgICAgICAgaWYgKCAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9ID1+IC9eQXJ0aWNsZV8oLispJC8gKSB7CiAgICAgICAgICAgICAgICBteSAkVmFsdWUgPSAkUGFyYW17SW1wb3J0RGF0YVJvd31bICRpKysgXTsKICAgICAgICAgICAgICAgICRBcnRpY2xleyQxfSA9IGRlZmluZWQgJFZhbHVlICYmICRWYWx1ZU1hcHsgJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSB9ICYmIGRlZmluZWQgJFZhbHVlTWFweyAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9IH17JFZhbHVlfQogICAgICAgICAgICAgICAgICAgID8gJFZhbHVlTWFweyAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9IH17JFZhbHVlfSA6ICRWYWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG5leHQgTUFQUElOR09CSkVDVERBVEE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG5leHQgTUFQUElOR09CSkVDVERBVEEgaWYgISRNYXBwaW5nT2JqZWN0RGF0YS0+e0lkZW50aWZpZXJ9OwoKICAgICAgICAgICAgaWYgKCAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9IG5lICdBcnRpY2xlX0FydGljbGVJRCcgKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgICAgICAgICAuICJBcnRpY2xlcyBjYW4gb25seSBiZSBpZGVudGlmaWVkIHZpYSAnQXJ0aWNsZV9BcnRpY2xlSUQnIG5vdCBieSAnJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fScuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAhJFBhcmFte0ltcG9ydERhdGFSb3d9WyAkaSAtIDEgXSApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4KICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gIidBcnRpY2xlX0FydGljbGVJRCcgY2FuIG5vdCBiZSBlbXB0eSBvciAwIHdoZW4gdXNlZCBhcyBpZGVudGlmaWVyLiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkSWRlbnRpZmllcntBcnRpY2xlfXtBcnRpY2xlSUR9ID0gMTsKICAgICAgICB9CgogICAgICAgIGlmICggJE9iamVjdERhdGEtPntJbmNsdWRlQXR0YWNobWVudHN9ICYmICRpIDw9ICQjeyAkUGFyYW17SW1wb3J0RGF0YVJvd30gfSApIHsKCiAgICAgICAgICAgICMgdGhlIGxhc3QgYW5kIHVubWFwcGVkIGVudHJpZXMgYXJlIGF0dGFjaG1lbnRzCiAgICAgICAgICAgICRBcnRpY2xle0F0dGFjaG1lbnRzfSA9IFsgQHsgJFBhcmFte0ltcG9ydERhdGFSb3d9IH1bICRpIC4uICQjeyAkUGFyYW17SW1wb3J0RGF0YVJvd30gfSBdIF07CiAgICAgICAgfQogICAgfQoKICAgIGVsc2UgewogICAgICAgIE1BUFBJTkdPQkpFQ1REQVRBOgogICAgICAgIGZvciBteSAkaSAoIDAgLi4gJCNNYXBwaW5nT2JqZWN0TGlzdCApIHsKCiAgICAgICAgICAgIG15ICRNYXBwaW5nT2JqZWN0RGF0YSA9ICRNYXBwaW5nT2JqZWN0TGlzdFskaV07CgogICAgICAgICAgICBteSAkVmFsdWUgPSAkUGFyYW17SW1wb3J0RGF0YVJvd31bJGldOwogICAgICAgICAgICAkVmFsdWUgPSBkZWZpbmVkICRWYWx1ZSAmJiAkVmFsdWVNYXB7ICRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0gfSAmJiBkZWZpbmVkICRWYWx1ZU1hcHsgJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSB9eyRWYWx1ZX0KICAgICAgICAgICAgICAgID8gJFZhbHVlTWFweyAkTWFwcGluZ09iamVjdERhdGEtPntLZXl9IH17JFZhbHVlfSA6ICRWYWx1ZTsKCiAgICAgICAgICAgIGlmICggJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSA9fiAvXkFydGljbGVfKC4rKSQvICkgewogICAgICAgICAgICAgICAgbmV4dCBNQVBQSU5HT0JKRUNUREFUQSBpZiAkT2JqZWN0RGF0YS0+e0FydGljbGVTZXBhcmF0ZUxpbmVzfSB8fCAhJE9iamVjdERhdGEtPntJbmNsdWRlQXJ0aWNsZXN9OwoKICAgICAgICAgICAgICAgICRBcnRpY2xleyQxfSA9ICRWYWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRUaWNrZXR7ICRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0gfSA9ICRWYWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbmV4dCBNQVBQSU5HT0JKRUNUREFUQSBpZiAhJE1hcHBpbmdPYmplY3REYXRhLT57SWRlbnRpZmllcn07CgogICAgICAgICAgICBpZiAoICEkVmFsdWUgKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+CiAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgICAgICAgICAuICInJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fScgY2FuIG5vdCBiZSBlbXB0eSBvciAwIHdoZW4gdXNlZCBhcyBpZGVudGlmaWVyLiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRNYXBwaW5nT2JqZWN0RGF0YS0+e0tleX0gZXEgJ0FydGljbGVfQXJ0aWNsZUlEJyApIHsKICAgICAgICAgICAgICAgICRJZGVudGlmaWVye0FydGljbGV9e0FydGljbGVJRH0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSA9fiAvXkFydGljbGVfLyApIHsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4KICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGltcG9ydCBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9OiAiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gIkN1cnJlbnRseSBvbmx5IEFydGljbGVfQXJ0aWNsZUlEIGlzIGEgdmFsaWQgaWRlbnRpZmllciBmb3IgYXJ0aWNsZXMgKG5vdCAnJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fScpLiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJElkZW50aWZpZXJ7VGlja2V0fXsgJE1hcHBpbmdPYmplY3REYXRhLT57S2V5fSB9ID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCAlQXJ0aWNsZSAmJiAkT2JqZWN0RGF0YS0+e0luY2x1ZGVBdHRhY2htZW50c30gJiYgJCNNYXBwaW5nT2JqZWN0TGlzdCA8ICQjeyAkUGFyYW17SW1wb3J0RGF0YVJvd30gfSApIHsKCiAgICAgICAgICAgICMgdGhlIGxhc3QgYW5kIHVubWFwcGVkIGVudHJpZXMgYXJlIGF0dGFjaG1lbnRzCiAgICAgICAgICAgICRBcnRpY2xle0F0dGFjaG1lbnRzfSA9IFsgQHsgJFBhcmFte0ltcG9ydERhdGFSb3d9IH1bICQjTWFwcGluZ09iamVjdExpc3QgKyAxIC4uICQjeyAkUGFyYW17SW1wb3J0RGF0YVJvd30gfSBdIF07CiAgICAgICAgfQogICAgfQoKICAgIG15ICRTdGF0dXMgPSAnU2tpcHBlZCc7CiAgICAkU2VsZi0+e0Vycm9yfSA9ICcnOwogICAgaWYgKCAlVGlja2V0ICYmICFleGlzdHMgJFNlbGYtPntUaWNrZXRJRFJlbGF0aW9ufXsgJFRpY2tldHtUaWNrZXRJRH0gfSApIHsKICAgICAgICAkU3RhdHVzID0gJFNlbGYtPl9JbXBvcnRUaWNrZXQoCiAgICAgICAgICAgIFRpY2tldCAgICAgPT4gXCVUaWNrZXQsCiAgICAgICAgICAgIElkZW50aWZpZXIgPT4gJElkZW50aWZpZXJ7VGlja2V0fSwKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiAkT2JqZWN0RGF0YSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkU3RhdHVzICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PgogICAgICAgICAgICAgICAgICAgICJDYW4ndCBpbXBvcnQgZW50aXR5ICRQYXJhbXtDb3VudGVyfTogIgogICAgICAgICAgICAgICAgICAgIC4gIlRpY2tldEltcG9ydDogJFNlbGYtPntFcnJvcn0iLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJUFydGljbGUgJiYgJE9iamVjdERhdGEtPntJbmNsdWRlQXJ0aWNsZXN9ICkgewogICAgICAgIG15ICRBcnRpY2xlU3RhdHVzID0gJFNlbGYtPl9JbXBvcnRBcnRpY2xlKAogICAgICAgICAgICBBcnRpY2xlICAgID0+IFwlQXJ0aWNsZSwKICAgICAgICAgICAgSWRlbnRpZmllciA9PiAkSWRlbnRpZmllcntBcnRpY2xlfSwKICAgICAgICAgICAgT2JqZWN0RGF0YSA9PiAkT2JqZWN0RGF0YSwKICAgICAgICApOwoKICAgICAgICBpZiAoICEkQXJ0aWNsZVN0YXR1cyApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4KICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgaW1wb3J0IGVudGl0eSAkUGFyYW17Q291bnRlcn06ICIKICAgICAgICAgICAgICAgICAgICAuICJBcnRpY2xlSW1wb3J0OiAkU2VsZi0+e0Vycm9yfSIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICggJFN0YXR1cyBlcSAnU2tpcHBlZCcgJiYgJEFydGljbGVTdGF0dXMgZXEgJ0NyZWF0ZWQnICkgewogICAgICAgICAgICAkU3RhdHVzID0gJ1VwZGF0ZWQnOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gKCAkU2VsZi0+e0xhc3RUaWNrZXRJRH0sICRTdGF0dXMgKTsKfQoKc3ViIF9JbXBvcnRUaWNrZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVGlja2V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpOwoKICAgIG15ICVUaWNrZXQgPSAkUGFyYW17VGlja2V0fS0+JSo7CiAgICBteSAlREJUaWNrZXQ7CiAgICBteSAkU3RhdHVzID0gJ1NraXBwZWQnOwoKICAgIGlmICggJFBhcmFte0lkZW50aWZpZXJ9ICkgewogICAgICAgIG15ICREQlRpY2tldElEOwoKICAgICAgICAjIFRpY2tldElEIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBUaWNrZXROdW1iZXIKICAgICAgICBpZiAoICRQYXJhbXtJZGVudGlmaWVyfXtUaWNrZXRJRH0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIHByZXZpb3VzbHkgaW1wb3J0ZWQgdGlja2V0cyBvZiB0aGlzIHJ1bgogICAgICAgICAgICBpZiAoICRTZWxmLT57VGlja2V0SURSZWxhdGlvbn17ICRUaWNrZXR7VGlja2V0SUR9IH0gKSB7CgogICAgICAgICAgICAgICAgIyB3ZSBzaWxlbnRseSBza2lwIHRoaXMgdGlja2V0LCBpZiBpdCBhbHJlYWR5IGhhcyBiZWVuIGltcG9ydGVkCiAgICAgICAgICAgICAgICAjIHRoaXMgc2l0dWF0aW9uIHdpbGwgYWx3YXlzIG9jY3VyIHdoZW4gYXJ0aWNsZXMgYXJlIG5vdCBpbXBvcnRlZCBzZXBhcmF0ZWx5CiAgICAgICAgICAgICAgICAjIGZvciB0aGUgc2FrZSBvZiBjb25zaXN0ZW5jeSwgd2UgdHJlYXQgb3RoZXIgc2l0dWF0aW9ucyB0aGUgc2FtZSwgYWx0aG91Z2ggdGhleSBhcmUgbGVzcyBjbGVhcgogICAgICAgICAgICAgICAgbXkgJFByaW8gPSAhJFBhcmFte09iamVjdERhdGF9e0FydGljbGVTZXBhcmF0ZUxpbmVzfQogICAgICAgICAgICAgICAgICAgICYmICRTZWxmLT57TGFzdFRpY2tldElEfSA9PSAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259eyAkVGlja2V0e1RpY2tldElEfSB9ID8gJ2RlYnVnJyA6ICdpbmZvJzsKICAgICAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICRQcmlvLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJTa2lwcGluZyB0aWNrZXQgY3JlYXRpb24gZm9yIGVudGl0eSAkUGFyYW17Q291bnRlcn0gKFRpY2tldElEICRUaWNrZXR7VGlja2V0SUR9KSBhcyBpdCB3YXMgaGFuZGxlZCBiZWZvcmUuIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTZWxmLT57TGFzdFRpY2tldElEfSA9ICRTZWxmLT57VGlja2V0SURSZWxhdGlvbn17ICRUaWNrZXR7VGlja2V0SUR9IH07CiAgICAgICAgICAgICAgICByZXR1cm4gJFN0YXR1czsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBleGlzdGluZyBidXQgdW5kZWZpbmVkIGVudHJ5IG1lYW5zIHByZXZpb3VzIGVycm9yIC0gd2Ugc2tpcCBhbmQgZG8gbm90aGluZwogICAgICAgICAgICBlbHNpZiAoIGV4aXN0cyAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259eyAkVGlja2V0e1RpY2tldElEfSB9ICkgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlRpY2tldElEICRUaWNrZXR7VGlja2V0SUR9IHdhcyBpbmNvcnJlY3RseSBpbXBvcnRlZCBiZWZvcmUgY2FuY2VsaW5nIG5ldyB0cnkuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZXhjbHVkZSB0aWNrZXRzIHdoaWNoIHdlcmUgY3JlYXRlZCBpbiB0aGlzIHJ1biBhbmQgYnkgY2hhbmNlIGdvdCB0aGUgY3VycmVudCBUaWNrZXRJRAogICAgICAgICAgICBlbHNpZiAoICF7IHJldmVyc2UgJFNlbGYtPntUaWNrZXRJRFJlbGF0aW9ufS0+JSogfS0+eyAkVGlja2V0e1RpY2tldElEfSB9ICkgewogICAgICAgICAgICAgICAgJERCVGlja2V0SUQgPSAkVGlja2V0e1RpY2tldElEfTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzaWYgKCAkUGFyYW17SWRlbnRpZmllcn17VGlja2V0TnVtYmVyfSApIHsKCiAgICAgICAgICAgICMgY2hlY2sgcHJldmlvdXNseSBpbXBvcnRlZCB0aWNrZXRzIG9mIHRoaXMgcnVuCiAgICAgICAgICAgIGlmICggJFNlbGYtPntUaWNrZXROdW1iZXJJRFJlbGF0aW9ufXsgJFRpY2tldHtUaWNrZXROdW1iZXJ9IH0gKSB7CgogICAgICAgICAgICAgICAgIyB3ZSBzaWxlbnRseSBza2lwIHRoaXMgdGlja2V0LCBpZiBpdCBhbHJlYWR5IGhhcyBiZWVuIGltcG9ydGVkCiAgICAgICAgICAgICAgICAjIHRoaXMgc2l0dWF0aW9uIHdpbGwgYWx3YXlzIG9jY3VyIHdoZW4gYXJ0aWNsZXMgYXJlIG5vdCBpbXBvcnRlZCBzZXBhcmF0ZWx5CiAgICAgICAgICAgICAgICAjIGZvciB0aGUgc2FrZSBvZiBjb25zaXN0ZW5jeSwgd2UgdHJlYXQgb3RoZXIgc2l0dWF0aW9ucyB0aGUgc2FtZSwgYWx0aG91Z2ggdGhleSBhcmUgbGVzcyBjbGVhcgogICAgICAgICAgICAgICAgbXkgJFByaW8gPSAhJFBhcmFte09iamVjdERhdGF9e0FydGljbGVTZXBhcmF0ZUxpbmVzfQogICAgICAgICAgICAgICAgICAgICYmICRTZWxmLT57TGFzdFRpY2tldElEfSA9PSAkU2VsZi0+e1RpY2tldE51bWJlcklEUmVsYXRpb259eyAkVGlja2V0e1RpY2tldE51bWJlcn0gfSA/ICdkZWJ1ZycgOiAnaW5mbyc7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAkUHJpbywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiU2tpcHBpbmcgdGlja2V0IGNyZWF0aW9uIGZvciBlbnRpdHkgJFBhcmFte0NvdW50ZXJ9IChUaWNrZXROdW1iZXIgJFRpY2tldHtUaWNrZXROdW1iZXJ9KSBhcyBpdCB3YXMgaGFuZGxlZCBiZWZvcmUuIgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRTZWxmLT57TGFzdFRpY2tldElEfSA9ICRTZWxmLT57VGlja2V0TnVtYmVySURSZWxhdGlvbn17ICRUaWNrZXR7VGlja2V0TnVtYmVyfSB9OwogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGFzdFRpY2tldElEfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBleGlzdGluZyBidXQgdW5kZWZpbmVkIGVudHJ5IG1lYW5zIHByZXZpb3VzIGVycm9yIC0gd2Ugc2tpcCBhbmQgZG8gbm90aGluZwogICAgICAgICAgICBlbHNpZiAoIGV4aXN0cyAkU2VsZi0+e1RpY2tldE51bWJlcklEUmVsYXRpb259eyAkVGlja2V0e1RpY2tldE51bWJlcn0gfSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJUaWNrZXROdW1iZXIgJFRpY2tldHtUaWNrZXROdW1iZXJ9IHdhcyBpbmNvcnJlY3RseSBpbXBvcnRlZCBiZWZvcmUgY2FuY2VsaW5nIG5ldyB0cnkuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgZXhjbHVkZSB0aWNrZXRzIHdoaWNoIHdlcmUgY3JlYXRlZCBpbiB0aGlzIHJ1biBhbmQgYnkgY2hhbmNlIGdvdCB0aGUgY3VycmVudCBUaWNrZXROdW1iZXIKICAgICAgICAgICAgZWxzaWYgKCAhJFNlbGYtPntDcmVhdGVkTnVtYmVyc317ICRUaWNrZXR7VGlja2V0TnVtYmVyfSB9ICkgewogICAgICAgICAgICAgICAgJERCVGlja2V0SUQgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRJRExvb2t1cCgKICAgICAgICAgICAgICAgICAgICBUbiA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAgICAgJ0ZvciB0aWNrZXQgY29ycmVsYXRpb24gY2hlY2tzIGVpdGhlciBUaWNrZXRJRCBvciBUaWNrZXROdW1iZXIgaGFzIHRvIGJlIGluY2x1ZGVkIGFzIGlkZW50aWZpZXIuIChVc2luZyBubyBpZGVudGlmaWVyIHRvIGp1c3QgY3JlYXRlIG5ldyB0aWNrZXRzIGlzIGFsc28gcG9zc2libGUuKScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJERCVGlja2V0SUQpIHsKICAgICAgICAgICAgJURCVGlja2V0ID0gJFRpY2tldE9iamVjdC0+VGlja2V0R2V0KAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICA9PiAkREJUaWNrZXRJRCwKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZHMgPT4gMCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFNpbGVudCAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyB2ZXJpZnkgd2hldGhlciB3ZSByZWFsbHkgZ290IHRoZSByaWdodCB0aWNrZXQKICAgIGlmICglREJUaWNrZXQpIHsKICAgICAgICBBVFRSOgogICAgICAgIGZvciBteSAkQXR0ciAoIGtleXMgJFBhcmFte0lkZW50aWZpZXJ9LT4lKiApIHsKICAgICAgICAgICAgaWYgKCAkREJUaWNrZXR7JEF0dHJ9IG5lICRUaWNrZXR7JEF0dHJ9ICkgewogICAgICAgICAgICAgICAgJURCVGlja2V0ID0gKCk7CiAgICAgICAgICAgICAgICBsYXN0IEFUVFI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBqdXN0IHVwZGF0ZSB0aGUgdGlja2V0IGlmIGl0IGlzIGFscmVhZHkgcHJlc2VudAogICAgaWYgKCVEQlRpY2tldCkgewogICAgICAgICRTdGF0dXMgPSAnU2tpcHBlZCc7CiAgICAgICAgbXkgJFNraXBFbXB0eSA9ICRQYXJhbXtPYmplY3REYXRhfXtFbXB0eUZpZWxkc0xlYXZlVGhlT2xkVmFsdWVzfTsKCiAgICAgICAgIyBjdXN0b21lcgogICAgICAgICRUaWNrZXR7Q3VzdG9tZXJJRH0gICAgIHx8PSAkU2tpcEVtcHR5ID8gJERCVGlja2V0e0N1c3RvbWVySUR9ICAgICA6ICRQYXJhbXtPYmplY3REYXRhfXtDdXN0b21lcklEfTsKICAgICAgICAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSB8fD0gJFNraXBFbXB0eSA/ICREQlRpY2tldHtDdXN0b21lclVzZXJJRH0gOiAkUGFyYW17T2JqZWN0RGF0YX17Q3VzdG9tZXJVc2VySUR9OwogICAgICAgICREQlRpY2tldHtDdXN0b21lcklEfSAgICAgLy89ICcnOwogICAgICAgICREQlRpY2tldHtDdXN0b21lclVzZXJJRH0gLy89ICcnOwoKICAgICAgICBpZiAoICggISRUaWNrZXR7Q3VzdG9tZXJJRH0gJiYgJERCVGlja2V0e0N1c3RvbWVySUR9ICkgfHwgKCAhJFRpY2tldHtDdXN0b21lclVzZXJJRH0gJiYgJERCVGlja2V0e0N1c3RvbWVyVXNlcklEfSApICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdub3RpY2UnLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlVuZXhwZWN0ZWQgc3RhdGUgZW5jb3VudGVyZWQgZm9yIGV4aXN0aW5nIFRpY2tldElEICRUaWNrZXR7VGlja2V0SUR9IChFbnRpdHkgJFBhcmFte0NvdW50ZXJ9KTogIgogICAgICAgICAgICAgICAgICAgIC4gIlRpY2tldCBjdXN0b21lciBjYW4gbm90IGJlIGVtcHRpZWQgLSBub3QgYSByZWFsIGNocm9ub2xvZ2ljYWwgdXBkYXRlOyBpZ25vcmluZyB0aGlzLCBhbmQga2VlcGluZyBDdXN0b21lcihVc2VyKUlELiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICB7CiAgICAgICAgICAgIG15ICRVcGRhdGUgPSAkVGlja2V0e0N1c3RvbWVySUR9ICYmICRUaWNrZXR7Q3VzdG9tZXJJRH0gbmUgJERCVGlja2V0e0N1c3RvbWVySUR9ID8gMSA6CiAgICAgICAgICAgICAgICAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSAmJiAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSBuZSAkREJUaWNrZXR7Q3VzdG9tZXJVc2VySUR9ID8gMSA6IDA7CgogICAgICAgICAgICBpZiAoJFVwZGF0ZSkgewogICAgICAgICAgICAgICAgJFN0YXR1cyA9ICdVcGRhdGVkJzsKICAgICAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3VzdG9tZXJTZXQoCiAgICAgICAgICAgICAgICAgICAgTm8gICAgICAgPT4gJFRpY2tldHtDdXN0b21lcklEfSwKICAgICAgICAgICAgICAgICAgICBVc2VyICAgICA9PiAkVGlja2V0e0N1c3RvbWVyVXNlcklEfSwKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgdXBkYXRlIEN1c3RvbWVyKFVzZXIpIGZvciBUaWNrZXRJRCAkREJUaWNrZXR7VGlja2V0SUR9IiwKICAgICAgICAgICAgICAgICkgaWYgISRTdWNjZXNzOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHRpdGxlCiAgICAgICAgJFRpY2tldHtUaXRsZX0gfHw9ICRUaWNrZXR7VGl0bGV9IGVxICcwJyA/ICcwJyA6CiAgICAgICAgICAgICRTa2lwRW1wdHkgICAgICAgICAgICAgICAgICA/ICREQlRpY2tldHtUaXRsZX0gOgogICAgICAgICAgICAkUGFyYW17T2JqZWN0RGF0YX17U3ViamVjdH0gPyAkUGFyYW17T2JqZWN0RGF0YX17U3ViamVjdH0gOiAnJzsKCiAgICAgICAgaWYgKCAkVGlja2V0e1RpdGxlfSBuZSAkREJUaWNrZXR7VGl0bGV9ICkgewogICAgICAgICAgICAkU3RhdHVzID0gJ1VwZGF0ZWQnOwogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFRpdGxlVXBkYXRlKAogICAgICAgICAgICAgICAgVGl0bGUgICAgPT4gJFRpY2tldHtUaXRsZX0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSBUaXRsZSBmb3IgVGlja2V0SUQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICkgaWYgISRTdWNjZXNzOwogICAgICAgIH0KCiAgICAgICAgIyBxdWV1ZQogICAgICAgIGlmICggISRUaWNrZXR7UXVldWVJRH0gJiYgJFRpY2tldHtRdWV1ZX0gKSB7CiAgICAgICAgICAgICRUaWNrZXR7UXVldWVJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UXVldWUnKS0+UXVldWVMb29rdXAoCiAgICAgICAgICAgICAgICBRdWV1ZSA9PiAkVGlja2V0e1F1ZXVlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJFRpY2tldHtRdWV1ZUlEfSB8fD0gJFNraXBFbXB0eSA/ICREQlRpY2tldHtRdWV1ZUlEfSA6ICRQYXJhbXtPYmplY3REYXRhfXtRdWV1ZUlEfTsKCiAgICAgICAgaWYgKCAkVGlja2V0e1F1ZXVlSUR9IG5lICREQlRpY2tldHtRdWV1ZUlEfSApIHsKICAgICAgICAgICAgJFN0YXR1cyA9ICdVcGRhdGVkJzsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRRdWV1ZVNldCgKICAgICAgICAgICAgICAgIFF1ZXVlSUQgID0+ICRUaWNrZXR7UXVldWVJRH0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSBRdWV1ZSBmb3IgVGlja2V0SUQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICkgaWYgISRTdWNjZXNzOwogICAgICAgIH0KCiAgICAgICAgIyB0eXBlCiAgICAgICAgaWYgKCAhJFRpY2tldHtUeXBlSUR9ICYmICRUaWNrZXR7VHlwZX0gKSB7CiAgICAgICAgICAgICRUaWNrZXR7VHlwZUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpUeXBlJyktPlR5cGVMb29rdXAoCiAgICAgICAgICAgICAgICBUeXBlID0+ICRUaWNrZXR7VHlwZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRUaWNrZXR7VHlwZUlEfSB8fD0gJFNraXBFbXB0eSA/ICREQlRpY2tldHtUeXBlSUR9IDogJFBhcmFte09iamVjdERhdGF9e1R5cGVJRH07CgogICAgICAgIGlmICggJFRpY2tldHtUeXBlSUR9IG5lICREQlRpY2tldHtUeXBlSUR9ICkgewogICAgICAgICAgICAkU3RhdHVzID0gJ1VwZGF0ZWQnOwogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFR5cGVTZXQoCiAgICAgICAgICAgICAgICBUeXBlSUQgICA9PiAkVGlja2V0e1R5cGVJRH0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSBUeXBlIGZvciBUaWNrZXRJRCAkREJUaWNrZXR7VGlja2V0SUR9IiwKICAgICAgICAgICAgKSBpZiAhJFN1Y2Nlc3M7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSApIHsKCiAgICAgICAgICAgICMgc2VydmljZQogICAgICAgICAgICBpZiAoICEkVGlja2V0e1NlcnZpY2VJRH0gJiYgJFRpY2tldHtTZXJ2aWNlfSApIHsKICAgICAgICAgICAgICAgICRUaWNrZXR7U2VydmljZUlEfSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkVGlja2V0e1NlcnZpY2V9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkVGlja2V0e1NlcnZpY2VJRH0gfHw9ICRTa2lwRW1wdHkgPyAkREJUaWNrZXR7U2VydmljZUlEfSA6ICRQYXJhbXtPYmplY3REYXRhfXtTZXJ2aWNlSUR9OwogICAgICAgICAgICAkREJUaWNrZXR7U2VydmljZUlEfSAvLz0gJyc7CgogICAgICAgICAgICBpZiAoICEkVGlja2V0e1NlcnZpY2VJRH0gJiYgJERCVGlja2V0e1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVW5leHBlY3RlZCBzdGF0ZSBlbmNvdW50ZXJlZCBmb3IgZXhpc3RpbmcgVGlja2V0SUQgJFRpY2tldHtUaWNrZXRJRH0gKEVudGl0eSAkUGFyYW17Q291bnRlcn0pOiAiCiAgICAgICAgICAgICAgICAgICAgICAgIC4gIlNlcnZpY2VzIGNhbiBub3QgYmUgZW1wdGllZCAtIG5vdCBhIHJlYWwgY2hyb25vbG9naWNhbCB1cGRhdGU7IGlnbm9yaW5nIHRoaXMsIGFuZCBrZWVwaW5nIHRoZSBTZXJ2aWNlLiIsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICRUaWNrZXR7U2VydmljZUlEfSAmJiAkVGlja2V0e1NlcnZpY2VJRH0gbmUgJERCVGlja2V0e1NlcnZpY2VJRH0gKSB7CiAgICAgICAgICAgICAgICAkU3RhdHVzID0gJ1VwZGF0ZWQnOwogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRTZXJ2aWNlU2V0KAogICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkVGlja2V0e1NlcnZpY2VJRH0sCiAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgdXBkYXRlIFNlcnZpY2UgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICAgICAgICAgKSBpZiAhJFN1Y2Nlc3M7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc2xhCiAgICAgICAgICAgIGlmICggISRUaWNrZXR7U0xBSUR9ICYmICRUaWNrZXR7U0xBfSApIHsKICAgICAgICAgICAgICAgICRUaWNrZXR7U0xBSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpLT5TTEFMb29rdXAoCiAgICAgICAgICAgICAgICAgICAgU0xBID0+ICRUaWNrZXR7U0xBfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJFRpY2tldHtTTEFJRH0gfHw9ICRTa2lwRW1wdHkgPyAkREJUaWNrZXR7U0xBSUR9IDogJFBhcmFte09iamVjdERhdGF9e1NMQUlEfTsKICAgICAgICAgICAgJERCVGlja2V0e1NMQUlEfSAvLz0gJyc7CgogICAgICAgICAgICBpZiAoICEkVGlja2V0e1NMQUlEfSAmJiAkREJUaWNrZXR7U0xBSUR9ICkgewogICAgICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlVuZXhwZWN0ZWQgc3RhdGUgZW5jb3VudGVyZWQgZm9yIGV4aXN0aW5nIFRpY2tldElEICRUaWNrZXR7VGlja2V0SUR9IChFbnRpdHkgJFBhcmFte0NvdW50ZXJ9KTogIgogICAgICAgICAgICAgICAgICAgICAgICAuICJTTEFzIGNhbiBub3QgYmUgZW1wdGllZCAtIG5vdCBhIHJlYWwgY2hyb25vbG9naWNhbCB1cGRhdGU7IGlnbm9yaW5nIHRoaXMsIGFuZCBrZWVwaW5nIHRoZSBTTEEuIiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggJFRpY2tldHtTTEFJRH0gJiYgJFRpY2tldHtTTEFJRH0gbmUgJERCVGlja2V0e1NMQUlEfSApIHsKICAgICAgICAgICAgICAgICRTdGF0dXMgPSAnVXBkYXRlZCc7CiAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldFNMQVNldCgKICAgICAgICAgICAgICAgICAgICBTTEFJRCAgICA9PiAkVGlja2V0e1NMQUlEfSwKICAgICAgICAgICAgICAgICAgICBUaWNrZXRJRCA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgdXBkYXRlIFNMQSBmb3IgVGlja2V0SUQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICAgICApIGlmICEkU3VjY2VzczsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBvd25lcgogICAgICAgIGlmICggISRUaWNrZXR7T3duZXJJRH0gJiYgJFRpY2tldHtPd25lcn0gKSB7CiAgICAgICAgICAgICRUaWNrZXR7T3duZXJJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTG9va3VwKAogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRUaWNrZXR7T3duZXJ9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkVGlja2V0e093bmVySUR9IHx8PSAkU2tpcEVtcHR5ID8gJERCVGlja2V0e093bmVySUR9IDogJFBhcmFte09iamVjdERhdGF9e093bmVySUR9OwoKICAgICAgICBpZiAoICEkVGlja2V0e093bmVySUR9ICYmICREQlRpY2tldHtPd25lcklEfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJVbmV4cGVjdGVkIHN0YXRlIGVuY291bnRlcmVkIGZvciBleGlzdGluZyBUaWNrZXRJRCAkVGlja2V0e1RpY2tldElEfSAoRW50aXR5ICRQYXJhbXtDb3VudGVyfSk6ICIKICAgICAgICAgICAgICAgICAgICAuICJPd25lcnMgY2FuIG5vdCBiZSBlbXB0aWVkIC0gbm90IGEgcmVhbCBjaHJvbm9sb2dpY2FsIHVwZGF0ZTsgaWdub3JpbmcgdGhpcywgYW5kIGtlZXBpbmcgdGhlIE93bmVyLiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRUaWNrZXR7T3duZXJJRH0gJiYgJFRpY2tldHtPd25lcklEfSBuZSAkREJUaWNrZXR7T3duZXJJRH0gKSB7CiAgICAgICAgICAgICRTdGF0dXMgPSAnVXBkYXRlZCc7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0T3duZXJTZXQoCiAgICAgICAgICAgICAgICBOZXdVc2VySUQgPT4gJFRpY2tldHtPd25lcklEfSwKICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCB1cGRhdGUgT3duZXIgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICAgICApIGlmICEkU3VjY2VzczsKICAgICAgICB9CgogICAgICAgICMgbG9jawogICAgICAgIGlmICggISRUaWNrZXR7TG9ja0lEfSAmJiAkVGlja2V0e0xvY2t9ICkgewogICAgICAgICAgICAkVGlja2V0e0xvY2tJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9jaycpLT5Mb2NrTG9va3VwKAogICAgICAgICAgICAgICAgTG9jayA9PiAkVGlja2V0e0xvY2t9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkVGlja2V0e0xvY2tJRH0gfHw9ICRTa2lwRW1wdHkgPyAkREJUaWNrZXR7TG9ja0lEfSA6ICRQYXJhbXtPYmplY3REYXRhfXtMb2NrSUR9OwoKICAgICAgICAjIGNoZWNrIHdoZXRoZXIgYW4gb3duZXIgZXhpc3RzIGhlcmUgLSBpZiBub3QgdHJ5aW5nIHRvIGxvY2sgd2lsbCBmYWlsCiAgICAgICAgaWYgKCAkVGlja2V0e093bmVySUR9ICYmICRUaWNrZXR7TG9ja0lEfSBuZSAkREJUaWNrZXR7TG9ja0lEfSApIHsKICAgICAgICAgICAgJFN0YXR1cyA9ICdVcGRhdGVkJzsKICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkVGlja2V0T2JqZWN0LT5UaWNrZXRMb2NrU2V0KAogICAgICAgICAgICAgICAgTG9ja0lEICAgPT4gJFRpY2tldHtMb2NrSUR9LAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJERCVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCB1cGRhdGUgTG9jayBmb3IgVGlja2V0SUQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICkgaWYgISRTdWNjZXNzOwogICAgICAgIH0KCiAgICAgICAgIyByZXNwb25zaWJsZQogICAgICAgIGlmICggISRUaWNrZXR7UmVzcG9uc2libGVJRH0gJiYgJFRpY2tldHtSZXNwb25zaWJsZX0gKSB7CiAgICAgICAgICAgICRUaWNrZXR7UmVzcG9uc2libGVJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTG9va3VwKAogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRUaWNrZXR7UmVzcG9uc2libGV9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkVGlja2V0e1Jlc3BvbnNpYmxlSUR9IHx8PSAkU2tpcEVtcHR5ID8gJERCVGlja2V0e1Jlc3BvbnNpYmxlSUR9IDogJFBhcmFte09iamVjdERhdGF9e1Jlc3BvbnNpYmxlSUR9OwoKICAgICAgICBpZiAoICEkVGlja2V0e1Jlc3BvbnNpYmxlSUR9ICYmICREQlRpY2tldHtSZXNwb25zaWJsZUlEfSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnbm90aWNlJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJVbmV4cGVjdGVkIHN0YXRlIGVuY291bnRlcmVkIGZvciBleGlzdGluZyBUaWNrZXRJRCAkVGlja2V0e1RpY2tldElEfSAoRW50aXR5ICRQYXJhbXtDb3VudGVyfSk6ICIKICAgICAgICAgICAgICAgICAgICAuICJSZXNwb25zaWJsZXMgY2FuIG5vdCBiZSBlbXB0aWVkIC0gbm90IGEgcmVhbCBjaHJvbm9sb2dpY2FsIHVwZGF0ZTsgaWdub3JpbmcgdGhpcywgYW5kIGtlZXBpbmcgdGhlIFJlc3BvbnNpYmxlLiIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoICRUaWNrZXR7UmVzcG9uc2libGVJRH0gJiYgJFRpY2tldHtSZXNwb25zaWJsZUlEfSBuZSAkREJUaWNrZXR7UmVzcG9uc2libGVJRH0gKSB7CiAgICAgICAgICAgICRTdGF0dXMgPSAnVXBkYXRlZCc7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0UmVzcG9uc2libGVTZXQoCiAgICAgICAgICAgICAgICBOZXdVc2VySUQgPT4gJFRpY2tldHtSZXNwb25zaWJsZUlEfSwKICAgICAgICAgICAgICAgIFRpY2tldElEICA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCB1cGRhdGUgUmVzcG9uc2libGUgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICAgICApIGlmICEkU3VjY2VzczsKICAgICAgICB9CgogICAgICAgICMgcHJpb3JpdHkKICAgICAgICBpZiAoICEkVGlja2V0e1ByaW9yaXR5SUR9ICYmICRUaWNrZXR7UHJpb3JpdHl9ICkgewogICAgICAgICAgICAkVGlja2V0e1ByaW9yaXR5SUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5JyktPlByaW9yaXR5TG9va3VwKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJFRpY2tldHtQcmlvcml0eX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRUaWNrZXR7UHJpb3JpdHlJRH0gfHw9ICRTa2lwRW1wdHkgPyAkREJUaWNrZXR7UHJpb3JpdHlJRH0gOiAkUGFyYW17T2JqZWN0RGF0YX17UHJpb3JpdHlJRH07CgogICAgICAgIGlmICggJFRpY2tldHtQcmlvcml0eUlEfSBuZSAkREJUaWNrZXR7UHJpb3JpdHlJRH0gKSB7CiAgICAgICAgICAgICRTdGF0dXMgPSAnVXBkYXRlZCc7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0UHJpb3JpdHlTZXQoCiAgICAgICAgICAgICAgICBQcmlvcml0eUlEID0+ICRUaWNrZXR7UHJpb3JpdHlJRH0sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCB1cGRhdGUgUHJpb3JpdHkgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICAgICApIGlmICEkU3VjY2VzczsKICAgICAgICB9CgogICAgICAgICMgc3RhdGUKICAgICAgICBpZiAoICEkVGlja2V0e1N0YXRlSUR9ICYmICRUaWNrZXR7U3RhdGV9ICkgewogICAgICAgICAgICAkVGlja2V0e1N0YXRlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRlJyktPlN0YXRlTG9va3VwKAogICAgICAgICAgICAgICAgU3RhdGUgPT4gJFRpY2tldHtTdGF0ZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRUaWNrZXR7U3RhdGVJRH0gfHw9ICRTa2lwRW1wdHkgPyAkREJUaWNrZXR7U3RhdGVJRH0gOiAkUGFyYW17T2JqZWN0RGF0YX17U3RhdGVJRH07CgogICAgICAgIGlmICggJFRpY2tldHtTdGF0ZUlEfSBuZSAkREJUaWNrZXR7U3RhdGVJRH0gKSB7CiAgICAgICAgICAgICRTdGF0dXMgPSAnVXBkYXRlZCc7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJFRpY2tldE9iamVjdC0+VGlja2V0U3RhdGVTZXQoCiAgICAgICAgICAgICAgICBTdGF0ZUlEICA9PiAkVGlja2V0e1N0YXRlSUR9LAogICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJERCVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCB1cGRhdGUgU3RhdGUgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICAgICApIGlmICEkU3VjY2VzczsKICAgICAgICB9CgogICAgICAgICMgYXJjaGl2ZSBmbGFnCiAgICAgICAgJFRpY2tldHtBcmNoaXZlRmxhZ30gfHw9ICRTa2lwRW1wdHkgPyAkREJUaWNrZXR7QXJjaGl2ZUZsYWd9IDogJFBhcmFte09iamVjdERhdGF9e0FyY2hpdmVGbGFnfTsKCiAgICAgICAgaWYgKCAkVGlja2V0e0FyY2hpdmVGbGFnfSBuZSAkREJUaWNrZXR7QXJjaGl2ZUZsYWd9ICkgewogICAgICAgICAgICAkU3RhdHVzID0gJ1VwZGF0ZWQnOwogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRUaWNrZXRPYmplY3QtPlRpY2tldEFyY2hpdmVGbGFnU2V0KAogICAgICAgICAgICAgICAgQXJjaGl2ZUZsYWcgPT4gJFRpY2tldHtBcmNoaXZlRmxhZ30sCiAgICAgICAgICAgICAgICBUaWNrZXRJRCAgICA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHVwZGF0ZSBBcmNoaXZlRmxhZyBmb3IgVGlja2V0SUQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICkgaWYgISRTdWNjZXNzOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBhIG5ldyB0aWNrZXQKICAgIGVsc2UgewogICAgICAgICRTdGF0dXMgPSAnQ3JlYXRlZCc7CgogICAgICAgICMgY3VzdG9tZXIKICAgICAgICAkREJUaWNrZXR7Q3VzdG9tZXJJRH0gICA9ICRUaWNrZXR7Q3VzdG9tZXJJRH0gICAgIHx8ICRQYXJhbXtPYmplY3REYXRhfXtDdXN0b21lcklEfTsKICAgICAgICAkREJUaWNrZXR7Q3VzdG9tZXJVc2VyfSA9ICRUaWNrZXR7Q3VzdG9tZXJVc2VySUR9IHx8ICRQYXJhbXtPYmplY3REYXRhfXtDdXN0b21lclVzZXJJRH07CgogICAgICAgICMgdGl0bGUKICAgICAgICAkREJUaWNrZXR7VGl0bGV9ID0gJFRpY2tldHtUaXRsZX0gfHwgJFRpY2tldHtUaXRsZX0gZXEgJzAnID8gJFRpY2tldHtUaXRsZX0gOiAkUGFyYW17T2JqZWN0RGF0YX17U3ViamVjdH07CgogICAgICAgICMgcXVldWUKICAgICAgICBpZiAoICEkVGlja2V0e1F1ZXVlSUR9ICYmICRUaWNrZXR7UXVldWV9ICkgewogICAgICAgICAgICAkVGlja2V0e1F1ZXVlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlF1ZXVlJyktPlF1ZXVlTG9va3VwKAogICAgICAgICAgICAgICAgUXVldWUgPT4gJFRpY2tldHtRdWV1ZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICREQlRpY2tldHtRdWV1ZUlEfSA9ICRUaWNrZXR7UXVldWVJRH0gfHwgJFBhcmFte09iamVjdERhdGF9e1F1ZXVlSUR9OwoKICAgICAgICAjIHR5cGUKICAgICAgICBpZiAoICEkVGlja2V0e1R5cGVJRH0gJiYgJFRpY2tldHtUeXBlfSApIHsKICAgICAgICAgICAgJFRpY2tldHtUeXBlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlR5cGUnKS0+VHlwZUxvb2t1cCgKICAgICAgICAgICAgICAgIFR5cGUgPT4gJFRpY2tldHtUeXBlfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJERCVGlja2V0e1R5cGVJRH0gPSAkVGlja2V0e1R5cGVJRH0gfHwgJFBhcmFte09iamVjdERhdGF9e1R5cGVJRH07CgogICAgICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpY2tldDo6U2VydmljZScpICkgewoKICAgICAgICAgICAgIyBzZXJ2aWNlCiAgICAgICAgICAgIGlmICggISRUaWNrZXR7U2VydmljZUlEfSAmJiAkVGlja2V0e1NlcnZpY2V9ICkgewogICAgICAgICAgICAgICAgJFRpY2tldHtTZXJ2aWNlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICRUaWNrZXR7U2VydmljZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICREQlRpY2tldHtTZXJ2aWNlSUR9ID0gJFRpY2tldHtTZXJ2aWNlSUR9IHx8ICRQYXJhbXtPYmplY3REYXRhfXtTZXJ2aWNlSUR9OwoKICAgICAgICAgICAgIyBzbGEKICAgICAgICAgICAgaWYgKCAhJFRpY2tldHtTTEFJRH0gJiYgJFRpY2tldHtTTEF9ICkgewogICAgICAgICAgICAgICAgJFRpY2tldHtTTEFJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U0xBJyktPlNMQUxvb2t1cCgKICAgICAgICAgICAgICAgICAgICBTTEEgPT4gJFRpY2tldHtTTEF9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkREJUaWNrZXR7U0xBSUR9ID0gJFRpY2tldHtTTEFJRH0gfHwgJFBhcmFte09iamVjdERhdGF9e1NMQUlEfTsKICAgICAgICB9CgogICAgICAgICMgb3duZXIKICAgICAgICBpZiAoICEkVGlja2V0e093bmVySUR9ICYmICRUaWNrZXR7T3duZXJ9ICkgewogICAgICAgICAgICAkVGlja2V0e093bmVySUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVzZXInKS0+VXNlckxvb2t1cCgKICAgICAgICAgICAgICAgIFVzZXJMb2dpbiA9PiAkVGlja2V0e093bmVyfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJERCVGlja2V0e093bmVySUR9ID0gJFRpY2tldHtPd25lcklEfSB8fCAkUGFyYW17T2JqZWN0RGF0YX17T3duZXJJRH07CgogICAgICAgICMgbG9jawogICAgICAgIGlmICggISRUaWNrZXR7TG9ja0lEfSAmJiAkVGlja2V0e0xvY2t9ICkgewogICAgICAgICAgICAkVGlja2V0e0xvY2tJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9jaycpLT5Mb2NrTG9va3VwKAogICAgICAgICAgICAgICAgTG9jayA9PiAkVGlja2V0e0xvY2t9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkREJUaWNrZXR7TG9ja0lEfSA9ICRUaWNrZXR7TG9ja0lEfSB8fCAkUGFyYW17T2JqZWN0RGF0YX17TG9ja0lEfTsKCiAgICAgICAgIyByZXNwb25zaWJsZQogICAgICAgIGlmICggISRUaWNrZXR7UmVzcG9uc2libGVJRH0gJiYgJFRpY2tldHtSZXNwb25zaWJsZX0gKSB7CiAgICAgICAgICAgICRUaWNrZXR7UmVzcG9uc2libGVJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpLT5Vc2VyTG9va3VwKAogICAgICAgICAgICAgICAgVXNlckxvZ2luID0+ICRUaWNrZXR7UmVzcG9uc2libGV9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkREJUaWNrZXR7UmVzcG9uc2libGVJRH0gPSAkVGlja2V0e1Jlc3BvbnNpYmxlSUR9IHx8ICRQYXJhbXtPYmplY3REYXRhfXtSZXNwb25zaWJsZUlEfTsKCiAgICAgICAgIyBwcmlvcml0eQogICAgICAgIGlmICggISRUaWNrZXR7UHJpb3JpdHlJRH0gJiYgJFRpY2tldHtQcmlvcml0eX0gKSB7CiAgICAgICAgICAgICRUaWNrZXR7UHJpb3JpdHlJRH0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknKS0+UHJpb3JpdHlMb29rdXAoCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAkVGlja2V0e1ByaW9yaXR5fSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgJERCVGlja2V0e1ByaW9yaXR5SUR9ID0gJFRpY2tldHtQcmlvcml0eUlEfSB8fCAkUGFyYW17T2JqZWN0RGF0YX17UHJpb3JpdHlJRH07CgogICAgICAgICMgc3RhdGUKICAgICAgICBpZiAoICEkVGlja2V0e1N0YXRlSUR9ICYmICRUaWNrZXR7U3RhdGV9ICkgewogICAgICAgICAgICAkVGlja2V0e1N0YXRlSUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlN0YXRlJyktPlN0YXRlTG9va3VwKAogICAgICAgICAgICAgICAgU3RhdGUgPT4gJFRpY2tldHtTdGF0ZX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICREQlRpY2tldHtTdGF0ZUlEfSA9ICRUaWNrZXR7U3RhdGVJRH0gfHwgJFBhcmFte09iamVjdERhdGF9e1N0YXRlSUR9OwoKICAgICAgICAjIGFyY2hpdmUgZmxhZwogICAgICAgICREQlRpY2tldHtBcmNoaXZlRmxhZ30gPSAkVGlja2V0e0FyY2hpdmVGbGFnfSB8fCAkUGFyYW17T2JqZWN0RGF0YX17QXJjaGl2ZUZsYWd9OwoKICAgICAgICAkREJUaWNrZXR7VGlja2V0SUR9ID0gJFRpY2tldE9iamVjdC0+VGlja2V0Q3JlYXRlKAogICAgICAgICAgICAlREJUaWNrZXQsCiAgICAgICAgICAgIFROICAgICA9PiAkVGlja2V0e1RpY2tldE51bWJlcn0gLy8gJycsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ0NvdWxkIG5vdCBjcmVhdGUgbmV3IHRpY2tldCcsCiAgICAgICAgKSBpZiAhJERCVGlja2V0e1RpY2tldElEfTsKCiAgICAgICAgJERCVGlja2V0e1RpY2tldE51bWJlcn0gPSAkVGlja2V0T2JqZWN0LT5UaWNrZXROdW1iZXJMb29rdXAoCiAgICAgICAgICAgIFRpY2tldElEID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkVGlja2V0e0NyZWF0ZWR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fSAvLz0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiVVBEQVRFIHRpY2tldCBTRVQgY3JlYXRlX3RpbWUgPSA/IFdIRVJFIGlkID0gPyIsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsgXCRUaWNrZXR7Q3JlYXRlZH0sIFwkREJUaWNrZXR7VGlja2V0SUR9IF0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBteSAkU3luY0RCQ29uZmlnID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0ltcG9ydEV4cG9ydDo6VGlja2V0OjpTeW5jaHJvbml6ZVdpdGhGb3JlaWduREInKTsKICAgICAgICBpZiAoJFN5bmNEQkNvbmZpZykgewogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT5fU3luY2hyb25pemVFeHRlbmRlZERCRW50cmllcygKICAgICAgICAgICAgICAgIEZvcmVpZ25EQiAgICAgICA9PiAkU3luY0RCQ29uZmlnLAogICAgICAgICAgICAgICAgRm9yZWlnblRpY2tldElEID0+ICRUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVGlja2V0SUQgICAgICAgID0+ICREQlRpY2tldHtUaWNrZXRJRH0sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkNvdWxkIG5vdCBzeW5jaHJvbml6ZSBleHRlbmRlZCBEQiBlbnRyaWVzIGZvciB0aWNrZXQgJERCVGlja2V0e1RpY2tldElEfSIsCiAgICAgICAgICAgICkgaWYgISRTdWNjZXNzOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwogICAgbXkgJVN0YW5kYXJkTXVsdGlTZWxlY3QgICAgICAgPSBtYXAgeyAkXyA9PiAxIH0gcXcoIE11bHRpc2VsZWN0IERhdGFiYXNlIFdlYlNlcnZpY2UgKTsKCiAgICAjIGR5bmFtaWMgZmllbGRzCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJEF0dHIgKCBrZXlzICVUaWNrZXQgKSB7CiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgJEF0dHIgIX4gL15EeW5hbWljRmllbGRfKC4rKSQvOwoKICAgICAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgICAgICBOYW1lID0+ICQxLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHRoZSBjdXJyZW50IHZhbHVlCiAgICAgICAgbXkgJERCVmFsdWUgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVHZXQoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBPYmplY3RJRCAgICAgICAgICAgPT4gJERCVGlja2V0e1RpY2tldElEfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBtdWx0aSBzZWxlY3QgZmllbGRzIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQKICAgICAgICBpZiAoICRTdGFuZGFyZE11bHRpU2VsZWN0eyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57RmllbGRUeXBlfSB9IHx8IHJlZiAkREJWYWx1ZSBlcSAnQVJSQVknICkgewogICAgICAgICAgICAkVGlja2V0eyRBdHRyfSA9ICRUaWNrZXR7JEF0dHJ9ID8gWyBtYXAgeyBkZWNvZGUoICdVVEYtOCcsIGRlY29kZV9iYXNlNjQoJF8pICkgfSBzcGxpdCggJyMjIycsICRUaWNrZXR7JEF0dHJ9ICkgXSA6IFtdOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZUlzRGlmZmVyZW50KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgVmFsdWUxICAgICAgICAgICAgID0+ICRUaWNrZXR7JEF0dHJ9LAogICAgICAgICAgICBWYWx1ZTIgICAgICAgICAgICAgPT4gJERCVmFsdWUsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCAkU3RhdHVzIGVxICdTa2lwcGVkJyApIHsKICAgICAgICAgICAgJFN0YXR1cyA9ICdVcGRhdGVkJzsKICAgICAgICB9CgogICAgICAgIG15ICRTdWNjZXNzID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPkZpZWxkVmFsdWVWYWxpZGF0ZSgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAgICA9PiAkVGlja2V0eyRBdHRyfSwKICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRTdWNjZXNzKSB7CgogICAgICAgICAgICAjIHNldCB0aGUgdmFsdWUKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVTZXQoCiAgICAgICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgICAgIE9iamVjdElEICAgICAgICAgICA9PiAkREJUaWNrZXR7VGlja2V0SUR9LAogICAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgID0+ICRUaWNrZXR7JEF0dHJ9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgdXBkYXRlICRBdHRyIHRvICckVGlja2V0eyRBdHRyfScgZm9yIFRpY2tldElEICREQlRpY2tldHtUaWNrZXRJRH0iLAogICAgICAgICkgaWYgISRTdWNjZXNzOwogICAgfQoKICAgIGlmICggJFBhcmFte0lkZW50aWZpZXJ9e1RpY2tldElEfSB8fCAkUGFyYW17T2JqZWN0RGF0YX17SW5jbHVkZUFydGljbGVzfSApIHsKICAgICAgICAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259eyAkVGlja2V0e1RpY2tldElEfSB9ID0gJERCVGlja2V0e1RpY2tldElEfTsKICAgIH0KICAgIGlmICggJFBhcmFte0lkZW50aWZpZXJ9e1RpY2tldE51bWJlcn0gKSB7CiAgICAgICAgJFNlbGYtPntUaWNrZXROdW1iZXJJRFJlbGF0aW9ufXsgJFRpY2tldHtUaWNrZXROdW1iZXJ9IH0gPSAkREJUaWNrZXR7VGlja2V0SUR9OwogICAgfQogICAgJFNlbGYtPntMYXN0VGlja2V0SUR9ID0gJERCVGlja2V0e1RpY2tldElEfTsKCiAgICByZXR1cm4gJFN0YXR1czsKfQoKc3ViIF9JbXBvcnRBcnRpY2xlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJUFydGljbGUgPSAkUGFyYW17QXJ0aWNsZX0tPiUqOwoKICAgIG15ICRUaWNrZXRJRCA9CiAgICAgICAgJEFydGljbGV7VGlja2V0SUR9ICYmICRTZWxmLT57VGlja2V0SURSZWxhdGlvbn17ICRBcnRpY2xle1RpY2tldElEfSB9ID8gJFNlbGYtPntUaWNrZXRJRFJlbGF0aW9ufXsgJEFydGljbGV7VGlja2V0SUR9IH0gOgogICAgICAgICRTZWxmLT57TGFzdFRpY2tldElEfSA/ICRTZWxmLT57TGFzdFRpY2tldElEfSA6ICcnOwoKICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICVQYXJhbSwKICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgZmluZCBuZXcgVGlja2V0SUQgZm9yIEFydGljbGUiLAogICAgKSBpZiAhJFRpY2tldElEOwoKICAgIG15ICRBcnRpY2xlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldDo6QXJ0aWNsZScpOwoKICAgIGlmICggJFBhcmFte0lkZW50aWZpZXJ9ICYmICRQYXJhbXtJZGVudGlmaWVyfXtBcnRpY2xlSUR9ICYmICRBcnRpY2xle0FydGljbGVJRH0gKSB7CiAgICAgICAgbXkgQERCQXJ0aWNsZXMgPSAkQXJ0aWNsZU9iamVjdC0+QXJ0aWNsZUxpc3QoCiAgICAgICAgICAgIFRpY2tldElEICA9PiAkVGlja2V0SUQsCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZXtBcnRpY2xlSUR9LAogICAgICAgICk7CgogICAgICAgIHJldHVybiAnU2tpcHBlZCcgaWYgQERCQXJ0aWNsZXM7CiAgICB9CgogICAgbXkgJVZhbGlkSW1wb3J0Q2hhbm5lbCA9IG1hcCB7ICRfID0+IDEgfSBxdyggRW1haWwgSW50ZXJuYWwgUGhvbmUgKTsKICAgIG15ICRDaGFubmVsTmFtZSAgICAgICAgPSAkQXJ0aWNsZXtBcnRpY2xlQmFja2VuZH0gfHwgJFBhcmFte09iamVjdERhdGF9e0FydGljbGVCYWNrZW5kfTsKCiAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAlUGFyYW0sCiAgICAgICAgTWVzc2FnZSA9PiAiJyRDaGFubmVsTmFtZScgaXMgKGN1cnJlbnRseSkgbm90IGEgc3VwcG9ydGVkIEFydGljbGVCYWNrZW5kIiwKICAgICkgaWYgISRWYWxpZEltcG9ydENoYW5uZWx7JENoYW5uZWxOYW1lfTsKCiAgICBteSAkQXJ0aWNsZUJhY2tlbmRPYmplY3QgPSAkQXJ0aWNsZU9iamVjdC0+QmFja2VuZEZvckNoYW5uZWwoIENoYW5uZWxOYW1lID0+ICRDaGFubmVsTmFtZSApOwoKICAgIGlmICggJENoYW5uZWxOYW1lIGVxICdFbWFpbCcgJiYgISRBcnRpY2xle01lc3NhZ2VJRH0gKSB7CiAgICAgICAgbXkgJFRpbWUgICA9ICRLZXJuZWw6Ok9NLT5DcmVhdGUoJ0tlcm5lbDo6U3lzdGVtOjpEYXRlVGltZScpLT5Ub0Vwb2NoKCk7CiAgICAgICAgbXkgJFJhbmRvbSA9IHJhbmQgOTk5OTk5OwogICAgICAgIG15ICRGUUROICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRlFETicpOwogICAgICAgICRBcnRpY2xle01lc3NhZ2VJRH0gPSAiPCRUaW1lLiRSYW5kb21cQCRGUUROPiI7CiAgICB9CgogICAgbXkgJEhpc3RvcnlDb21tZW50ID0gJyUlSW1wb3J0ZWQgQXJ0aWNsZSc7CiAgICBpZiAoICRBcnRpY2xle1RpY2tldElEfSB8fCAkQXJ0aWNsZXtBcnRpY2xlSUR9ICkgewogICAgICAgICRIaXN0b3J5Q29tbWVudCAuPSAnIC0gTGVnYWN5JzsKICAgICAgICAkSGlzdG9yeUNvbW1lbnQgLj0gJEFydGljbGV7VGlja2V0SUR9ICA/ICIgVElEOiAkQXJ0aWNsZXtUaWNrZXRJRH07IiAgOiAnJzsKICAgICAgICAkSGlzdG9yeUNvbW1lbnQgLj0gJEFydGljbGV7QXJ0aWNsZUlEfSA/ICIgQUlEOiAkQXJ0aWNsZXtBcnRpY2xlSUR9OyIgOiAnJzsKICAgIH0KCiAgICBteSAkQXJ0aWNsZUlEID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlQ3JlYXRlKAogICAgICAgIE5vQWdlbnROb3RpZnkgICAgICAgID0+IDEsCiAgICAgICAgVGlja2V0SUQgICAgICAgICAgICAgPT4gJFRpY2tldElELAogICAgICAgIFNlbmRlclR5cGUgICAgICAgICAgID0+ICRBcnRpY2xle1NlbmRlclR5cGV9IHx8ICRQYXJhbXtPYmplY3REYXRhfXtTZW5kZXJUeXBlfSwKICAgICAgICBJc1Zpc2libGVGb3JDdXN0b21lciA9PiBkZWZpbmVkICRBcnRpY2xle0lzVmlzaWJsZUZvckN1c3RvbWVyfSAmJiAkQXJ0aWNsZXtJc1Zpc2libGVGb3JDdXN0b21lcn0gbmUgJycgPyAkQXJ0aWNsZXtJc1Zpc2libGVGb3JDdXN0b21lcn0gOiAkUGFyYW17T2JqZWN0RGF0YX17SXNWaXNpYmxlRm9yQ3VzdG9tZXJ9IC8vIDAsCiAgICAgICAgRnJvbSAgICAgICAgICAgICAgICAgPT4gJEFydGljbGV7RnJvbX0sCiAgICAgICAgVG8gICAgICAgICAgICAgICAgICAgPT4gJEFydGljbGV7VG99LAogICAgICAgIENjICAgICAgICAgICAgICAgICAgID0+ICRBcnRpY2xle0NjfSwKICAgICAgICBCY2MgICAgICAgICAgICAgICAgICA9PiAkQXJ0aWNsZXtCY2N9LAogICAgICAgIFJlcGx5VG8gICAgICAgICAgICAgID0+ICRBcnRpY2xle1JlcGx5VG99LAogICAgICAgIEluUmVwbHlUbyAgICAgICAgICAgID0+ICRBcnRpY2xle0luUmVwbHlUb30sCiAgICAgICAgUmVmZXJlbmNlcyAgICAgICAgICAgPT4gJEFydGljbGV7UmVmZXJlbmNlc30sCiAgICAgICAgU3ViamVjdCAgICAgICAgICAgICAgPT4gJEFydGljbGV7U3ViamVjdH0gIHx8ICRQYXJhbXtPYmplY3REYXRhfXtTdWJqZWN0fSwKICAgICAgICBCb2R5ICAgICAgICAgICAgICAgICA9PiAkQXJ0aWNsZXtCb2R5fSAgICAgfHwgJFBhcmFte09iamVjdERhdGF9e0JvZHl9LAogICAgICAgIENoYXJzZXQgICAgICAgICAgICAgID0+ICRBcnRpY2xle0NoYXJzZXR9ICB8fCAndXRmLTgnLAogICAgICAgIE1pbWVUeXBlICAgICAgICAgICAgID0+ICRBcnRpY2xle01pbWVUeXBlfSB8fCAndGV4dC9wbGFpbicsCiAgICAgICAgSGlzdG9yeVR5cGUgICAgICAgICAgPT4gJ01pc2MnLAogICAgICAgIEhpc3RvcnlDb21tZW50ICAgICAgID0+ICRIaXN0b3J5Q29tbWVudCwKICAgICAgICBNZXNzYWdlSUQgICAgICAgICAgICA9PiAkQXJ0aWNsZXtNZXNzYWdlSUR9LAogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgID0+IDEsCiAgICApOwoKICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICVQYXJhbSwKICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgY3JlYXRlIHRoZSBhcnRpY2xlIiwKICAgICkgaWYgISRBcnRpY2xlSUQ7CgogICAgaWYgKCAkQXJ0aWNsZXtDcmVhdGVUaW1lfSApIHsKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fSAvLz0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICBTUUwgPT4gIlVQREFURSBhcnRpY2xlIFNFVCBjcmVhdGVfdGltZSA9ID8gV0hFUkUgaWQgPSA/IiwKICAgICAgICAgICAgQmluZCA9PiBbIFwkQXJ0aWNsZXtDcmVhdGVUaW1lfSwgXCRBcnRpY2xlSUQgXSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRTeW5jREJDb25maWcgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSW1wb3J0RXhwb3J0OjpUaWNrZXQ6OlN5bmNocm9uaXplV2l0aEZvcmVpZ25EQicpOwogICAgaWYgKCRTeW5jREJDb25maWcpIHsKICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT5fU3luY2hyb25pemVFeHRlbmRlZERCRW50cmllcygKICAgICAgICAgICAgRm9yZWlnbkRCICAgICAgICA9PiAkU3luY0RCQ29uZmlnLAogICAgICAgICAgICBGb3JlaWduQXJ0aWNsZUlEID0+ICRBcnRpY2xle0FydGljbGVJRH0sCiAgICAgICAgICAgIEFydGljbGVJRCAgICAgICAgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgVGlja2V0SUQgICAgICAgICA9PiAkVGlja2V0SUQsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgTWVzc2FnZSA9PiAiQ291bGQgbm90IHN5bmNocm9uaXplIGV4dGVuZGVkIERCIGVudHJpZXMgZm9yIHRpY2tldCAkQXJ0aWNsZUlEIiwKICAgICAgICApIGlmICEkU3VjY2VzczsKICAgIH0KCiAgICAjIGF0dGFjaG1lbnRzCiAgICBpZiAoICRQYXJhbXtPYmplY3REYXRhfXtJbmNsdWRlQXR0YWNobWVudHN9ICYmICRBcnRpY2xle0F0dGFjaG1lbnRzfSApIHsKICAgICAgICBmb3IgbXkgJEF0dGFjaG1lbnRTdHJpbmcgKCAkQXJ0aWNsZXtBdHRhY2htZW50c30tPkAqICkgewogICAgICAgICAgICBteSAlQXR0YWNobWVudCA9IHNwbGl0KCAnIyMjJywgJEF0dGFjaG1lbnRTdHJpbmcsIC0xICk7CgogICAgICAgICAgICBmb3IgbXkgJEtleSAoIGtleXMgJUF0dGFjaG1lbnQgKSB7CiAgICAgICAgICAgICAgICAkQXR0YWNobWVudHskS2V5fSA9ICRBdHRhY2htZW50eyRLZXl9IGVxICcnID8gJycgOiBkZWNvZGVfYmFzZTY0KCAkQXR0YWNobWVudHskS2V5fSApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBLRVk6CiAgICAgICAgICAgIGZvciBteSAkS2V5IChxdyggRmlsZW5hbWUgQ29udGVudFR5cGUgRGlzcG9zaXRpb24gKSkgewogICAgICAgICAgICAgICAgbmV4dCBLRVkgaWYgISRBdHRhY2htZW50eyRLZXl9OwoKICAgICAgICAgICAgICAgICRBdHRhY2htZW50eyRLZXl9ID0gRW5jb2RlOjpkZWNvZGUoICdVVEYtOCcsICRBdHRhY2htZW50eyRLZXl9ICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJEFydGljbGVCYWNrZW5kT2JqZWN0LT5BcnRpY2xlV3JpdGVBdHRhY2htZW50KAogICAgICAgICAgICAgICAgJUF0dGFjaG1lbnQsCiAgICAgICAgICAgICAgICBBcnRpY2xlSUQgPT4gJEFydGljbGVJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT5fSW1wb3J0RXJyb3IoCiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICJFcnJvciB3aXRoIGltcG9ydGluZyBhbiBhdHRhY2htZW50IGZvciBhcnRpY2xlICRBcnRpY2xlSUQiLAogICAgICAgICAgICApIGlmICEkU3VjY2VzczsKICAgICAgICB9CiAgICB9CgogICAgIyBwbGFpbiBlbWFpbAogICAgaWYgKCAkQXJ0aWNsZXtQbGFpbkVtYWlsfSApIHsKICAgICAgICBteSAkU3VjY2VzcyA9ICRBcnRpY2xlQmFja2VuZE9iamVjdC0+QXJ0aWNsZVdyaXRlUGxhaW4oCiAgICAgICAgICAgIEFydGljbGVJRCA9PiAkQXJ0aWNsZUlELAogICAgICAgICAgICBFbWFpbCAgICAgPT4gJEFydGljbGV7UGxhaW5FbWFpbH0sCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+X0ltcG9ydEVycm9yKAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gIkVycm9yIHdpdGggaW1wb3J0aW5nIHRoZSBwbGFpbiBlbWFpbCBmb3IgYXJ0aWNsZSAkQXJ0aWNsZUlEIiwKICAgICAgICApIGlmICEkU3VjY2VzczsKICAgIH0KCiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKTsKICAgIG15ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDo6QmFja2VuZCcpOwogICAgbXkgJVN0YW5kYXJkTXVsdGlTZWxlY3QgICAgICAgPSBtYXAgeyAkXyA9PiAxIH0gcXcoIE11bHRpc2VsZWN0IERhdGFiYXNlIFdlYlNlcnZpY2UgKTsKCiAgICAjIGR5bmFtaWMgZmllbGRzCiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJEF0dHIgKCBrZXlzICVBcnRpY2xlICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICRBdHRyICF+IC9eRHluYW1pY0ZpZWxkXyguKykkLzsKCiAgICAgICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZEdldCgKICAgICAgICAgICAgTmFtZSA9PiAkMSwKICAgICAgICApOwoKICAgICAgICAjIGdldCB0aGUgY3VycmVudCB2YWx1ZQogICAgICAgIG15ICREQlZhbHVlID0gJER5bmFtaWNGaWVsZEJhY2tlbmRPYmplY3QtPlZhbHVlR2V0KAogICAgICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJER5bmFtaWNGaWVsZENvbmZpZywKICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgbXVsdGkgc2VsZWN0IGZpZWxkcyBuZWVkIHNwZWNpYWwgdHJlYXRtZW50CiAgICAgICAgaWYgKCAkU3RhbmRhcmRNdWx0aVNlbGVjdHsgJER5bmFtaWNGaWVsZENvbmZpZy0+e0ZpZWxkVHlwZX0gfSB8fCByZWYgJERCVmFsdWUgZXEgJ0FSUkFZJyApIHsKICAgICAgICAgICAgJEFydGljbGV7JEF0dHJ9ID0gJEFydGljbGV7JEF0dHJ9ID8gWyBtYXAgeyBkZWNvZGUoICdVVEYtOCcsIGRlY29kZV9iYXNlNjQoJF8pICkgfSBzcGxpdCggJyMjIycsICRBcnRpY2xleyRBdHRyfSApIF0gOiBbXTsKICAgICAgICB9CgogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICEkRHluYW1pY0ZpZWxkQmFja2VuZE9iamVjdC0+VmFsdWVJc0RpZmZlcmVudCgKICAgICAgICAgICAgRHluYW1pY0ZpZWxkQ29uZmlnID0+ICREeW5hbWljRmllbGRDb25maWcsCiAgICAgICAgICAgIFZhbHVlMSAgICAgICAgICAgICA9PiAkQXJ0aWNsZXskQXR0cn0sCiAgICAgICAgICAgIFZhbHVlMiAgICAgICAgICAgICA9PiAkREJWYWx1ZSwKICAgICAgICApOwoKICAgICAgICBteSAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5GaWVsZFZhbHVlVmFsaWRhdGUoCiAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJEFydGljbGV7JEF0dHJ9LAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoJFN1Y2Nlc3MpIHsKCiAgICAgICAgICAgICMgc2V0IHRoZSB2YWx1ZQogICAgICAgICAgICAkU3VjY2VzcyA9ICREeW5hbWljRmllbGRCYWNrZW5kT2JqZWN0LT5WYWx1ZVNldCgKICAgICAgICAgICAgICAgIER5bmFtaWNGaWVsZENvbmZpZyA9PiAkRHluYW1pY0ZpZWxkQ29uZmlnLAogICAgICAgICAgICAgICAgT2JqZWN0SUQgICAgICAgICAgID0+ICRBcnRpY2xlSUQsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJEFydGljbGV7JEF0dHJ9LAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJFNlbGYtPl9JbXBvcnRFcnJvcigKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBNZXNzYWdlID0+ICJDb3VsZCBub3QgdXBkYXRlICRBdHRyIGZvciBBcnRpY2xlSUQgJEFydGljbGVJRCIsCiAgICAgICAgKSBpZiAhJFN1Y2Nlc3M7CiAgICB9CgogICAgcmV0dXJuICdDcmVhdGVkJzsKfQoKc3ViIF9JbXBvcnRFcnJvciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICRTZWxmLT57RXJyb3J9ID0gJFBhcmFte01lc3NhZ2V9IHx8ICcnOwoKICAgIGlmICggZXhpc3RzICRQYXJhbXtUaWNrZXR9ICkgewogICAgICAgICRTZWxmLT57TGFzdFRpY2tldElEfSA9IHVuZGVmOwoKICAgICAgICBpZiAoICRQYXJhbXtJZGVudGlmaWVyfSAmJiAkUGFyYW17SWRlbnRpZmllcn17VGlja2V0SUR9ICYmICRQYXJhbXtUaWNrZXR9e1RpY2tldElEfSApIHsKICAgICAgICAgICAgJFNlbGYtPntUaWNrZXRJRFJlbGF0aW9ufXsgJFBhcmFte1RpY2tldH17VGlja2V0SUR9IH0gPSB1bmRlZjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkUGFyYW17SWRlbnRpZmllcn0gJiYgJFBhcmFte0lkZW50aWZpZXJ9e1RpY2tldE51bWJlcn0gJiYgJFBhcmFte1RpY2tldH17VGlja2V0TnVtYmVyfSApIHsKICAgICAgICAgICAgJFNlbGYtPntUaWNrZXROdW1iZXJJRFJlbGF0aW9ufXsgJFBhcmFte1RpY2tldH17VGlja2V0TnVtYmVyfSB9ID0gdW5kZWY7CiAgICAgICAgfQogICAgfQoKICAgIGVsc2lmICggZXhpc3RzICRQYXJhbXtBcnRpY2xlfSApIHsKICAgICAgICBteSAkSW1wb3J0ZWRUSUQgPSAkUGFyYW17QXJ0aWNsZX17VGlja2V0SUR9ID8gJFNlbGYtPntUaWNrZXRJRFJlbGF0aW9ufXsgJFBhcmFte0FydGljbGV9e1RpY2tldElEfSB9IDogJFNlbGYtPntMYXN0VGlja2V0SUR9OwogICAgICAgIG15ICRFeHRyYUluZm8gICA9ICRQYXJhbXtBcnRpY2xlfXtUaWNrZXRJRH0gPyAiIE9yaWdpbmlhbCBUaWNrZXRJRDogJFBhcmFte0FydGljbGV9e1RpY2tldElEfTsiICAgICAgOiAnJzsKICAgICAgICAkRXh0cmFJbmZvICAgICAuPSAkSW1wb3J0ZWRUSUQgICAgICAgICAgICAgICA/ICIgSW1wb3J0ZWQgVGlja2V0SUQ6ICRJbXBvcnRlZFRJRDsiICAgICAgICAgICAgICAgICA6ICcnOwogICAgICAgICRFeHRyYUluZm8gICAgIC49ICRQYXJhbXtBcnRpY2xlfXtBcnRpY2xlSUR9ID8gIiBPcmlnaW5pYWwgQXJ0aWNsZUlEOiAkUGFyYW17QXJ0aWNsZX17QXJ0aWNsZUlEfTsiIDogJyc7CiAgICAgICAgJFNlbGYtPntFcnJvcn0gLj0gJEV4dHJhSW5mbzsKICAgIH0KCiAgICByZXR1cm47Cn0KCnN1YiBfU3luY2hyb25pemVFeHRlbmRlZERCRW50cmllcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGlmICggISRQYXJhbXtGb3JlaWduREJ9e0RhdGFiYXNlRFNOfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgYSBEYXRhYmFzZURTTiBpbiB0aGUgRm9yZWlnbkRCIHNldHRpbmdzJywKICAgICAgICApOwoKICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCAhJFBhcmFte1RpY2tldElEfSB8fCAhKCAoICRQYXJhbXtBcnRpY2xlSUR9ICYmICRQYXJhbXtGb3JlaWduQXJ0aWNsZUlEfSB8fCAkUGFyYW17Rm9yZWlnblRpY2tldElEfSApICkgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFRpY2tldElEIGFuZCBlaXRoZXIgQXJ0aWNsZUlEIGFuZCBGb3JlaWduQXJ0aWNsZUlEIG9yIEZvcmVpZ25UaWNrZXRJRCEnLAogICAgICAgICk7CgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoICEkU2VsZi0+e0ZEQk9iamVjdH0gfHwgISRTZWxmLT57REJPYmplY3R9ICkgewogICAgICAgICRTZWxmLT57REJPYmplY3R9ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwogICAgICAgICRTZWxmLT57RkRCT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpEQi0+bmV3KAogICAgICAgICAgICAkUGFyYW17Rm9yZWlnbkRCfS0+JSosCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRQYXJhbXtBcnRpY2xlSUR9ICkgewoKICAgICAgICAjIGFydGljbGVfZmxhZwogICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntGREJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgID0+ICdTRUxFQ1QgY3JlYXRlX2J5IEZST00gYXJ0aWNsZV9mbGFnIFdIRVJFIGFydGljbGVfaWQgPSA/IEFORCBhcnRpY2xlX2tleSA9ID8gQU5EIGFydGljbGVfdmFsdWUgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Rm9yZWlnbkFydGljbGVJRH0sIFwnU2VlbicsIFwxIF0sCiAgICAgICAgKTsKCiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntGREJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBhcnRpY2xlX2ZsYWcgKGFydGljbGVfaWQsIGFydGljbGVfa2V5LCBhcnRpY2xlX3ZhbHVlLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5KScgLgogICAgICAgICAgICAgICAgICAgICdWQUxVRVMgKD8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtBcnRpY2xlSUR9LCBcJ1NlZW4nLCBcMSwgXCRSb3dbMF0gXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgYXJ0aWNsZV9oaXN0b3J5CiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+e0ZEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIG5hbWUsIGhpc3RvcnlfdHlwZV9pZCwgdHlwZV9pZCwgcXVldWVfaWQsIG93bmVyX2lkLCBwcmlvcml0eV9pZCwgc3RhdGVfaWQsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkgJyAuCiAgICAgICAgICAgICAgICAnRlJPTSB0aWNrZXRfaGlzdG9yeSBXSEVSRSBhcnRpY2xlX2lkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0ZvcmVpZ25BcnRpY2xlSUR9IF0sCiAgICAgICAgKTsKCiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntGREJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICAgICAgU1FMID0+CiAgICAgICAgICAgICAgICAgICAgJ0lOU0VSVCBJTlRPIHRpY2tldF9oaXN0b3J5ICh0aWNrZXRfaWQsIGFydGljbGVfaWQsIG5hbWUsIGhpc3RvcnlfdHlwZV9pZCwgdHlwZV9pZCwgcXVldWVfaWQsIG93bmVyX2lkLCBwcmlvcml0eV9pZCwgc3RhdGVfaWQsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpJwogICAgICAgICAgICAgICAgICAgIC4KICAgICAgICAgICAgICAgICAgICAnVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KScsCiAgICAgICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtUaWNrZXRJRH0sIFwkUGFyYW17QXJ0aWNsZUlEfSwgKCBtYXAgeyBcJF8gfSBAUm93ICkgXSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgdGlja2V0X2ZsYWcKICAgIHJldHVybiBpZiAhJFNlbGYtPntGREJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJ1NFTEVDVCBjcmVhdGVfYnkgRlJPTSB0aWNrZXRfZmxhZyBXSEVSRSB0aWNrZXRfaWQgPSA/IEFORCB0aWNrZXRfa2V5ID0gPyBBTkQgdGlja2V0X3ZhbHVlID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Rm9yZWlnblRpY2tldElEfSwgXCdTZWVuJywgXDEgXSwKICAgICk7CgogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntGREJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gdGlja2V0X2ZsYWcgKHRpY2tldF9pZCwgdGlja2V0X2tleSwgdGlja2V0X3ZhbHVlLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5KScgLgogICAgICAgICAgICAgICAgJ1ZBTFVFUyAoPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VGlja2V0SUR9LCBcJ1NlZW4nLCBcMSwgXCRSb3dbMF0gXSwKICAgICAgICApOwogICAgfQoKICAgICMgdGlja2V0X2hpc3RvcnkKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIHRpY2tldF9oaXN0b3J5IFdIRVJFIHRpY2tldF9pZCA9ID8gQU5EIChhcnRpY2xlX2lkIElTIE5VTEwgT1IgYXJ0aWNsZV9pZCA9IDApJywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtUaWNrZXRJRH0gXSwKICAgICk7CgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlRpY2tldCcpLT5IaXN0b3J5QWRkKAogICAgICAgIE5hbWUgICAgICAgICA9PiAiXCVcJUltcG9ydGVkIFRpY2tldCAtIExlZ2FjeSBUaWNrZXRJRDogJFBhcmFte0ZvcmVpZ25UaWNrZXRJRH0iLAogICAgICAgIEhpc3RvcnlUeXBlICA9PiAnTWlzYycsCiAgICAgICAgVGlja2V0SUQgICAgID0+ICRQYXJhbXtUaWNrZXRJRH0sCiAgICAgICAgQ3JlYXRlVXNlcklEID0+IDEsCiAgICApOwoKICAgIHJldHVybiBpZiAhJFNlbGYtPntGREJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIG5hbWUsIGhpc3RvcnlfdHlwZV9pZCwgdHlwZV9pZCwgcXVldWVfaWQsIG93bmVyX2lkLCBwcmlvcml0eV9pZCwgc3RhdGVfaWQsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkgJyAuCiAgICAgICAgICAgICdGUk9NIHRpY2tldF9oaXN0b3J5IFdIRVJFIHRpY2tldF9pZCA9ID8gQU5EIChhcnRpY2xlX2lkIElTIE5VTEwgT1IgYXJ0aWNsZV9pZCA9IDApJywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtGb3JlaWduVGlja2V0SUR9IF0sCiAgICApOwoKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57RkRCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICBTUUwgPT4KICAgICAgICAgICAgICAgICdJTlNFUlQgSU5UTyB0aWNrZXRfaGlzdG9yeSAodGlja2V0X2lkLCBuYW1lLCBoaXN0b3J5X3R5cGVfaWQsIHR5cGVfaWQsIHF1ZXVlX2lkLCBvd25lcl9pZCwgcHJpb3JpdHlfaWQsIHN0YXRlX2lkLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KScKICAgICAgICAgICAgICAgIC4KICAgICAgICAgICAgICAgICdWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8sID8pJywKICAgICAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VGlja2V0SUR9LCAoIG1hcCB7IFwkXyB9IEBSb3cgKSBdLAogICAgICAgICk7CiAgICB9CgogICAgIyBsaW5rX3JlbGF0aW9uCiAgICBteSAkTGlua09iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Jyk7CiAgICBteSAkRm9yZWlnblRpY2tldE9iamVjdElEOwoKICAgIG15ICVGb3JlaWduTGlua09iamVjdHM7CiAgICBteSAlTE9iamVjdElEczsKCiAgICByZXR1cm4gaWYgISRTZWxmLT57RkRCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCxuYW1lIEZST00gbGlua19vYmplY3QgIiwKICAgICAgICBCaW5kID0+IFtdLAogICAgKTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57RkRCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRGb3JlaWduTGlua09iamVjdHN7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICAgICAgJExPYmplY3RJRHN7ICRSb3dbMV0gfSA9ICRMaW5rT2JqZWN0LT5PYmplY3RMb29rdXAoCiAgICAgICAgICAgIE5hbWUgPT4gJFJvd1sxXSwKICAgICAgICApOwoKICAgICAgICBpZiAoICRSb3dbMV0gZXEgJ1RpY2tldCcgKSB7CiAgICAgICAgICAgICRGb3JlaWduVGlja2V0T2JqZWN0SUQgPSAkUm93WzBdOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlRm9yZWlnbkxpbmtUeXBlczsKICAgIG15ICVMVHlwZUlEczsKCiAgICByZXR1cm4gaWYgISRTZWxmLT57RkRCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICJTRUxFQ1QgaWQsbmFtZSBGUk9NIGxpbmtfdHlwZSAiLAogICAgICAgIEJpbmQgPT4gW10sCiAgICApOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntGREJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEZvcmVpZ25MaW5rVHlwZXN7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICAgICAgJExUeXBlSURzeyAkUm93WzFdIH0gPSAkTGlua09iamVjdC0+VHlwZUxvb2t1cCgKICAgICAgICAgICAgTmFtZSAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJURpcmVjdGlvbiA9ICgKICAgICAgICBzb3VyY2UgPT4gJ3RhcmdldCcsCiAgICAgICAgdGFyZ2V0ID0+ICdzb3VyY2UnLAogICAgKTsKCiAgICBmb3IgbXkgJEtleSAoIGtleXMgJURpcmVjdGlvbiApIHsKCiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+e0ZEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAiU0VMRUNUICRLZXkiLiJfb2JqZWN0X2lkLCAkS2V5Ii4iX2tleSwgdHlwZV9pZCwgc3RhdGVfaWQgRlJPTSBsaW5rX3JlbGF0aW9uICIgLgogICAgICAgICAgICAgICAgIldIRVJFICREaXJlY3Rpb257JEtleX1fb2JqZWN0X2lkID0gPyBBTkQgJERpcmVjdGlvbnskS2V5fV9rZXkgPSA/IiwKICAgICAgICAgICAgQmluZCA9PiBbIFwkRm9yZWlnblRpY2tldE9iamVjdElELCBcJFBhcmFte0ZvcmVpZ25UaWNrZXRJRH0gXSwKICAgICAgICApOwoKICAgICAgICBMSU5LOgogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57RkRCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICAgICAgJFJvd1swXSA9ICRMT2JqZWN0SURzeyAkRm9yZWlnbkxpbmtPYmplY3RzeyAkUm93WzBdIH0gfTsKICAgICAgICAgICAgJFJvd1syXSA9ICRMVHlwZUlEc3sgJEZvcmVpZ25MaW5rVHlwZXN7ICRSb3dbMl0gfSB9OwoKICAgICAgICAgICAgIyBkZWFsIHdpdGggb3RoZXIgaW1wb3J0ZWQgdGlja2V0cwogICAgICAgICAgICBpZiAoICRSb3dbMF0gPT0gJExPYmplY3RJRHN7VGlja2V0fSApIHsKICAgICAgICAgICAgICAgIG5leHQgTElOSyBpZiAkUm93WzFdID4gJFBhcmFte0ZvcmVpZ25UaWNrZXRJRH07CgogICAgICAgICAgICAgICAgJFJvd1sxXSA9IGV4aXN0cyAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259eyAkUm93WzFdIH0gPyAkU2VsZi0+e1RpY2tldElEUmVsYXRpb259eyAkUm93WzFdIH0gOiAkUm93WzFdOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PgogICAgICAgICAgICAgICAgICAgICJJTlNFUlQgSU5UTyBsaW5rX3JlbGF0aW9uICgkRGlyZWN0aW9ueyRLZXl9X29iamVjdF9pZCwgJERpcmVjdGlvbnskS2V5fV9rZXksICRLZXlcX29iamVjdF9pZCwgJEtleVxfa2V5LCB0eXBlX2lkLCBzdGF0ZV9pZCwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSkgIiAuCiAgICAgICAgICAgICAgICAgICAgIlZBTFVFUyAoPywgPywgPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8pIiwKICAgICAgICAgICAgICAgIEJpbmQgPT4gWyBcJExPYmplY3RJRHN7VGlja2V0fSwgXCRQYXJhbXtUaWNrZXRJRH0sICggbWFwIHsgXCRfIH0gQFJvdyApLCBcMSBdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIHRpY2tldF93YXRj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