@hestia-earth/ui-components 0.27.2 → 0.27.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/bibliographies/bibliographies-search-confirm/bibliographies-search-confirm.component.mjs +2 -2
- package/esm2022/engine/engine-requirements-form/engine-requirements-form.component.mjs +2 -2
- package/esm2022/files/files-form-editable/files-form-editable.component.mjs +4 -4
- package/esm2022/search/search.service.mjs +19 -13
- package/fesm2022/hestia-earth-ui-components.mjs +23 -17
- package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
- package/package.json +1 -1
- package/search/search.service.d.ts +5 -2
|
@@ -121,7 +121,7 @@ export class FilesFormEditableComponent {
|
|
|
121
121
|
this.formatNewProperty = ({ name }) => name;
|
|
122
122
|
this.suggestExistingNode = (type, term, uniqueKey = '@id') => term.length < MIN_TYPEAHEAD_LENGTH
|
|
123
123
|
? of([])
|
|
124
|
-
: this.searchService.suggest(term, type, [], {
|
|
124
|
+
: this.searchService.suggest$(term, type, [], {
|
|
125
125
|
bool: {
|
|
126
126
|
must: [matchType(type)],
|
|
127
127
|
should: [
|
|
@@ -151,10 +151,10 @@ export class FilesFormEditableComponent {
|
|
|
151
151
|
[NodeType.Site]: this.suggestNode(NodeType.Site),
|
|
152
152
|
[NodeType.Source]: this.suggestNode(NodeType.Source, (term, { key }) => term.length < MIN_TYPEAHEAD_LENGTH
|
|
153
153
|
? of([])
|
|
154
|
-
: this.searchService.suggestSource(term, 5, [`bibliography.${key}`], [`bibliography.${key}`])),
|
|
154
|
+
: this.searchService.suggestSource$(term, 5, [`bibliography.${key}`], [`bibliography.${key}`])),
|
|
155
155
|
[NodeType.Term]: this.suggestNode(NodeType.Term, (term, { suggestions }) => term.length < MIN_TYPEAHEAD_LENGTH
|
|
156
156
|
? of([])
|
|
157
|
-
: this.searchService.suggest(term, NodeType.Term, suggestions?.queries || [], null, 5, this.suggestTermFields))
|
|
157
|
+
: this.searchService.suggest$(term, NodeType.Term, suggestions?.queries || [], null, 5, this.suggestTermFields))
|
|
158
158
|
};
|
|
159
159
|
this.propertySuggest = ({ fullKey, suggestions }) => (text$) => text$.pipe(debounceTime(suggestions?.type === defaultSuggestionType ? 0 : 300), distinctUntilChanged(), mergeMap(term => {
|
|
160
160
|
const property = findProperty(this.properties, fullKey);
|
|
@@ -532,4 +532,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
532
532
|
}], showSuggestedDefaultProperties: [{
|
|
533
533
|
type: Input
|
|
534
534
|
}] } });
|
|
535
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZm9ybS1lZGl0YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZmlsZXMvZmlsZXMtZm9ybS1lZGl0YWJsZS9maWxlcy1mb3JtLWVkaXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9maWxlcy9maWxlcy1mb3JtLWVkaXRhYmxlL2ZpbGVzLWZvcm0tZWRpdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztBQUM3QixPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxFQUFzQixVQUFVLEVBQUUsUUFBUSxFQUFrQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hILE9BQU8sRUFBYyxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLElBQUksVUFBVSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDOUUsT0FBTyxF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QURsQixLQUFLO2dCQU1DLGNBQWM7c0JBRHBCLEtBQUs7Z0JBT0MsOEJBQThCO3NCQURwQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBFbGVtZW50UmVmLCBvdXRwdXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBtZXJnZU1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLmdldCc7XG5pbXBvcnQgc2V0IGZyb20gJ2xvZGFzaC5zZXQnO1xuaW1wb3J0IHsgSlNPTiBhcyBIZXN0aWFKc29uLCBTY2hlbWFUeXBlLCBOb2RlVHlwZSwgQmlibGlvZ3JhcGh5LCBTb3VyY2UsIFByb3BlcnR5IH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgZGVmaW5pdGlvbiwgbG9hZFNjaGVtYXMgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2pzb24tc2NoZW1hJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCB7IEZhSWNvbkNvbXBvbmVudCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IGZhSWRCYWRnZSBhcyBmYXJJZEJhZGdlIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtcmVndWxhci1zdmctaWNvbnMnO1xuaW1wb3J0IHtcbiAgZmFBbmdsZURvd24sXG4gIGZhQW5nbGVSaWdodCxcbiAgZmFDYWxjdWxhdG9yLFxuICBmYUNoZWNrLFxuICBmYUNsb25lLFxuICBmYUNvbW1lbnRzLFxuICBmYUVkaXQsXG4gIGZhRXhjbGFtYXRpb25UcmlhbmdsZSxcbiAgZmFFeHRlcm5hbExpbmtBbHQsXG4gIGZhTG9uZ0Fycm93QWx0RG93bixcbiAgZmFMb25nQXJyb3dBbHRVcCxcbiAgZmFNYXBNYXJrZWRBbHQsXG4gIGZhUGx1cyxcbiAgZmFQbHVzQ2lyY2xlLFxuICBmYVNlYXJjaCxcbiAgZmFTcGlubmVyLFxuICBmYVRpbWVzXG59IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5cbmltcG9ydCB7XG4gIElFcnJvclByb3BlcnR5LFxuICBJTm9kZVByb3BlcnR5LFxuICBmb3JtYXRQcm9wZXJ0eUVycm9yLFxuICBwcm9wZXJ0eUVycm9yLFxuICBoYXNFcnJvcixcbiAgaGFzV2FybmluZyxcbiAgc3VnZ2VzdGlvblR5cGUsXG4gIGRlZmF1bHRTdWdnZXN0aW9uVHlwZSxcbiAgcmVjdXJzaXZlUHJvcGVydGllcyxcbiAgdHlwZVRvTmV3UHJvcGVydHksXG4gIHByb3BlcnR5SWQsXG4gIGlzQWRkUHJvcGVydHlFbmFibGVkLFxuICBub2RlQXZhaWxhYmxlUHJvcGVydGllcyxcbiAgc29ydFByb3BlcnRpZXMsXG4gIGdyb3VwQ2hhbmdlZCxcbiAgcGFyZW50UHJvcGVydHksXG4gIHNpYmxpbmdQcm9wZXJ0eSxcbiAgdXBkYXRlUHJvcGVydGllcyxcbiAgcmVmcmVzaFByb3BlcnR5S2V5cyxcbiAga2V5VG9EYXRhUGF0aCxcbiAgZmluZFByb3BlcnR5LFxuICBjYWxjdWxhdGVDeWNsZUR1cmF0aW9uRW5hYmxlZCxcbiAgY2FsY3VsYXRlQ3ljbGVEdXJhdGlvbixcbiAgY2FsY3VsYXRlQ3ljbGVTdGFydERhdGVFbmFibGVkLFxuICBjYWxjdWxhdGVDeWNsZVN0YXJ0RGF0ZSxcbiAgcGFyc2VOZXdWYWx1ZSxcbiAgZm9ybWF0dGVyLFxuICBJTmV3UHJvcGVydHlcbn0gZnJvbSAnLi4vZmlsZXMtZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBlcnJvckhhc0Vycm9yLCBlcnJvckhhc1dhcm5pbmcsIGZpbHRlckVycm9yLCBmb3JtYXRFcnJvciB9IGZyb20gJy4uL2ZpbGVzLWVycm9yLm1vZGVsJztcbmltcG9ydCB7IElWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi8uLi9zY2hlbWEvc2NoZW1hLXZhbGlkYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgSGVVc2Vyc1NlcnZpY2UgfSBmcm9tICcuLi8uLi91c2Vycy91c2Vycy5zZXJ2aWNlJztcbmltcG9ydCB7IEhlU2VhcmNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlYXJjaC9zZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBtYXRjaFR5cGUsIG1hdGNoUGhyYXNlUXVlcnksIG1hdGNoUGhyYXNlUHJlZml4UXVlcnksIG1hdGNoQm9vbFByZWZpeFF1ZXJ5IH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlYXJjaC5tb2RlbCc7XG5pbXBvcnQgeyBzYWZlSlNPTlBhcnNlLCBjb3B5T2JqZWN0LCB0eXBlYWhlYWRGb2N1cyB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5pbXBvcnQgeyBQbHVyYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL3BsdXJhbGl6ZS5waXBlJztcbmltcG9ydCB7IEFwcGx5UHVyZVBpcGUgfSBmcm9tICcuLi8uLi9jb21tb24vYXBwbHktcHVyZS5waXBlJztcbmltcG9ydCB7IFVuaXRDb252ZXJ0ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vdW5pdC1jb252ZXJ0ZXIvdW5pdC1jb252ZXJ0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNpdGVzTWFwc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NpdGVzL3NpdGVzLW1hcHMvc2l0ZXMtbWFwcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFnc0lucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vY29tbW9uL3RhZ3MtaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTm9kZVJlY29tbWVuZGF0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1yZWNvbW1lbmRhdGlvbnMvbm9kZS1yZWNvbW1lbmRhdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7IFBvcG92ZXJDb25maXJtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL3BvcG92ZXItY29uZmlybS9wb3BvdmVyLWNvbmZpcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFNjaGVtYVZlcnNpb25MaW5rQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL3NjaGVtYS12ZXJzaW9uLWxpbmsvc2NoZW1hLXZlcnNpb24tbGluay5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmluZE9uY2VEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9jb21tb24vYmluZC1vbmNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTY2hlbWFJbmZvQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2NoZW1hL3NjaGVtYS1pbmZvL3NjaGVtYS1pbmZvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ2JUb29sdGlwLCBOZ2JUeXBlYWhlYWQsIE5nYlBvcG92ZXIsIE5nYkhpZ2hsaWdodCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IEJpYmxpb2dyYXBoaWVzU2VhcmNoQ29uZmlybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2JpYmxpb2dyYXBoaWVzL2JpYmxpb2dyYXBoaWVzLXNlYXJjaC1jb25maXJtL2JpYmxpb2dyYXBoaWVzLXNlYXJjaC1jb25maXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXBzRHJhd2luZ0NvbmZpcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vbWFwcy1kcmF3aW5nLWNvbmZpcm0vbWFwcy1kcmF3aW5nLWNvbmZpcm0uY29tcG9uZW50JztcbmltcG9ydCB7IE5vZGVJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLWljb24vbm9kZS1pY29uLmNvbXBvbmVudCc7XG5cbmNvbnN0IE1JTl9UWVBFQUhFQURfTEVOR1RIID0gMjtcbmNvbnN0IHBvcHVsYXRlVGVybUZpZWxkcyA9IFsndGVybVR5cGUnLCAndW5pdHMnXTtcbmNvbnN0IHBvcHVsYXRlVGVybURlZmF1bHRQcm9wZXJ0aWVzID0gW1xuICAnZGVmYXVsdFByb3BlcnRpZXMudGVybS5uYW1lJyxcbiAgJ2RlZmF1bHRQcm9wZXJ0aWVzLnRlcm0udW5pdHMnLFxuICAnZGVmYXVsdFByb3BlcnRpZXMudmFsdWUnXG5dO1xuXG5jb25zdCBmb3JtYXRQcm9wZXJ0eSA9IChwcm9wOiBQcm9wZXJ0eSkgPT4gKHtcbiAgJ0B0eXBlJzogU2NoZW1hVHlwZS5Qcm9wZXJ0eSxcbiAgLi4ucHJvcCxcbiAgdGVybToge1xuICAgICdAdHlwZSc6IE5vZGVUeXBlLlRlcm0sXG4gICAgLi4ucHJvcC50ZXJtXG4gIH1cbn0pO1xuXG5jb25zdCBmb3JtYXRTdWdnZXN0aW9uID0gKHsgZGVmYXVsdFByb3BlcnRpZXMsIC4uLm5vZGUgfTogYW55KSA9PiAoe1xuICAuLi5ub2RlLFxuICAuLi4oZGVmYXVsdFByb3BlcnRpZXM/Lmxlbmd0aCA/IHsgZGVmYXVsdFByb3BlcnRpZXM6IGRlZmF1bHRQcm9wZXJ0aWVzLm1hcChmb3JtYXRQcm9wZXJ0eSkgfSA6IHt9KVxufSk7XG5cbmNvbnN0IGZvcm1hdExpbmtOb2Rlc1ByZWZpeCA9ICdMaW5rIHdpdGgnO1xuXG4vLyBwYXRjaCBlcnJvciB3aGVuIGxpbmsgaXMgbm90IHdvcmtpbmcgY29ycmVjdGx5XG5jb25zdCBjbGVhbk5ld1ZhbHVlID0gdmFsdWUgPT5cbiAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5pZFxuICAgID8geyAuLi52YWx1ZSwgaWQ6IGNsZWFuTmV3VmFsdWUodmFsdWUuaWQpIH1cbiAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgID8gdmFsdWUuc3RhcnRzV2l0aChmb3JtYXRMaW5rTm9kZXNQcmVmaXgpXG4gICAgICAgID8gdmFsdWUuc3BsaXQoJzonKVsxXS50cmltKClcbiAgICAgICAgOiB2YWx1ZVxuICAgICAgOiB2YWx1ZTtcblxuY29uc3QgZm9ybWF0TGlua05vZGVzU3VnZ2VzdGlvbnMgPSAobm9kZU1hcDogeyBbdHlwZSBpbiBOb2RlVHlwZV0/OiBzdHJpbmdbXSB9LCB0eXBlOiBOb2RlVHlwZSkgPT5cbiAgKG5vZGVNYXBbdHlwZV0gfHwgW10pLm1hcChpZCA9PiAoeyB0eXBlLCBpZCwgbmFtZTogYCR7Zm9ybWF0TGlua05vZGVzUHJlZml4fSAke3R5cGV9OiAke2lkfWAgfSkpO1xuXG50eXBlIHN1Z2dlc3RGdW5jID0gKHRlcm06IHN0cmluZywgcHJvcGVydHk6IElOb2RlUHJvcGVydHkpID0+IE9ic2VydmFibGU8YW55W10+O1xuXG5jb25zdCBpbnNlcnRQcm9wZXJ0eSA9IChwcm9wZXJ0aWVzOiBJTm9kZVByb3BlcnR5W10sIGtleTogc3RyaW5nLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4ge1xuICBjb25zdCBleGlzdGluZ1Byb3BlcnR5SW5kZXggPSBwcm9wZXJ0aWVzLmZpbmRJbmRleCh2ID0+IHYuZnVsbEtleSA9PT0ga2V5KTtcbiAgZXhpc3RpbmdQcm9wZXJ0eUluZGV4ID49IDAgPyAocHJvcGVydGllc1tleGlzdGluZ1Byb3BlcnR5SW5kZXhdID0gcHJvcGVydHkpIDogcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgcHJvcGVydGllcy5zb3J0KHNvcnRQcm9wZXJ0aWVzKTtcbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1maWxlcy1mb3JtLWVkaXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGVzLWZvcm0tZWRpdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWxlcy1mb3JtLWVkaXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGYUljb25Db21wb25lbnQsXG4gICAgTm9kZUljb25Db21wb25lbnQsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBNYXBzRHJhd2luZ0NvbmZpcm1Db21wb25lbnQsXG4gICAgQmlibGlvZ3JhcGhpZXNTZWFyY2hDb25maXJtQ29tcG9uZW50LFxuICAgIE5nYlRvb2x0aXAsXG4gICAgU2NoZW1hSW5mb0NvbXBvbmVudCxcbiAgICBCaW5kT25jZURpcmVjdGl2ZSxcbiAgICBTY2hlbWFWZXJzaW9uTGlua0NvbXBvbmVudCxcbiAgICBQb3BvdmVyQ29uZmlybUNvbXBvbmVudCxcbiAgICBOb2RlUmVjb21tZW5kYXRpb25zQ29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5nYlR5cGVhaGVhZCxcbiAgICBUYWdzSW5wdXREaXJlY3RpdmUsXG4gICAgTmdDbGFzcyxcbiAgICBOZ2JQb3BvdmVyLFxuICAgIFNpdGVzTWFwc0NvbXBvbmVudCxcbiAgICBOZ2JIaWdobGlnaHQsXG4gICAgVW5pdENvbnZlcnRlckNvbXBvbmVudCxcbiAgICBBcHBseVB1cmVQaXBlLFxuICAgIFBsdXJhbGl6ZVBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlc0Zvcm1FZGl0YWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyByZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgc2VhcmNoU2VydmljZSA9IGluamVjdChIZVNlYXJjaFNlcnZpY2UpO1xuICBwcml2YXRlIHVzZXJzU2VydmljZSA9IGluamVjdChIZVVzZXJzU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhRXh0ZXJuYWxMaW5rQWx0ID0gZmFFeHRlcm5hbExpbmtBbHQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYVRpbWVzID0gZmFUaW1lcztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhQW5nbGVEb3duID0gZmFBbmdsZURvd247XG4gIHByb3RlY3RlZCByZWFkb25seSBmYUFuZ2xlUmlnaHQgPSBmYUFuZ2xlUmlnaHQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYUNsb25lID0gZmFDbG9uZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhTG9uZ0Fycm93QWx0VXAgPSBmYUxvbmdBcnJvd0FsdFVwO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFMb25nQXJyb3dBbHREb3duID0gZmFMb25nQXJyb3dBbHREb3duO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFQbHVzQ2lyY2xlID0gZmFQbHVzQ2lyY2xlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFFeGNsYW1hdGlvblRyaWFuZ2xlID0gZmFFeGNsYW1hdGlvblRyaWFuZ2xlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFQbHVzID0gZmFQbHVzO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFFZGl0ID0gZmFFZGl0O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFDaGVjayA9IGZhQ2hlY2s7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYVNwaW5uZXIgPSBmYVNwaW5uZXI7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYUNvbW1lbnRzID0gZmFDb21tZW50cztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhTWFwTWFya2VkQWx0ID0gZmFNYXBNYXJrZWRBbHQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYVNlYXJjaCA9IGZhU2VhcmNoO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFDYWxjdWxhdG9yID0gZmFDYWxjdWxhdG9yO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFySWRCYWRnZSA9IGZhcklkQmFkZ2U7XG5cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBzY2hlbWFzID0gbG9hZFNjaGVtYXMoKTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBlcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbm9kZT86IEhlc3RpYUpzb248U2NoZW1hVHlwZT47XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub2RlTWFwOiB7IFt0eXBlIGluIE5vZGVUeXBlXT86IHN0cmluZ1tdIH0gPSB7fTtcbiAgQElucHV0KClcbiAgcHVibGljIGVycm9yTW9kZSA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGVlcEVkaXRhYmxlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENhbiBlZGl0IGVycm9ycy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBlcnJvcnNFZGl0YWJsZSA9IGZhbHNlO1xuICAvKipcbiAgICogV2hlbiBzZWxlY3RpbmcgdGVybXMsIHdpbGwgc2hvdyBkZWZhdWx0IHByb3BlcnRpZXMgb3Igbm90LlxuICAgKiBTaG91bGQgYmUgYGZhbHNlYCB3aGVuIHVzaW5nIHNjaGVtYSB2YWxpZGF0aW9uLCBhcyBvbmx5IHRoZSBgbmFtZWAgd291bGQgYmUgYWRkZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1N1Z2dlc3RlZERlZmF1bHRQcm9wZXJ0aWVzID0gdHJ1ZTtcblxuICBwcm90ZWN0ZWQgbm9kZUNoYW5nZWQgPSBvdXRwdXQ8eyBrZXk6IHN0cmluZzsgdmFsdWU6IGFueSB9PigpO1xuICBwcm90ZWN0ZWQgbm9kZUVyb3JyUmVzb2x2ZWQgPSBvdXRwdXQ8bnVtYmVyPigpO1xuICBwcm90ZWN0ZWQgbm9kZUVycm9yQWRkZWQgPSBvdXRwdXQ8SVZhbGlkYXRpb25FcnJvcj4oKTtcblxuICBwdWJsaWMgTm9kZVR5cGUgPSBOb2RlVHlwZTtcbiAgcHVibGljIFNjaGVtYVR5cGUgPSBTY2hlbWFUeXBlO1xuICBwdWJsaWMgaXNPcGVuID0gdHJ1ZTtcbiAgcHVibGljIG1hcFZpc2libGUgPSBmYWxzZTtcbiAgcHVibGljIGZvcm1hdFByb3BlcnR5RXJyb3IgPSBmb3JtYXRQcm9wZXJ0eUVycm9yO1xuICBwdWJsaWMgdHlwZWFoZWFkRm9jdXMgPSB0eXBlYWhlYWRGb2N1cztcbiAgcHVibGljIG1hcERyYXdpbmdQcm9wZXJ0eT86IElOb2RlUHJvcGVydHk7XG4gIHB1YmxpYyBiaWJsaW9ncmFwaGllc1NlYXJjaFByb3BlcnR5PzogSU5vZGVQcm9wZXJ0eTtcbiAgcHVibGljIG5vZGVQcm9wZXJ0eT86IElOb2RlUHJvcGVydHk7XG4gIHB1YmxpYyBwcm9wZXJ0aWVzOiBJTm9kZVByb3BlcnR5W10gPSBbXTtcblxuICBwdWJsaWMgc3VnZ2VzdE5ld1Byb3BlcnR5ID1cbiAgICAoeyBmdWxsS2V5IH06IElOb2RlUHJvcGVydHkpID0+XG4gICAgKHRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz4pID0+XG4gICAgICB0ZXh0JC5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzd2l0Y2hNYXAodGVybSA9PiBvZih0aGlzLm5ld1Byb3BlcnRpZXMoZmluZFByb3BlcnR5KHRoaXMucHJvcGVydGllcywgZnVsbEtleSkgfHwgdGhpcy5ub2RlUHJvcGVydHksIHRlcm0pKSlcbiAgICAgICk7XG4gIHB1YmxpYyBmb3JtYXROZXdQcm9wZXJ0eSA9ICh7IG5hbWUgfTogSU5ld1Byb3BlcnR5KSA9PiBuYW1lO1xuXG4gIHByaXZhdGUgc3VnZ2VzdEV4aXN0aW5nTm9kZSA9ICh0eXBlOiBOb2RlVHlwZSwgdGVybTogc3RyaW5nLCB1bmlxdWVLZXkgPSAnQGlkJykgPT5cbiAgICB0ZXJtLmxlbmd0aCA8IE1JTl9UWVBFQUhFQURfTEVOR1RIXG4gICAgICA/IG9mKFtdKVxuICAgICAgOiB0aGlzLnNlYXJjaFNlcnZpY2Uuc3VnZ2VzdChcbiAgICAgICAgICB0ZXJtLFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgW10sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYm9vbDoge1xuICAgICAgICAgICAgICBtdXN0OiBbbWF0Y2hUeXBlKHR5cGUpXSxcbiAgICAgICAgICAgICAgc2hvdWxkOiBbXG4gICAgICAgICAgICAgICAgbWF0Y2hQaHJhc2VRdWVyeSh0ZXJtLCAxMDAsIHVuaXF1ZUtleSksXG4gICAgICAgICAgICAgICAgbWF0Y2hQaHJhc2VQcmVmaXhRdWVyeSh0ZXJtLCAyMCwgdW5pcXVlS2V5KSxcbiAgICAgICAgICAgICAgICBtYXRjaEJvb2xQcmVmaXhRdWVyeSh0ZXJtLCAxMCwgdW5pcXVlS2V5KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBtaW5pbXVtX3Nob3VsZF9tYXRjaDogMVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgMTAsXG4gICAgICAgICAgdGhpcy5zdWdnZXN0VGVybUZpZWxkc1xuICAgICAgICApO1xuXG4gIHByaXZhdGUgc3VnZ2VzdE5vZGUgPSAodHlwZTogTm9kZVR5cGUsIHN1Z2dlc3REZWZhdWx0Pzogc3VnZ2VzdEZ1bmMpID0+ICh0ZXJtOiBzdHJpbmcsIHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSA9PlxuICAgIChwcm9wZXJ0eS5zdWdnZXN0aW9ucz8uaXNVbmlxdWVLZXlcbiAgICAgID8gdGhpcy5zdWdnZXN0RXhpc3RpbmdOb2RlKHR5cGUsIHRlcm0sIHByb3BlcnR5LnN1Z2dlc3Rpb25zLmlzVW5pcXVlS2V5KVxuICAgICAgOiBwcm9wZXJ0eS5zdWdnZXN0aW9ucz8uaXNMaW5rTm9kZVxuICAgICAgICA/IG9mKGZvcm1hdExpbmtOb2Rlc1N1Z2dlc3Rpb25zKHRoaXMubm9kZU1hcCwgdHlwZSkpXG4gICAgICAgIDogc3VnZ2VzdERlZmF1bHRcbiAgICAgICAgICA/IHN1Z2dlc3REZWZhdWx0KHRlcm0sIHByb3BlcnR5KVxuICAgICAgICAgIDogb2YoW10pXG4gICAgKS5waXBlKG1hcCgocmVzOiBhbnkpID0+IHJlcy5tYXAoZm9ybWF0U3VnZ2VzdGlvbikpKTtcblxuICBwcml2YXRlIHN1Z2dlc3Rlcjoge1xuICAgIFt0eXBlIGluIHN1Z2dlc3Rpb25UeXBlXT86IHN1Z2dlc3RGdW5jO1xuICB9ID0ge1xuICAgIGRlZmF1bHQ6ICh0ZXJtLCBwcm9wZXJ0eSkgPT5cbiAgICAgIG9mKFxuICAgICAgICAocHJvcGVydHk/LnN1Z2dlc3Rpb25zPy52YWx1ZXMgfHwgW10pXG4gICAgICAgICAgLm1hcCh2ID0+IGAke3Z9YClcbiAgICAgICAgICAuZmlsdGVyKHYgPT4gdi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0udG9Mb3dlckNhc2UoKSkpXG4gICAgICAgICAgLm1hcChuYW1lID0+ICh7IG5hbWUgfSkpXG4gICAgICApLFxuICAgIFtOb2RlVHlwZS5BY3Rvcl06IHRoaXMuc3VnZ2VzdE5vZGUoTm9kZVR5cGUuQWN0b3IpLFxuICAgIFtOb2RlVHlwZS5DeWNsZV06IHRoaXMuc3VnZ2VzdE5vZGUoTm9kZVR5cGUuQ3ljbGUpLFxuICAgIFtOb2RlVHlwZS5JbXBhY3RBc3Nlc3NtZW50XTogdGhpcy5zdWdnZXN0Tm9kZShOb2RlVHlwZS5JbXBhY3RBc3Nlc3NtZW50KSxcbiAgICBbTm9kZVR5cGUuT3JnYW5pc2F0aW9uXTogdGhpcy5zdWdnZXN0Tm9kZShOb2RlVHlwZS5PcmdhbmlzYXRpb24pLFxuICAgIFtOb2RlVHlwZS5TaXRlXTogdGhpcy5zdWdnZXN0Tm9kZShOb2RlVHlwZS5TaXRlKSxcbiAgICBbTm9kZVR5cGUuU291cmNlXTogdGhpcy5zdWdnZXN0Tm9kZShOb2RlVHlwZS5Tb3VyY2UsICh0ZXJtLCB7IGtleSB9KSA9PlxuICAgICAgdGVybS5sZW5ndGggPCBNSU5fVFlQRUFIRUFEX0xFTkdUSFxuICAgICAgICA/IG9mKFtdKVxuICAgICAgICA6IHRoaXMuc2VhcmNoU2VydmljZS5zdWdnZXN0U291cmNlKHRlcm0sIDUsIFtgYmlibGlvZ3JhcGh5LiR7a2V5fWBdLCBbYGJpYmxpb2dyYXBoeS4ke2tleX1gXSlcbiAgICApLFxuICAgIFtOb2RlVHlwZS5UZXJtXTogdGhpcy5zdWdnZXN0Tm9kZShOb2RlVHlwZS5UZXJtLCAodGVybSwgeyBzdWdnZXN0aW9ucyB9KSA9PlxuICAgICAgdGVybS5sZW5ndGggPCBNSU5fVFlQRUFIRUFEX0xFTkdUSFxuICAgICAgICA/IG9mKFtdKVxuICAgICAgICA6IHRoaXMuc2VhcmNoU2VydmljZS5zdWdnZXN0KHRlcm0sIE5vZGVUeXBlLlRlcm0sIHN1Z2dlc3Rpb25zPy5xdWVyaWVzIHx8IFtdLCBudWxsLCA1LCB0aGlzLnN1Z2dlc3RUZXJtRmllbGRzKVxuICAgIClcbiAgfTtcbiAgcHVibGljIHByb3BlcnR5U3VnZ2VzdCA9XG4gICAgKHsgZnVsbEtleSwgc3VnZ2VzdGlvbnMgfTogSU5vZGVQcm9wZXJ0eSkgPT5cbiAgICAodGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPikgPT5cbiAgICAgIHRleHQkLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZShzdWdnZXN0aW9ucz8udHlwZSA9PT0gZGVmYXVsdFN1Z2dlc3Rpb25UeXBlID8gMCA6IDMwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIG1lcmdlTWFwKHRlcm0gPT4ge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gZmluZFByb3BlcnR5KHRoaXMucHJvcGVydGllcywgZnVsbEtleSk7XG4gICAgICAgICAgcmV0dXJuIHByb3BlcnR5Py5lZGl0YWJsZSAmJiBzdWdnZXN0aW9ucz8udHlwZSBpbiB0aGlzLnN1Z2dlc3RlclxuICAgICAgICAgICAgPyBvZih0ZXJtKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiAocHJvcGVydHkubG9hZGluZyA9IHRydWUpKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zdWdnZXN0ZXJbc3VnZ2VzdGlvbnM/LnR5cGVdISh0ZXJtLCBwcm9wZXJ0eSkpLFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiAocHJvcGVydHkubG9hZGluZyA9IGZhbHNlKSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBvZihbXSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHNjaGVtYVR5cGUgPSB0aGlzLm5vZGUhLnR5cGUgfHwgdGhpcy5ub2RlIVsnQHR5cGUnXTtcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLnNjaGVtYXM/LltzY2hlbWFUeXBlXSA/PyAoe30gYXMgZGVmaW5pdGlvbik7XG4gICAgY29uc3QgZXJyb3JzID0gdGhpcy5lcnJvcnMuZmlsdGVyKGZpbHRlckVycm9yKTtcbiAgICBjb25zdCBlcnJvciA9IHByb3BlcnR5RXJyb3IoZXJyb3JzKSgnJyk7XG4gICAgdGhpcy5ub2RlUHJvcGVydHkgPSB0aGlzLnNjaGVtYXNcbiAgICAgID8ge1xuICAgICAgICAgIGlkOiBwcm9wZXJ0eUlkKCksXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIHNjaGVtYVR5cGUsXG4gICAgICAgICAgZWRpdGFibGU6ICEhdGhpcy5ub2RlIS50eXBlLFxuICAgICAgICAgIGZ1bGxLZXk6ICcnLFxuICAgICAgICAgIGtleTogJycsXG4gICAgICAgICAgdmFsdWU6IHt9LFxuICAgICAgICAgIGVycm9yOiBmb3JtYXRFcnJvcihlcnJvciksXG4gICAgICAgICAgaGFzRXJyb3I6IGVycm9ySGFzRXJyb3IoZXJyb3IpLFxuICAgICAgICAgIGhhc1dhcm5pbmc6IGVycm9ySGFzV2FybmluZyhlcnJvciksXG4gICAgICAgICAgc3VnZ2VzdGlvbnM6IHt9LFxuICAgICAgICAgIG5ld1Byb3BlcnR5OiB7fSxcbiAgICAgICAgICBuZXdFcnJvcjogeyBsZXZlbDogJ3dhcm5pbmcnIH0sXG4gICAgICAgICAgcHJvcGVydGllczogW10sXG4gICAgICAgICAgYWRkUHJvcGVydHlFbmFibGVkOiBpc0FkZFByb3BlcnR5RW5hYmxlZCh0aGlzLm5vZGUhLCBzY2hlbWFUeXBlLCBzY2hlbWEpLFxuICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyKCcnKVxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZWN1cnNlciA9IHJlY3Vyc2l2ZVByb3BlcnRpZXModGhpcy5zY2hlbWFzISwgZXJyb3JzLCBzY2hlbWEsIHRoaXMuZGVlcEVkaXRhYmxlKTtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSByZWN1cnNlcih0aGlzLm5vZGUpO1xuICB9XG5cbiAgcHVibGljIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyLCBfdmFsdWU6IGFueSkge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5UHJvcGVydHkoX2luZGV4OiBudW1iZXIsIHsgaWQsIGZ1bGxLZXkgfTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIHJldHVybiBbZnVsbEtleSwgaWRdLmpvaW4oJ18nKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNBZGRvbnMocHJvcGVydHk6IElOb2RlUHJvcGVydHkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgcHJvcGVydHkgJiZcbiAgICAgICh0aGlzLmVuYWJsZUFkZEVycm9yKHByb3BlcnR5KSB8fFxuICAgICAgICBwcm9wZXJ0eS5lZGl0YWJsZSB8fFxuICAgICAgICB0aGlzLmFkZFByb3BlcnR5RW5hYmxlZChwcm9wZXJ0eSkgfHxcbiAgICAgICAgdGhpcy5pc1JlcXVpcmVkKHByb3BlcnR5KSB8fFxuICAgICAgICBwcm9wZXJ0eS5leHRlcm5hbFVybD8udXJsIHx8XG4gICAgICAgIHRoaXMubWFwRHJhd2luZ01vZGVzKHByb3BlcnR5KS5sZW5ndGggfHxcbiAgICAgICAgdGhpcy51bml0Q29udmVydGVyRW5hYmxlZChwcm9wZXJ0eSkpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1JlcXVpcmVkKHsgdmFsdWUsIGlzUmVxdWlyZWQgfTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIHJldHVybiBpc1JlcXVpcmVkICYmIGlzRW1wdHkodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgc3VnZ2VzdFRlcm1GaWVsZHMoKSB7XG4gICAgcmV0dXJuIFsuLi5wb3B1bGF0ZVRlcm1GaWVsZHMsIC4uLih0aGlzLnNob3dTdWdnZXN0ZWREZWZhdWx0UHJvcGVydGllcyA/IHBvcHVsYXRlVGVybURlZmF1bHRQcm9wZXJ0aWVzIDogW10pXTtcbiAgfVxuXG4gIC8vIC0tLSBFcnJvcnNcblxuICBwdWJsaWMgZW5hYmxlQWRkRXJyb3IocHJvcGVydHk6IElOb2RlUHJvcGVydHkpIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcnNFZGl0YWJsZSAmJiAhcHJvcGVydHkuaGFzRXJyb3IgJiYgIXByb3BlcnR5Lmhhc1dhcm5pbmc7XG4gIH1cblxuICBwdWJsaWMgYWRkRXJyb3IocHJvcGVydHk6IElOb2RlUHJvcGVydHksIHsgbWVzc2FnZSwgbGV2ZWwgfTogSUVycm9yUHJvcGVydHkpIHtcbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IHByb3BlcnR5LmZ1bGxLZXkuc3BsaXQoJy4nKTtcbiAgICBrZXlzLnBvcCgpO1xuICAgIGNvbnN0IGVycm9yOiBJVmFsaWRhdGlvbkVycm9yID0gcHJvcGVydHkuaXNBZGRlZFxuICAgICAgPyB7XG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBsZXZlbDogbGV2ZWwgfHwgJ2Vycm9yJyxcbiAgICAgICAgICBkYXRhUGF0aDoga2V5VG9EYXRhUGF0aChrZXlzLmpvaW4oJy4nKSksXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBtaXNzaW5nUHJvcGVydHk6IHByb3BlcnR5LmtleVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBsZXZlbDogbGV2ZWwgfHwgJ2Vycm9yJyxcbiAgICAgICAgICBkYXRhUGF0aDoga2V5VG9EYXRhUGF0aChwcm9wZXJ0eS5mdWxsS2V5KVxuICAgICAgICB9O1xuICAgIHByb3BlcnR5Lm5ld0Vycm9yID0geyBsZXZlbDogJ3dhcm5pbmcnIH07XG4gICAgcHJvcGVydHkuZXJyb3IgPSBlcnJvcjtcbiAgICBwcm9wZXJ0eS5oYXNFcnJvciA9IGVycm9ySGFzRXJyb3IoZXJyb3IpO1xuICAgIHByb3BlcnR5Lmhhc1dhcm5pbmcgPSBlcnJvckhhc1dhcm5pbmcoZXJyb3IpO1xuICAgIHRoaXMubm9kZUVycm9yQWRkZWQuZW1pdChlcnJvcik7XG4gIH1cblxuICBwdWJsaWMgZWRpdEVycm9yKHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSB7XG4gICAgcHJvcGVydHkubmV3RXJyb3IgPSBwcm9wZXJ0eS5lcnJvcjtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlRXJyb3IocHJvcGVydHk6IElOb2RlUHJvcGVydHkpIHtcbiAgICBjb25zdCBpbmRleCA9IHByb3BlcnR5LmVycm9yPy5pbmRleDtcbiAgICBwcm9wZXJ0eS5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICBwcm9wZXJ0eS5oYXNFcnJvciA9IGhhc0Vycm9yKHByb3BlcnR5LnByb3BlcnRpZXMpO1xuICAgIHByb3BlcnR5Lmhhc1dhcm5pbmcgPSBoYXNXYXJuaW5nKHByb3BlcnR5LnByb3BlcnRpZXMpO1xuICAgIHRoaXMubm9kZUVyb3JyUmVzb2x2ZWQuZW1pdChpbmRleCk7XG4gICAgcmV0dXJuIGdyb3VwQ2hhbmdlZCh0aGlzLnByb3BlcnRpZXMsIHByb3BlcnR5LmZ1bGxLZXkpO1xuICB9XG5cbiAgLy8gLS0tXG5cbiAgcHVibGljIGFkZFByb3BlcnR5RW5hYmxlZChwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIHJldHVybiAhdGhpcy5lcnJvcnNFZGl0YWJsZSAmJiBwcm9wZXJ0eS5hZGRQcm9wZXJ0eUVuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIG5ld1Byb3BlcnRpZXMocHJvcGVydHk6IElOb2RlUHJvcGVydHksIGZpZWxkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gbm9kZUF2YWlsYWJsZVByb3BlcnRpZXModGhpcy5ub2RlISwgcHJvcGVydHkpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKVxuICAgICAgLmZpbHRlcihwcm9wID0+IHByb3AudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWVsZC50b0xvd2VyQ2FzZSgpKSlcbiAgICAgIC5tYXAobmFtZSA9PiAoeyBuYW1lLCBwcm9wOiBwcm9wZXJ0aWVzW25hbWVdIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVByb3BlcnR5RGF0YShwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSwgZGF0YTogYW55LCBlZGl0YWJsZT86IGJvb2xlYW4sIHJlcGxhY2VQYXJlbnQgPSB0cnVlKSB7XG4gICAgY29uc3QgcGFyZW50ID0gcmVwbGFjZVBhcmVudCA/IHBhcmVudFByb3BlcnR5KHRoaXMucHJvcGVydGllcywgcHJvcGVydHkpIDogcHJvcGVydHk7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHJlY3Vyc2l2ZVByb3BlcnRpZXMoXG4gICAgICB0aGlzLnNjaGVtYXMhLFxuICAgICAgW10sXG4gICAgICB0aGlzLnNjaGVtYXMhW3RoaXMubm9kZSEudHlwZV0sXG4gICAgICB0aGlzLmRlZXBFZGl0YWJsZSxcbiAgICAgIHBhcmVudC5mdWxsS2V5XG4gICAgKShkYXRhKTtcbiAgICB1cGRhdGVQcm9wZXJ0aWVzKHsgcHJvcGVydGllcyB9LCBwcm9wID0+IHtcbiAgICAgIHByb3AuZWRpdGFibGUgPSB0eXBlb2YgZWRpdGFibGUgPT09ICd1bmRlZmluZWQnID8gcHJvcC5lZGl0YWJsZSA6IGVkaXRhYmxlO1xuICAgICAgcmV0dXJuIHByb3A7XG4gICAgfSk7XG4gICAgcGFyZW50LmVkaXRhYmxlID0gdHlwZW9mIGVkaXRhYmxlID09PSAndW5kZWZpbmVkJyA/IHBhcmVudC5lZGl0YWJsZSA6IGVkaXRhYmxlO1xuICAgIHBhcmVudC5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICBwYXJlbnQudmFsdWUgPSBkYXRhO1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5Q2hhbmdlZChkYXRhLCBwYXJlbnQpO1xuICB9XG5cbiAgcHVibGljIHN1Z2dlc3Rpb25TZWxlY3RlZCh7ICdAaWQnOiBfaWQsIG5hbWUsIHR5cGUsIGlkLCAuLi5kYXRhIH0sIHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSB7XG4gICAgcmV0dXJuIF9pZFxuICAgICAgPyAvLyBzdWdnZXN0aW9ucyBmcm9tIGV4aXN0aW5nIG5vZGVzXG4gICAgICAgIHRoaXMucmVwbGFjZVByb3BlcnR5RGF0YShwcm9wZXJ0eSwgeyAnQGlkJzogX2lkLCAnQHR5cGUnOiBwcm9wZXJ0eS5zdWdnZXN0aW9ucz8udHlwZSwgbmFtZSwgLi4uZGF0YSB9LCBmYWxzZSlcbiAgICAgIDogLy8gc3VnZ2VzdGlvbiBmcm9tIGxpbmtlZCBub2Rlc1xuICAgICAgICB0eXBlICYmIGlkXG4gICAgICAgID8gdGhpcy5yZXBsYWNlUHJvcGVydHlEYXRhKHByb3BlcnR5LCB7IHR5cGUsIGlkLCAuLi5kYXRhIH0sIHRydWUpXG4gICAgICAgIDogLy8gc3VnZ2VzdGlvbiBieSBuYW1lID0+IGVudW0gdmFsdWVzXG4gICAgICAgICAgdGhpcy5wcm9wZXJ0eUNoYW5nZWQobmFtZSwgcHJvcGVydHkpO1xuICB9XG5cbiAgcHVibGljIGFkZEFycmF5R3JvdXAoYXJyYXk6IElOb2RlUHJvcGVydHkpIHtcbiAgICBjb25zdCBwcm9wID0gdGhpcy5zY2hlbWFzIVthcnJheS5zY2hlbWFUeXBlXTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldCh0aGlzLm5vZGUsIGFycmF5LmZ1bGxLZXkpO1xuICAgIGNvbnN0IG5ld1Byb3BlcnR5ID0gdHlwZVRvTmV3UHJvcGVydHkoXG4gICAgICB0aGlzLnNjaGVtYXMhLFxuICAgICAgcHJvcCxcbiAgICAgIHByb3AsXG4gICAgICB2YWx1ZSxcbiAgICAgIGAke2FycmF5LmZ1bGxLZXl9WyR7YXJyYXkucHJvcGVydGllcy5sZW5ndGh9XWBcbiAgICApO1xuICAgIGFycmF5LnByb3BlcnRpZXMucHVzaChuZXdQcm9wZXJ0eSk7XG4gICAgdGhpcy5ub2RlQ2hhbmdlZC5lbWl0KHsga2V5OiBhcnJheS5mdWxsS2V5LCB2YWx1ZSB9KTtcbiAgICByZXR1cm4gZ3JvdXBDaGFuZ2VkKHRoaXMucHJvcGVydGllcywgYXJyYXkuZnVsbEtleSk7XG4gIH1cblxuICBwdWJsaWMgZHVwbGljYXRlQXJyYXlHcm91cChhcnJheTogSU5vZGVQcm9wZXJ0eSwgcHJvcGVydHk6IElOb2RlUHJvcGVydHkpIHtcbiAgICBjb25zdCBpbmRleCA9ICtwcm9wZXJ0eS5rZXk7XG4gICAgY29uc3QgbmV3UHJvcGVydHk6IElOb2RlUHJvcGVydHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHByb3BlcnR5KSk7XG4gICAgbmV3UHJvcGVydHkuaWQgPSBwcm9wZXJ0eUlkKCk7XG4gICAgY29uc3QgdmFsdWUgPSBbLi4uZ2V0KHRoaXMubm9kZSwgYXJyYXkuZnVsbEtleSldO1xuICAgIHZhbHVlLnNwbGljZShpbmRleCwgMCwgc2FmZUpTT05QYXJzZShuZXdQcm9wZXJ0eS52YWx1ZSkpO1xuICAgIGFycmF5LnByb3BlcnRpZXMuc3BsaWNlKGluZGV4LCAwLCBuZXdQcm9wZXJ0eSk7XG4gICAgLy8gbmVlZCB0byBjaGFuZ2Uga2V5IG9uIGV2ZXJ5IHByb3BlcnRpZXMgcmVjdXJzaXZlbHlcbiAgICByZWZyZXNoUHJvcGVydHlLZXlzKGFycmF5KTtcbiAgICB0aGlzLm5vZGVDaGFuZ2VkLmVtaXQoeyBrZXk6IGFycmF5LmZ1bGxLZXksIHZhbHVlIH0pO1xuICAgIHJldHVybiBncm91cENoYW5nZWQodGhpcy5wcm9wZXJ0aWVzLCBhcnJheS5mdWxsS2V5KTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVBcnJheUdyb3VwKGFycmF5OiBJTm9kZVByb3BlcnR5LCB7IGtleSB9OiBJTm9kZVByb3BlcnR5KSB7XG4gICAgY29uc3QgaW5kZXggPSAra2V5O1xuICAgIGNvbnN0IHZhbHVlID0gWy4uLmdldCh0aGlzLm5vZGUsIGFycmF5LmZ1bGxLZXkpXTtcbiAgICB2YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGFycmF5LnByb3BlcnRpZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAvLyBuZWVkIHRvIGNoYW5nZSBrZXkgb24gZXZlcnkgcHJvcGVydGllcyByZWN1cnNpdmVseVxuICAgIHJlZnJlc2hQcm9wZXJ0eUtleXMoYXJyYXkpO1xuICAgIHRoaXMubm9kZUNoYW5nZWQuZW1pdCh7IGtleTogYXJyYXkuZnVsbEtleSwgdmFsdWUgfSk7XG4gICAgLy8gaWYgbm8gbW9yZSB2YWx1ZXMsIHJlbW92ZSBwYXJlbnQgZ3JvdXAgZW50aXJlbHlcbiAgICByZXR1cm4gYXJyYXkucHJvcGVydGllcy5sZW5ndGggPyBudWxsIDogdGhpcy5wcm9wZXJ0eUNoYW5nZWQobnVsbCwgYXJyYXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlQXJyYXlHcm91cFRvUG9zaXRpb24oYXJyYXk6IElOb2RlUHJvcGVydHksIGN1cnJlbnRJbmRleDogbnVtYmVyLCBuZXdJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsdWUgPSBbLi4uZ2V0KHRoaXMubm9kZSwgYXJyYXkuZnVsbEtleSldO1xuICAgIG1vdmVJdGVtSW5BcnJheSh2YWx1ZSwgY3VycmVudEluZGV4LCBuZXdJbmRleCk7XG4gICAgbW92ZUl0ZW1JbkFycmF5KGFycmF5LnByb3BlcnRpZXMsIGN1cnJlbnRJbmRleCwgbmV3SW5kZXgpO1xuICAgIC8vIG5lZWQgdG8gY2hhbmdlIGtleSBvbiBldmVyeSBwcm9wZXJ0aWVzIHJlY3Vyc2l2ZWx5XG4gICAgcmVmcmVzaFByb3BlcnR5S2V5cyhhcnJheSk7XG4gICAgdGhpcy5ub2RlQ2hhbmdlZC5lbWl0KHsga2V5OiBhcnJheS5mdWxsS2V5LCB2YWx1ZSB9KTtcbiAgICByZXR1cm4gZ3JvdXBDaGFuZ2VkKHRoaXMucHJvcGVydGllcywgYXJyYXkuZnVsbEtleSk7XG4gIH1cblxuICBwdWJsaWMgbW92ZUFycmF5R3JvdXBVcChhcnJheTogSU5vZGVQcm9wZXJ0eSwgeyBrZXkgfTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IGluZGV4ID0gK2tleTtcbiAgICByZXR1cm4gdGhpcy5tb3ZlQXJyYXlHcm91cFRvUG9zaXRpb24oYXJyYXksIGluZGV4LCBpbmRleCAtIDEpO1xuICB9XG5cbiAgcHVibGljIG1vdmVBcnJheUdyb3VwRG93bihhcnJheTogSU5vZGVQcm9wZXJ0eSwgeyBrZXkgfTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IGluZGV4ID0gK2tleTtcbiAgICByZXR1cm4gdGhpcy5tb3ZlQXJyYXlHcm91cFRvUG9zaXRpb24oYXJyYXksIGluZGV4LCBpbmRleCArIDEpO1xuICB9XG5cbiAgcHVibGljIHByb3BlcnR5Q2hhbmdlZCh2YWx1ZTogYW55LCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIGdyb3VwQ2hhbmdlZCh0aGlzLnByb3BlcnRpZXMsIHByb3BlcnR5LmZ1bGxLZXksIHZhbHVlKTtcbiAgICBwcm9wZXJ0eS5hZGRQcm9wZXJ0eUVuYWJsZWQgPSBpc0FkZFByb3BlcnR5RW5hYmxlZChcbiAgICAgIHRoaXMubm9kZSEsXG4gICAgICBwcm9wZXJ0eS5zY2hlbWFUeXBlLFxuICAgICAgcHJvcGVydHkuc2NoZW1hISxcbiAgICAgIHByb3BlcnR5LmZ1bGxLZXlcbiAgICApO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcGVydHkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHByb3BlcnR5LmNoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gY2xlYW5OZXdWYWx1ZShwYXJzZU5ld1ZhbHVlKHByb3BlcnR5LnNjaGVtYSEsIHZhbHVlKSk7XG4gICAgLy8gdHJpZ2dlciByZWZyZXNoIG9mIG5vZGVcbiAgICBjb25zdCBub2RlID0gY29weU9iamVjdCh0aGlzLm5vZGUpO1xuICAgIHNldChub2RlLCBwcm9wZXJ0eS5mdWxsS2V5LCBuZXdWYWx1ZSk7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICAvLyB0cmlnZ2VyIGZvciBsaXN0ZW5lcnNcbiAgICB0aGlzLm5vZGVDaGFuZ2VkLmVtaXQoeyBrZXk6IHByb3BlcnR5LmZ1bGxLZXksIHZhbHVlOiBuZXdWYWx1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGVmYXVsdFByb3BlcnR5KHByb3BlcnR5OiBJTm9kZVByb3BlcnR5LCBrZXk6IHN0cmluZywgZGVmOiBkZWZpbml0aW9uKSB7XG4gICAgY29uc3Qgbm9kZSA9IHByb3BlcnR5LmtleSA/IGdldCh0aGlzLm5vZGUsIHByb3BlcnR5LmZ1bGxLZXkpIDogdGhpcy5ub2RlO1xuICAgIGNvbnN0IGZ1bGxLZXkgPSBwcm9wZXJ0eS5rZXkgPyBgJHtwcm9wZXJ0eS5mdWxsS2V5fS4ke2tleX1gIDoga2V5O1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBwcm9wZXJ0eS5rZXkgPyBwcm9wZXJ0eS5wcm9wZXJ0aWVzIDogdGhpcy5wcm9wZXJ0aWVzO1xuICAgIGNvbnN0IG5ld1Byb3BlcnR5ID0gdHlwZVRvTmV3UHJvcGVydHkodGhpcy5zY2hlbWFzISwgZGVmLCB0aGlzLnNjaGVtYXMhW3Byb3BlcnR5LnNjaGVtYVR5cGVdLCBub2RlLCBmdWxsS2V5KTtcbiAgICBpbnNlcnRQcm9wZXJ0eShwcm9wZXJ0aWVzLCBmdWxsS2V5LCBuZXdQcm9wZXJ0eSk7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlDaGFuZ2VkKG5ld1Byb3BlcnR5LnZhbHVlLCBuZXdQcm9wZXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgYWRkTWlzc2luZ1Byb3BlcnR5KHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSB7XG4gICAgY29uc3QgcGFyZW50ID0gcGFyZW50UHJvcGVydHkodGhpcy5wcm9wZXJ0aWVzLCBwcm9wZXJ0eSk7XG4gICAgY29uc3QgbmV3UHJvcGVydHkgPSBwYXJlbnQgPT09IHByb3BlcnR5ID8gdGhpcy5ub2RlUHJvcGVydHkhIDogcGFyZW50O1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSB0aGlzLm5ld1Byb3BlcnRpZXMobmV3UHJvcGVydHksIHByb3BlcnR5LmtleSk7XG4gICAgbmV3UHJvcGVydHkubmV3UHJvcGVydHkgPSBuZXdQcm9wZXJ0aWVzWzBdO1xuICAgIHJldHVybiBuZXdQcm9wZXJ0eS5uZXdQcm9wZXJ0eSA/IHRoaXMuYWRkUHJvcGVydHkobmV3UHJvcGVydHkpIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBhZGRQcm9wZXJ0eShwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IHsgbmFtZSwgcHJvcCB9ID0gcHJvcGVydHkubmV3UHJvcGVydHkhO1xuICAgIHByb3BlcnR5Lm5ld1Byb3BlcnR5ID0ge307XG4gICAgcmV0dXJuIG5hbWUgPT09ICdAaWQnXG4gICAgICA/IHRoaXMucmVwbGFjZVByb3BlcnR5RGF0YShwcm9wZXJ0eSwgeyAnQGlkJzogJycsIHR5cGU6IHByb3BlcnR5LnNjaGVtYVR5cGUgfSwgdW5kZWZpbmVkLCBmYWxzZSlcbiAgICAgIDogdGhpcy5hZGREZWZhdWx0UHJvcGVydHkocHJvcGVydHksIG5hbWUhLCBwcm9wISk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVByb3BlcnR5Q29vcmRpbmF0ZXMocHJvcGVydHk6IElOb2RlUHJvcGVydHksIHZhbHVlOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsKSB7XG4gICAgY29uc3QgbGF0aXR1ZGUgPSBzaWJsaW5nUHJvcGVydHkodGhpcy5wcm9wZXJ0aWVzLCBwcm9wZXJ0eSwgJ2xhdGl0dWRlJyk7XG4gICAgY29uc3QgbG9uZ2l0dWRlID0gc2libGluZ1Byb3BlcnR5KHRoaXMucHJvcGVydGllcywgcHJvcGVydHksICdsb25naXR1ZGUnKTtcbiAgICByZXR1cm4gW1xuICAgICAgbGF0aXR1ZGUgPyB0aGlzLnByb3BlcnR5Q2hhbmdlZCh2YWx1ZS5sYXQsIGxhdGl0dWRlKSA6IG51bGwsXG4gICAgICBsb25naXR1ZGUgPyB0aGlzLnByb3BlcnR5Q2hhbmdlZCh2YWx1ZS5sbmcsIGxvbmdpdHVkZSkgOiBudWxsXG4gICAgXTtcbiAgfVxuXG4gIC8vIE1hcFxuXG4gIHB1YmxpYyBnZXQgc2hvd01hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvck1vZGUgJiYgW1NjaGVtYVR5cGUuU2l0ZSwgU2NoZW1hVHlwZS5PcmdhbmlzYXRpb25dLmluY2x1ZGVzKHRoaXMubm9kZSEudHlwZSk7XG4gIH1cblxuICBwdWJsaWMgbWFwRHJhd2luZ01vZGVzKHsga2V5IH06IElOb2RlUHJvcGVydHkpIHtcbiAgICByZXR1cm4gWydib3VuZGFyeSddLmluY2x1ZGVzKGtleSkgPyBbJ3BvbHlnb24nXSA6IFsnbGF0aXR1ZGUnLCAnbG9uZ2l0dWRlJ10uaW5jbHVkZXMoa2V5KSA/IFsnbWFya2VyJ10gOiBbXTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1hcERyYXdpbmdDbG9zZWQobmV3VmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5tYXBEcmF3aW5nUHJvcGVydHk7XG4gICAgdGhpcy5tYXBEcmF3aW5nUHJvcGVydHkgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIFsnbGF0aXR1ZGUnLCAnbG9uZ2l0dWRlJ10uaW5jbHVkZXMocHJvcGVydHkhLmtleSlcbiAgICAgID8gdGhpcy51cGRhdGVQcm9wZXJ0eUNvb3JkaW5hdGVzKHByb3BlcnR5ISwgbmV3VmFsdWUpXG4gICAgICA6IHRoaXMucHJvcGVydHlDaGFuZ2VkKG5ld1ZhbHVlLCBwcm9wZXJ0eSEpO1xuICB9XG5cbiAgLy8gQmlibGlvZ3JhcGh5IFNlYXJjaFxuXG4gIHB1YmxpYyBiaWJsaW9ncmFwaGllc1NlYXJjaEtleSh7IGtleSwgc2NoZW1hVHlwZSB9OiBJTm9kZVByb3BlcnR5KSB7XG4gICAgY29uc3QgdmFsaWRTY2hlbWEgPSBbU2NoZW1hVHlwZS5CaWJsaW9ncmFwaHldLmluY2x1ZGVzKHNjaGVtYVR5cGUpO1xuICAgIGNvbnN0IHZhbGllS2V5ID0gWyd0aXRsZScsICdkb2N1bWVudERPSScsICdzY29wdXMnXS5pbmNsdWRlcyhrZXkpO1xuICAgIHJldHVybiB2YWxpZFNjaGVtYSAmJiB2YWxpZUtleSA/IGtleSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUJpYmxpb2dyYXBoeSh2YWx1ZTogUGFydGlhbDxCaWJsaW9ncmFwaHk+KSB7XG4gICAgY29uc3QgcGFyZW50ID0gcGFyZW50UHJvcGVydHkodGhpcy5wcm9wZXJ0aWVzLCB0aGlzLmJpYmxpb2dyYXBoaWVzU2VhcmNoUHJvcGVydHkhKTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuYmlibGlvZ3JhcGhpZXNTZWFyY2hTb3VyY2VzXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5wYXJlbnQudmFsdWUsXG4gICAgICAgICAgYmlibGlvZ3JhcGh5OiB2YWx1ZVxuICAgICAgICB9XG4gICAgICA6IHZhbHVlO1xuICAgIHRoaXMucmVwbGFjZVByb3BlcnR5RGF0YSh0aGlzLmJpYmxpb2dyYXBoaWVzU2VhcmNoUHJvcGVydHkhLCBuZXdWYWx1ZSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU291cmNlKHZhbHVlOiBQYXJ0aWFsPFNvdXJjZT4pIHtcbiAgICAvLyBjYW5ub3QgcmVwbGFjZSBhIHRvcC1sZXZlbCBzb3VyY2VcbiAgICB0aGlzLmJpYmxpb2dyYXBoaWVzU2VhcmNoU291cmNlcyAmJlxuICAgICAgdGhpcy5yZXBsYWNlUHJvcGVydHlEYXRhKFxuICAgICAgICB0aGlzLmJpYmxpb2dyYXBoaWVzU2VhcmNoUHJvcGVydHkhLFxuICAgICAgICB7XG4gICAgICAgICAgJ0B0eXBlJzogTm9kZVR5cGUuU291cmNlLFxuICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgICEoJ0BpZCcgaW4gdmFsdWUpXG4gICAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJpYmxpb2dyYXBoaWVzU2VhcmNoU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5iaWJsaW9ncmFwaGllc1NlYXJjaFByb3BlcnR5IS5mdWxsS2V5LnNwbGl0KCcuJykubGVuZ3RoID4gMjtcbiAgfVxuXG4gIHB1YmxpYyBvbkJpYmxpb2dyYXBoaWVzU2VhcmNoQ2xvc2VkKHZhbHVlPzogUGFydGlhbDxTb3VyY2U+IHwgUGFydGlhbDxCaWJsaW9ncmFwaHk+KSB7XG4gICAgdGhpcy5iaWJsaW9ncmFwaGllc1NlYXJjaFByb3BlcnR5ID0gdmFsdWVcbiAgICAgID8gdmFsdWUudHlwZSA9PT0gU2NoZW1hVHlwZS5CaWJsaW9ncmFwaHlcbiAgICAgICAgPyB0aGlzLnVwZGF0ZUJpYmxpb2dyYXBoeSh2YWx1ZSlcbiAgICAgICAgOiB0aGlzLnVwZGF0ZVNvdXJjZSh2YWx1ZSBhcyBQYXJ0aWFsPFNvdXJjZT4pXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIEFjdG9yLkBpZFxuXG4gIHB1YmxpYyBhc3luYyBzZXRVc2VyQWN0b3JJZChwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IHsgYWN0b3JJZCwgbmFtZSB9ID0gYXdhaXQgdGhpcy51c2Vyc1NlcnZpY2UubG9nZ2VkSW5Vc2VyO1xuICAgIHJldHVybiB0aGlzLnJlcGxhY2VQcm9wZXJ0eURhdGEocHJvcGVydHksIHsgJ0BpZCc6IGFjdG9ySWQsICdAdHlwZSc6IE5vZGVUeXBlLkFjdG9yLCBuYW1lIH0sIGZhbHNlKTtcbiAgfVxuXG4gIC8vIEN5Y2xlLmN5Y2xlRHVyYXRpb25cblxuICBwdWJsaWMgY2FsY3VsYXRlQ3ljbGVEdXJhdGlvbkVuYWJsZWQocHJvcGVydHk6IElOb2RlUHJvcGVydHkpIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlQ3ljbGVEdXJhdGlvbkVuYWJsZWQodGhpcy5wcm9wZXJ0aWVzLCBwcm9wZXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgY2FsY3VsYXRlQ3ljbGVEdXJhdGlvbihwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IGR1cmF0aW9uID0gY2FsY3VsYXRlQ3ljbGVEdXJhdGlvbih0aGlzLnByb3BlcnRpZXMsIHByb3BlcnR5KTtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eUNoYW5nZWQoZHVyYXRpb24sIHByb3BlcnR5KTtcbiAgfVxuXG4gIC8vIEN5Y2xlLnN0YXJ0RGF0ZVxuXG4gIHB1YmxpYyBjYWxjdWxhdGVDeWNsZVN0YXJ0RGF0ZUVuYWJsZWQocHJvcGVydHk6IElOb2RlUHJvcGVydHkpIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlQ3ljbGVTdGFydERhdGVFbmFibGVkKHRoaXMucHJvcGVydGllcywgcHJvcGVydHkpO1xuICB9XG5cbiAgcHVibGljIGNhbGN1bGF0ZUN5Y2xlU3RhcnREYXRlKHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gY2FsY3VsYXRlQ3ljbGVTdGFydERhdGUodGhpcy5wcm9wZXJ0aWVzLCBwcm9wZXJ0eSk7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlDaGFuZ2VkKHN0YXJ0RGF0ZSwgcHJvcGVydHkpO1xuICB9XG5cbiAgLy8gVW5pdHMgY29udmVydGVyXG5cbiAgcHVibGljIHVuaXRDb252ZXJ0ZXJFbmFibGVkKHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSB7XG4gICAgcmV0dXJuIHByb3BlcnR5LmVkaXRhYmxlICYmIFsndmFsdWUnLCAnbWluJywgJ21heCcsICdzZCddLmluY2x1ZGVzKHByb3BlcnR5LmtleSk7XG4gIH1cblxuICBwdWJsaWMgb3BlblVuaXRDb252ZXJ0ZXIocG9wb3ZlciwgcHJvcGVydHk6IElOb2RlUHJvcGVydHkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb3BlcnR5LnZhbHVlO1xuICAgIGNvbnN0IHRlcm1Qcm9wZXJ0eSA9IHNpYmxpbmdQcm9wZXJ0eSh0aGlzLnByb3BlcnRpZXMsIHByb3BlcnR5LCAndGVybScpO1xuICAgIGNvbnN0IHRlcm0gPSBzYWZlSlNPTlBhcnNlKHRlcm1Qcm9wZXJ0eT8udmFsdWUpO1xuICAgIGNvbnN0IHVuaXRzID0gdGVybT8udW5pdHM7XG4gICAgcmV0dXJuIHBvcG92ZXIuaXNPcGVuKCkgPyBwb3BvdmVyLmNsb3NlKCkgOiBwb3BvdmVyLm9wZW4oeyB2YWx1ZSwgdGVybSwgdW5pdHMgfSk7XG4gIH1cblxuICAvLyBSZWNvbW1lbmRhdGlvbnNcblxuICBwdWJsaWMgb25TZWxlY3RSZWNvbW1lbmRhdGlvbihhcnJheTogSU5vZGVQcm9wZXJ0eSwgaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHByb3AgPSB0aGlzLnNjaGVtYXMhW2FycmF5LnNjaGVtYVR5cGVdO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0KHRoaXMubm9kZSwgYXJyYXkuZnVsbEtleSk7XG5cbiAgICBjb25zdCBuZXdQcm9wZXJ0eSA9IHR5cGVUb05ld1Byb3BlcnR5KFxuICAgICAgdGhpcy5zY2hlbWFzISxcbiAgICAgIHByb3AsXG4gICAgICBwcm9wLFxuICAgICAgdmFsdWUsXG4gICAgICBgJHthcnJheS5mdWxsS2V5fVske2FycmF5LnByb3BlcnRpZXMubGVuZ3RofV1gXG4gICAgKTtcbiAgICBuZXdQcm9wZXJ0eS52YWx1ZS50ZXJtID0geyB0eXBlOiBOb2RlVHlwZS5UZXJtLCAnQGlkJzogaWQgfTtcbiAgICB2YWx1ZVthcnJheS5wcm9wZXJ0aWVzLmxlbmd0aF0udGVybSA9IHsgdHlwZTogTm9kZVR5cGUuVGVybSwgJ0BpZCc6IGlkIH07XG5cbiAgICAvLyBpbnNlcnQgVGVybSB3aXRoIEBpZFxuICAgIGNvbnN0IHRlcm1LZXkgPSBgJHtuZXdQcm9wZXJ0eS5mdWxsS2V5fS50ZXJtYDtcbiAgICBjb25zdCB0ZXJtUHJvcGVydHkgPVxuICAgICAgbmV3UHJvcGVydHkucHJvcGVydGllcy5maW5kKHAgPT4gcC5rZXkgPT09ICd0ZXJtJykgfHxcbiAgICAgIHR5cGVUb05ld1Byb3BlcnR5KHRoaXMuc2NoZW1hcyEsIHByb3AucHJvcGVydGllcy50ZXJtLCBwcm9wLCBuZXdQcm9wZXJ0eS52YWx1ZSwgdGVybUtleSk7XG4gICAgdGVybVByb3BlcnR5LnZhbHVlID0geyB0eXBlOiBOb2RlVHlwZS5UZXJtLCAnQGlkJzogaWQgfTtcbiAgICB0ZXJtUHJvcGVydHkucHJvcGVydGllcyA9IHJlY3Vyc2l2ZVByb3BlcnRpZXMoXG4gICAgICB0aGlzLnNjaGVtYXMhLFxuICAgICAgW10sXG4gICAgICB0aGlzLnNjaGVtYXMhW3RoaXMubm9kZSEudHlwZV0sXG4gICAgICB0aGlzLmRlZXBFZGl0YWJsZSxcbiAgICAgIHRlcm1LZXlcbiAgICApKHsgdHlwZTogTm9kZVR5cGUuVGVybSwgJ0BpZCc6IGlkIH0pO1xuICAgIGluc2VydFByb3BlcnR5KG5ld1Byb3BlcnR5LnByb3BlcnRpZXMsIHRlcm1LZXksIHRlcm1Qcm9wZXJ0eSk7XG5cbiAgICAvLyB0ZXJtIGNhbm5vdCBiZSBlZGl0ZWQsIG5lZWQgdG8gcmVtb3ZlIGZpcnN0XG4gICAgdXBkYXRlUHJvcGVydGllcyh0ZXJtUHJvcGVydHksIHAgPT4ge1xuICAgICAgcC5lZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHA7XG4gICAgfSk7XG4gICAgdGVybVByb3BlcnR5LmVkaXRhYmxlID0gZmFsc2U7XG5cbiAgICBhcnJheS5wcm9wZXJ0aWVzLnB1c2gobmV3UHJvcGVydHkpO1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5Q2hhbmdlZCh2YWx1ZSwgYXJyYXkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC10b2dnbGUgcC00XCIgKGNsaWNrKT1cImlzT3BlbiA9ICFpc09wZW5cIiBwb2ludGVyPlxuICAgIDxmYS1pY29uIFtpY29uXT1cImZhQW5nbGVEb3duXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhaXNPcGVuXCI+PC9mYS1pY29uPlxuICAgIDxmYS1pY29uIFtpY29uXT1cImZhQW5nbGVSaWdodFwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiaXNPcGVuXCI+PC9mYS1pY29uPlxuICAgIEBpZiAobm9kZVByb3BlcnR5KSB7XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImlzLXB4LTJcIlxuICAgICAgICBbY2xhc3MuaGFzLXRleHQtZGFuZ2VyXT1cIm5vZGVQcm9wZXJ0eS5oYXNFcnJvclwiXG4gICAgICAgIFtjbGFzcy5oYXMtdGV4dC13YXJuaW5nXT1cIm5vZGVQcm9wZXJ0eS5oYXNXYXJuaW5nXCI+XG4gICAgICAgIDxoZS1ub2RlLWljb24gW3R5cGVdPVwibm9kZVByb3BlcnR5LnNjaGVtYVR5cGVcIj48L2hlLW5vZGUtaWNvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIEBpZiAoaXNPcGVuICYmIG5vZGVQcm9wZXJ0eSkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaG93TmV3UHJvcGVydHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlUHJvcGVydHkgfVwiPjwvbmctY29udGFpbmVyPlxuICB9XG5cbiAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxuICAgIEBpZiAoaXNPcGVuKSB7XG4gICAgICBAaWYgKGVycm9yc0VkaXRhYmxlKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYi0zIG1iLTJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9kZUVycm9yRm9ybTsgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGVQcm9wZXJ0eSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChub2RlUHJvcGVydHk/LmVycm9yKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS00IHBsLTRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInByb3BlcnR5RXJyb3I7IGNvbnRleHQ6IHsgcHJvcGVydHk6IG5vZGVQcm9wZXJ0eSwgZWRpdDogdHJ1ZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cblxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLW11bHRpbGluZVwiPlxuICAgICAgQGZvciAocHJvcGVydHkgb2YgcHJvcGVydGllczsgdHJhY2sgdHJhY2tCeVByb3BlcnR5KCRpbmRleCwgcHJvcGVydHkpKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaG93UHJvcGVydHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wZXJ0eSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGlzT3Blbikge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByb3BlcnR5TWFwOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZVByb3BlcnR5IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuXG5AaWYgKCEhbWFwRHJhd2luZ1Byb3BlcnR5KSB7XG4gIDxoZS1tYXBzLWRyYXdpbmctY29uZmlybVxuICAgIFt2YWx1ZV09XCJtYXBEcmF3aW5nUHJvcGVydHkudmFsdWVcIlxuICAgIFttb2Rlc109XCJtYXBEcmF3aW5nTW9kZXMobWFwRHJhd2luZ1Byb3BlcnR5KVwiXG4gICAgKGNsb3NlZCk9XCJvbk1hcERyYXdpbmdDbG9zZWQoJGV2ZW50KVwiPjwvaGUtbWFwcy1kcmF3aW5nLWNvbmZpcm0+XG59XG5cbkBpZiAoISFiaWJsaW9ncmFwaGllc1NlYXJjaFByb3BlcnR5KSB7XG4gIDxoZS1iaWJsaW9ncmFwaGllcy1zZWFyY2gtY29uZmlybVxuICAgIFtzZWFyY2hdPVwiYmlibGlvZ3JhcGhpZXNTZWFyY2hQcm9wZXJ0eS52YWx1ZVwiXG4gICAgW3NlYXJjaEJ5XT1cImJpYmxpb2dyYXBoaWVzU2VhcmNoS2V5KGJpYmxpb2dyYXBoaWVzU2VhcmNoUHJvcGVydHkpXCJcbiAgICBbc2VhcmNoU291cmNlc109XCJiaWJsaW9ncmFwaGllc1NlYXJjaFNvdXJjZXNcIlxuICAgIChjbG9zZWQpPVwib25CaWJsaW9ncmFwaGllc1NlYXJjaENsb3NlZCgkZXZlbnQpXCI+PC9oZS1iaWJsaW9ncmFwaGllcy1zZWFyY2gtY29uZmlybT5cbn1cblxuPG5nLXRlbXBsYXRlICNsYWJlbERlc2NyaXB0aW9uIGxldC1wcm9wZXJ0eT5cbiAgPHNwYW4gY2xhc3M9XCJwcm9wZXJ0eS1rZXlcIiBbbmdiVG9vbHRpcF09XCJwcm9wZXJ0eS5rZXlcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLWFsaWduLW1pZGRsZSBpcy1ub3dyYXAgaGFzLXRleHQtZWxsaXBzaXNcIj57eyBwcm9wZXJ0eS5rZXkgfX08L3NwYW4+XG4gICAgQGlmIChwcm9wZXJ0eS5zY2hlbWE/LmRlc2NyaXB0aW9uKSB7XG4gICAgICA8aGUtc2NoZW1hLWluZm9cbiAgICAgICAgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtcGwtMSBpcy1hbGlnbi1taWRkbGVcIlxuICAgICAgICB0cmlnZ2Vycz1cImNsaWNrXCJcbiAgICAgICAgW2NvbnRlbnRdPVwicHJvcGVydHkuc2NoZW1hLmRlc2NyaXB0aW9uXCI+PC9oZS1zY2hlbWEtaW5mbz5cbiAgICB9XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGFiZWxEZWZhdWx0IGxldC1wcm9wZXJ0eT5cbiAgPHNwYW4+e3sgcHJvcGVydHkua2V5IH19PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaG93UHJvcGVydHkgbGV0LXByb3BlcnR5PlxuICBAaWYgKChpc09wZW4gfHwgcHJvcGVydHkuY2xvc2VkVmlzaWJsZSkgJiYgIXByb3BlcnR5LmlzSGlkZGVuKSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjb2x1bW4gaXMtNlwiXG4gICAgICBbaWRdPVwicHJvcGVydHkuZnVsbEtleSArICdfJyArIHByb3BlcnR5LmlkXCJcbiAgICAgIFtjbGFzcy5pcy0xMl09XCJwcm9wZXJ0eS5wcm9wZXJ0aWVzLmxlbmd0aCB8fCAhcHJvcGVydHkua2V5XCI+XG4gICAgICBAaWYgKCFwcm9wZXJ0eS5wcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy1tdWx0aWxpbmUgaXMtdmFyaWFibGUgaXMtMVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKmJpbmRPbmNlPVwicHJvcGVydHlcIj5cbiAgICAgICAgICAgIEBpZiAocHJvcGVydHkua2V5KSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtMyBweS0xXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgaGFzLXRleHQtcmlnaHQtdGFibGV0IGhhcy10ZXh0LWVsbGlwc2lzXCIgW2Zvcl09XCJwcm9wZXJ0eS5pZFwiIFt0aXRsZV09XCJwcm9wZXJ0eS5rZXlcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS5zY2hlbWE/LmRlc2NyaXB0aW9uICYmIHByb3BlcnR5LmVkaXRhYmxlID8gbGFiZWxEZXNjcmlwdGlvbiA6IGxhYmVsRGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcHJvcGVydHkgfVxuICAgICAgICAgICAgICAgICAgICBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLTkgcHktMVwiIFtjbGFzcy5pcy0xMl09XCIhcHJvcGVydHkua2V5XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0Rm9ybTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHByb3BlcnR5IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgQGlmIChwcm9wZXJ0eS5oYXNFcnJvciB8fCBwcm9wZXJ0eS5oYXNXYXJuaW5nKSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcm9wZXJ0eUVycm9yOyBjb250ZXh0OiB7IHByb3BlcnR5OiBwcm9wZXJ0eSwgZWRpdDogZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKCEhcHJvcGVydHkucHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicGFuZWxcIlxuICAgICAgICAgIFtjbGFzcy5pcy1zZWNvbmRhcnldPVwiZXJyb3JNb2RlICYmIHByb3BlcnR5LmNoYW5nZWRcIlxuICAgICAgICAgIFtjbGFzcy5pcy1kYW5nZXJdPVwiIXByb3BlcnR5LmNoYW5nZWQgJiYgcHJvcGVydHkuaGFzRXJyb3JcIlxuICAgICAgICAgIFtjbGFzcy5pcy13YXJuaW5nXT1cIiFwcm9wZXJ0eS5jaGFuZ2VkICYmIHByb3BlcnR5Lmhhc1dhcm5pbmdcIlxuICAgICAgICAgIFtjbGFzcy5pcy1kZWZhdWx0XT1cIiFwcm9wZXJ0eS5jaGFuZ2VkICYmICFwcm9wZXJ0eS5oYXNFcnJvciAmJiAhcHJvcGVydHkuaGFzV2FybmluZ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwib3Blbi1ncm91cCBwYW5lbC1oZWFkaW5nIHB5LTBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInByb3BlcnR5LmlzT3BlbiA9ICFwcm9wZXJ0eS5pc09wZW5cIlxuICAgICAgICAgICAgcG9pbnRlclxuICAgICAgICAgICAgW2NsYXNzLmlzLW9wZW5dPVwicHJvcGVydHkuaXNPcGVuXCJcbiAgICAgICAgICAgIFtjbGFzcy5oYXMtdGV4dC13aGl0ZV09XCIoZXJyb3JNb2RlICYmIHByb3BlcnR5LmNoYW5nZWQpIHx8IHByb3BlcnR5Lmhhc0Vycm9yIHx8IHByb3BlcnR5Lmhhc1dhcm5pbmdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLW1vYmlsZSBpcy12Y2VudGVyZWQgaXMtbXVsdGlsaW5lXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvdyBweS0xIG15LTBcIj5cbiAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUFuZ2xlRG93blwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIXByb3BlcnR5LmlzT3BlblwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUFuZ2xlUmlnaHRcIiBbY2xhc3MuaXMtaGlkZGVuXT1cInByb3BlcnR5LmlzT3BlblwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbHVtbiBweS0xIG15LTBcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLXNpemUtNlwiPnt7IHByb3BlcnR5LmtleSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICBAaWYgKHByb3BlcnR5LnNjaGVtYVR5cGUpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3cgcHktMSBteS0wXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZ3MgbWItMCBoYXMtYWRkb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFnIG1iLTAgaXMtbGlnaHRcIj5UeXBlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyBtYi0wIGlzLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGhlLXNjaGVtYS12ZXJzaW9uLWxpbmsgbGlua0NsYXNzPVwiaXMtc21hbGxcIiBbbm9kZV09XCJ7ICdAdHlwZSc6IHByb3BlcnR5LnNjaGVtYVR5cGUgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcHJvcGVydHkuc2NoZW1hVHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2hlLXNjaGVtYS12ZXJzaW9uLWxpbms+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmICghZXJyb3JzRWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICA8aGUtcG9wb3Zlci1jb25maXJtXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3cgcHktMSBteS0wIHB4LTBcIlxuICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cIlJlbW92ZSBncm91cFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwiXG4gICAgICAgICAgICAgICAgICAgICc8cD5UaGlzIHdpbGwgcmVtb3ZlIHRoZSBncm91cCBjb21wbGV0ZWx5LjwvcD4nICtcbiAgICAgICAgICAgICAgICAgICAgKHByb3BlcnR5LmlzUmVxdWlyZWQgPyAnPHA+PHU+V2FybmluZzogdGhpcyBmaWVsZCBpcyByZXF1aXJlZC48L3U+PC9wPicgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnPHA+RG8geW91IGNvbmZpcm0/PC9wPidcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBwb3BvdmVyQ2xhc3M9XCJweC0zXCJcbiAgICAgICAgICAgICAgICAgIChjb25maXJtZWQpPVwicHJvcGVydHlDaGFuZ2VkKG51bGwsIHByb3BlcnR5KVwiPlxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFUaW1lc1wiIHNpemU9XCJzbVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2hlLXBvcG92ZXItY29uZmlybT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChwcm9wZXJ0eS5pc09wZW4pIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ibG9jayBpcy1ibG9jayBwLTBcIj5cbiAgICAgICAgICAgICAgQGlmIChwcm9wZXJ0eS5lcnJvcikge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0zIHB0LTRcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcm9wZXJ0eUVycm9yOyBjb250ZXh0OiB7IHByb3BlcnR5OiBwcm9wZXJ0eSwgZWRpdDogdHJ1ZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmICghcHJvcGVydHkuaXNBcnJheSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKCFwcm9wZXJ0eS5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImhlbHAgcHktMSBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgVG8gY2hhbmdlIHRoZSB7eyBwcm9wZXJ0eS5rZXkgfX0sIHBsZWFzZSBkZWxldGUgaXQgZmlyc3QsIHRoZW4gYWRkIHRoZSBmaWVsZCBhZ2FpblxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKHByb3BlcnR5LmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIEBzd2l0Y2ggKHByb3BlcnR5LnNjaGVtYT8udGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ0JpYmxpb2dyYXBoeScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiaGVscCBweS0xIHB4LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgU2VhcmNoIGJ5IFRpdGxlIG9yIERvY3VtZW50IERPSSB0byBhdXRvLXBvcHVsYXRlIHRoZSBmaWVsZHMgdXNpbmcgdGhlIE1lbmRlbGV5IGNhdGFsb2d1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNob3dOZXdQcm9wZXJ0eTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHByb3BlcnR5IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoZXJyb3JzRWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTMgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub2RlRXJyb3JGb3JtOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcHJvcGVydHkgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eS1ncm91cCBweS0yIHB4LTMgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy1tdWx0aWxpbmUgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHByb3AyIG9mIHByb3BlcnR5LnByb3BlcnRpZXM7IHRyYWNrIHRyYWNrQnlQcm9wZXJ0eSgkaW5kZXgsIHByb3AyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNob3dQcm9wZXJ0eTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHByb3AyIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChwcm9wZXJ0eS5pc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTIgcHgtMyBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKGVycm9yc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vZGVFcnJvckZvcm07IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wZXJ0eSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGZvciAocHJvcDIgb2YgcHJvcGVydHkucHJvcGVydGllczsgdHJhY2sgdHJhY2tCeVByb3BlcnR5KCRpbmRleCwgcHJvcDIpKSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAocHJvcDIua2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgcC0wIG15LTRcIiBbaWRdPVwicHJvcDIuZnVsbEtleSArICdfJyArIHByb3AyLmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydHktYXJyYXktbnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWdzIGhhcy1hZGRvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyBpcy1kYXJrXCI+e3sgcHJvcDIua2V5IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWVycm9yc0VkaXRhYmxlICYmIHByb3BlcnR5LmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZyBpcy1pbmZvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZHVwbGljYXRlQXJyYXlHcm91cChwcm9wZXJ0eSwgcHJvcDIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiJ0R1cGxpY2F0ZSAnICsgcHJvcGVydHkua2V5IHwgcGx1cmFsaXplOiAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhQ2xvbmVcIiBzaXplPVwic21cIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHByb3AyLmtleSAhPT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWcgaXMtbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZUFycmF5R3JvdXBVcChwcm9wZXJ0eSwgcHJvcDIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiTW92ZSBVcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFMb25nQXJyb3dBbHRVcFwiIHNpemU9XCJzbVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwcm9wMi5rZXkgIT09IHByb3BlcnR5LnByb3BlcnRpZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFnIGlzLWxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVBcnJheUdyb3VwRG93bihwcm9wZXJ0eSwgcHJvcDIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiTW92ZSBEb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUxvbmdBcnJvd0FsdERvd25cIiBzaXplPVwic21cIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoZS1wb3BvdmVyLWNvbmZpcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWcgaXMtZGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiJ1JlbW92ZSAnICsgcHJvcGVydHkua2V5IHwgcGx1cmFsaXplOiAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1cIlRoaXMgd2lsbCByZW1vdmUgdGhlIGdyb3VwIGNvbXBsZXRlbHkuIERvIHlvdSBjb25maXJtP1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZmlybWVkKT1cInJlbW92ZUFycmF5R3JvdXAocHJvcGVydHksIHByb3AyKVwiPjwvaGUtcG9wb3Zlci1jb25maXJtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaG93TmV3UHJvcGVydHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wMiB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVycm9yc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC00IG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm5vZGVFcnJvckZvcm07IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wMiB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwcm9wMi5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBwcm9wZXJ0eTogcHJvcDIsIGVkaXQ6IHRydWUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb3BlcnR5LWdyb3VwIGNhcmQtY29udGVudCBwLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbnMgaXMtbXVsdGlsaW5lIG15LTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChwcm9wMyBvZiBwcm9wMi5wcm9wZXJ0aWVzOyB0cmFjayB0cmFja0J5UHJvcGVydHkoJGluZGV4LCBwcm9wMykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaG93UHJvcGVydHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wMyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKCFlcnJvcnNFZGl0YWJsZSAmJiBwcm9wZXJ0eS5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLWluZm8gaXMtc21hbGxcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFkZEFycmF5R3JvdXAocHJvcGVydHkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFQbHVzQ2lyY2xlXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMlwiPkFkZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTFcIj57eyBwcm9wZXJ0eS5rZXkgfCBwbHVyYWxpemU6IDEgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8aGUtbm9kZS1yZWNvbW1lbmRhdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICBidXR0b25DbGFzcz1cImlzLXNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbm9kZUZpZWxkXT1cInByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdFJlY29tbWVuZGF0aW9uKT1cIm9uU2VsZWN0UmVjb21tZW5kYXRpb24ocHJvcGVydHksICRldmVudClcIj48L2hlLW5vZGUtcmVjb21tZW5kYXRpb25zPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lucHV0Rm9ybSBsZXQtcHJvcGVydHk+XG4gIEBpZiAocHJvcGVydHkua2V5KSB7XG4gICAgQHN3aXRjaCAocHJvcGVydHkuc3VnZ2VzdGlvbnM/LnR5cGUpIHtcbiAgICAgIEBjYXNlICgnc2VsZWN0Jykge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRTZWxlY3Q7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wZXJ0eSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgICBAZGVmYXVsdCB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dElucHV0OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcHJvcGVydHkgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgfVxuICAgIH1cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbnB1dElucHV0IGxldC1wcm9wZXJ0eT5cbiAgPGRpdiBjbGFzcz1cImZpZWxkIG1iLTBcIiBbY2xhc3MuaGFzLWFkZG9uc109XCJoYXNBZGRvbnMocHJvcGVydHkpXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWRcIiBbY2xhc3MuaGFzLWljb25zLXJpZ2h0XT1cInByb3BlcnR5LmxvYWRpbmdcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImlucHV0IGlzLXNtYWxsIHNlYXJjaC1pbnB1dFwiXG4gICAgICAgIFtjbGFzcy5pcy1kYXJrXT1cInByb3BlcnR5LmtleSA9PT0gJ3R5cGUnXCJcbiAgICAgICAgW2NsYXNzLmlzLXNlY29uZGFyeV09XCJlcnJvck1vZGUgJiYgcHJvcGVydHkuY2hhbmdlZFwiXG4gICAgICAgIFtjbGFzcy5pcy1kYW5nZXJdPVwiKCFwcm9wZXJ0eS5jaGFuZ2VkICYmIHByb3BlcnR5Lmhhc0Vycm9yKSB8fCBpc1JlcXVpcmVkKHByb3BlcnR5KVwiXG4gICAgICAgIFtjbGFzcy5pcy13YXJuaW5nXT1cIiFwcm9wZXJ0eS5jaGFuZ2VkICYmIHByb3BlcnR5Lmhhc1dhcm5pbmdcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5LnZhbHVlXCJcbiAgICAgICAgI3Byb3BlcnR5TW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgW3R5cGVdPVwicHJvcGVydHkuc2NoZW1hPy50eXBlID09PSAnbnVtYmVyJyA/ICdudW1iZXInIDogJ3N0cmluZydcIlxuICAgICAgICBbaWRdPVwicHJvcGVydHkuaWRcIlxuICAgICAgICBuYW1lPVwicmFuZG9tbmFtZVwiXG4gICAgICAgIFtyZWFkb25seV09XCIhcHJvcGVydHkuZWRpdGFibGUgfHwgcHJvcGVydHkuc2NoZW1hPy5pbnRlcm5hbFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcm9wZXJ0eS5wbGFjZWhvbGRlclwiXG4gICAgICAgIFthcHBUYWdzSW5wdXRdPVwie1xuICAgICAgICAgIGVuYWJsZWQ6IHByb3BlcnR5LmVkaXRhYmxlICYmIHByb3BlcnR5LnNjaGVtYT8udHlwZSA9PT0gJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczogcHJvcGVydHkuc2NoZW1hPy5pdGVtcyxcbiAgICAgICAgICBkZWxpbWl0ZXI6ICc7JyxcbiAgICAgICAgICBhbGxvd0R1cGxpY2F0ZXM6IHRydWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHByb3BlcnR5LnBsYWNlaG9sZGVyXG4gICAgICAgIH1cIlxuICAgICAgICAoY2hhbmdlKT1cInByb3BlcnR5Q2hhbmdlZCgkZXZlbnQudGFyZ2V0LnZhbHVlLCBwcm9wZXJ0eSlcIlxuICAgICAgICBbcGF0dGVybl09XCJwcm9wZXJ0eS5zY2hlbWE/LnBhdHRlcm5cIlxuICAgICAgICBbcmVxdWlyZWRdPVwicHJvcGVydHkuZnVsbEtleS5lbmRzV2l0aCgnaWQnKSAmJiBwcm9wZXJ0eS5mdWxsS2V5ICE9PSAnaWQnXCJcbiAgICAgICAgW21pbl09XCJwcm9wZXJ0eS5zY2hlbWE/Lm1pbmltdW1cIlxuICAgICAgICBbbWF4XT1cInByb3BlcnR5LnNjaGVtYT8ubWF4aW11bVwiXG4gICAgICAgIFtuZ2JUeXBlYWhlYWRdPVwicHJvcGVydHkgfCBhcHBseVB1cmU6IHByb3BlcnR5U3VnZ2VzdFwiXG4gICAgICAgIFtyZXN1bHRUZW1wbGF0ZV09XCJzdWdnZXN0aW9uXCJcbiAgICAgICAgW2lucHV0Rm9ybWF0dGVyXT1cInByb3BlcnR5LmZvcm1hdHRlclwiXG4gICAgICAgIFtmb2N1c0ZpcnN0XT1cInRydWVcIlxuICAgICAgICAoZm9jdXMpPVwicHJvcGVydHkuZWRpdGFibGUgJiYgdHlwZWFoZWFkRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChzZWxlY3RJdGVtKT1cInN1Z2dlc3Rpb25TZWxlY3RlZCgkZXZlbnQuaXRlbSwgcHJvcGVydHkpXCIgLz5cblxuICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsIGlzLXJpZ2h0IGhhcy10ZXh0LWdyZXktZGFya1wiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIXByb3BlcnR5LmxvYWRpbmdcIj5cbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFTcGlubmVyXCIgW3B1bHNlXT1cInRydWVcIiBzaXplPVwic21cIj48L2ZhLWljb24+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0QWRkb25zOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcHJvcGVydHkgfVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgQGlmICghcHJvcGVydHkuaGFzRXJyb3IgJiYgcHJvcGVydHlNb2RlbC5pbnZhbGlkKSB7XG4gICAgPHAgY2xhc3M9XCJoZWxwIGlzLWRhbmdlci1saWdodFwiPlxuICAgICAgPHNwYW4gKmJpbmRPbmNlPVwicHJvcGVydHlNb2RlbC5lcnJvcnNcIiBbaW5uZXJIVE1MXT1cImZvcm1hdFByb3BlcnR5RXJyb3IocHJvcGVydHlNb2RlbC5lcnJvcnMsIHByb3BlcnR5KVwiPjwvc3Bhbj5cbiAgICA8L3A+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXRTZWxlY3QgbGV0LXByb3BlcnR5PlxuICA8ZGl2IGNsYXNzPVwiZmllbGQgbWItMFwiIFtjbGFzcy5oYXMtYWRkb25zXT1cImhhc0FkZG9ucyhwcm9wZXJ0eSlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbCBpcy1leHBhbmRlZFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNlbGVjdCBpcy1zbWFsbCBpcy1mdWxsd2lkdGhcIlxuICAgICAgICBbY2xhc3MuaXMtc2Vjb25kYXJ5XT1cImVycm9yTW9kZSAmJiBwcm9wZXJ0eS5jaGFuZ2VkXCJcbiAgICAgICAgW2NsYXNzLmlzLWRhbmdlcl09XCIoIXByb3BlcnR5LmNoYW5nZWQgJiYgcHJvcGVydHkuaGFzRXJyb3IpIHx8IGlzUmVxdWlyZWQocHJvcGVydHkpXCJcbiAgICAgICAgW2NsYXNzLmlzLXdhcm5pbmddPVwiIXByb3BlcnR5LmNoYW5nZWQgJiYgcHJvcGVydHkuaGFzV2FybmluZ1wiPlxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJwcm9wZXJ0eS52YWx1ZVwiXG4gICAgICAgICAgI3Byb3BlcnR5TW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgICBbaWRdPVwicHJvcGVydHkuaWRcIlxuICAgICAgICAgIG5hbWU9XCJyYW5kb21uYW1lXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIXByb3BlcnR5LmVkaXRhYmxlIHx8IHByb3BlcnR5LnNjaGVtYT8uaW50ZXJuYWxcIlxuICAgICAgICAgIChjaGFuZ2UpPVwicHJvcGVydHlDaGFuZ2VkKCRldmVudC50YXJnZXQudmFsdWUsIHByb3BlcnR5KVwiPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3Q8L29wdGlvbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpiaW5kT25jZT1cInByb3BlcnR5LnN1Z2dlc3Rpb25zXCI+XG4gICAgICAgICAgICBAZm9yICh2YWx1ZSBvZiBwcm9wZXJ0eS5zdWdnZXN0aW9ucy52YWx1ZXM7IHRyYWNrIHRyYWNrQnlJbmRleCgkaW5kZXgsIHZhbHVlKSkge1xuICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgIHt7IHZhbHVlIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dEFkZG9uczsgY29udGV4dDogeyAkaW1wbGljaXQ6IHByb3BlcnR5IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIEBpZiAoIXByb3BlcnR5Lmhhc0Vycm9yICYmIHByb3BlcnR5TW9kZWwuaW52YWxpZCkge1xuICAgIDxwIGNsYXNzPVwiaGVscCBpcy1kYW5nZXItbGlnaHRcIj5cbiAgICAgIDxzcGFuICpiaW5kT25jZT1cInByb3BlcnR5TW9kZWwuZXJyb3JzXCIgW2lubmVySFRNTF09XCJmb3JtYXRQcm9wZXJ0eUVycm9yKHByb3BlcnR5TW9kZWwuZXJyb3JzLCBwcm9wZXJ0eSlcIj48L3NwYW4+XG4gICAgPC9wPlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3JlbW92ZUZpZWxkQWRkb24gbGV0LXByb3BlcnR5PlxuICBAaWYgKCFlcnJvcnNFZGl0YWJsZSAmJiAhcHJvcGVydHkuaXNSZXF1aXJlZCkge1xuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICA8YVxuICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiXG4gICAgICAgIHRpdGxlPVwiUmVtb3ZlIGZpZWxkXCJcbiAgICAgICAgW2NsYXNzLmlzLW91dGxpbmVkXT1cIiFwcm9wZXJ0eS5jaGFuZ2VkICYmIChwcm9wZXJ0eS5oYXNFcnJvciB8fCBwcm9wZXJ0eS5oYXNXYXJuaW5nKVwiXG4gICAgICAgIFtjbGFzcy5pcy1kYW5nZXJdPVwiIXByb3BlcnR5LmNoYW5nZWQgJiYgcHJvcGVydHkuaGFzRXJyb3JcIlxuICAgICAgICBbY2xhc3MuaXMtd2FybmluZ109XCIhcHJvcGVydHkuY2hhbmdlZCAmJiBwcm9wZXJ0eS5oYXNXYXJuaW5nXCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcHJvcGVydHlDaGFuZ2VkKG51bGwsIHByb3BlcnR5KVwiPlxuICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYVRpbWVzXCI+PC9mYS1pY29uPlxuICAgICAgPC9hPlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lucHV0QWRkb25zIGxldC1wcm9wZXJ0eT5cbiAgPG5nLWNvbnRhaW5lciAqYmluZE9uY2U9XCJwcm9wZXJ0eVwiPlxuICAgIEBpZiAoZW5hYmxlQWRkRXJyb3IocHJvcGVydHkpKSB7XG4gICAgICA8aGUtcG9wb3Zlci1jb25maXJtXG4gICAgICAgIGNsYXNzPVwiY29udHJvbFwiXG4gICAgICAgIHBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgIFtjb250ZW50XT1cInBvcHVwRXJyb3JGb3JtXCJcbiAgICAgICAgKGNvbmZpcm1lZCk9XCJhZGRFcnJvcihwcm9wZXJ0eSwgJGV2ZW50KVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhQ29tbWVudHNcIj48L2ZhLWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvaGUtcG9wb3Zlci1jb25maXJtPlxuICAgIH1cblxuICAgIEBpZiAocHJvcGVydHkuZWRpdGFibGUpIHtcbiAgICAgIEBzd2l0Y2ggKHByb3BlcnR5LnNjaGVtYVR5cGUpIHtcbiAgICAgICAgQGNhc2UgKFNjaGVtYVR5cGUuQWN0b3IpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWN0b3JBZGRvbnM7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wZXJ0eSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKFNjaGVtYVR5cGUuQ3ljbGUpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3ljbGVBZGRvbnM7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wZXJ0eSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBpZiAobWFwRHJhd2luZ01vZGVzKHByb3BlcnR5KS5sZW5ndGgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgdGl0bGU9XCJQaWNrIG9uIE1hcFwiIChjbGljayk9XCJtYXBEcmF3aW5nUHJvcGVydHkgPSBwcm9wZXJ0eVwiPlxuICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFNYXBNYXJrZWRBbHRcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChiaWJsaW9ncmFwaGllc1NlYXJjaEtleShwcm9wZXJ0eSkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgdGl0bGU9XCJBZHZhbmNlZCBTZWFyY2hcIiAoY2xpY2spPVwiYmlibGlvZ3JhcGhpZXNTZWFyY2hQcm9wZXJ0eSA9IHByb3BlcnR5XCI+XG4gICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYVNlYXJjaFwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVtb3ZlRmllbGRBZGRvbjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHByb3BlcnR5IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG5cbiAgICBAaWYgKGFkZFByb3BlcnR5RW5hYmxlZChwcm9wZXJ0eSkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtZGFuZ2VyXCJcbiAgICAgICAgICB0aXRsZT1cIkFkZCBmaWVsZFwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWRkTWlzc2luZ1Byb3BlcnR5KHByb3BlcnR5KVwiPlxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhUGx1c0NpcmNsZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTJcIj5BZGQ8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGlzUmVxdWlyZWQocHJvcGVydHkpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1kYW5nZXJcIlxuICAgICAgICAgIFtmb3JdPVwicHJvcGVydHkuaWRcIlxuICAgICAgICAgIG5nYlRvb2x0aXA9XCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkXCJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIj5cbiAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUV4Y2xhbWF0aW9uVHJpYW5nbGVcIj48L2ZhLWljb24+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChwcm9wZXJ0eS5leHRlcm5hbFVybD8udXJsKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICBbaHJlZl09XCJwcm9wZXJ0eS5leHRlcm5hbFVybC51cmwgKyAocHJvcGVydHkuZXh0ZXJuYWxVcmwudXJsUGFyYW1WYWx1ZSA/IHByb3BlcnR5LnZhbHVlIDogJycpXCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgIFt0aXRsZV09XCJwcm9wZXJ0eS5leHRlcm5hbFVybC50aXRsZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW5mbyc6IHByb3BlcnR5LmtleSA9PT0gJ3R5cGUnIH1cIlxuICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cInByb3BlcnR5LmV4dGVybmFsVXJsLnVybFBhcmFtVmFsdWUgJiYgIXByb3BlcnR5LnZhbHVlID8gdHJ1ZSA6IG51bGxcIj5cbiAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJwcm9wZXJ0eS5leHRlcm5hbFVybC5pY29uIHx8IGZhRXh0ZXJuYWxMaW5rQWx0XCI+PC9mYS1pY29uPlxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmICh1bml0Q29udmVydGVyRW5hYmxlZChwcm9wZXJ0eSkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiXG4gICAgICAgICAgdGl0bGU9XCJPcGVuIGNhbGN1bGF0b3JcIlxuICAgICAgICAgIFtuZ2JQb3BvdmVyXT1cImNvbnZlcnRVbml0c1wiXG4gICAgICAgICAgYXV0b0Nsb3NlPVwib3V0c2lkZVwiXG4gICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxuICAgICAgICAgICNwPVwibmdiUG9wb3ZlclwiXG4gICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAoY2xpY2spPVwib3BlblVuaXRDb252ZXJ0ZXIocCwgcHJvcGVydHkpXCI+XG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFDYWxjdWxhdG9yXCI+PC9mYS1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FjdG9yQWRkb25zIGxldC1wcm9wZXJ0eT5cbiAgQGlmIChwcm9wZXJ0eS5rZXkgPT09ICdAaWQnKSB7XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIiB0aXRsZT1cIkFkZCBteXNlbGYgYXMgQWN0b3JcIiAoY2xpY2spPVwic2V0VXNlckFjdG9ySWQocHJvcGVydHkpXCI+XG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhcklkQmFkZ2VcIj48L2ZhLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjeWNsZUFkZG9ucyBsZXQtcHJvcGVydHk+XG4gIEBpZiAocHJvcGVydHkua2V5ID09PSAnY3ljbGVEdXJhdGlvbicpIHtcbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiXG4gICAgICAgIHRpdGxlPVwiQ2FsY3VsYXRlIHZhbHVlIGZyb20gc3RhcnREYXRlIGFuZCBlbmREYXRlXCJcbiAgICAgICAgKGNsaWNrKT1cImNhbGN1bGF0ZUN5Y2xlRHVyYXRpb24ocHJvcGVydHkpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFjYWxjdWxhdGVDeWNsZUR1cmF0aW9uRW5hYmxlZChwcm9wZXJ0eSlcIj5cbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFDYWxjdWxhdG9yXCI+PC9mYS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChwcm9wZXJ0eS5rZXkgPT09ICdzdGFydERhdGUnKSB7XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIlxuICAgICAgICB0aXRsZT1cIkNhbGN1bGF0ZSB2YWx1ZSBmcm9tIGVuZERhdGUgYW5kIGN5Y2xlRHVyYXRpb25cIlxuICAgICAgICAoY2xpY2spPVwiY2FsY3VsYXRlQ3ljbGVTdGFydERhdGUocHJvcGVydHkpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFjYWxjdWxhdGVDeWNsZVN0YXJ0RGF0ZUVuYWJsZWQocHJvcGVydHkpXCI+XG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhQ2FsY3VsYXRvclwiPjwvZmEtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Nob3dOZXdQcm9wZXJ0eSBsZXQtcHJvcGVydHk+XG4gIEBpZiAocHJvcGVydHkuZWRpdGFibGUgJiYgKHByb3BlcnR5LmFkZFByb3BlcnR5RW5hYmxlZCB8fCBkZWVwRWRpdGFibGUpKSB7XG4gICAgPGhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICA8Zm9ybSBjbGFzcz1cInB5LTMgcHgtNCBpcy1mbGV4LWdyb3ctMVwiIChzdWJtaXQpPVwiYWRkUHJvcGVydHkocHJvcGVydHkpXCIgbm92YWxpZGF0ZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGlzLWhvcml6b250YWxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtbGFiZWwgaXMtc21hbGxcIiAqYmluZE9uY2U9XCJwcm9wZXJ0eVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWxcIiBbZm9yXT1cInByb3BlcnR5LmlkICsgJ19uZXcnXCI+XG4gICAgICAgICAgICAgIDxzcGFuPkFkZCBuZXcgZmllbGQ8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1ib2R5XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9uc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbCBpcy1leHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dCBpcy1zbWFsbFwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5Lm5ld1Byb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJwcm9wZXJ0eS5pZCArICdfbmV3J1wiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwicmFuZG9tbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBhbmQgc2VsZWN0IGZpZWxkIGZyb20gcmVzdWx0c1wiXG4gICAgICAgICAgICAgICAgICBbbmdiVHlwZWFoZWFkXT1cInByb3BlcnR5IHwgYXBwbHlQdXJlOiBzdWdnZXN0TmV3UHJvcGVydHlcIlxuICAgICAgICAgICAgICAgICAgW3Jlc3VsdFRlbXBsYXRlXT1cInN1Z2dlc3Rpb25cIlxuICAgICAgICAgICAgICAgICAgW2lucHV0Rm9ybWF0dGVyXT1cImZvcm1hdE5ld1Byb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgIFtmb2N1c0ZpcnN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtlZGl0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAoZm9jdXMpPVwidHlwZWFoZWFkRm9jdXMoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFwcm9wZXJ0eS5uZXdQcm9wZXJ0eSB8fCAhcHJvcGVydHkubmV3UHJvcGVydHkubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFQbHVzXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+QWRkPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2hlYWRlcj5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cInB0LTFcIj48L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwcm9wZXJ0eUVycm9yIGxldC1wcm9wZXJ0eT1cInByb3BlcnR5XCIgbGV0LWVkaXQ9XCJlZGl0XCI+XG4gIEBpZiAocHJvcGVydHkuZXJyb3IpIHtcbiAgICA8cCBjbGFzcz1cImhlbHBcIiBbY2xhc3MuaXMtZGFuZ2VyXT1cInByb3BlcnR5Lmhhc0Vycm9yXCIgW2NsYXNzLmlzLXdhcm5pbmddPVwicHJvcGVydHkuaGFzV2FybmluZ1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJpcy1wcmUtd3JhcFwiICpiaW5kT25jZT1cInByb3BlcnR5LmVycm9yXCIgW2lubmVySFRNTF09XCJwcm9wZXJ0eS5lcnJvci5tZXNzYWdlXCI+PC9zcGFuPlxuICAgICAgQGlmIChlZGl0ICYmIGVycm9yc0VkaXRhYmxlICYmIHByb3BlcnR5LmVycm9yLmluZGV4ID49IDApIHtcbiAgICAgICAgPGEgY2xhc3M9XCJwbC0yXCIgKGNsaWNrKT1cImVkaXRFcnJvcihwcm9wZXJ0eSlcIj5cbiAgICAgICAgICA8ZmEtaWNvbiBjbGFzcz1cInByLTJcIiBbaWNvbl09XCJmYUVkaXRcIj48L2ZhLWljb24+XG4gICAgICAgICAgPHNwYW4+RWRpdDwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgfVxuICAgICAgQGlmICgocHJvcGVydHkuaGFzV2FybmluZyB8fCBlcnJvcnNFZGl0YWJsZSkgJiYgcHJvcGVydHkuZXJyb3IuaW5kZXggPj0gMCkge1xuICAgICAgICA8YSBjbGFzcz1cInBsLTJcIiAoY2xpY2spPVwicmVzb2x2ZUVycm9yKHByb3BlcnR5KVwiPlxuICAgICAgICAgIDxmYS1pY29uIGNsYXNzPVwicHItMlwiIFtpY29uXT1cImZhQ2hlY2tcIj48L2ZhLWljb24+XG4gICAgICAgICAgPHNwYW4+UmVzb2x2ZWQ8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIH1cbiAgICA8L3A+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcHJvcGVydHlNYXAgbGV0LXByb3BlcnR5PlxuICBAaWYgKHNob3dNYXApIHtcbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwgaXMtZGVmYXVsdFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm9wZW4tZ3JvdXAgcGFuZWwtaGVhZGluZyBweS0wXCJcbiAgICAgICAgKGNsaWNrKT1cIm1hcFZpc2libGUgPSAhbWFwVmlzaWJsZVwiXG4gICAgICAgIHBvaW50ZXJcbiAgICAgICAgW2NsYXNzLmlzLW9wZW5dPVwibWFwVmlzaWJsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy1tb2JpbGUgaXMtdmNlbnRlcmVkIG1iLTBcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3cgcHktMSBteS0wXCI+XG4gICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUFuZ2xlRG93blwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIW1hcFZpc2libGVcIj48L2ZhLWljb24+XG4gICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUFuZ2xlUmlnaHRcIiBbY2xhc3MuaXMtaGlkZGVuXT1cIm1hcFZpc2libGVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uIHB5LTEgbXktMFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1zaXplLTZcIj5WaWV3IG9uIE1hcDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYmxvY2sgaXMtYmxvY2sgcC0wXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhbWFwVmlzaWJsZVwiPlxuICAgICAgICA8aGUtc2l0ZXMtbWFwcyBbc2l0ZXNdPVwiW25vZGVdXCIgW3Nob3dOb3RpY2VdPVwiZmFsc2VcIj48L2hlLXNpdGVzLW1hcHM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub2RlRXJyb3JGb3JtIGxldC1wcm9wZXJ0eT5cbiAgQGlmIChwcm9wZXJ0eS5uZXdFcnJvciAmJiBwcm9wZXJ0eS5lZGl0YWJsZSkge1xuICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsXCI+XG4gICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInByb3BlcnR5Lm5ld0Vycm9yLmxldmVsXCI+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJ1bmRlZmluZWRcIj5TZWxlY3QgTGV2ZWw8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcnJvclwiPkVycm9yPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwid2FybmluZ1wiPldhcm5pbmc8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkXCI+XG4gICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgIGNsYXNzPVwidGV4dGFyZWEgaXMtc21hbGxcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHkubmV3RXJyb3IubWVzc2FnZVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB5b3VyIG1lc3NhZ2UgaGVyZVwiXG4gICAgICAgICAgcm93cz1cIjFcIj48L3RleHRhcmVhPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhcHJvcGVydHkubmV3RXJyb3IubGV2ZWwgfHwgIXByb3BlcnR5Lm5ld0Vycm9yLm1lc3NhZ2VcIlxuICAgICAgICAgIChjbGljayk9XCJhZGRFcnJvcihwcm9wZXJ0eSwgcHJvcGVydHkubmV3RXJyb3IpXCI+XG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFQbHVzQ2lyY2xlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMlwiPkFkZDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwb3B1cEVycm9yRm9ybSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiPlxuICAgICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwiZGF0YS5sZXZlbFwiPlxuICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cInVuZGVmaW5lZFwiPlNlbGVjdCBMZXZlbDwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcnJvclwiPkVycm9yPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIndhcm5pbmdcIj5XYXJuaW5nPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgWyhuZ01vZGVsKV09XCJkYXRhLm1lc3NhZ2VcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgbWVzc2FnZSBoZXJlXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N1Z2dlc3Rpb24gbGV0LXI9XCJyZXN1bHRcIiBsZXQtdD1cInRlcm1cIj5cbiAgPG5nYi1oaWdobGlnaHRcbiAgICBbdGl0bGVdPVwici5iaWJsaW9ncmFwaHk/LnRpdGxlIHx8IHIuYmlibGlvZ3JhcGh5Py5kb2N1bWVudERPSSB8fCByLmJpYmxpb2dyYXBoeT8uc2NvcHVzIHx8IHIubmFtZVwiXG4gICAgW3Jlc3VsdF09XCJyLmJpYmxpb2dyYXBoeT8udGl0bGUgfHwgci5iaWJsaW9ncmFwaHk/LmRvY3VtZW50RE9JIHx8IHIuYmlibGlvZ3JhcGh5Py5zY29wdXMgfHwgci5uYW1lXCJcbiAgICBbdGVybV09XCJ0XCI+PC9uZ2ItaGlnaGxpZ2h0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb252ZXJ0VW5pdHMgbGV0LXZhbHVlPVwidmFsdWVcIiBsZXQtdGVybT1cInRlcm1cIiBsZXQtdW5pdHM9XCJ1bml0c1wiPlxuICA8aGUtdW5pdC1jb252ZXJ0ZXIgW3ZhbHVlXT1cInZhbHVlXCIgW3Rlcm1dPVwidGVybVwiIFt0b1VuaXRzXT1cInVuaXRzXCI+PC9oZS11bml0LWNvbnZlcnRlcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
535
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZm9ybS1lZGl0YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZmlsZXMvZmlsZXMtZm9ybS1lZGl0YWJsZS9maWxlcy1mb3JtLWVkaXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9maWxlcy9maWxlcy1mb3JtLWVkaXRhYmxlL2ZpbGVzLWZvcm0tZWRpdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztBQUM3QixPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxFQUFzQixVQUFVLEVBQUUsUUFBUSxFQUFrQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hILE9BQU8sRUFBYyxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLElBQUksVUFBVSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDOUUsT0FBTyxF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QURsQixLQUFLO2dCQU1DLGNBQWM7c0JBRHBCLEtBQUs7Z0JBT0MsOEJBQThCO3NCQURwQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBFbGVtZW50UmVmLCBvdXRwdXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBtZXJnZU1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLmdldCc7XG5pbXBvcnQgc2V0IGZyb20gJ2xvZGFzaC5zZXQnO1xuaW1wb3J0IHsgSlNPTiBhcyBIZXN0aWFKc29uLCBTY2hlbWFUeXBlLCBOb2RlVHlwZSwgQmlibGlvZ3JhcGh5LCBTb3VyY2UsIFByb3BlcnR5IH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgZGVmaW5pdGlvbiwgbG9hZFNjaGVtYXMgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2pzb24tc2NoZW1hJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCB7IEZhSWNvbkNvbXBvbmVudCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IGZhSWRCYWRnZSBhcyBmYXJJZEJhZGdlIH0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtcmVndWxhci1zdmctaWNvbnMnO1xuaW1wb3J0IHtcbiAgZmFBbmdsZURvd24sXG4gIGZhQW5nbGVSaWdodCxcbiAgZmFDYWxjdWxhdG9yLFxuICBmYUNoZWNrLFxuICBmYUNsb25lLFxuICBmYUNvbW1lbnRzLFxuICBmYUVkaXQsXG4gIGZhRXhjbGFtYXRpb25UcmlhbmdsZSxcbiAgZmFFeHRlcm5hbExpbmtBbHQsXG4gIGZhTG9uZ0Fycm93QWx0RG93bixcbiAgZmFMb25nQXJyb3dBbHRVcCxcbiAgZmFNYXBNYXJrZWRBbHQsXG4gIGZhUGx1cyxcbiAgZmFQbHVzQ2lyY2xlLFxuICBmYVNlYXJjaCxcbiAgZmFTcGlubmVyLFxuICBmYVRpbWVzXG59IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XG5cbmltcG9ydCB7XG4gIElFcnJvclByb3BlcnR5LFxuICBJTm9kZVByb3BlcnR5LFxuICBmb3JtYXRQcm9wZXJ0eUVycm9yLFxuICBwcm9wZXJ0eUVycm9yLFxuICBoYXNFcnJvcixcbiAgaGFzV2FybmluZyxcbiAgc3VnZ2VzdGlvblR5cGUsXG4gIGRlZmF1bHRTdWdnZXN0aW9uVHlwZSxcbiAgcmVjdXJzaXZlUHJvcGVydGllcyxcbiAgdHlwZVRvTmV3UHJvcGVydHksXG4gIHByb3BlcnR5SWQsXG4gIGlzQWRkUHJvcGVydHlFbmFibGVkLFxuICBub2RlQXZhaWxhYmxlUHJvcGVydGllcyxcbiAgc29ydFByb3BlcnRpZXMsXG4gIGdyb3VwQ2hhbmdlZCxcbiAgcGFyZW50UHJvcGVydHksXG4gIHNpYmxpbmdQcm9wZXJ0eSxcbiAgdXBkYXRlUHJvcGVydGllcyxcbiAgcmVmcmVzaFByb3BlcnR5S2V5cyxcbiAga2V5VG9EYXRhUGF0aCxcbiAgZmluZFByb3BlcnR5LFxuICBjYWxjdWxhdGVDeWNsZUR1cmF0aW9uRW5hYmxlZCxcbiAgY2FsY3VsYXRlQ3ljbGVEdXJhdGlvbixcbiAgY2FsY3VsYXRlQ3ljbGVTdGFydERhdGVFbmFibGVkLFxuICBjYWxjdWxhdGVDeWNsZVN0YXJ0RGF0ZSxcbiAgcGFyc2VOZXdWYWx1ZSxcbiAgZm9ybWF0dGVyLFxuICBJTmV3UHJvcGVydHlcbn0gZnJvbSAnLi4vZmlsZXMtZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBlcnJvckhhc0Vycm9yLCBlcnJvckhhc1dhcm5pbmcsIGZpbHRlckVycm9yLCBmb3JtYXRFcnJvciB9IGZyb20gJy4uL2ZpbGVzLWVycm9yLm1vZGVsJztcbmltcG9ydCB7IElWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi8uLi9zY2hlbWEvc2NoZW1hLXZhbGlkYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgSGVVc2Vyc1NlcnZpY2UgfSBmcm9tICcuLi8uLi91c2Vycy91c2Vycy5zZXJ2aWNlJztcbmltcG9ydCB7IEhlU2VhcmNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlYXJjaC9zZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBtYXRjaFR5cGUsIG1hdGNoUGhyYXNlUXVlcnksIG1hdGNoUGhyYXNlUHJlZml4UXVlcnksIG1hdGNoQm9vbFByZWZpeFF1ZXJ5IH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlYXJjaC5tb2RlbCc7XG5pbXBvcnQgeyBzYWZlSlNPTlBhcnNlLCBjb3B5T2JqZWN0LCB0eXBlYWhlYWRGb2N1cyB9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlscyc7XG5pbXBvcnQgeyBQbHVyYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vY29tbW9uL3BsdXJhbGl6ZS5waXBlJztcbmltcG9ydCB7IEFwcGx5UHVyZVBpcGUgfSBmcm9tICcuLi8uLi9jb21tb24vYXBwbHktcHVyZS5waXBlJztcbmltcG9ydCB7IFVuaXRDb252ZXJ0ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vdW5pdC1jb252ZXJ0ZXIvdW5pdC1jb252ZXJ0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNpdGVzTWFwc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NpdGVzL3NpdGVzLW1hcHMvc2l0ZXMtbWFwcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFnc0lucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vY29tbW9uL3RhZ3MtaW5wdXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTm9kZVJlY29tbWVuZGF0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1yZWNvbW1lbmRhdGlvbnMvbm9kZS1yZWNvbW1lbmRhdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7IFBvcG92ZXJDb25maXJtQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL3BvcG92ZXItY29uZmlybS9wb3BvdmVyLWNvbmZpcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFNjaGVtYVZlcnNpb25MaW5rQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tbW9uL3NjaGVtYS12ZXJzaW9uLWxpbmsvc2NoZW1hLXZlcnNpb24tbGluay5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmluZE9uY2VEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9jb21tb24vYmluZC1vbmNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTY2hlbWFJbmZvQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2NoZW1hL3NjaGVtYS1pbmZvL3NjaGVtYS1pbmZvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ2JUb29sdGlwLCBOZ2JUeXBlYWhlYWQsIE5nYlBvcG92ZXIsIE5nYkhpZ2hsaWdodCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IEJpYmxpb2dyYXBoaWVzU2VhcmNoQ29uZmlybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2JpYmxpb2dyYXBoaWVzL2JpYmxpb2dyYXBoaWVzLXNlYXJjaC1jb25maXJtL2JpYmxpb2dyYXBoaWVzLXNlYXJjaC1jb25maXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXBzRHJhd2luZ0NvbmZpcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21tb24vbWFwcy1kcmF3aW5nLWNvbmZpcm0vbWFwcy1kcmF3aW5nLWNvbmZpcm0uY29tcG9uZW50JztcbmltcG9ydCB7IE5vZGVJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS9ub2RlLWljb24vbm9kZS1pY29uLmNvbXBvbmVudCc7XG5cbmNvbnN0IE1JTl9UWVBFQUhFQURfTEVOR1RIID0gMjtcbmNvbnN0IHBvcHVsYXRlVGVybUZpZWxkcyA9IFsndGVybVR5cGUnLCAndW5pdHMnXTtcbmNvbnN0IHBvcHVsYXRlVGVybURlZmF1bHRQcm9wZXJ0aWVzID0gW1xuICAnZGVmYXVsdFByb3BlcnRpZXMudGVybS5uYW1lJyxcbiAgJ2RlZmF1bHRQcm9wZXJ0aWVzLnRlcm0udW5pdHMnLFxuICAnZGVmYXVsdFByb3BlcnRpZXMudmFsdWUnXG5dO1xuXG5jb25zdCBmb3JtYXRQcm9wZXJ0eSA9IChwcm9wOiBQcm9wZXJ0eSkgPT4gKHtcbiAgJ0B0eXBlJzogU2NoZW1hVHlwZS5Qcm9wZXJ0eSxcbiAgLi4ucHJvcCxcbiAgdGVybToge1xuICAgICdAdHlwZSc6IE5vZGVUeXBlLlRlcm0sXG4gICAgLi4ucHJvcC50ZXJtXG4gIH1cbn0pO1xuXG5jb25zdCBmb3JtYXRTdWdnZXN0aW9uID0gKHsgZGVmYXVsdFByb3BlcnRpZXMsIC4uLm5vZGUgfTogYW55KSA9PiAoe1xuICAuLi5ub2RlLFxuICAuLi4oZGVmYXVsdFByb3BlcnRpZXM/Lmxlbmd0aCA/IHsgZGVmYXVsdFByb3BlcnRpZXM6IGRlZmF1bHRQcm9wZXJ0aWVzLm1hcChmb3JtYXRQcm9wZXJ0eSkgfSA6IHt9KVxufSk7XG5cbmNvbnN0IGZvcm1hdExpbmtOb2Rlc1ByZWZpeCA9ICdMaW5rIHdpdGgnO1xuXG4vLyBwYXRjaCBlcnJvciB3aGVuIGxpbmsgaXMgbm90IHdvcmtpbmcgY29ycmVjdGx5XG5jb25zdCBjbGVhbk5ld1ZhbHVlID0gdmFsdWUgPT5cbiAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5pZFxuICAgID8geyAuLi52YWx1ZSwgaWQ6IGNsZWFuTmV3VmFsdWUodmFsdWUuaWQpIH1cbiAgICA6IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbiAgICAgID8gdmFsdWUuc3RhcnRzV2l0aChmb3JtYXRMaW5rTm9kZXNQcmVmaXgpXG4gICAgICAgID8gdmFsdWUuc3BsaXQoJzonKVsxXS50cmltKClcbiAgICAgICAgOiB2YWx1ZVxuICAgICAgOiB2YWx1ZTtcblxuY29uc3QgZm9ybWF0TGlua05vZGVzU3VnZ2VzdGlvbnMgPSAobm9kZU1hcDogeyBbdHlwZSBpbiBOb2RlVHlwZV0/OiBzdHJpbmdbXSB9LCB0eXBlOiBOb2RlVHlwZSkgPT5cbiAgKG5vZGVNYXBbdHlwZV0gfHwgW10pLm1hcChpZCA9PiAoeyB0eXBlLCBpZCwgbmFtZTogYCR7Zm9ybWF0TGlua05vZGVzUHJlZml4fSAke3R5cGV9OiAke2lkfWAgfSkpO1xuXG50eXBlIHN1Z2dlc3RGdW5jID0gKHRlcm06IHN0cmluZywgcHJvcGVydHk6IElOb2RlUHJvcGVydHkpID0+IE9ic2VydmFibGU8YW55W10+O1xuXG5jb25zdCBpbnNlcnRQcm9wZXJ0eSA9IChwcm9wZXJ0aWVzOiBJTm9kZVByb3BlcnR5W10sIGtleTogc3RyaW5nLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4ge1xuICBjb25zdCBleGlzdGluZ1Byb3BlcnR5SW5kZXggPSBwcm9wZXJ0aWVzLmZpbmRJbmRleCh2ID0+IHYuZnVsbEtleSA9PT0ga2V5KTtcbiAgZXhpc3RpbmdQcm9wZXJ0eUluZGV4ID49IDAgPyAocHJvcGVydGllc1tleGlzdGluZ1Byb3BlcnR5SW5kZXhdID0gcHJvcGVydHkpIDogcHJvcGVydGllcy5wdXNoKHByb3BlcnR5KTtcbiAgcHJvcGVydGllcy5zb3J0KHNvcnRQcm9wZXJ0aWVzKTtcbiAgcmV0dXJuIHByb3BlcnRpZXM7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1maWxlcy1mb3JtLWVkaXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGVzLWZvcm0tZWRpdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maWxlcy1mb3JtLWVkaXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBGYUljb25Db21wb25lbnQsXG4gICAgTm9kZUljb25Db21wb25lbnQsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBNYXBzRHJhd2luZ0NvbmZpcm1Db21wb25lbnQsXG4gICAgQmlibGlvZ3JhcGhpZXNTZWFyY2hDb25maXJtQ29tcG9uZW50LFxuICAgIE5nYlRvb2x0aXAsXG4gICAgU2NoZW1hSW5mb0NvbXBvbmVudCxcbiAgICBCaW5kT25jZURpcmVjdGl2ZSxcbiAgICBTY2hlbWFWZXJzaW9uTGlua0NvbXBvbmVudCxcbiAgICBQb3BvdmVyQ29uZmlybUNvbXBvbmVudCxcbiAgICBOb2RlUmVjb21tZW5kYXRpb25zQ29tcG9uZW50LFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5nYlR5cGVhaGVhZCxcbiAgICBUYWdzSW5wdXREaXJlY3RpdmUsXG4gICAgTmdDbGFzcyxcbiAgICBOZ2JQb3BvdmVyLFxuICAgIFNpdGVzTWFwc0NvbXBvbmVudCxcbiAgICBOZ2JIaWdobGlnaHQsXG4gICAgVW5pdENvbnZlcnRlckNvbXBvbmVudCxcbiAgICBBcHBseVB1cmVQaXBlLFxuICAgIFBsdXJhbGl6ZVBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlc0Zvcm1FZGl0YWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyByZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHByaXZhdGUgc2VhcmNoU2VydmljZSA9IGluamVjdChIZVNlYXJjaFNlcnZpY2UpO1xuICBwcml2YXRlIHVzZXJzU2VydmljZSA9IGluamVjdChIZVVzZXJzU2VydmljZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhRXh0ZXJuYWxMaW5rQWx0ID0gZmFFeHRlcm5hbExpbmtBbHQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYVRpbWVzID0gZmFUaW1lcztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhQW5nbGVEb3duID0gZmFBbmdsZURvd247XG4gIHByb3RlY3RlZCByZWFkb25seSBmYUFuZ2xlUmlnaHQgPSBmYUFuZ2xlUmlnaHQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYUNsb25lID0gZmFDbG9uZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhTG9uZ0Fycm93QWx0VXAgPSBmYUxvbmdBcnJvd0FsdFVwO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFMb25nQXJyb3dBbHREb3duID0gZmFMb25nQXJyb3dBbHREb3duO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFQbHVzQ2lyY2xlID0gZmFQbHVzQ2lyY2xlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFFeGNsYW1hdGlvblRyaWFuZ2xlID0gZmFFeGNsYW1hdGlvblRyaWFuZ2xlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFQbHVzID0gZmFQbHVzO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFFZGl0ID0gZmFFZGl0O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFDaGVjayA9IGZhQ2hlY2s7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYVNwaW5uZXIgPSBmYVNwaW5uZXI7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYUNvbW1lbnRzID0gZmFDb21tZW50cztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZhTWFwTWFya2VkQWx0ID0gZmFNYXBNYXJrZWRBbHQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBmYVNlYXJjaCA9IGZhU2VhcmNoO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFDYWxjdWxhdG9yID0gZmFDYWxjdWxhdG9yO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmFySWRCYWRnZSA9IGZhcklkQmFkZ2U7XG5cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBzY2hlbWFzID0gbG9hZFNjaGVtYXMoKTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBlcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbm9kZT86IEhlc3RpYUpzb248U2NoZW1hVHlwZT47XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBub2RlTWFwOiB7IFt0eXBlIGluIE5vZGVUeXBlXT86IHN0cmluZ1tdIH0gPSB7fTtcbiAgQElucHV0KClcbiAgcHVibGljIGVycm9yTW9kZSA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGVlcEVkaXRhYmxlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENhbiBlZGl0IGVycm9ycy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBlcnJvcnNFZGl0YWJsZSA9IGZhbHNlO1xuICAvKipcbiAgICogV2hlbiBzZWxlY3RpbmcgdGVybXMsIHdpbGwgc2hvdyBkZWZhdWx0IHByb3BlcnRpZXMgb3Igbm90LlxuICAgKiBTaG91bGQgYmUgYGZhbHNlYCB3aGVuIHVzaW5nIHNjaGVtYSB2YWxpZGF0aW9uLCBhcyBvbmx5IHRoZSBgbmFtZWAgd291bGQgYmUgYWRkZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvd1N1Z2dlc3RlZERlZmF1bHRQcm9wZXJ0aWVzID0gdHJ1ZTtcblxuICBwcm90ZWN0ZWQgbm9kZUNoYW5nZWQgPSBvdXRwdXQ8eyBrZXk6IHN0cmluZzsgdmFsdWU6IGFueSB9PigpO1xuICBwcm90ZWN0ZWQgbm9kZUVyb3JyUmVzb2x2ZWQgPSBvdXRwdXQ8bnVtYmVyPigpO1xuICBwcm90ZWN0ZWQgbm9kZUVycm9yQWRkZWQgPSBvdXRwdXQ8SVZhbGlkYXRpb25FcnJvcj4oKTtcblxuICBwdWJsaWMgTm9kZVR5cGUgPSBOb2RlVHlwZTtcbiAgcHVibGljIFNjaGVtYVR5cGUgPSBTY2hlbWFUeXBlO1xuICBwdWJsaWMgaXNPcGVuID0gdHJ1ZTtcbiAgcHVibGljIG1hcFZpc2libGUgPSBmYWxzZTtcbiAgcHVibGljIGZvcm1hdFByb3BlcnR5RXJyb3IgPSBmb3JtYXRQcm9wZXJ0eUVycm9yO1xuICBwdWJsaWMgdHlwZWFoZWFkRm9jdXMgPSB0eXBlYWhlYWRGb2N1cztcbiAgcHVibGljIG1hcERyYXdpbmdQcm9wZXJ0eT86IElOb2RlUHJvcGVydHk7XG4gIHB1YmxpYyBiaWJsaW9ncmFwaGllc1NlYXJjaFByb3BlcnR5PzogSU5vZGVQcm9wZXJ0eTtcbiAgcHVibGljIG5vZGVQcm9wZXJ0eT86IElOb2RlUHJvcGVydHk7XG4gIHB1YmxpYyBwcm9wZXJ0aWVzOiBJTm9kZVByb3BlcnR5W10gPSBbXTtcblxuICBwdWJsaWMgc3VnZ2VzdE5ld1Byb3BlcnR5ID1cbiAgICAoeyBmdWxsS2V5IH06IElOb2RlUHJvcGVydHkpID0+XG4gICAgKHRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz4pID0+XG4gICAgICB0ZXh0JC5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzd2l0Y2hNYXAodGVybSA9PiBvZih0aGlzLm5ld1Byb3BlcnRpZXMoZmluZFByb3BlcnR5KHRoaXMucHJvcGVydGllcywgZnVsbEtleSkgfHwgdGhpcy5ub2RlUHJvcGVydHksIHRlcm0pKSlcbiAgICAgICk7XG4gIHB1YmxpYyBmb3JtYXROZXdQcm9wZXJ0eSA9ICh7IG5hbWUgfTogSU5ld1Byb3BlcnR5KSA9PiBuYW1lO1xuXG4gIHByaXZhdGUgc3VnZ2VzdEV4aXN0aW5nTm9kZSA9ICh0eXBlOiBOb2RlVHlwZSwgdGVybTogc3RyaW5nLCB1bmlxdWVLZXkgPSAnQGlkJykgPT5cbiAgICB0ZXJtLmxlbmd0aCA8IE1JTl9UWVBFQUhFQURfTEVOR1RIXG4gICAgICA/IG9mKFtdKVxuICAgICAgOiB0aGlzLnNlYXJjaFNlcnZpY2Uuc3VnZ2VzdCQoXG4gICAgICAgICAgdGVybSxcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIFtdLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJvb2w6IHtcbiAgICAgICAgICAgICAgbXVzdDogW21hdGNoVHlwZSh0eXBlKV0sXG4gICAgICAgICAgICAgIHNob3VsZDogW1xuICAgICAgICAgICAgICAgIG1hdGNoUGhyYXNlUXVlcnkodGVybSwgMTAwLCB1bmlxdWVLZXkpLFxuICAgICAgICAgICAgICAgIG1hdGNoUGhyYXNlUHJlZml4UXVlcnkodGVybSwgMjAsIHVuaXF1ZUtleSksXG4gICAgICAgICAgICAgICAgbWF0Y2hCb29sUHJlZml4UXVlcnkodGVybSwgMTAsIHVuaXF1ZUtleSlcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgbWluaW11bV9zaG91bGRfbWF0Y2g6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIDEwLFxuICAgICAgICAgIHRoaXMuc3VnZ2VzdFRlcm1GaWVsZHNcbiAgICAgICAgKTtcblxuICBwcml2YXRlIHN1Z2dlc3ROb2RlID0gKHR5cGU6IE5vZGVUeXBlLCBzdWdnZXN0RGVmYXVsdD86IHN1Z2dlc3RGdW5jKSA9PiAodGVybTogc3RyaW5nLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT5cbiAgICAocHJvcGVydHkuc3VnZ2VzdGlvbnM/LmlzVW5pcXVlS2V5XG4gICAgICA/IHRoaXMuc3VnZ2VzdEV4aXN0aW5nTm9kZSh0eXBlLCB0ZXJtLCBwcm9wZXJ0eS5zdWdnZXN0aW9ucy5pc1VuaXF1ZUtleSlcbiAgICAgIDogcHJvcGVydHkuc3VnZ2VzdGlvbnM/LmlzTGlua05vZGVcbiAgICAgICAgPyBvZihmb3JtYXRMaW5rTm9kZXNTdWdnZXN0aW9ucyh0aGlzLm5vZGVNYXAsIHR5cGUpKVxuICAgICAgICA6IHN1Z2dlc3REZWZhdWx0XG4gICAgICAgICAgPyBzdWdnZXN0RGVmYXVsdCh0ZXJtLCBwcm9wZXJ0eSlcbiAgICAgICAgICA6IG9mKFtdKVxuICAgICkucGlwZShtYXAoKHJlczogYW55KSA9PiByZXMubWFwKGZvcm1hdFN1Z2dlc3Rpb24pKSk7XG5cbiAgcHJpdmF0ZSBzdWdnZXN0ZXI6IHtcbiAgICBbdHlwZSBpbiBzdWdnZXN0aW9uVHlwZV0/OiBzdWdnZXN0RnVuYztcbiAgfSA9IHtcbiAgICBkZWZhdWx0OiAodGVybSwgcHJvcGVydHkpID0+XG4gICAgICBvZihcbiAgICAgICAgKHByb3BlcnR5Py5zdWdnZXN0aW9ucz8udmFsdWVzIHx8IFtdKVxuICAgICAgICAgIC5tYXAodiA9PiBgJHt2fWApXG4gICAgICAgICAgLmZpbHRlcih2ID0+IHYudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtLnRvTG93ZXJDYXNlKCkpKVxuICAgICAgICAgIC5tYXAobmFtZSA9PiAoeyBuYW1lIH0pKVxuICAgICAgKSxcbiAgICBbTm9kZVR5cGUuQWN0b3JdOiB0aGlzLnN1Z2dlc3ROb2RlKE5vZGVUeXBlLkFjdG9yKSxcbiAgICBbTm9kZVR5cGUuQ3ljbGVdOiB0aGlzLnN1Z2dlc3ROb2RlKE5vZGVUeXBlLkN5Y2xlKSxcbiAgICBbTm9kZVR5cGUuSW1wYWN0QXNzZXNzbWVudF06IHRoaXMuc3VnZ2VzdE5vZGUoTm9kZVR5cGUuSW1wYWN0QXNzZXNzbWVudCksXG4gICAgW05vZGVUeXBlLk9yZ2FuaXNhdGlvbl06IHRoaXMuc3VnZ2VzdE5vZGUoTm9kZVR5cGUuT3JnYW5pc2F0aW9uKSxcbiAgICBbTm9kZVR5cGUuU2l0ZV06IHRoaXMuc3VnZ2VzdE5vZGUoTm9kZVR5cGUuU2l0ZSksXG4gICAgW05vZGVUeXBlLlNvdXJjZV06IHRoaXMuc3VnZ2VzdE5vZGUoTm9kZVR5cGUuU291cmNlLCAodGVybSwgeyBrZXkgfSkgPT5cbiAgICAgIHRlcm0ubGVuZ3RoIDwgTUlOX1RZUEVBSEVBRF9MRU5HVEhcbiAgICAgICAgPyBvZihbXSlcbiAgICAgICAgOiB0aGlzLnNlYXJjaFNlcnZpY2Uuc3VnZ2VzdFNvdXJjZSQodGVybSwgNSwgW2BiaWJsaW9ncmFwaHkuJHtrZXl9YF0sIFtgYmlibGlvZ3JhcGh5LiR7a2V5fWBdKVxuICAgICksXG4gICAgW05vZGVUeXBlLlRlcm1dOiB0aGlzLnN1Z2dlc3ROb2RlKE5vZGVUeXBlLlRlcm0sICh0ZXJtLCB7IHN1Z2dlc3Rpb25zIH0pID0+XG4gICAgICB0ZXJtLmxlbmd0aCA8IE1JTl9UWVBFQUhFQURfTEVOR1RIXG4gICAgICAgID8gb2YoW10pXG4gICAgICAgIDogdGhpcy5zZWFyY2hTZXJ2aWNlLnN1Z2dlc3QkKHRlcm0sIE5vZGVUeXBlLlRlcm0sIHN1Z2dlc3Rpb25zPy5xdWVyaWVzIHx8IFtdLCBudWxsLCA1LCB0aGlzLnN1Z2dlc3RUZXJtRmllbGRzKVxuICAgIClcbiAgfTtcbiAgcHVibGljIHByb3BlcnR5U3VnZ2VzdCA9XG4gICAgKHsgZnVsbEtleSwgc3VnZ2VzdGlvbnMgfTogSU5vZGVQcm9wZXJ0eSkgPT5cbiAgICAodGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPikgPT5cbiAgICAgIHRleHQkLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZShzdWdnZXN0aW9ucz8udHlwZSA9PT0gZGVmYXVsdFN1Z2dlc3Rpb25UeXBlID8gMCA6IDMwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIG1lcmdlTWFwKHRlcm0gPT4ge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gZmluZFByb3BlcnR5KHRoaXMucHJvcGVydGllcywgZnVsbEtleSk7XG4gICAgICAgICAgcmV0dXJuIHByb3BlcnR5Py5lZGl0YWJsZSAmJiBzdWdnZXN0aW9ucz8udHlwZSBpbiB0aGlzLnN1Z2dlc3RlclxuICAgICAgICAgICAgPyBvZih0ZXJtKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiAocHJvcGVydHkubG9hZGluZyA9IHRydWUpKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5zdWdnZXN0ZXJbc3VnZ2VzdGlvbnM/LnR5cGVdISh0ZXJtLCBwcm9wZXJ0eSkpLFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiAocHJvcGVydHkubG9hZGluZyA9IGZhbHNlKSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBvZihbXSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHNjaGVtYVR5cGUgPSB0aGlzLm5vZGUhLnR5cGUgfHwgdGhpcy5ub2RlIVsnQHR5cGUnXTtcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLnNjaGVtYXM/LltzY2hlbWFUeXBlXSA/PyAoe30gYXMgZGVmaW5pdGlvbik7XG4gICAgY29uc3QgZXJyb3JzID0gdGhpcy5lcnJvcnMuZmlsdGVyKGZpbHRlckVycm9yKTtcbiAgICBjb25zdCBlcnJvciA9IHByb3BlcnR5RXJyb3IoZXJyb3JzKSgnJyk7XG4gICAgdGhpcy5ub2RlUHJvcGVydHkgPSB0aGlzLnNjaGVtYXNcbiAgICAgID8ge1xuICAgICAgICAgIGlkOiBwcm9wZXJ0eUlkKCksXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIHNjaGVtYVR5cGUsXG4gICAgICAgICAgZWRpdGFibGU6ICEhdGhpcy5ub2RlIS50eXBlLFxuICAgICAgICAgIGZ1bGxLZXk6ICcnLFxuICAgICAgICAgIGtleTogJycsXG4gICAgICAgICAgdmFsdWU6IHt9LFxuICAgICAgICAgIGVycm9yOiBmb3JtYXRFcnJvcihlcnJvciksXG4gICAgICAgICAgaGFzRXJyb3I6IGVycm9ySGFzRXJyb3IoZXJyb3IpLFxuICAgICAgICAgIGhhc1dhcm5pbmc6IGVycm9ySGFzV2FybmluZyhlcnJvciksXG4gICAgICAgICAgc3VnZ2VzdGlvbnM6IHt9LFxuICAgICAgICAgIG5ld1Byb3BlcnR5OiB7fSxcbiAgICAgICAgICBuZXdFcnJvcjogeyBsZXZlbDogJ3dhcm5pbmcnIH0sXG4gICAgICAgICAgcHJvcGVydGllczogW10sXG4gICAgICAgICAgYWRkUHJvcGVydHlFbmFibGVkOiBpc0FkZFByb3BlcnR5RW5hYmxlZCh0aGlzLm5vZGUhLCBzY2hlbWFUeXBlLCBzY2hlbWEpLFxuICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyKCcnKVxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCByZWN1cnNlciA9IHJlY3Vyc2l2ZVByb3BlcnRpZXModGhpcy5zY2hlbWFzISwgZXJyb3JzLCBzY2hlbWEsIHRoaXMuZGVlcEVkaXRhYmxlKTtcbiAgICB0aGlzLnByb3BlcnRpZXMgPSByZWN1cnNlcih0aGlzLm5vZGUpO1xuICB9XG5cbiAgcHVibGljIHRyYWNrQnlJbmRleChpbmRleDogbnVtYmVyLCBfdmFsdWU6IGFueSkge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5UHJvcGVydHkoX2luZGV4OiBudW1iZXIsIHsgaWQsIGZ1bGxLZXkgfTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIHJldHVybiBbZnVsbEtleSwgaWRdLmpvaW4oJ18nKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNBZGRvbnMocHJvcGVydHk6IElOb2RlUHJvcGVydHkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgcHJvcGVydHkgJiZcbiAgICAgICh0aGlzLmVuYWJsZUFkZEVycm9yKHByb3BlcnR5KSB8fFxuICAgICAgICBwcm9wZXJ0eS5lZGl0YWJsZSB8fFxuICAgICAgICB0aGlzLmFkZFByb3BlcnR5RW5hYmxlZChwcm9wZXJ0eSkgfHxcbiAgICAgICAgdGhpcy5pc1JlcXVpcmVkKHByb3BlcnR5KSB8fFxuICAgICAgICBwcm9wZXJ0eS5leHRlcm5hbFVybD8udXJsIHx8XG4gICAgICAgIHRoaXMubWFwRHJhd2luZ01vZGVzKHByb3BlcnR5KS5sZW5ndGggfHxcbiAgICAgICAgdGhpcy51bml0Q29udmVydGVyRW5hYmxlZChwcm9wZXJ0eSkpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1JlcXVpcmVkKHsgdmFsdWUsIGlzUmVxdWlyZWQgfTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIHJldHVybiBpc1JlcXVpcmVkICYmIGlzRW1wdHkodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgc3VnZ2VzdFRlcm1GaWVsZHMoKSB7XG4gICAgcmV0dXJuIFsuLi5wb3B1bGF0ZVRlcm1GaWVsZHMsIC4uLih0aGlzLnNob3dTdWdnZXN0ZWREZWZhdWx0UHJvcGVydGllcyA/IHBvcHVsYXRlVGVybURlZmF1bHRQcm9wZXJ0aWVzIDogW10pXTtcbiAgfVxuXG4gIC8vIC0tLSBFcnJvcnNcblxuICBwdWJsaWMgZW5hYmxlQWRkRXJyb3IocHJvcGVydHk6IElOb2RlUHJvcGVydHkpIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcnNFZGl0YWJsZSAmJiAhcHJvcGVydHkuaGFzRXJyb3IgJiYgIXByb3BlcnR5Lmhhc1dhcm5pbmc7XG4gIH1cblxuICBwdWJsaWMgYWRkRXJyb3IocHJvcGVydHk6IElOb2RlUHJvcGVydHksIHsgbWVzc2FnZSwgbGV2ZWwgfTogSUVycm9yUHJvcGVydHkpIHtcbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IHByb3BlcnR5LmZ1bGxLZXkuc3BsaXQoJy4nKTtcbiAgICBrZXlzLnBvcCgpO1xuICAgIGNvbnN0IGVycm9yOiBJVmFsaWRhdGlvbkVycm9yID0gcHJvcGVydHkuaXNBZGRlZFxuICAgICAgPyB7XG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBsZXZlbDogbGV2ZWwgfHwgJ2Vycm9yJyxcbiAgICAgICAgICBkYXRhUGF0aDoga2V5VG9EYXRhUGF0aChrZXlzLmpvaW4oJy4nKSksXG4gICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICBtaXNzaW5nUHJvcGVydHk6IHByb3BlcnR5LmtleVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBsZXZlbDogbGV2ZWwgfHwgJ2Vycm9yJyxcbiAgICAgICAgICBkYXRhUGF0aDoga2V5VG9EYXRhUGF0aChwcm9wZXJ0eS5mdWxsS2V5KVxuICAgICAgICB9O1xuICAgIHByb3BlcnR5Lm5ld0Vycm9yID0geyBsZXZlbDogJ3dhcm5pbmcnIH07XG4gICAgcHJvcGVydHkuZXJyb3IgPSBlcnJvcjtcbiAgICBwcm9wZXJ0eS5oYXNFcnJvciA9IGVycm9ySGFzRXJyb3IoZXJyb3IpO1xuICAgIHByb3BlcnR5Lmhhc1dhcm5pbmcgPSBlcnJvckhhc1dhcm5pbmcoZXJyb3IpO1xuICAgIHRoaXMubm9kZUVycm9yQWRkZWQuZW1pdChlcnJvcik7XG4gIH1cblxuICBwdWJsaWMgZWRpdEVycm9yKHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSB7XG4gICAgcHJvcGVydHkubmV3RXJyb3IgPSBwcm9wZXJ0eS5lcnJvcjtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlRXJyb3IocHJvcGVydHk6IElOb2RlUHJvcGVydHkpIHtcbiAgICBjb25zdCBpbmRleCA9IHByb3BlcnR5LmVycm9yPy5pbmRleDtcbiAgICBwcm9wZXJ0eS5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICBwcm9wZXJ0eS5oYXNFcnJvciA9IGhhc0Vycm9yKHByb3BlcnR5LnByb3BlcnRpZXMpO1xuICAgIHByb3BlcnR5Lmhhc1dhcm5pbmcgPSBoYXNXYXJuaW5nKHByb3BlcnR5LnByb3BlcnRpZXMpO1xuICAgIHRoaXMubm9kZUVyb3JyUmVzb2x2ZWQuZW1pdChpbmRleCk7XG4gICAgcmV0dXJuIGdyb3VwQ2hhbmdlZCh0aGlzLnByb3BlcnRpZXMsIHByb3BlcnR5LmZ1bGxLZXkpO1xuICB9XG5cbiAgLy8gLS0tXG5cbiAgcHVibGljIGFkZFByb3BlcnR5RW5hYmxlZChwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIHJldHVybiAhdGhpcy5lcnJvcnNFZGl0YWJsZSAmJiBwcm9wZXJ0eS5hZGRQcm9wZXJ0eUVuYWJsZWQ7XG4gIH1cblxuICBwcml2YXRlIG5ld1Byb3BlcnRpZXMocHJvcGVydHk6IElOb2RlUHJvcGVydHksIGZpZWxkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gbm9kZUF2YWlsYWJsZVByb3BlcnRpZXModGhpcy5ub2RlISwgcHJvcGVydHkpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKVxuICAgICAgLmZpbHRlcihwcm9wID0+IHByb3AudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWVsZC50b0xvd2VyQ2FzZSgpKSlcbiAgICAgIC5tYXAobmFtZSA9PiAoeyBuYW1lLCBwcm9wOiBwcm9wZXJ0aWVzW25hbWVdIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZVByb3BlcnR5RGF0YShwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSwgZGF0YTogYW55LCBlZGl0YWJsZT86IGJvb2xlYW4sIHJlcGxhY2VQYXJlbnQgPSB0cnVlKSB7XG4gICAgY29uc3QgcGFyZW50ID0gcmVwbGFjZVBhcmVudCA/IHBhcmVudFByb3BlcnR5KHRoaXMucHJvcGVydGllcywgcHJvcGVydHkpIDogcHJvcGVydHk7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHJlY3Vyc2l2ZVByb3BlcnRpZXMoXG4gICAgICB0aGlzLnNjaGVtYXMhLFxuICAgICAgW10sXG4gICAgICB0aGlzLnNjaGVtYXMhW3RoaXMubm9kZSEudHlwZV0sXG4gICAgICB0aGlzLmRlZXBFZGl0YWJsZSxcbiAgICAgIHBhcmVudC5mdWxsS2V5XG4gICAgKShkYXRhKTtcbiAgICB1cGRhdGVQcm9wZXJ0aWVzKHsgcHJvcGVydGllcyB9LCBwcm9wID0+IHtcbiAgICAgIHByb3AuZWRpdGFibGUgPSB0eXBlb2YgZWRpdGFibGUgPT09ICd1bmRlZmluZWQnID8gcHJvcC5lZGl0YWJsZSA6IGVkaXRhYmxlO1xuICAgICAgcmV0dXJuIHByb3A7XG4gICAgfSk7XG4gICAgcGFyZW50LmVkaXRhYmxlID0gdHlwZW9mIGVkaXRhYmxlID09PSAndW5kZWZpbmVkJyA/IHBhcmVudC5lZGl0YWJsZSA6IGVkaXRhYmxlO1xuICAgIHBhcmVudC5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICBwYXJlbnQudmFsdWUgPSBkYXRhO1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5Q2hhbmdlZChkYXRhLCBwYXJlbnQpO1xuICB9XG5cbiAgcHVibGljIHN1Z2dlc3Rpb25TZWxlY3RlZCh7ICdAaWQnOiBfaWQsIG5hbWUsIHR5cGUsIGlkLCAuLi5kYXRhIH0sIHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSB7XG4gICAgcmV0dXJuIF9pZFxuICAgICAgPyAvLyBzdWdnZXN0aW9ucyBmcm9tIGV4aXN0aW5nIG5vZGVzXG4gICAgICAgIHRoaXMucmVwbGFjZVByb3BlcnR5RGF0YShwcm9wZXJ0eSwgeyAnQGlkJzogX2lkLCAnQHR5cGUnOiBwcm9wZXJ0eS5zdWdnZXN0aW9ucz8udHlwZSwgbmFtZSwgLi4uZGF0YSB9LCBmYWxzZSlcbiAgICAgIDogLy8gc3VnZ2VzdGlvbiBmcm9tIGxpbmtlZCBub2Rlc1xuICAgICAgICB0eXBlICYmIGlkXG4gICAgICAgID8gdGhpcy5yZXBsYWNlUHJvcGVydHlEYXRhKHByb3BlcnR5LCB7IHR5cGUsIGlkLCAuLi5kYXRhIH0sIHRydWUpXG4gICAgICAgIDogLy8gc3VnZ2VzdGlvbiBieSBuYW1lID0+IGVudW0gdmFsdWVzXG4gICAgICAgICAgdGhpcy5wcm9wZXJ0eUNoYW5nZWQobmFtZSwgcHJvcGVydHkpO1xuICB9XG5cbiAgcHVibGljIGFkZEFycmF5R3JvdXAoYXJyYXk6IElOb2RlUHJvcGVydHkpIHtcbiAgICBjb25zdCBwcm9wID0gdGhpcy5zY2hlbWFzIVthcnJheS5zY2hlbWFUeXBlXTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldCh0aGlzLm5vZGUsIGFycmF5LmZ1bGxLZXkpO1xuICAgIGNvbnN0IG5ld1Byb3BlcnR5ID0gdHlwZVRvTmV3UHJvcGVydHkoXG4gICAgICB0aGlzLnNjaGVtYXMhLFxuICAgICAgcHJvcCxcbiAgICAgIHByb3AsXG4gICAgICB2YWx1ZSxcbiAgICAgIGAke2FycmF5LmZ1bGxLZXl9WyR7YXJyYXkucHJvcGVydGllcy5sZW5ndGh9XWBcbiAgICApO1xuICAgIGFycmF5LnByb3BlcnRpZXMucHVzaChuZXdQcm9wZXJ0eSk7XG4gICAgdGhpcy5ub2RlQ2hhbmdlZC5lbWl0KHsga2V5OiBhcnJheS5mdWxsS2V5LCB2YWx1ZSB9KTtcbiAgICByZXR1cm4gZ3JvdXBDaGFuZ2VkKHRoaXMucHJvcGVydGllcywgYXJyYXkuZnVsbEtleSk7XG4gIH1cblxuICBwdWJsaWMgZHVwbGljYXRlQXJyYXlHcm91cChhcnJheTogSU5vZGVQcm9wZXJ0eSwgcHJvcGVydHk6IElOb2RlUHJvcGVydHkpIHtcbiAgICBjb25zdCBpbmRleCA9ICtwcm9wZXJ0eS5rZXk7XG4gICAgY29uc3QgbmV3UHJvcGVydHk6IElOb2RlUHJvcGVydHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHByb3BlcnR5KSk7XG4gICAgbmV3UHJvcGVydHkuaWQgPSBwcm9wZXJ0eUlkKCk7XG4gICAgY29uc3QgdmFsdWUgPSBbLi4uZ2V0KHRoaXMubm9kZSwgYXJyYXkuZnVsbEtleSldO1xuICAgIHZhbHVlLnNwbGljZShpbmRleCwgMCwgc2FmZUpTT05QYXJzZShuZXdQcm9wZXJ0eS52YWx1ZSkpO1xuICAgIGFycmF5LnByb3BlcnRpZXMuc3BsaWNlKGluZGV4LCAwLCBuZXdQcm9wZXJ0eSk7XG4gICAgLy8gbmVlZCB0byBjaGFuZ2Uga2V5IG9uIGV2ZXJ5IHByb3BlcnRpZXMgcmVjdXJzaXZlbHlcbiAgICByZWZyZXNoUHJvcGVydHlLZXlzKGFycmF5KTtcbiAgICB0aGlzLm5vZGVDaGFuZ2VkLmVtaXQoeyBrZXk6IGFycmF5LmZ1bGxLZXksIHZhbHVlIH0pO1xuICAgIHJldHVybiBncm91cENoYW5nZWQodGhpcy5wcm9wZXJ0aWVzLCBhcnJheS5mdWxsS2V5KTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVBcnJheUdyb3VwKGFycmF5OiBJTm9kZVByb3BlcnR5LCB7IGtleSB9OiBJTm9kZVByb3BlcnR5KSB7XG4gICAgY29uc3QgaW5kZXggPSAra2V5O1xuICAgIGNvbnN0IHZhbHVlID0gWy4uLmdldCh0aGlzLm5vZGUsIGFycmF5LmZ1bGxLZXkpXTtcbiAgICB2YWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGFycmF5LnByb3BlcnRpZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAvLyBuZWVkIHRvIGNoYW5nZSBrZXkgb24gZXZlcnkgcHJvcGVydGllcyByZWN1cnNpdmVseVxuICAgIHJlZnJlc2hQcm9wZXJ0eUtleXMoYXJyYXkpO1xuICAgIHRoaXMubm9kZUNoYW5nZWQuZW1pdCh7IGtleTogYXJyYXkuZnVsbEtleSwgdmFsdWUgfSk7XG4gICAgLy8gaWYgbm8gbW9yZSB2YWx1ZXMsIHJlbW92ZSBwYXJlbnQgZ3JvdXAgZW50aXJlbHlcbiAgICByZXR1cm4gYXJyYXkucHJvcGVydGllcy5sZW5ndGggPyBudWxsIDogdGhpcy5wcm9wZXJ0eUNoYW5nZWQobnVsbCwgYXJyYXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlQXJyYXlHcm91cFRvUG9zaXRpb24oYXJyYXk6IElOb2RlUHJvcGVydHksIGN1cnJlbnRJbmRleDogbnVtYmVyLCBuZXdJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsdWUgPSBbLi4uZ2V0KHRoaXMubm9kZSwgYXJyYXkuZnVsbEtleSldO1xuICAgIG1vdmVJdGVtSW5BcnJheSh2YWx1ZSwgY3VycmVudEluZGV4LCBuZXdJbmRleCk7XG4gICAgbW92ZUl0ZW1JbkFycmF5KGFycmF5LnByb3BlcnRpZXMsIGN1cnJlbnRJbmRleCwgbmV3SW5kZXgpO1xuICAgIC8vIG5lZWQgdG8gY2hhbmdlIGtleSBvbiBldmVyeSBwcm9wZXJ0aWVzIHJlY3Vyc2l2ZWx5XG4gICAgcmVmcmVzaFByb3BlcnR5S2V5cyhhcnJheSk7XG4gICAgdGhpcy5ub2RlQ2hhbmdlZC5lbWl0KHsga2V5OiBhcnJheS5mdWxsS2V5LCB2YWx1ZSB9KTtcbiAgICByZXR1cm4gZ3JvdXBDaGFuZ2VkKHRoaXMucHJvcGVydGllcywgYXJyYXkuZnVsbEtleSk7XG4gIH1cblxuICBwdWJsaWMgbW92ZUFycmF5R3JvdXBVcChhcnJheTogSU5vZGVQcm9wZXJ0eSwgeyBrZXkgfTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IGluZGV4ID0gK2tleTtcbiAgICByZXR1cm4gdGhpcy5tb3ZlQXJyYXlHcm91cFRvUG9zaXRpb24oYXJyYXksIGluZGV4LCBpbmRleCAtIDEpO1xuICB9XG5cbiAgcHVibGljIG1vdmVBcnJheUdyb3VwRG93bihhcnJheTogSU5vZGVQcm9wZXJ0eSwgeyBrZXkgfTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IGluZGV4ID0gK2tleTtcbiAgICByZXR1cm4gdGhpcy5tb3ZlQXJyYXlHcm91cFRvUG9zaXRpb24oYXJyYXksIGluZGV4LCBpbmRleCArIDEpO1xuICB9XG5cbiAgcHVibGljIHByb3BlcnR5Q2hhbmdlZCh2YWx1ZTogYW55LCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIGdyb3VwQ2hhbmdlZCh0aGlzLnByb3BlcnRpZXMsIHByb3BlcnR5LmZ1bGxLZXksIHZhbHVlKTtcbiAgICBwcm9wZXJ0eS5hZGRQcm9wZXJ0eUVuYWJsZWQgPSBpc0FkZFByb3BlcnR5RW5hYmxlZChcbiAgICAgIHRoaXMubm9kZSEsXG4gICAgICBwcm9wZXJ0eS5zY2hlbWFUeXBlLFxuICAgICAgcHJvcGVydHkuc2NoZW1hISxcbiAgICAgIHByb3BlcnR5LmZ1bGxLZXlcbiAgICApO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcGVydHkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHByb3BlcnR5LmNoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gY2xlYW5OZXdWYWx1ZShwYXJzZU5ld1ZhbHVlKHByb3BlcnR5LnNjaGVtYSEsIHZhbHVlKSk7XG4gICAgLy8gdHJpZ2dlciByZWZyZXNoIG9mIG5vZGVcbiAgICBjb25zdCBub2RlID0gY29weU9iamVjdCh0aGlzLm5vZGUpO1xuICAgIHNldChub2RlLCBwcm9wZXJ0eS5mdWxsS2V5LCBuZXdWYWx1ZSk7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICAvLyB0cmlnZ2VyIGZvciBsaXN0ZW5lcnNcbiAgICB0aGlzLm5vZGVDaGFuZ2VkLmVtaXQoeyBrZXk6IHByb3BlcnR5LmZ1bGxLZXksIHZhbHVlOiBuZXdWYWx1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGVmYXVsdFByb3BlcnR5KHByb3BlcnR5OiBJTm9kZVByb3BlcnR5LCBrZXk6IHN0cmluZywgZGVmOiBkZWZpbml0aW9uKSB7XG4gICAgY29uc3Qgbm9kZSA9IHByb3BlcnR5LmtleSA/IGdldCh0aGlzLm5vZGUsIHByb3BlcnR5LmZ1bGxLZXkpIDogdGhpcy5ub2RlO1xuICAgIGNvbnN0IGZ1bGxLZXkgPSBwcm9wZXJ0eS5rZXkgPyBgJHtwcm9wZXJ0eS5mdWxsS2V5fS4ke2tleX1gIDoga2V5O1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBwcm9wZXJ0eS5rZXkgPyBwcm9wZXJ0eS5wcm9wZXJ0aWVzIDogdGhpcy5wcm9wZXJ0aWVzO1xuICAgIGNvbnN0IG5ld1Byb3BlcnR5ID0gdHlwZVRvTmV3UHJvcGVydHkodGhpcy5zY2hlbWFzISwgZGVmLCB0aGlzLnNjaGVtYXMhW3Byb3BlcnR5LnNjaGVtYVR5cGVdLCBub2RlLCBmdWxsS2V5KTtcbiAgICBpbnNlcnRQcm9wZXJ0eShwcm9wZXJ0aWVzLCBmdWxsS2V5LCBuZXdQcm9wZXJ0eSk7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlDaGFuZ2VkKG5ld1Byb3BlcnR5LnZhbHVlLCBuZXdQcm9wZXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgYWRkTWlzc2luZ1Byb3BlcnR5KHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSB7XG4gICAgY29uc3QgcGFyZW50ID0gcGFyZW50UHJvcGVydHkodGhpcy5wcm9wZXJ0aWVzLCBwcm9wZXJ0eSk7XG4gICAgY29uc3QgbmV3UHJvcGVydHkgPSBwYXJlbnQgPT09IHByb3BlcnR5ID8gdGhpcy5ub2RlUHJvcGVydHkhIDogcGFyZW50O1xuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSB0aGlzLm5ld1Byb3BlcnRpZXMobmV3UHJvcGVydHksIHByb3BlcnR5LmtleSk7XG4gICAgbmV3UHJvcGVydHkubmV3UHJvcGVydHkgPSBuZXdQcm9wZXJ0aWVzWzBdO1xuICAgIHJldHVybiBuZXdQcm9wZXJ0eS5uZXdQcm9wZXJ0eSA/IHRoaXMuYWRkUHJvcGVydHkobmV3UHJvcGVydHkpIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBhZGRQcm9wZXJ0eShwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IHsgbmFtZSwgcHJvcCB9ID0gcHJvcGVydHkubmV3UHJvcGVydHkhO1xuICAgIHByb3BlcnR5Lm5ld1Byb3BlcnR5ID0ge307XG4gICAgcmV0dXJuIG5hbWUgPT09ICdAaWQnXG4gICAgICA/IHRoaXMucmVwbGFjZVByb3BlcnR5RGF0YShwcm9wZXJ0eSwgeyAnQGlkJzogJycsIHR5cGU6IHByb3BlcnR5LnNjaGVtYVR5cGUgfSwgdW5kZWZpbmVkLCBmYWxzZSlcbiAgICAgIDogdGhpcy5hZGREZWZhdWx0UHJvcGVydHkocHJvcGVydHksIG5hbWUhLCBwcm9wISk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVByb3BlcnR5Q29vcmRpbmF0ZXMocHJvcGVydHk6IElOb2RlUHJvcGVydHksIHZhbHVlOiBnb29nbGUubWFwcy5MYXRMbmdMaXRlcmFsKSB7XG4gICAgY29uc3QgbGF0aXR1ZGUgPSBzaWJsaW5nUHJvcGVydHkodGhpcy5wcm9wZXJ0aWVzLCBwcm9wZXJ0eSwgJ2xhdGl0dWRlJyk7XG4gICAgY29uc3QgbG9uZ2l0dWRlID0gc2libGluZ1Byb3BlcnR5KHRoaXMucHJvcGVydGllcywgcHJvcGVydHksICdsb25naXR1ZGUnKTtcbiAgICByZXR1cm4gW1xuICAgICAgbGF0aXR1ZGUgPyB0aGlzLnByb3BlcnR5Q2hhbmdlZCh2YWx1ZS5sYXQsIGxhdGl0dWRlKSA6IG51bGwsXG4gICAgICBsb25naXR1ZGUgPyB0aGlzLnByb3BlcnR5Q2hhbmdlZCh2YWx1ZS5sbmcsIGxvbmdpdHVkZSkgOiBudWxsXG4gICAgXTtcbiAgfVxuXG4gIC8vIE1hcFxuXG4gIHB1YmxpYyBnZXQgc2hvd01hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvck1vZGUgJiYgW1NjaGVtYVR5cGUuU2l0ZSwgU2NoZW1hVHlwZS5PcmdhbmlzYXRpb25dLmluY2x1ZGVzKHRoaXMubm9kZSEudHlwZSk7XG4gIH1cblxuICBwdWJsaWMgbWFwRHJhd2luZ01vZGVzKHsga2V5IH06IElOb2RlUHJvcGVydHkpIHtcbiAgICByZXR1cm4gWydib3VuZGFyeSddLmluY2x1ZGVzKGtleSkgPyBbJ3BvbHlnb24nXSA6IFsnbGF0aXR1ZGUnLCAnbG9uZ2l0dWRlJ10uaW5jbHVkZXMoa2V5KSA/IFsnbWFya2VyJ10gOiBbXTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1hcERyYXdpbmdDbG9zZWQobmV3VmFsdWU6IGFueSkge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5tYXBEcmF3aW5nUHJvcGVydHk7XG4gICAgdGhpcy5tYXBEcmF3aW5nUHJvcGVydHkgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIFsnbGF0aXR1ZGUnLCAnbG9uZ2l0dWRlJ10uaW5jbHVkZXMocHJvcGVydHkhLmtleSlcbiAgICAgID8gdGhpcy51cGRhdGVQcm9wZXJ0eUNvb3JkaW5hdGVzKHByb3BlcnR5ISwgbmV3VmFsdWUpXG4gICAgICA6IHRoaXMucHJvcGVydHlDaGFuZ2VkKG5ld1ZhbHVlLCBwcm9wZXJ0eSEpO1xuICB9XG5cbiAgLy8gQmlibGlvZ3JhcGh5IFNlYXJjaFxuXG4gIHB1YmxpYyBiaWJsaW9ncmFwaGllc1NlYXJjaEtleSh7IGtleSwgc2NoZW1hVHlwZSB9OiBJTm9kZVByb3BlcnR5KSB7XG4gICAgY29uc3QgdmFsaWRTY2hlbWEgPSBbU2NoZW1hVHlwZS5CaWJsaW9ncmFwaHldLmluY2x1ZGVzKHNjaGVtYVR5cGUpO1xuICAgIGNvbnN0IHZhbGllS2V5ID0gWyd0aXRsZScsICdkb2N1bWVudERPSScsICdzY29wdXMnXS5pbmNsdWRlcyhrZXkpO1xuICAgIHJldHVybiB2YWxpZFNjaGVtYSAmJiB2YWxpZUtleSA/IGtleSA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUJpYmxpb2dyYXBoeSh2YWx1ZTogUGFydGlhbDxCaWJsaW9ncmFwaHk+KSB7XG4gICAgY29uc3QgcGFyZW50ID0gcGFyZW50UHJvcGVydHkodGhpcy5wcm9wZXJ0aWVzLCB0aGlzLmJpYmxpb2dyYXBoaWVzU2VhcmNoUHJvcGVydHkhKTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuYmlibGlvZ3JhcGhpZXNTZWFyY2hTb3VyY2VzXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5wYXJlbnQudmFsdWUsXG4gICAgICAgICAgYmlibGlvZ3JhcGh5OiB2YWx1ZVxuICAgICAgICB9XG4gICAgICA6IHZhbHVlO1xuICAgIHRoaXMucmVwbGFjZVByb3BlcnR5RGF0YSh0aGlzLmJpYmxpb2dyYXBoaWVzU2VhcmNoUHJvcGVydHkhLCBuZXdWYWx1ZSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU291cmNlKHZhbHVlOiBQYXJ0aWFsPFNvdXJjZT4pIHtcbiAgICAvLyBjYW5ub3QgcmVwbGFjZSBhIHRvcC1sZXZlbCBzb3VyY2VcbiAgICB0aGlzLmJpYmxpb2dyYXBoaWVzU2VhcmNoU291cmNlcyAmJlxuICAgICAgdGhpcy5yZXBsYWNlUHJvcGVydHlEYXRhKFxuICAgICAgICB0aGlzLmJpYmxpb2dyYXBoaWVzU2VhcmNoUHJvcGVydHkhLFxuICAgICAgICB7XG4gICAgICAgICAgJ0B0eXBlJzogTm9kZVR5cGUuU291cmNlLFxuICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgICEoJ0BpZCcgaW4gdmFsdWUpXG4gICAgICApO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJpYmxpb2dyYXBoaWVzU2VhcmNoU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5iaWJsaW9ncmFwaGllc1NlYXJjaFByb3BlcnR5IS5mdWxsS2V5LnNwbGl0KCcuJykubGVuZ3RoID4gMjtcbiAgfVxuXG4gIHB1YmxpYyBvbkJpYmxpb2dyYXBoaWVzU2VhcmNoQ2xvc2VkKHZhbHVlPzogUGFydGlhbDxTb3VyY2U+IHwgUGFydGlhbDxCaWJsaW9ncmFwaHk+KSB7XG4gICAgdGhpcy5iaWJsaW9ncmFwaGllc1NlYXJjaFByb3BlcnR5ID0gdmFsdWVcbiAgICAgID8gdmFsdWUudHlwZSA9PT0gU2NoZW1hVHlwZS5CaWJsaW9ncmFwaHlcbiAgICAgICAgPyB0aGlzLnVwZGF0ZUJpYmxpb2dyYXBoeSh2YWx1ZSlcbiAgICAgICAgOiB0aGlzLnVwZGF0ZVNvdXJjZSh2YWx1ZSBhcyBQYXJ0aWFsPFNvdXJjZT4pXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIEFjdG9yLkBpZFxuXG4gIHB1YmxpYyBhc3luYyBzZXRVc2VyQWN0b3JJZChwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IHsgYWN0b3JJZCwgbmFtZSB9ID0gYXdhaXQgdGhpcy51c2Vyc1NlcnZpY2UubG9nZ2VkSW5Vc2VyO1xuICAgIHJldHVybiB0aGlzLnJlcGxhY2VQcm9wZXJ0eURhdGEocHJvcGVydHksIHsgJ0BpZCc6IGFjdG9ySWQsICdAdHlwZSc6IE5vZGVUeXBlLkFjdG9yLCBuYW1lIH0sIGZhbHNlKTtcbiAgfVxuXG4gIC8vIEN5Y2xlLmN5Y2xlRHVyYXRpb25cblxuICBwdWJsaWMgY2FsY3VsYXRlQ3ljbGVEdXJhdGlvbkVuYWJsZWQocHJvcGVydHk6IElOb2RlUHJvcGVydHkpIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlQ3ljbGVEdXJhdGlvbkVuYWJsZWQodGhpcy5wcm9wZXJ0aWVzLCBwcm9wZXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgY2FsY3VsYXRlQ3ljbGVEdXJhdGlvbihwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IGR1cmF0aW9uID0gY2FsY3VsYXRlQ3ljbGVEdXJhdGlvbih0aGlzLnByb3BlcnRpZXMsIHByb3BlcnR5KTtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eUNoYW5nZWQoZHVyYXRpb24sIHByb3BlcnR5KTtcbiAgfVxuXG4gIC8vIEN5Y2xlLnN0YXJ0RGF0ZVxuXG4gIHB1YmxpYyBjYWxjdWxhdGVDeWNsZVN0YXJ0RGF0ZUVuYWJsZWQocHJvcGVydHk6IElOb2RlUHJvcGVydHkpIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlQ3ljbGVTdGFydERhdGVFbmFibGVkKHRoaXMucHJvcGVydGllcywgcHJvcGVydHkpO1xuICB9XG5cbiAgcHVibGljIGNhbGN1bGF0ZUN5Y2xlU3RhcnREYXRlKHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gY2FsY3VsYXRlQ3ljbGVTdGFydERhdGUodGhpcy5wcm9wZXJ0aWVzLCBwcm9wZXJ0eSk7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHlDaGFuZ2VkKHN0YXJ0RGF0ZSwgcHJvcGVydHkpO1xuICB9XG5cbiAgLy8gVW5pdHMgY29udmVydGVyXG5cbiAgcHVibGljIHVuaXRDb252ZXJ0ZXJFbmFibGVkKHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSB7XG4gICAgcmV0dXJuIHByb3BlcnR5LmVkaXRhYmxlICYmIFsndmFsdWUnLCAnbWluJywgJ21heCcsICdzZCddLmluY2x1ZGVzKHByb3BlcnR5LmtleSk7XG4gIH1cblxuICBwdWJsaWMgb3BlblVuaXRDb252ZXJ0ZXIocG9wb3ZlciwgcHJvcGVydHk6IElOb2RlUHJvcGVydHkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHByb3BlcnR5LnZhbHVlO1xuICAgIGNvbnN0IHRlcm1Qcm9wZXJ0eSA9IHNpYmxpbmdQcm9wZXJ0eSh0aGlzLnByb3BlcnRpZXMsIHByb3BlcnR5LCAndGVybScpO1xuICAgIGNvbnN0IHRlcm0gPSBzYWZlSlNPTlBhcnNlKHRlcm1Qcm9wZXJ0eT8udmFsdWUpO1xuICAgIGNvbnN0IHVuaXRzID0gdGVybT8udW5pdHM7XG4gICAgcmV0dXJuIHBvcG92ZXIuaXNPcGVuKCkgPyBwb3BvdmVyLmNsb3NlKCkgOiBwb3BvdmVyLm9wZW4oeyB2YWx1ZSwgdGVybSwgdW5pdHMgfSk7XG4gIH1cblxuICAvLyBSZWNvbW1lbmRhdGlvbnNcblxuICBwdWJsaWMgb25TZWxlY3RSZWNvbW1lbmRhdGlvbihhcnJheTogSU5vZGVQcm9wZXJ0eSwgaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHByb3AgPSB0aGlzLnNjaGVtYXMhW2FycmF5LnNjaGVtYVR5cGVdO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0KHRoaXMubm9kZSwgYXJyYXkuZnVsbEtleSk7XG5cbiAgICBjb25zdCBuZXdQcm9wZXJ0eSA9IHR5cGVUb05ld1Byb3BlcnR5KFxuICAgICAgdGhpcy5zY2hlbWFzISxcbiAgICAgIHByb3AsXG4gICAgICBwcm9wLFxuICAgICAgdmFsdWUsXG4gICAgICBgJHthcnJheS5mdWxsS2V5fVske2FycmF5LnByb3BlcnRpZXMubGVuZ3RofV1gXG4gICAgKTtcbiAgICBuZXdQcm9wZXJ0eS52YWx1ZS50ZXJtID0geyB0eXBlOiBOb2RlVHlwZS5UZXJtLCAnQGlkJzogaWQgfTtcbiAgICB2YWx1ZVthcnJheS5wcm9wZXJ0aWVzLmxlbmd0aF0udGVybSA9IHsgdHlwZTogTm9kZVR5cGUuVGVybSwgJ0BpZCc6IGlkIH07XG5cbiAgICAvLyBpbnNlcnQgVGVybSB3aXRoIEBpZFxuICAgIGNvbnN0IHRlcm1LZXkgPSBgJHtuZXdQcm9wZXJ0eS5mdWxsS2V5fS50ZXJtYDtcbiAgICBjb25zdCB0ZXJtUHJvcGVydHkgPVxuICAgICAgbmV3UHJvcGVydHkucHJvcGVydGllcy5maW5kKHAgPT4gcC5rZXkgPT09ICd0ZXJtJykgfHxcbiAgICAgIHR5cGVUb05ld1Byb3BlcnR5KHRoaXMuc2NoZW1hcyEsIHByb3AucHJvcGVydGllcy50ZXJtLCBwcm9wLCBuZXdQcm9wZXJ0eS52YWx1ZSwgdGVybUtleSk7XG4gICAgdGVybVByb3BlcnR5LnZhbHVlID0geyB0eXBlOiBOb2RlVHlwZS5UZXJtLCAnQGlkJzogaWQgfTtcbiAgICB0ZXJtUHJvcGVydHkucHJvcGVydGllcyA9IHJlY3Vyc2l2ZVByb3BlcnRpZXMoXG4gICAgICB0aGlzLnNjaGVtYXMhLFxuICAgICAgW10sXG4gICAgICB0aGlzLnNjaGVtYXMhW3RoaXMubm9kZSEudHlwZV0sXG4gICAgICB0aGlzLmRlZXBFZGl0YWJsZSxcbiAgICAgIHRlcm1LZXlcbiAgICApKHsgdHlwZTogTm9kZVR5cGUuVGVybSwgJ0BpZCc6IGlkIH0pO1xuICAgIGluc2VydFByb3BlcnR5KG5ld1Byb3BlcnR5LnByb3BlcnRpZXMsIHRlcm1LZXksIHRlcm1Qcm9wZXJ0eSk7XG5cbiAgICAvLyB0ZXJtIGNhbm5vdCBiZSBlZGl0ZWQsIG5lZWQgdG8gcmVtb3ZlIGZpcnN0XG4gICAgdXBkYXRlUHJvcGVydGllcyh0ZXJtUHJvcGVydHksIHAgPT4ge1xuICAgICAgcC5lZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHA7XG4gICAgfSk7XG4gICAgdGVybVByb3BlcnR5LmVkaXRhYmxlID0gZmFsc2U7XG5cbiAgICBhcnJheS5wcm9wZXJ0aWVzLnB1c2gobmV3UHJvcGVydHkpO1xuICAgIHJldHVybiB0aGlzLnByb3BlcnR5Q2hhbmdlZCh2YWx1ZSwgYXJyYXkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC10b2dnbGUgcC00XCIgKGNsaWNrKT1cImlzT3BlbiA9ICFpc09wZW5cIiBwb2ludGVyPlxuICAgIDxmYS1pY29uIFtpY29uXT1cImZhQW5nbGVEb3duXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhaXNPcGVuXCI+PC9mYS1pY29uPlxuICAgIDxmYS1pY29uIFtpY29uXT1cImZhQW5nbGVSaWdodFwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiaXNPcGVuXCI+PC9mYS1pY29uPlxuICAgIEBpZiAobm9kZVByb3BlcnR5KSB7XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImlzLXB4LTJcIlxuICAgICAgICBbY2xhc3MuaGFzLXRleHQtZGFuZ2VyXT1cIm5vZGVQcm9wZXJ0eS5oYXNFcnJvclwiXG4gICAgICAgIFtjbGFzcy5oYXMtdGV4dC13YXJuaW5nXT1cIm5vZGVQcm9wZXJ0eS5oYXNXYXJuaW5nXCI+XG4gICAgICAgIDxoZS1ub2RlLWljb24gW3R5cGVdPVwibm9kZVByb3BlcnR5LnNjaGVtYVR5cGVcIj48L2hlLW5vZGUtaWNvbj5cbiAgICAgIDwvc3Bhbj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIEBpZiAoaXNPcGVuICYmIG5vZGVQcm9wZXJ0eSkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaG93TmV3UHJvcGVydHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBub2RlUHJvcGVydHkgfVwiPjwvbmctY29udGFpbmVyPlxuICB9XG5cbiAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxuICAgIEBpZiAoaXNPcGVuKSB7XG4gICAgICBAaWYgKGVycm9yc0VkaXRhYmxlKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYi0zIG1iLTJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9kZUVycm9yRm9ybTsgY29udGV4dDogeyAkaW1wbGljaXQ6IG5vZGVQcm9wZXJ0eSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChub2RlUHJvcGVydHk/LmVycm9yKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJweS00IHBsLTRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInByb3BlcnR5RXJyb3I7IGNvbnRleHQ6IHsgcHJvcGVydHk6IG5vZGVQcm9wZXJ0eSwgZWRpdDogdHJ1ZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cblxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLW11bHRpbGluZVwiPlxuICAgICAgQGZvciAocHJvcGVydHkgb2YgcHJvcGVydGllczsgdHJhY2sgdHJhY2tCeVByb3BlcnR5KCRpbmRleCwgcHJvcGVydHkpKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaG93UHJvcGVydHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wZXJ0eSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGlzT3Blbikge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByb3BlcnR5TWFwOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbm9kZVByb3BlcnR5IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuXG5AaWYgKCEhbWFwRHJhd2luZ1Byb3BlcnR5KSB7XG4gIDxoZS1tYXBzLWRyYXdpbmctY29uZmlybVxuICAgIFt2YWx1ZV09XCJtYXBEcmF3aW5nUHJvcGVydHkudmFsdWVcIlxuICAgIFttb2Rlc109XCJtYXBEcmF3aW5nTW9kZXMobWFwRHJhd2luZ1Byb3BlcnR5KVwiXG4gICAgKGNsb3NlZCk9XCJvbk1hcERyYXdpbmdDbG9zZWQoJGV2ZW50KVwiPjwvaGUtbWFwcy1kcmF3aW5nLWNvbmZpcm0+XG59XG5cbkBpZiAoISFiaWJsaW9ncmFwaGllc1NlYXJjaFByb3BlcnR5KSB7XG4gIDxoZS1iaWJsaW9ncmFwaGllcy1zZWFyY2gtY29uZmlybVxuICAgIFtzZWFyY2hdPVwiYmlibGlvZ3JhcGhpZXNTZWFyY2hQcm9wZXJ0eS52YWx1ZVwiXG4gICAgW3NlYXJjaEJ5XT1cImJpYmxpb2dyYXBoaWVzU2VhcmNoS2V5KGJpYmxpb2dyYXBoaWVzU2VhcmNoUHJvcGVydHkpXCJcbiAgICBbc2VhcmNoU291cmNlc109XCJiaWJsaW9ncmFwaGllc1NlYXJjaFNvdXJjZXNcIlxuICAgIChjbG9zZWQpPVwib25CaWJsaW9ncmFwaGllc1NlYXJjaENsb3NlZCgkZXZlbnQpXCI+PC9oZS1iaWJsaW9ncmFwaGllcy1zZWFyY2gtY29uZmlybT5cbn1cblxuPG5nLXRlbXBsYXRlICNsYWJlbERlc2NyaXB0aW9uIGxldC1wcm9wZXJ0eT5cbiAgPHNwYW4gY2xhc3M9XCJwcm9wZXJ0eS1rZXlcIiBbbmdiVG9vbHRpcF09XCJwcm9wZXJ0eS5rZXlcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPlxuICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLWFsaWduLW1pZGRsZSBpcy1ub3dyYXAgaGFzLXRleHQtZWxsaXBzaXNcIj57eyBwcm9wZXJ0eS5rZXkgfX08L3NwYW4+XG4gICAgQGlmIChwcm9wZXJ0eS5zY2hlbWE/LmRlc2NyaXB0aW9uKSB7XG4gICAgICA8aGUtc2NoZW1hLWluZm9cbiAgICAgICAgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtcGwtMSBpcy1hbGlnbi1taWRkbGVcIlxuICAgICAgICB0cmlnZ2Vycz1cImNsaWNrXCJcbiAgICAgICAgW2NvbnRlbnRdPVwicHJvcGVydHkuc2NoZW1hLmRlc2NyaXB0aW9uXCI+PC9oZS1zY2hlbWEtaW5mbz5cbiAgICB9XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbGFiZWxEZWZhdWx0IGxldC1wcm9wZXJ0eT5cbiAgPHNwYW4+e3sgcHJvcGVydHkua2V5IH19PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzaG93UHJvcGVydHkgbGV0LXByb3BlcnR5PlxuICBAaWYgKChpc09wZW4gfHwgcHJvcGVydHkuY2xvc2VkVmlzaWJsZSkgJiYgIXByb3BlcnR5LmlzSGlkZGVuKSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjb2x1bW4gaXMtNlwiXG4gICAgICBbaWRdPVwicHJvcGVydHkuZnVsbEtleSArICdfJyArIHByb3BlcnR5LmlkXCJcbiAgICAgIFtjbGFzcy5pcy0xMl09XCJwcm9wZXJ0eS5wcm9wZXJ0aWVzLmxlbmd0aCB8fCAhcHJvcGVydHkua2V5XCI+XG4gICAgICBAaWYgKCFwcm9wZXJ0eS5wcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy1tdWx0aWxpbmUgaXMtdmFyaWFibGUgaXMtMVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKmJpbmRPbmNlPVwicHJvcGVydHlcIj5cbiAgICAgICAgICAgIEBpZiAocHJvcGVydHkua2V5KSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtMyBweS0xXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgaGFzLXRleHQtcmlnaHQtdGFibGV0IGhhcy10ZXh0LWVsbGlwc2lzXCIgW2Zvcl09XCJwcm9wZXJ0eS5pZFwiIFt0aXRsZV09XCJwcm9wZXJ0eS5rZXlcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS5zY2hlbWE/LmRlc2NyaXB0aW9uICYmIHByb3BlcnR5LmVkaXRhYmxlID8gbGFiZWxEZXNjcmlwdGlvbiA6IGxhYmVsRGVmYXVsdDtcbiAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcHJvcGVydHkgfVxuICAgICAgICAgICAgICAgICAgICBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLTkgcHktMVwiIFtjbGFzcy5pcy0xMl09XCIhcHJvcGVydHkua2V5XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0Rm9ybTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHByb3BlcnR5IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgQGlmIChwcm9wZXJ0eS5oYXNFcnJvciB8fCBwcm9wZXJ0eS5oYXNXYXJuaW5nKSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcm9wZXJ0eUVycm9yOyBjb250ZXh0OiB7IHByb3BlcnR5OiBwcm9wZXJ0eSwgZWRpdDogZmFsc2UgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKCEhcHJvcGVydHkucHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwicGFuZWxcIlxuICAgICAgICAgIFtjbGFzcy5pcy1zZWNvbmRhcnldPVwiZXJyb3JNb2RlICYmIHByb3BlcnR5LmNoYW5nZWRcIlxuICAgICAgICAgIFtjbGFzcy5pcy1kYW5nZXJdPVwiIXByb3BlcnR5LmNoYW5nZWQgJiYgcHJvcGVydHkuaGFzRXJyb3JcIlxuICAgICAgICAgIFtjbGFzcy5pcy13YXJuaW5nXT1cIiFwcm9wZXJ0eS5jaGFuZ2VkICYmIHByb3BlcnR5Lmhhc1dhcm5pbmdcIlxuICAgICAgICAgIFtjbGFzcy5pcy1kZWZhdWx0XT1cIiFwcm9wZXJ0eS5jaGFuZ2VkICYmICFwcm9wZXJ0eS5oYXNFcnJvciAmJiAhcHJvcGVydHkuaGFzV2FybmluZ1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwib3Blbi1ncm91cCBwYW5lbC1oZWFkaW5nIHB5LTBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInByb3BlcnR5LmlzT3BlbiA9ICFwcm9wZXJ0eS5pc09wZW5cIlxuICAgICAgICAgICAgcG9pbnRlclxuICAgICAgICAgICAgW2NsYXNzLmlzLW9wZW5dPVwicHJvcGVydHkuaXNPcGVuXCJcbiAgICAgICAgICAgIFtjbGFzcy5oYXMtdGV4dC13aGl0ZV09XCIoZXJyb3JNb2RlICYmIHByb3BlcnR5LmNoYW5nZWQpIHx8IHByb3BlcnR5Lmhhc0Vycm9yIHx8IHByb3BlcnR5Lmhhc1dhcm5pbmdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLW1vYmlsZSBpcy12Y2VudGVyZWQgaXMtbXVsdGlsaW5lXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvdyBweS0xIG15LTBcIj5cbiAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUFuZ2xlRG93blwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIXByb3BlcnR5LmlzT3BlblwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUFuZ2xlUmlnaHRcIiBbY2xhc3MuaXMtaGlkZGVuXT1cInByb3BlcnR5LmlzT3BlblwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbHVtbiBweS0xIG15LTBcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLXNpemUtNlwiPnt7IHByb3BlcnR5LmtleSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICBAaWYgKHByb3BlcnR5LnNjaGVtYVR5cGUpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3cgcHktMSBteS0wXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZ3MgbWItMCBoYXMtYWRkb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFnIG1iLTAgaXMtbGlnaHRcIj5UeXBlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyBtYi0wIGlzLXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGhlLXNjaGVtYS12ZXJzaW9uLWxpbmsgbGlua0NsYXNzPVwiaXMtc21hbGxcIiBbbm9kZV09XCJ7ICdAdHlwZSc6IHByb3BlcnR5LnNjaGVtYVR5cGUgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcHJvcGVydHkuc2NoZW1hVHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2hlLXNjaGVtYS12ZXJzaW9uLWxpbms+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmICghZXJyb3JzRWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICA8aGUtcG9wb3Zlci1jb25maXJtXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3cgcHktMSBteS0wIHB4LTBcIlxuICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cIlJlbW92ZSBncm91cFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwiXG4gICAgICAgICAgICAgICAgICAgICc8cD5UaGlzIHdpbGwgcmVtb3ZlIHRoZSBncm91cCBjb21wbGV0ZWx5LjwvcD4nICtcbiAgICAgICAgICAgICAgICAgICAgKHByb3BlcnR5LmlzUmVxdWlyZWQgPyAnPHA+PHU+V2FybmluZzogdGhpcyBmaWVsZCBpcyByZXF1aXJlZC48L3U+PC9wPicgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnPHA+RG8geW91IGNvbmZpcm0/PC9wPidcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBwb3BvdmVyQ2xhc3M9XCJweC0zXCJcbiAgICAgICAgICAgICAgICAgIChjb25maXJtZWQpPVwicHJvcGVydHlDaGFuZ2VkKG51bGwsIHByb3BlcnR5KVwiPlxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFUaW1lc1wiIHNpemU9XCJzbVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2hlLXBvcG92ZXItY29uZmlybT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChwcm9wZXJ0eS5pc09wZW4pIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ibG9jayBpcy1ibG9jayBwLTBcIj5cbiAgICAgICAgICAgICAgQGlmIChwcm9wZXJ0eS5lcnJvcikge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0zIHB0LTRcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcm9wZXJ0eUVycm9yOyBjb250ZXh0OiB7IHByb3BlcnR5OiBwcm9wZXJ0eSwgZWRpdDogdHJ1ZSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmICghcHJvcGVydHkuaXNBcnJheSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKCFwcm9wZXJ0eS5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImhlbHAgcHktMSBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgVG8gY2hhbmdlIHRoZSB7eyBwcm9wZXJ0eS5rZXkgfX0sIHBsZWFzZSBkZWxldGUgaXQgZmlyc3QsIHRoZW4gYWRkIHRoZSBmaWVsZCBhZ2FpblxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKHByb3BlcnR5LmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIEBzd2l0Y2ggKHByb3BlcnR5LnNjaGVtYT8udGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ0JpYmxpb2dyYXBoeScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiaGVscCBweS0xIHB4LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgU2VhcmNoIGJ5IFRpdGxlIG9yIERvY3VtZW50IERPSSB0byBhdXRvLXBvcHVsYXRlIHRoZSBmaWVsZHMgdXNpbmcgdGhlIE1lbmRlbGV5IGNhdGFsb2d1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNob3dOZXdQcm9wZXJ0eTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHByb3BlcnR5IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoZXJyb3JzRWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTMgbXQtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub2RlRXJyb3JGb3JtOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcHJvcGVydHkgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9wZXJ0eS1ncm91cCBweS0yIHB4LTMgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy1tdWx0aWxpbmUgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHByb3AyIG9mIHByb3BlcnR5LnByb3BlcnRpZXM7IHRyYWNrIHRyYWNrQnlQcm9wZXJ0eSgkaW5kZXgsIHByb3AyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNob3dQcm9wZXJ0eTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHByb3AyIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChwcm9wZXJ0eS5pc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTIgcHgtMyBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKGVycm9yc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vZGVFcnJvckZvcm07IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wZXJ0eSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGZvciAocHJvcDIgb2YgcHJvcGVydHkucHJvcGVydGllczsgdHJhY2sgdHJhY2tCeVByb3BlcnR5KCRpbmRleCwgcHJvcDIpKSB7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAocHJvcDIua2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgcC0wIG15LTRcIiBbaWRdPVwicHJvcDIuZnVsbEtleSArICdfJyArIHByb3AyLmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvcGVydHktYXJyYXktbnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWdzIGhhcy1hZGRvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRhZyBpcy1kYXJrXCI+e3sgcHJvcDIua2V5IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWVycm9yc0VkaXRhYmxlICYmIHByb3BlcnR5LmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZyBpcy1pbmZvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZHVwbGljYXRlQXJyYXlHcm91cChwcm9wZXJ0eSwgcHJvcDIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiJ0R1cGxpY2F0ZSAnICsgcHJvcGVydHkua2V5IHwgcGx1cmFsaXplOiAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhQ2xvbmVcIiBzaXplPVwic21cIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHByb3AyLmtleSAhPT0gJzAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWcgaXMtbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZUFycmF5R3JvdXBVcChwcm9wZXJ0eSwgcHJvcDIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiTW92ZSBVcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFMb25nQXJyb3dBbHRVcFwiIHNpemU9XCJzbVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwcm9wMi5rZXkgIT09IHByb3BlcnR5LnByb3BlcnRpZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFnIGlzLWxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVBcnJheUdyb3VwRG93bihwcm9wZXJ0eSwgcHJvcDIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwiTW92ZSBEb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUxvbmdBcnJvd0FsdERvd25cIiBzaXplPVwic21cIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoZS1wb3BvdmVyLWNvbmZpcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWcgaXMtZGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiJ1JlbW92ZSAnICsgcHJvcGVydHkua2V5IHwgcGx1cmFsaXplOiAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1cIlRoaXMgd2lsbCByZW1vdmUgdGhlIGdyb3VwIGNvbXBsZXRlbHkuIERvIHlvdSBjb25maXJtP1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZmlybWVkKT1cInJlbW92ZUFycmF5R3JvdXAocHJvcGVydHksIHByb3AyKVwiPjwvaGUtcG9wb3Zlci1jb25maXJtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaG93TmV3UHJvcGVydHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wMiB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVycm9yc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC00IG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm5vZGVFcnJvckZvcm07IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wMiB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwcm9wMi5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBwcm9wZXJ0eTogcHJvcDIsIGVkaXQ6IHRydWUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb3BlcnR5LWdyb3VwIGNhcmQtY29udGVudCBwLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbnMgaXMtbXVsdGlsaW5lIG15LTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChwcm9wMyBvZiBwcm9wMi5wcm9wZXJ0aWVzOyB0cmFjayB0cmFja0J5UHJvcGVydHkoJGluZGV4LCBwcm9wMykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzaG93UHJvcGVydHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wMyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKCFlcnJvcnNFZGl0YWJsZSAmJiBwcm9wZXJ0eS5lZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLWluZm8gaXMtc21hbGxcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFkZEFycmF5R3JvdXAocHJvcGVydHkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFQbHVzQ2lyY2xlXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMlwiPkFkZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTFcIj57eyBwcm9wZXJ0eS5rZXkgfCBwbHVyYWxpemU6IDEgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8aGUtbm9kZS1yZWNvbW1lbmRhdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICBidXR0b25DbGFzcz1cImlzLXNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbm9kZUZpZWxkXT1cInByb3BlcnR5LmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdFJlY29tbWVuZGF0aW9uKT1cIm9uU2VsZWN0UmVjb21tZW5kYXRpb24ocHJvcGVydHksICRldmVudClcIj48L2hlLW5vZGUtcmVjb21tZW5kYXRpb25zPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lucHV0Rm9ybSBsZXQtcHJvcGVydHk+XG4gIEBpZiAocHJvcGVydHkua2V5KSB7XG4gICAgQHN3aXRjaCAocHJvcGVydHkuc3VnZ2VzdGlvbnM/LnR5cGUpIHtcbiAgICAgIEBjYXNlICgnc2VsZWN0Jykge1xuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5wdXRTZWxlY3Q7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wZXJ0eSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgICBAZGVmYXVsdCB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dElucHV0OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcHJvcGVydHkgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgfVxuICAgIH1cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbnB1dElucHV0IGxldC1wcm9wZXJ0eT5cbiAgPGRpdiBjbGFzcz1cImZpZWxkIG1iLTBcIiBbY2xhc3MuaGFzLWFkZG9uc109XCJoYXNBZGRvbnMocHJvcGVydHkpXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2wgaXMtZXhwYW5kZWRcIiBbY2xhc3MuaGFzLWljb25zLXJpZ2h0XT1cInByb3BlcnR5LmxvYWRpbmdcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBjbGFzcz1cImlucHV0IGlzLXNtYWxsIHNlYXJjaC1pbnB1dFwiXG4gICAgICAgIFtjbGFzcy5pcy1kYXJrXT1cInByb3BlcnR5LmtleSA9PT0gJ3R5cGUnXCJcbiAgICAgICAgW2NsYXNzLmlzLXNlY29uZGFyeV09XCJlcnJvck1vZGUgJiYgcHJvcGVydHkuY2hhbmdlZFwiXG4gICAgICAgIFtjbGFzcy5pcy1kYW5nZXJdPVwiKCFwcm9wZXJ0eS5jaGFuZ2VkICYmIHByb3BlcnR5Lmhhc0Vycm9yKSB8fCBpc1JlcXVpcmVkKHByb3BlcnR5KVwiXG4gICAgICAgIFtjbGFzcy5pcy13YXJuaW5nXT1cIiFwcm9wZXJ0eS5jaGFuZ2VkICYmIHByb3BlcnR5Lmhhc1dhcm5pbmdcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5LnZhbHVlXCJcbiAgICAgICAgI3Byb3BlcnR5TW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgW3R5cGVdPVwicHJvcGVydHkuc2NoZW1hPy50eXBlID09PSAnbnVtYmVyJyA/ICdudW1iZXInIDogJ3N0cmluZydcIlxuICAgICAgICBbaWRdPVwicHJvcGVydHkuaWRcIlxuICAgICAgICBuYW1lPVwicmFuZG9tbmFtZVwiXG4gICAgICAgIFtyZWFkb25seV09XCIhcHJvcGVydHkuZWRpdGFibGUgfHwgcHJvcGVydHkuc2NoZW1hPy5pbnRlcm5hbFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcm9wZXJ0eS5wbGFjZWhvbGRlclwiXG4gICAgICAgIFthcHBUYWdzSW5wdXRdPVwie1xuICAgICAgICAgIGVuYWJsZWQ6IHByb3BlcnR5LmVkaXRhYmxlICYmIHByb3BlcnR5LnNjaGVtYT8udHlwZSA9PT0gJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczogcHJvcGVydHkuc2NoZW1hPy5pdGVtcyxcbiAgICAgICAgICBkZWxpbWl0ZXI6ICc7JyxcbiAgICAgICAgICBhbGxvd0R1cGxpY2F0ZXM6IHRydWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IHByb3BlcnR5LnBsYWNlaG9sZGVyXG4gICAgICAgIH1cIlxuICAgICAgICAoY2hhbmdlKT1cInByb3BlcnR5Q2hhbmdlZCgkZXZlbnQudGFyZ2V0LnZhbHVlLCBwcm9wZXJ0eSlcIlxuICAgICAgICBbcGF0dGVybl09XCJwcm9wZXJ0eS5zY2hlbWE/LnBhdHRlcm5cIlxuICAgICAgICBbcmVxdWlyZWRdPVwicHJvcGVydHkuZnVsbEtleS5lbmRzV2l0aCgnaWQnKSAmJiBwcm9wZXJ0eS5mdWxsS2V5ICE9PSAnaWQnXCJcbiAgICAgICAgW21pbl09XCJwcm9wZXJ0eS5zY2hlbWE/Lm1pbmltdW1cIlxuICAgICAgICBbbWF4XT1cInByb3BlcnR5LnNjaGVtYT8ubWF4aW11bVwiXG4gICAgICAgIFtuZ2JUeXBlYWhlYWRdPVwicHJvcGVydHkgfCBhcHBseVB1cmU6IHByb3BlcnR5U3VnZ2VzdFwiXG4gICAgICAgIFtyZXN1bHRUZW1wbGF0ZV09XCJzdWdnZXN0aW9uXCJcbiAgICAgICAgW2lucHV0Rm9ybWF0dGVyXT1cInByb3BlcnR5LmZvcm1hdHRlclwiXG4gICAgICAgIFtmb2N1c0ZpcnN0XT1cInRydWVcIlxuICAgICAgICAoZm9jdXMpPVwicHJvcGVydHkuZWRpdGFibGUgJiYgdHlwZWFoZWFkRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChzZWxlY3RJdGVtKT1cInN1Z2dlc3Rpb25TZWxlY3RlZCgkZXZlbnQuaXRlbSwgcHJvcGVydHkpXCIgLz5cblxuICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsIGlzLXJpZ2h0IGhhcy10ZXh0LWdyZXktZGFya1wiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIXByb3BlcnR5LmxvYWRpbmdcIj5cbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFTcGlubmVyXCIgW3B1bHNlXT1cInRydWVcIiBzaXplPVwic21cIj48L2ZhLWljb24+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlucHV0QWRkb25zOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcHJvcGVydHkgfVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgQGlmICghcHJvcGVydHkuaGFzRXJyb3IgJiYgcHJvcGVydHlNb2RlbC5pbnZhbGlkKSB7XG4gICAgPHAgY2xhc3M9XCJoZWxwIGlzLWRhbmdlci1saWdodFwiPlxuICAgICAgPHNwYW4gKmJpbmRPbmNlPVwicHJvcGVydHlNb2RlbC5lcnJvcnNcIiBbaW5uZXJIVE1MXT1cImZvcm1hdFByb3BlcnR5RXJyb3IocHJvcGVydHlNb2RlbC5lcnJvcnMsIHByb3BlcnR5KVwiPjwvc3Bhbj5cbiAgICA8L3A+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaW5wdXRTZWxlY3QgbGV0LXByb3BlcnR5PlxuICA8ZGl2IGNsYXNzPVwiZmllbGQgbWItMFwiIFtjbGFzcy5oYXMtYWRkb25zXT1cImhhc0FkZG9ucyhwcm9wZXJ0eSlcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbCBpcy1leHBhbmRlZFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNlbGVjdCBpcy1zbWFsbCBpcy1mdWxsd2lkdGhcIlxuICAgICAgICBbY2xhc3MuaXMtc2Vjb25kYXJ5XT1cImVycm9yTW9kZSAmJiBwcm9wZXJ0eS5jaGFuZ2VkXCJcbiAgICAgICAgW2NsYXNzLmlzLWRhbmdlcl09XCIoIXByb3BlcnR5LmNoYW5nZWQgJiYgcHJvcGVydHkuaGFzRXJyb3IpIHx8IGlzUmVxdWlyZWQocHJvcGVydHkpXCJcbiAgICAgICAgW2NsYXNzLmlzLXdhcm5pbmddPVwiIXByb3BlcnR5LmNoYW5nZWQgJiYgcHJvcGVydHkuaGFzV2FybmluZ1wiPlxuICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJwcm9wZXJ0eS52YWx1ZVwiXG4gICAgICAgICAgI3Byb3BlcnR5TW9kZWw9XCJuZ01vZGVsXCJcbiAgICAgICAgICBbaWRdPVwicHJvcGVydHkuaWRcIlxuICAgICAgICAgIG5hbWU9XCJyYW5kb21uYW1lXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIXByb3BlcnR5LmVkaXRhYmxlIHx8IHByb3BlcnR5LnNjaGVtYT8uaW50ZXJuYWxcIlxuICAgICAgICAgIChjaGFuZ2UpPVwicHJvcGVydHlDaGFuZ2VkKCRldmVudC50YXJnZXQudmFsdWUsIHByb3BlcnR5KVwiPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5TZWxlY3Q8L29wdGlvbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpiaW5kT25jZT1cInByb3BlcnR5LnN1Z2dlc3Rpb25zXCI+XG4gICAgICAgICAgICBAZm9yICh2YWx1ZSBvZiBwcm9wZXJ0eS5zdWdnZXN0aW9ucy52YWx1ZXM7IHRyYWNrIHRyYWNrQnlJbmRleCgkaW5kZXgsIHZhbHVlKSkge1xuICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgIHt7IHZhbHVlIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnB1dEFkZG9uczsgY29udGV4dDogeyAkaW1wbGljaXQ6IHByb3BlcnR5IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIEBpZiAoIXByb3BlcnR5Lmhhc0Vycm9yICYmIHByb3BlcnR5TW9kZWwuaW52YWxpZCkge1xuICAgIDxwIGNsYXNzPVwiaGVscCBpcy1kYW5nZXItbGlnaHRcIj5cbiAgICAgIDxzcGFuICpiaW5kT25jZT1cInByb3BlcnR5TW9kZWwuZXJyb3JzXCIgW2lubmVySFRNTF09XCJmb3JtYXRQcm9wZXJ0eUVycm9yKHByb3BlcnR5TW9kZWwuZXJyb3JzLCBwcm9wZXJ0eSlcIj48L3NwYW4+XG4gICAgPC9wPlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3JlbW92ZUZpZWxkQWRkb24gbGV0LXByb3BlcnR5PlxuICBAaWYgKCFlcnJvcnNFZGl0YWJsZSAmJiAhcHJvcGVydHkuaXNSZXF1aXJlZCkge1xuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICA8YVxuICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiXG4gICAgICAgIHRpdGxlPVwiUmVtb3ZlIGZpZWxkXCJcbiAgICAgICAgW2NsYXNzLmlzLW91dGxpbmVkXT1cIiFwcm9wZXJ0eS5jaGFuZ2VkICYmIChwcm9wZXJ0eS5oYXNFcnJvciB8fCBwcm9wZXJ0eS5oYXNXYXJuaW5nKVwiXG4gICAgICAgIFtjbGFzcy5pcy1kYW5nZXJdPVwiIXByb3BlcnR5LmNoYW5nZWQgJiYgcHJvcGVydHkuaGFzRXJyb3JcIlxuICAgICAgICBbY2xhc3MuaXMtd2FybmluZ109XCIhcHJvcGVydHkuY2hhbmdlZCAmJiBwcm9wZXJ0eS5oYXNXYXJuaW5nXCJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcHJvcGVydHlDaGFuZ2VkKG51bGwsIHByb3BlcnR5KVwiPlxuICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYVRpbWVzXCI+PC9mYS1pY29uPlxuICAgICAgPC9hPlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lucHV0QWRkb25zIGxldC1wcm9wZXJ0eT5cbiAgPG5nLWNvbnRhaW5lciAqYmluZE9uY2U9XCJwcm9wZXJ0eVwiPlxuICAgIEBpZiAoZW5hYmxlQWRkRXJyb3IocHJvcGVydHkpKSB7XG4gICAgICA8aGUtcG9wb3Zlci1jb25maXJtXG4gICAgICAgIGNsYXNzPVwiY29udHJvbFwiXG4gICAgICAgIHBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgIFtjb250ZW50XT1cInBvcHVwRXJyb3JGb3JtXCJcbiAgICAgICAgKGNvbmZpcm1lZCk9XCJhZGRFcnJvcihwcm9wZXJ0eSwgJGV2ZW50KVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhQ29tbWVudHNcIj48L2ZhLWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvaGUtcG9wb3Zlci1jb25maXJtPlxuICAgIH1cblxuICAgIEBpZiAocHJvcGVydHkuZWRpdGFibGUpIHtcbiAgICAgIEBzd2l0Y2ggKHByb3BlcnR5LnNjaGVtYVR5cGUpIHtcbiAgICAgICAgQGNhc2UgKFNjaGVtYVR5cGUuQWN0b3IpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWN0b3JBZGRvbnM7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wZXJ0eSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKFNjaGVtYVR5cGUuQ3ljbGUpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3ljbGVBZGRvbnM7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBwcm9wZXJ0eSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBpZiAobWFwRHJhd2luZ01vZGVzKHByb3BlcnR5KS5sZW5ndGgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgdGl0bGU9XCJQaWNrIG9uIE1hcFwiIChjbGljayk9XCJtYXBEcmF3aW5nUHJvcGVydHkgPSBwcm9wZXJ0eVwiPlxuICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFNYXBNYXJrZWRBbHRcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChiaWJsaW9ncmFwaGllc1NlYXJjaEtleShwcm9wZXJ0eSkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCIgdGl0bGU9XCJBZHZhbmNlZCBTZWFyY2hcIiAoY2xpY2spPVwiYmlibGlvZ3JhcGhpZXNTZWFyY2hQcm9wZXJ0eSA9IHByb3BlcnR5XCI+XG4gICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYVNlYXJjaFwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVtb3ZlRmllbGRBZGRvbjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHByb3BlcnR5IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG5cbiAgICBAaWYgKGFkZFByb3BlcnR5RW5hYmxlZChwcm9wZXJ0eSkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtZGFuZ2VyXCJcbiAgICAgICAgICB0aXRsZT1cIkFkZCBmaWVsZFwiXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgYWRkTWlzc2luZ1Byb3BlcnR5KHByb3BlcnR5KVwiPlxuICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhUGx1c0NpcmNsZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTJcIj5BZGQ8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGlzUmVxdWlyZWQocHJvcGVydHkpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1kYW5nZXJcIlxuICAgICAgICAgIFtmb3JdPVwicHJvcGVydHkuaWRcIlxuICAgICAgICAgIG5nYlRvb2x0aXA9XCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkXCJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJ0b3BcIj5cbiAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUV4Y2xhbWF0aW9uVHJpYW5nbGVcIj48L2ZhLWljb24+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChwcm9wZXJ0eS5leHRlcm5hbFVybD8udXJsKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICBbaHJlZl09XCJwcm9wZXJ0eS5leHRlcm5hbFVybC51cmwgKyAocHJvcGVydHkuZXh0ZXJuYWxVcmwudXJsUGFyYW1WYWx1ZSA/IHByb3BlcnR5LnZhbHVlIDogJycpXCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgIFt0aXRsZV09XCJwcm9wZXJ0eS5leHRlcm5hbFVybC50aXRsZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW5mbyc6IHByb3BlcnR5LmtleSA9PT0gJ3R5cGUnIH1cIlxuICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cInByb3BlcnR5LmV4dGVybmFsVXJsLnVybFBhcmFtVmFsdWUgJiYgIXByb3BlcnR5LnZhbHVlID8gdHJ1ZSA6IG51bGxcIj5cbiAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJwcm9wZXJ0eS5leHRlcm5hbFVybC5pY29uIHx8IGZhRXh0ZXJuYWxMaW5rQWx0XCI+PC9mYS1pY29uPlxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmICh1bml0Q29udmVydGVyRW5hYmxlZChwcm9wZXJ0eSkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiXG4gICAgICAgICAgdGl0bGU9XCJPcGVuIGNhbGN1bGF0b3JcIlxuICAgICAgICAgIFtuZ2JQb3BvdmVyXT1cImNvbnZlcnRVbml0c1wiXG4gICAgICAgICAgYXV0b0Nsb3NlPVwib3V0c2lkZVwiXG4gICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxuICAgICAgICAgICNwPVwibmdiUG9wb3ZlclwiXG4gICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAoY2xpY2spPVwib3BlblVuaXRDb252ZXJ0ZXIocCwgcHJvcGVydHkpXCI+XG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFDYWxjdWxhdG9yXCI+PC9mYS1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2FjdG9yQWRkb25zIGxldC1wcm9wZXJ0eT5cbiAgQGlmIChwcm9wZXJ0eS5rZXkgPT09ICdAaWQnKSB7XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIiB0aXRsZT1cIkFkZCBteXNlbGYgYXMgQWN0b3JcIiAoY2xpY2spPVwic2V0VXNlckFjdG9ySWQocHJvcGVydHkpXCI+XG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhcklkQmFkZ2VcIj48L2ZhLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjeWNsZUFkZG9ucyBsZXQtcHJvcGVydHk+XG4gIEBpZiAocHJvcGVydHkua2V5ID09PSAnY3ljbGVEdXJhdGlvbicpIHtcbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiXG4gICAgICAgIHRpdGxlPVwiQ2FsY3VsYXRlIHZhbHVlIGZyb20gc3RhcnREYXRlIGFuZCBlbmREYXRlXCJcbiAgICAgICAgKGNsaWNrKT1cImNhbGN1bGF0ZUN5Y2xlRHVyYXRpb24ocHJvcGVydHkpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFjYWxjdWxhdGVDeWNsZUR1cmF0aW9uRW5hYmxlZChwcm9wZXJ0eSlcIj5cbiAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFDYWxjdWxhdG9yXCI+PC9mYS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChwcm9wZXJ0eS5rZXkgPT09ICdzdGFydERhdGUnKSB7XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIlxuICAgICAgICB0aXRsZT1cIkNhbGN1bGF0ZSB2YWx1ZSBmcm9tIGVuZERhdGUgYW5kIGN5Y2xlRHVyYXRpb25cIlxuICAgICAgICAoY2xpY2spPVwiY2FsY3VsYXRlQ3ljbGVTdGFydERhdGUocHJvcGVydHkpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFjYWxjdWxhdGVDeWNsZVN0YXJ0RGF0ZUVuYWJsZWQocHJvcGVydHkpXCI+XG4gICAgICAgIDxmYS1pY29uIFtpY29uXT1cImZhQ2FsY3VsYXRvclwiPjwvZmEtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Nob3dOZXdQcm9wZXJ0eSBsZXQtcHJvcGVydHk+XG4gIEBpZiAocHJvcGVydHkuZWRpdGFibGUgJiYgKHByb3BlcnR5LmFkZFByb3BlcnR5RW5hYmxlZCB8fCBkZWVwRWRpdGFibGUpKSB7XG4gICAgPGhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICA8Zm9ybSBjbGFzcz1cInB5LTMgcHgtNCBpcy1mbGV4LWdyb3ctMVwiIChzdWJtaXQpPVwiYWRkUHJvcGVydHkocHJvcGVydHkpXCIgbm92YWxpZGF0ZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGlzLWhvcml6b250YWxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtbGFiZWwgaXMtc21hbGxcIiAqYmluZE9uY2U9XCJwcm9wZXJ0eVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWxcIiBbZm9yXT1cInByb3BlcnR5LmlkICsgJ19uZXcnXCI+XG4gICAgICAgICAgICAgIDxzcGFuPkFkZCBuZXcgZmllbGQ8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1ib2R5XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9uc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbCBpcy1leHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dCBpcy1zbWFsbFwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5Lm5ld1Byb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJwcm9wZXJ0eS5pZCArICdfbmV3J1wiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwicmFuZG9tbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBhbmQgc2VsZWN0IGZpZWxkIGZyb20gcmVzdWx0c1wiXG4gICAgICAgICAgICAgICAgICBbbmdiVHlwZWFoZWFkXT1cInByb3BlcnR5IHwgYXBwbHlQdXJlOiBzdWdnZXN0TmV3UHJvcGVydHlcIlxuICAgICAgICAgICAgICAgICAgW3Jlc3VsdFRlbXBsYXRlXT1cInN1Z2dlc3Rpb25cIlxuICAgICAgICAgICAgICAgICAgW2lucHV0Rm9ybWF0dGVyXT1cImZvcm1hdE5ld1Byb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgIFtmb2N1c0ZpcnN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtlZGl0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAoZm9jdXMpPVwidHlwZWFoZWFkRm9jdXMoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFwcm9wZXJ0eS5uZXdQcm9wZXJ0eSB8fCAhcHJvcGVydHkubmV3UHJvcGVydHkubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFQbHVzXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+QWRkPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2hlYWRlcj5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cInB0LTFcIj48L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwcm9wZXJ0eUVycm9yIGxldC1wcm9wZXJ0eT1cInByb3BlcnR5XCIgbGV0LWVkaXQ9XCJlZGl0XCI+XG4gIEBpZiAocHJvcGVydHkuZXJyb3IpIHtcbiAgICA8cCBjbGFzcz1cImhlbHBcIiBbY2xhc3MuaXMtZGFuZ2VyXT1cInByb3BlcnR5Lmhhc0Vycm9yXCIgW2NsYXNzLmlzLXdhcm5pbmddPVwicHJvcGVydHkuaGFzV2FybmluZ1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJpcy1wcmUtd3JhcFwiICpiaW5kT25jZT1cInByb3BlcnR5LmVycm9yXCIgW2lubmVySFRNTF09XCJwcm9wZXJ0eS5lcnJvci5tZXNzYWdlXCI+PC9zcGFuPlxuICAgICAgQGlmIChlZGl0ICYmIGVycm9yc0VkaXRhYmxlICYmIHByb3BlcnR5LmVycm9yLmluZGV4ID49IDApIHtcbiAgICAgICAgPGEgY2xhc3M9XCJwbC0yXCIgKGNsaWNrKT1cImVkaXRFcnJvcihwcm9wZXJ0eSlcIj5cbiAgICAgICAgICA8ZmEtaWNvbiBjbGFzcz1cInByLTJcIiBbaWNvbl09XCJmYUVkaXRcIj48L2ZhLWljb24+XG4gICAgICAgICAgPHNwYW4+RWRpdDwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgfVxuICAgICAgQGlmICgocHJvcGVydHkuaGFzV2FybmluZyB8fCBlcnJvcnNFZGl0YWJsZSkgJiYgcHJvcGVydHkuZXJyb3IuaW5kZXggPj0gMCkge1xuICAgICAgICA8YSBjbGFzcz1cInBsLTJcIiAoY2xpY2spPVwicmVzb2x2ZUVycm9yKHByb3BlcnR5KVwiPlxuICAgICAgICAgIDxmYS1pY29uIGNsYXNzPVwicHItMlwiIFtpY29uXT1cImZhQ2hlY2tcIj48L2ZhLWljb24+XG4gICAgICAgICAgPHNwYW4+UmVzb2x2ZWQ8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIH1cbiAgICA8L3A+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcHJvcGVydHlNYXAgbGV0LXByb3BlcnR5PlxuICBAaWYgKHNob3dNYXApIHtcbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwgaXMtZGVmYXVsdFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm9wZW4tZ3JvdXAgcGFuZWwtaGVhZGluZyBweS0wXCJcbiAgICAgICAgKGNsaWNrKT1cIm1hcFZpc2libGUgPSAhbWFwVmlzaWJsZVwiXG4gICAgICAgIHBvaW50ZXJcbiAgICAgICAgW2NsYXNzLmlzLW9wZW5dPVwibWFwVmlzaWJsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy1tb2JpbGUgaXMtdmNlbnRlcmVkIG1iLTBcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3cgcHktMSBteS0wXCI+XG4gICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUFuZ2xlRG93blwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIW1hcFZpc2libGVcIj48L2ZhLWljb24+XG4gICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJmYUFuZ2xlUmlnaHRcIiBbY2xhc3MuaXMtaGlkZGVuXT1cIm1hcFZpc2libGVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sdW1uIHB5LTEgbXktMFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1zaXplLTZcIj5WaWV3IG9uIE1hcDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYmxvY2sgaXMtYmxvY2sgcC0wXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhbWFwVmlzaWJsZVwiPlxuICAgICAgICA8aGUtc2l0ZXMtbWFwcyBbc2l0ZXNdPVwiW25vZGVdXCIgW3Nob3dOb3RpY2VdPVwiZmFsc2VcIj48L2hlLXNpdGVzLW1hcHM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub2RlRXJyb3JGb3JtIGxldC1wcm9wZXJ0eT5cbiAgQGlmIChwcm9wZXJ0eS5uZXdFcnJvciAmJiBwcm9wZXJ0eS5lZGl0YWJsZSkge1xuICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsXCI+XG4gICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInByb3BlcnR5Lm5ld0Vycm9yLmxldmVsXCI+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJ1bmRlZmluZWRcIj5TZWxlY3QgTGV2ZWw8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcnJvclwiPkVycm9yPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwid2FybmluZ1wiPldhcm5pbmc8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkXCI+XG4gICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgIGNsYXNzPVwidGV4dGFyZWEgaXMtc21hbGxcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHkubmV3RXJyb3IubWVzc2FnZVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB5b3VyIG1lc3NhZ2UgaGVyZVwiXG4gICAgICAgICAgcm93cz1cIjFcIj48L3RleHRhcmVhPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhcHJvcGVydHkubmV3RXJyb3IubGV2ZWwgfHwgIXByb3BlcnR5Lm5ld0Vycm9yLm1lc3NhZ2VcIlxuICAgICAgICAgIChjbGljayk9XCJhZGRFcnJvcihwcm9wZXJ0eSwgcHJvcGVydHkubmV3RXJyb3IpXCI+XG4gICAgICAgICAgPGZhLWljb24gW2ljb25dPVwiZmFQbHVzQ2lyY2xlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMlwiPkFkZDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwb3B1cEVycm9yRm9ybSBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiPlxuICAgICAgICA8c2VsZWN0IFsobmdNb2RlbCldPVwiZGF0YS5sZXZlbFwiPlxuICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cInVuZGVmaW5lZFwiPlNlbGVjdCBMZXZlbDwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcnJvclwiPkVycm9yPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIndhcm5pbmdcIj5XYXJuaW5nPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0XCIgWyhuZ01vZGVsKV09XCJkYXRhLm1lc3NhZ2VcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgbWVzc2FnZSBoZXJlXCIgLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N1Z2dlc3Rpb24gbGV0LXI9XCJyZXN1bHRcIiBsZXQtdD1cInRlcm1cIj5cbiAgPG5nYi1oaWdobGlnaHRcbiAgICBbdGl0bGVdPVwici5iaWJsaW9ncmFwaHk/LnRpdGxlIHx8IHIuYmlibGlvZ3JhcGh5Py5kb2N1bWVudERPSSB8fCByLmJpYmxpb2dyYXBoeT8uc2NvcHVzIHx8IHIubmFtZVwiXG4gICAgW3Jlc3VsdF09XCJyLmJpYmxpb2dyYXBoeT8udGl0bGUgfHwgci5iaWJsaW9ncmFwaHk/LmRvY3VtZW50RE9JIHx8IHIuYmlibGlvZ3JhcGh5Py5zY29wdXMgfHwgci5uYW1lXCJcbiAgICBbdGVybV09XCJ0XCI+PC9uZ2ItaGlnaGxpZ2h0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb252ZXJ0VW5pdHMgbGV0LXZhbHVlPVwidmFsdWVcIiBsZXQtdGVybT1cInRlcm1cIiBsZXQtdW5pdHM9XCJ1bml0c1wiPlxuICA8aGUtdW5pdC1jb252ZXJ0ZXIgW3ZhbHVlXT1cInZhbHVlXCIgW3Rlcm1dPVwidGVybVwiIFt0b1VuaXRzXT1cInVuaXRzXCI+PC9oZS11bml0LWNvbnZlcnRlcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|