@provoly/dashboard 0.14.4 → 0.14.5

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.
@@ -101,13 +101,11 @@ export class WidgetMapComponent extends DataWidgetComponent {
101
101
  .map((layer) => layer);
102
102
  }));
103
103
  this.wmsCapabilities$ = combineLatest([
104
- this.manifest$.pipe(map((manifest) => (manifest.options ?? { layers: [] }).layers?.filter((layer) => ['wms', 'geoserver'].includes(layer.type)))),
104
+ this.manifest$.pipe(map((manifest) => (manifest.options ?? { layers: [] }).layers?.filter((layer) => ['wms'].includes(layer.type)))),
105
105
  this.geoServerLayerDescriptions$
106
- ]).pipe(map(([wmsLayers, geoServerLayerDescriptions]) => wmsLayers.map((layer) => ({
107
- ...layer,
108
- // @ts-ignore
109
- ...geoServerLayerDescriptions.find((layerDescr) => layerDescr.key === layer.key)
110
- }))), distinctUntilChanged((p, c) => equal(p, c)), switchMap((wmsLayers) => combineLatest(wmsLayers.map((layer) => wmsService.getCapabilities(layer)))), startWith([]));
106
+ ]).pipe(map(([wmsLayers, geoServerLayerDescriptions]) => {
107
+ return [...wmsLayers, ...geoServerLayerDescriptions];
108
+ }), distinctUntilChanged((p, c) => equal(p, c)), switchMap((wmsLayers) => combineLatest(wmsLayers.map((layer) => wmsService.getCapabilities(layer)))), startWith([]));
111
109
  this.options$ = combineLatest([
112
110
  this.manifest$,
113
111
  this.resultSet$,
@@ -766,4 +764,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
766
764
  type: ViewChild,
767
765
  args: ['address']
768
766
  }] } });
769
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC93aWRnZXRzL3dpZGdldC1tYXAvY29tcG9uZW50L3dpZGdldC1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2NvbXBvbmVudC93aWRnZXQtbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFFTCxTQUFTLEVBS1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUtMLGNBQWMsRUFDZCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUVsQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBRW5CLGNBQWMsRUFDZCxXQUFXLEVBQ1gsU0FBUyxFQWNULGNBQWMsRUFHZCxXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEtBQUssTUFBTSxxQkFBcUIsQ0FBQztBQUN4QyxPQUFPLEVBQVcsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBR2hDLE9BQU8sZUFBZSxNQUFNLHFCQUFxQixDQUFDO0FBRWxELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7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IGNka092ZXJsYXksIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlLFxuICBCYXNlVG9vbHRpcENvbXBvbmVudCxcbiAgQmFzZVdpZGdldE1hcExheWVyT3B0aW9ucyxcbiAgQ2xhc3MsXG4gIENsYXNzU2VsZWN0b3JzLFxuICBDb25maWdTZWxlY3RvcnMsXG4gIERhc2hib2FyZEFjdGlvbnMsXG4gIERhc2hib2FyZFNlbGVjdG9ycyxcbiAgRGF0YXNldCxcbiAgRGF0YVNvdXJjZVNlbGVjdG9ycyxcbiAgRGF0YVdpZGdldENvbXBvbmVudCxcbiAgRmllbGQsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBHZW9NZXRhZGF0YSxcbiAgSXRlbVV0aWxzLFxuICBNYXBGZWF0dXJlTGF5ZXJPcHRpb25zLFxuICBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMsXG4gIE1hcFJhc3RlclRpbGVMYXllck9wdGlvbnMsXG4gIE1hcFZlY3RvclRpbGVMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldE9wdGlvbnMsXG4gIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zLFxuICBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMsXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBQcnlTbmFja2JhclNlcnZpY2UsXG4gIFJlc3VsdHNldFV0aWxzLFxuICBTeW1ib2xTZXJ2aWNlLFxuICBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gIFRvb2x0aXBNb2RlLFxuICBXSURHRVRfSEVBREVSX0hFSUdIVCxcbiAgd2lkZ2V0TWFwQ29uZmlnXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsL2VzNic7XG5pbXBvcnQgeyBGZWF0dXJlLCBNYXAsIE92ZXJsYXksIFZpZXcgfSBmcm9tICdvbCc7XG5pbXBvcnQgeyBhcHBseUJhY2tncm91bmQsIGFwcGx5U3R5bGUgfSBmcm9tICdvbC1tYXBib3gtc3R5bGUnO1xuaW1wb3J0IHsgYm91bmRpbmdFeHRlbnQsIGNyZWF0ZUVtcHR5IH0gZnJvbSAnb2wvZXh0ZW50JztcbmltcG9ydCB7IENpcmNsZSwgR2VvbWV0cnksIFBvaW50IH0gZnJvbSAnb2wvZ2VvbSc7XG5pbXBvcnQgeyBUaWxlIH0gZnJvbSAnb2wvbGF5ZXInO1xuaW1wb3J0IEJhc2VMYXllciBmcm9tICdvbC9sYXllci9CYXNlJztcbmltcG9ydCBWZWN0b3JMYXllciBmcm9tICdvbC9sYXllci9WZWN0b3InO1xuaW1wb3J0IFZlY3RvclRpbGVMYXllciBmcm9tICdvbC9sYXllci9WZWN0b3JUaWxlJztcbmltcG9ydCB7IFBpeGVsIH0gZnJvbSAnb2wvcGl4ZWwnO1xuaW1wb3J0IHsgZnJvbUxvbkxhdCwgZ2V0IGFzIGdldFByb2plY3Rpb24sIHRyYW5zZm9ybSB9IGZyb20gJ29sL3Byb2onO1xuXG5pbXBvcnQgeyByZWdpc3RlciB9IGZyb20gJ29sL3Byb2ovcHJvajQnO1xuaW1wb3J0IHsgVGlsZVdNUyB9IGZyb20gJ29sL3NvdXJjZSc7XG5pbXBvcnQgVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0IHsgU3R5bGUgfSBmcm9tICdvbC9zdHlsZSc7XG5pbXBvcnQgcHJvajQgZnJvbSAncHJvajQnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGRlbGF5LFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBmcm9tLFxuICBtYXAsXG4gIG1lcmdlTWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc3RhcnRXaXRoLFxuICBzd2l0Y2hNYXBcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbk1hbmFnZXIgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbi1tYW5hZ2VyLmNsYXNzJztcbmltcG9ydCB7IENxbFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvY3FsLXV0aWxzLmNsYXNzJztcbmltcG9ydCB7XG4gIERFRkFVTFRfTUFQX0NFTlRFUixcbiAgREVGQVVMVF9aT09NX01BWCxcbiAgREVGQVVMVF9aT09NX01JTixcbiAgREVGQVVMVF9aT09NX1NUQVJULFxuICBleHBvcnRNYXBBc0ltYWdlLFxuICBnZXRMaW5rRmVhdHVyZSxcbiAgZ2V0TWFwQXNQbmcsXG4gIHBvcHVsYXRlSW50ZW5zaXR5QXR0cmlidXRlLFxuICBwb3B1bGF0ZUxvY2F0aW9uQXR0cmlidXRlXG59IGZyb20gJy4uL3V0aWxzL3dpZGdldC1tYXAudXRpbHMnO1xuaW1wb3J0IHsgWE1MVXRpbHMgfSBmcm9tICcuLi91dGlscy94bWwtdXRpbHMuY2xhc3MnO1xuaW1wb3J0IHsgV2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQtbWFwLWxheWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2V0Q2FwYWJpbGl0aWVzUmVzcG9uc2UsIFdtc1NlcnZpY2UgfSBmcm9tICcuL3dtcy5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IFRPT0xUSVBfUEFERElORyA9IDE1O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktd2lkZ2V0LW1hcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtbWFwLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXaWRnZXRNYXBDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgbWFwVXJsJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBAVmlld0NoaWxkKCdtYXBSZWYnKSBtYXBSZWYhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdwb3B1cCcpIHBvcHVwITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncG9wdXBDb250ZW50JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHBvcHVwQ29udGVudCE6IFZpZXdDb250YWluZXJSZWY7XG4gIEBWaWV3Q2hpbGQoJ2V4cG9ydFR5cGVUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgZXhwb3J0VHlwZVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnYWRkcmVzcycpIGFkZHJlc3MhOiBFbGVtZW50UmVmO1xuICBvcHRpb25zJDogT2JzZXJ2YWJsZTxNYXBXaWRnZXRPcHRpb25zPjtcbiAgbGF5ZXJUeXBlcyA9IHRoaXMud2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLmltcGxlbWVudGF0aW9uTGlzdC5zb3J0KChhLCBiKSA9PlxuICAgIHRoaXMudHJhbnNsYXRlU2VydmljZVxuICAgICAgLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuJyArIGEpXG4gICAgICAubG9jYWxlQ29tcGFyZSh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLmxheWVyVHlwZS4nICsgYikpXG4gICk7XG4gIG9wdGlvbnNDb3B5OiBNYXBXaWRnZXRPcHRpb25zID0ge30gYXMgTWFwV2lkZ2V0T3B0aW9ucztcbiAgY2xhc3NlcyQ6IE9ic2VydmFibGU8Q2xhc3NbXT47XG4gIGZpZWxkcyQ6IE9ic2VydmFibGU8RmllbGRbXT47XG4gIHNlbGVjdGVkSWRzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIGJvdHRvbUxlZnQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGxheWVycyQhOiBPYnNlcnZhYmxlPEJhc2VMYXllcltdPjtcbiAgbWFwITogTWFwO1xuICBhZGRpdGlvbmFsTGF5ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VmVjdG9yTGF5ZXI8VmVjdG9yU291cmNlPEdlb21ldHJ5Pj5bXT4oW10pO1xuICBwcml2YXRlIG92ZXJsYXlSZWY/OiBPdmVybGF5UmVmO1xuICBzdHlsZXMkOiBPYnNlcnZhYmxlPHsgaWRlbnRpZmllcjogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXT47XG4gIFdJREdFVF9IRUFERVJfSEVJR0hUID0gV0lER0VUX0hFQURFUl9IRUlHSFQ7XG4gIGkgPSAwO1xuICBpdGVtU3R5bGVzJCE6IE9ic2VydmFibGU8eyBbaWQ6IHN0cmluZ106IHsgY2xhc3NpYzogU3R5bGU7IGJvcmRlcmVkOiBTdHlsZSB9IH0+O1xuICBoZWlnaHQkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGFjdGlvbnMkID0gd2lkZ2V0TWFwQ29uZmlnLmFjdGlvbnMkO1xuICBwcml2YXRlIHdtc0ZlYXR1cmVzJDogT2JzZXJ2YWJsZTxhbnlbXT47XG4gIGNsYXNzaWNGZWF0dXJlcyQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gIGdlb1NlcnZlckxheWVyRGVzY3JpcHRpb25zJDogT2JzZXJ2YWJsZTxNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnNbXT47XG4gIGxlZ2VuZFRhYk9wZW4gPSBmYWxzZTtcbiAgbGF5ZXJzVGFiT3BlbiA9IGZhbHNlO1xuICBsZWdlbmRUYWIgPSAwO1xuICBsZWdlbmRMYXllcnMkITogT2JzZXJ2YWJsZTwoTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnMpW10+O1xuICBsZWdlbmRUb3AkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGxheWVyc1RvcCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgbGVnZW5kSGVpZ2h0JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBpbWFnZU5vdFByb3ZpZGVkOiBib29sZWFuW10gPSBbXTtcbiAgYmFzaWNBY3Rpb25zJDogT2JzZXJ2YWJsZTwoJ2NsaWNrJyB8ICdsYXNzbycgfCAncmVjdGFuZ2xlJyB8ICd6b29tJyB8ICdtb3ZlJyB8ICdleHBvcnQnIHwgJ3VwbG9hZCcpW10+O1xuICB6b29tQW5kQ2VudGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyB6b29tPzogeyBzdGFydDogbnVtYmVyOyBtaW46IG51bWJlcjsgbWF4OiBudW1iZXIgfTsgY2VudGVyPzogbnVtYmVyW10gfT4oe30pO1xuICBmaXRPcHRpb24kITogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgbWFwU3R5bGVVcmwkITogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPjtcbiAgaW50ZXJhY3Rpb25NYW5hZ2VyOiBJbnRlcmFjdGlvbk1hbmFnZXIgPSBuZXcgSW50ZXJhY3Rpb25NYW5hZ2VyKCk7XG4gIG1hcFN0eWxlTGF5ZXIkITogT2JzZXJ2YWJsZTxWZWN0b3JUaWxlTGF5ZXJbXT47XG4gIHRvb2x0aXBJbmRleCA9IDA7XG4gIHRvb2x0aXBOdW1iZXIgPSAwO1xuICBTVFlMRV9GUk9NX1VSTCA9ICdfdXJsJztcbiAgTk9fU1RZTEUgPSAnbm9uZSc7XG4gIHdtc0NhcGFiaWxpdGllcyQ6IE9ic2VydmFibGU8KEdldENhcGFiaWxpdGllc1Jlc3BvbnNlIHwgbnVsbClbXT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogUHJ5U25hY2tiYXJTZXJ2aWNlLFxuICAgIHB1YmxpYyB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHRvb2x0aXBGYWN0b3J5U2VydmljZTogVG9vbHRpcEZhY3RvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3ZlcmxheTogY2RrT3ZlcmxheSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBzeW1ib2xTZXJ2aWNlOiBTeW1ib2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgd2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlOiBXaWRnZXRNYXBMYXllclNlcnZpY2UsXG4gICAgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB3bXNTZXJ2aWNlOiBXbXNTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHN0b3JlLCBlbCk7XG5cbiAgICB0aGlzLmJhc2ljQWN0aW9ucyQgPSB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgICBtYXAoKGFjdGlvbnMpID0+IGFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbiAhPT0gJ2V4cG9ydCcgJiYgYWN0aW9uICE9PSAndXBsb2FkJykpXG4gICAgKTtcblxuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlXG4gICAgICAuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpXG4gICAgICAucGlwZShtYXAoKGNsYXNzZXMpID0+IGNsYXNzZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSkpKTtcbiAgICB0aGlzLmZpZWxkcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChGaWVsZFNlbGVjdG9ycy5maWVsZHMpO1xuICAgIHRoaXMuc3R5bGVzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy5tYXBTdHlsZXMpLnBpcGUoXG4gICAgICBtYXAoKHN0eWxlcykgPT5cbiAgICAgICAgc3R5bGVzLmNvbmNhdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZGVudGlmaWVyOiB0aGlzLk5PX1NUWUxFLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAubm9TdHlsZScpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZGVudGlmaWVyOiB0aGlzLlNUWUxFX0ZST01fVVJMLFxuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAuc3R5bGVGcm9tVXJsJylcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc2VsZWN0ZWRJZHMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnNlbGVjdGVkSXRlbUlkcyk7XG5cbiAgICB0aGlzLmdlb1NlcnZlckxheWVyRGVzY3JpcHRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy51c2VkRGF0YXNvdXJjZXMkLnBpcGUoc3RhcnRXaXRoKFtdKSksXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChDb25maWdTZWxlY3RvcnMuZ2VvU2VydmVyVXJsKS5waXBlKGRlYm91bmNlVGltZSgxMCksIHN0YXJ0V2l0aCh1bmRlZmluZWQpKVxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtkYXRhU291cmNlcywgZ2VvU2VydmVyVXJsXSkgPT4ge1xuICAgICAgICBpZiAoIWdlb1NlcnZlclVybCkgcmV0dXJuIFtdO1xuICAgICAgICByZXR1cm4gZGF0YVNvdXJjZXNcbiAgICAgICAgICAuZmlsdGVyKChkcykgPT4gZHMubWV0YWRhdGE/LmZpbmQoKG0pID0+IG0ubWV0YWRhdGFEZWYubmFtZSA9PT0gR2VvTWV0YWRhdGEuTkFNRVNQQUNFKSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIC5tYXAoKGRzKSA9PiB7XG4gICAgICAgICAgICBkcyA9IGRzIGFzIHVua25vd24gYXMgRGF0YXNldDtcbiAgICAgICAgICAgIGNvbnN0IG1ldGFkYXRhczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICAgICAgICAgICAgZHMubWV0YWRhdGE/LmZvckVhY2goKG0pID0+IChtZXRhZGF0YXNbbS5tZXRhZGF0YURlZi5uYW1lXSA9IG0udmFsdWUpKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdnZW9zZXJ2ZXInLFxuICAgICAgICAgICAgICB1cmw6IGdlb1NlcnZlclVybCArICcvJyArIG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5OQU1FU1BBQ0VdICsgJy93bXM/U0VSVklDRT1XTVMmVkVSU0lPTj0xLjMuMCcsXG4gICAgICAgICAgICAgIHBhcmFtVGlsZWQ6IHRydWUsXG4gICAgICAgICAgICAgIG9wYWNpdHk6IHBhcnNlSW50KG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5PUEFDSVRZXSA/PyAxMDAsIDEwKSxcbiAgICAgICAgICAgICAgb0NsYXNzOiBkcy5vQ2xhc3MsXG4gICAgICAgICAgICAgIGtleTogbWV0YWRhdGFzW0dlb01ldGFkYXRhLk5BTUVTUEFDRV0gKyAnOicgKyBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuS0VZXSxcbiAgICAgICAgICAgICAgbmFtZXNwYWNlOiBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuTkFNRVNQQUNFXSxcbiAgICAgICAgICAgICAgcGFyYW1MYXllcjogbWV0YWRhdGFzW0dlb01ldGFkYXRhLktFWV0sXG4gICAgICAgICAgICAgIG5hbWU6IGRzLm5hbWUsXG4gICAgICAgICAgICAgIGRhdGFzb3VyY2VJZDogZHMuaWRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKChsYXllcikgPT4gbGF5ZXIgYXMgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMud21zQ2FwYWJpbGl0aWVzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5tYW5pZmVzdCQucGlwZShcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChtYW5pZmVzdCkgPT5cbiAgICAgICAgICAgICgobWFuaWZlc3Qub3B0aW9ucyA/PyB7IGxheWVyczogW10gfSkgYXMgTWFwV2lkZ2V0T3B0aW9ucykubGF5ZXJzPy5maWx0ZXIoKGxheWVyKSA9PlxuICAgICAgICAgICAgICBbJ3dtcycsICdnZW9zZXJ2ZXInXS5pbmNsdWRlcyhsYXllci50eXBlKVxuICAgICAgICAgICAgKSBhcyAoTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnMpW11cbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIHRoaXMuZ2VvU2VydmVyTGF5ZXJEZXNjcmlwdGlvbnMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3dtc0xheWVycywgZ2VvU2VydmVyTGF5ZXJEZXNjcmlwdGlvbnNdKSA9PlxuICAgICAgICB3bXNMYXllcnMubWFwKFxuICAgICAgICAgIChsYXllcikgPT5cbiAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgIC4uLmxheWVyLFxuICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIC4uLmdlb1NlcnZlckxheWVyRGVzY3JpcHRpb25zLmZpbmQoKGxheWVyRGVzY3IpID0+IGxheWVyRGVzY3Iua2V5ID09PSBsYXllci5rZXkpXG4gICAgICAgICAgICB9IGFzIE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyB8IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zKVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKSxcbiAgICAgIHN3aXRjaE1hcCgod21zTGF5ZXJzKSA9PiBjb21iaW5lTGF0ZXN0KHdtc0xheWVycy5tYXAoKGxheWVyKSA9PiB3bXNTZXJ2aWNlLmdldENhcGFiaWxpdGllcyhsYXllcikpKSksXG4gICAgICBzdGFydFdpdGgoW10pXG4gICAgKTtcblxuICAgIHRoaXMub3B0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMubWFuaWZlc3QkLFxuICAgICAgdGhpcy5yZXN1bHRTZXQkLFxuICAgICAgdGhpcy5jbGFzc2VzJCxcbiAgICAgIHRoaXMuZmllbGRzJCxcbiAgICAgIHRoaXMuc3R5bGVzJCxcbiAgICAgIHRoaXMuZ2VvU2VydmVyTGF5ZXJEZXNjcmlwdGlvbnMkLFxuICAgICAgdGhpcy53bXNDYXBhYmlsaXRpZXMkLnBpcGUoc3RhcnRXaXRoKFtdKSlcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbbWFuaWZlc3QsIHJlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzLCBtYXBTdHlsZXMsIGdlb0xheWVycywgY2FwYWJpbGl0aWVzXSkgPT4ge1xuICAgICAgICAvLyBhdXRvIGRldGVybWluZSBsYXllcnMgcGFyYW1ldGVycyB0byBwcm92aWRlIGEgd29ya2luZyB2aWV3XG4gICAgICAgIGNvbnN0IGF1dG9PcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh7IHJlbGF0aW9uczogdHJ1ZSwgLi4ubWFuaWZlc3Qub3B0aW9ucyB9KSkgYXMgTWFwV2lkZ2V0T3B0aW9ucztcbiAgICAgICAgaWYgKCFhdXRvT3B0aW9ucy50b29sdGlwTW9kZSkge1xuICAgICAgICAgIGF1dG9PcHRpb25zLnRvb2x0aXBNb2RlID0gVG9vbHRpcE1vZGUuQ0xJQ0s7XG4gICAgICAgIH1cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzPy5mb3JFYWNoKChsYXllciwgaSkgPT4ge1xuICAgICAgICAgIHBvcHVsYXRlTG9jYXRpb25BdHRyaWJ1dGUobGF5ZXIsIHJlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzKTtcbiAgICAgICAgICBwb3B1bGF0ZUludGVuc2l0eUF0dHJpYnV0ZShsYXllciwgcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMpO1xuICAgICAgICAgIGlmIChhdXRvT3B0aW9ucy5hdHRyaWJ1dGlvbnMpIHtcbiAgICAgICAgICAgIGxheWVyLmF0dHJpYnV0aW9uID0gbGF5ZXIuYXR0cmlidXRpb24gPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBhY3R1YWxMYXllcktleXMgPSAoYXV0b09wdGlvbnMubGF5ZXJzID8/IFtdKVxuICAgICAgICAgIC5tYXAoKGxheWVyKSA9PiAobGF5ZXIgYXMgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zKS5rZXkgPz8gbnVsbClcbiAgICAgICAgICAuZmlsdGVyKChrZXkpID0+ICEha2V5KTtcblxuICAgICAgICAvLyBHZXQgYWxsIHByZXZpb3VzIGxheWVycywgd2l0aG91dCBnZW9zZXJ2ZXIgbGF5ZXJzIHRoYXQgYXJlIG5vdCByZXF1ZXN0ZWQgYW55bW9yZSwgdGhlbiBhZGQgbmV3IGdlb3NlcnZlciBsYXllcnMgKHBvdGVudGlhbGx5IHdpdGggYSBwcmVjb25maWcgZnJvbSBtYW5pZmVzdCkuXG4gICAgICAgIGF1dG9PcHRpb25zLmxheWVycyA9IFtcbiAgICAgICAgICAuLi4oYXV0b09wdGlvbnMubGF5ZXJzID8/IFtdKS5tYXAoKGxheWVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnZW9MYXllciA9IGdlb0xheWVycy5maW5kKChsYXllcikgPT4gbGF5ZXIua2V5ID09PSBsYXllci5rZXkpID8/IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbGF5ZXIudHlwZSA9PT0gJ2dlb3NlcnZlcidcbiAgICAgICAgICAgICAgPyBnZW9MYXllclxuICAgICAgICAgICAgICAgID8geyAuLi5nZW9MYXllciwgLi4ubGF5ZXIgfVxuICAgICAgICAgICAgICAgIDogKG51bGwgYXMgdW5rbm93biBhcyBNYXBXaWRnZXRMYXllck9wdGlvbnMpXG4gICAgICAgICAgICAgIDogeyAuLi5sYXllciB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLmdlb0xheWVycy5maWx0ZXIoKGxheWVyKSA9PiAhYWN0dWFsTGF5ZXJLZXlzLmluY2x1ZGVzKGxheWVyLmtleSkpXG4gICAgICAgIF0uZmlsdGVyKChsYXllcikgPT4gISFsYXllcik7XG5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXREZWZhdWx0TGF5ZXJUaXRsZShsYXllciwgY2FwYWJpbGl0aWVzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICEhbWFwU3R5bGVzICYmXG4gICAgICAgICAgbWFwU3R5bGVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAoIWF1dG9PcHRpb25zLnN0eWxlIHx8ICFtYXBTdHlsZXMubWFwKChzdHlsZSkgPT4gc3R5bGUuaWRlbnRpZmllcikuaW5jbHVkZXMoYXV0b09wdGlvbnMuc3R5bGUpKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBsaWdodFN0eWxlcyA9IG1hcFN0eWxlcy5maWx0ZXIoKHN0eWxlKSA9PiAhKHN0eWxlLmlkZW50aWZpZXIgPz8gJy0nKS5pbmNsdWRlcygnZGFyaycpKTtcbiAgICAgICAgICBhdXRvT3B0aW9ucy5zdHlsZSA9IGxpZ2h0U3R5bGVzLmxlbmd0aCA+IDAgPyBsaWdodFN0eWxlc1swXS5pZGVudGlmaWVyIDogbWFwU3R5bGVzWzBdLmlkZW50aWZpZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF1dG9PcHRpb25zO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5tYXBVcmwkID0gdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLm1hcFVybCk7XG4gICAgdGhpcy53bXNGZWF0dXJlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMud21zRmVhdHVyZXMpO1xuXG4gICAgdGhpcy5ib3R0b21MZWZ0JCA9IHRoaXMud2lkZ2V0U2l6ZSQucGlwZShcbiAgICAgIG1hcCgoc2l6ZSkgPT4gYHRyYW5zbGF0ZSgxMHB4ICxjYWxjKCR7c2l6ZS5oZWlnaHR9cHggLSAxMDAlIC0gMTBweCkpYCksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuXG4gICAgdGhpcy5pdGVtU3R5bGVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmVzdWx0U2V0JCwgdGhpcy5tYW5pZmVzdCQsIHRoaXMuc3RhdGljUmVzdWx0U2V0JF0pLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoW3JzLCBtYW5pZmVzdCwgc3JzXSkgPT4ge1xuICAgICAgICBpZiAoKG1hbmlmZXN0LmRhdGFzb3VyY2UgPT09IHVuZGVmaW5lZCB8fCBtYW5pZmVzdC5kYXRhc291cmNlLmxlbmd0aCA9PT0gMCkgJiYgIXNycykge1xuICAgICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgICAgICBuZXcgUHJvbWlzZTx7IFtpZDogc3RyaW5nXTogeyBjbGFzc2ljOiBTdHlsZTsgYm9yZGVyZWQ6IFN0eWxlIH0gfT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0b3RhbCA9IE9iamVjdC52YWx1ZXMocnMuaXRlbXMpLnJlZHVjZSgocCwgYykgPT4gYy5sZW5ndGggKyBwLCAwKTtcbiAgICAgICAgICAgICAgaWYgKHRvdGFsID09PSAwKSByZXNvbHZlKHt9KTtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge30gYXMgeyBbaWQ6IHN0cmluZ106IHsgY2xhc3NpYzogU3R5bGU7IGJvcmRlcmVkOiBTdHlsZSB9IH07XG4gICAgICAgICAgICAgIE9iamVjdC52YWx1ZXMocnMuaXRlbXMpLmZvckVhY2goKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW1ib2xTZXJ2aWNlLmdldFN5bWJvbEFzSWNvblN0eWxlKGl0ZW0pLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bWJvbFNlcnZpY2UuZ2V0U3ltYm9sQXNJY29uU3R5bGUoaXRlbSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgIF0pLnRoZW4oKFtzdHlsZSwgYlN0eWxlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbaXRlbS5pZF0gPSB7IGNsYXNzaWM6IHN0eWxlLCBib3JkZXJlZDogYlN0eWxlIH07XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXN1bHQpLmxlbmd0aCA+PSB0b3RhbCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5oZWlnaHQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJC5waXBlKGRlYm91bmNlVGltZSgxMDApKSwgdGhpcy5kaXNwbGF5SGVhZGVyJF0pLnBpcGUoXG4gICAgICBtYXAoKFtzaXplLCBkaXNwbGF5XSkgPT4gKHNpemUuaGVpZ2h0ID8/IDEwMCkgLSAoZGlzcGxheSA/IFdJREdFVF9IRUFERVJfSEVJR0hUIDogMCkpLFxuICAgICAgZGVsYXkoMTApXG4gICAgKTtcblxuICAgIHRoaXMubGF5ZXJzVG9wJCA9IHRoaXMuZGlzcGxheUhlYWRlciQucGlwZShtYXAoKGRpc3BsYXkpID0+IDE0MCAtIChkaXNwbGF5ID8gMCA6IFdJREdFVF9IRUFERVJfSEVJR0hUKSkpO1xuICAgIHRoaXMubGVnZW5kVG9wJCA9IHRoaXMuZGlzcGxheUhlYWRlciQucGlwZShtYXAoKGRpc3BsYXkpID0+IDE4MCAtIChkaXNwbGF5ID8gMCA6IFdJREdFVF9IRUFERVJfSEVJR0hUKSkpO1xuXG4gICAgdGhpcy5sZWdlbmRIZWlnaHQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJC5waXBlKGRlYm91bmNlVGltZSgxMDApKSwgdGhpcy5sZWdlbmRUb3AkXSkucGlwZShcbiAgICAgIG1hcCgoW3NpemUsIHRvcF0pID0+IHtcbiAgICAgICAgcmV0dXJuIChzaXplLmhlaWdodCA/PyAxMDApIC0gV0lER0VUX0hFQURFUl9IRUlHSFQgLSB0b3AgLSA1NjsgLy8gNTZweCBpcyB0aGUgdG9vbHRpcCBoZWlnaHQgKyBtYXJnaW5cbiAgICAgIH0pLFxuICAgICAgZGVsYXkoMTApXG4gICAgKTtcbiAgfVxuXG4gIGluaXRJbnRlcmFjdGlvbk1hbmFnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJhY3Rpb25NYW5hZ2VyLmluaXQodGhpcyk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tYXAgPSBuZXcgTWFwKHsgdGFyZ2V0OiB0aGlzLm1hcFJlZi5uYXRpdmVFbGVtZW50IH0pO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5pbml0SW50ZXJhY3Rpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy5tYXBTdHlsZVVybCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLm1hcFVybCRdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgdXJsXSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMuc3R5bGUpIHtcbiAgICAgICAgICBjYXNlIHRoaXMuTk9fU1RZTEU6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICBjYXNlIHRoaXMuU1RZTEVfRlJPTV9VUkw6XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5zdHlsZVVSTCA/PyAnJztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGAke3VybH0vc3R5bGVzLyR7b3B0aW9ucy5zdHlsZX0vc3R5bGUuanNvbmA7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICk7XG5cbiAgICB0aGlzLm1hcFN0eWxlTGF5ZXIkID0gdGhpcy5tYXBTdHlsZVVybCQucGlwZShcbiAgICAgIG1hcCgoc3R5bGVVcmwpID0+IHtcbiAgICAgICAgaWYgKCFzdHlsZVVybCkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXllciA9IG5ldyBWZWN0b3JUaWxlTGF5ZXIoe1xuICAgICAgICAgIGRlY2x1dHRlcjogdHJ1ZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7IHRpdGxlOiAnYmFja2dyb3VuZCcgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXBwbHlTdHlsZShsYXllciwgc3R5bGVVcmwpLmNhdGNoKChlcnIpID0+IGNvbnNvbGUud2FybignU3R5bGUgYXBwbGljYXRpb24gcHJvYmxlbScsIGVycikpO1xuICAgICAgICBhcHBseUJhY2tncm91bmQobGF5ZXIsIHN0eWxlVXJsKS5jYXRjaCgoZXJyKSA9PiBjb25zb2xlLndhcm4oJ0JhY2tncm91bmQgYXBwbGljYXRpb24gcHJvYmxlbScsIGVycikpO1xuICAgICAgICByZXR1cm4gW2xheWVyXTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMub3B0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKG9wdGlvbnMpID0+ICh7XG4gICAgICAgICAgY2VudGVyOiBmcm9tTG9uTGF0KG9wdGlvbnMuY2VudGVyID8/IERFRkFVTFRfTUFQX0NFTlRFUiksXG4gICAgICAgICAgbWF4Wm9vbTogb3B0aW9ucy56b29tPy5tYXggPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgICBtaW5ab29tOiBvcHRpb25zLnpvb20/Lm1pbiA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICAgIHpvb206IG9wdGlvbnMuem9vbT8uc3RhcnQgPz8gREVGQVVMVF9aT09NX1NUQVJUXG4gICAgICAgIH0pKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmlldykgPT4gdGhpcy5tYXAuc2V0VmlldyhuZXcgVmlldyh2aWV3KSkpO1xuXG4gICAgdGhpcy5maXRPcHRpb24kID0gdGhpcy5vcHRpb25zJC5waXBlKFxuICAgICAgbWFwKChvcHRpb25zKSA9PiAhIW9wdGlvbnMuZml0KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuXG4gICAgdGhpcy5maXRPcHRpb24kLnN1YnNjcmliZSgoZml0KSA9PiB0aGlzLmZpdE1hcEZvck9iamVjdHMoZml0KSk7XG5cbiAgICB0aGlzLmxheWVycyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMucmVzdWx0U2V0JCxcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5hZGRpdGlvbmFsTGF5ZXJzJCxcbiAgICAgIHRoaXMuaXRlbVN0eWxlcyQsXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZGF0YXNvdXJjZUZpbHRlcnMpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKSlcbiAgICBdKS5waXBlKFxuICAgICAgZmlsdGVyKFxuICAgICAgICAoW3Jlc3VsdFNldCwgb3B0aW9ucywgY2xhc3NlcywgYWRkaXRpb25hbExheWVycywgaXRlbVN0eWxlcywgZmlsdGVyc10pID0+ICEhcmVzdWx0U2V0ICYmICEhb3B0aW9ucyAmJiAhIWNsYXNzZXNcbiAgICAgICksXG4gICAgICBtYXAoKFtyZXN1bHRTZXQsIG9wdGlvbnMsIGNsYXNzZXMsIGFkZGl0aW9uYWxMYXllcnMsIGl0ZW1TdHlsZXMsIGZpbHRlcnNdKSA9PiB7XG4gICAgICAgIGxldCBoYXNSZWxhdGlvbkxheWVyID0gbnVsbCBhcyB1bmtub3duIGFzIFZlY3RvckxheWVyPFZlY3RvclNvdXJjZTxhbnk+PjtcblxuICAgICAgICBjb25zdCBsYXllcnMgPSAob3B0aW9ucz8ubGF5ZXJzIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAobGF5ZXIpID0+IHRoaXMud2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLmRvbnROZWVkTG9jYXRpb24uaW5jbHVkZXMobGF5ZXIudHlwZSkgfHwgISFsYXllci5hdHRyaWJ1dGVcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIChsYXllcikgPT4gdGhpcy53aWRnZXRNYXBMYXllclNlcnZpY2UuZG9udE5lZWRJbnRlbnNpdHkuaW5jbHVkZXMobGF5ZXIudHlwZSkgfHwgISFsYXllci5pbnRlbnNpdHlBdHRyaWJ1dGVcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcCgobGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucywgaWR4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzRm9yQ2xhc3MgPSBPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpXG4gICAgICAgICAgICAgIC5tYXAoKGNsYXNzSWQpID0+ICh7XG4gICAgICAgICAgICAgICAgY2xhc3NJZCxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldEF0dHJpYnV0ZXNGb3JEcmF3aW5nKGNsYXNzZXMsIGNsYXNzSWQsIGxheWVyKVxuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAocCwgYykgPT4gKHtcbiAgICAgICAgICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgICAgICAgICBbYy5jbGFzc0lkXTogY1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHt9IGFzIHtcbiAgICAgICAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZW5zaXR5QXR0cmlidXRlOiBBdHRyaWJ1dGU7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uQXR0cmlidXRlOiBBdHRyaWJ1dGU7XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbGV0IGxheWVyQ2xhc3Nlc0lkID0gY2xhc3Nlcy5tYXAoKGNsYXp6KSA9PiBjbGF6ei5pZCk7XG4gICAgICAgICAgICBpZiAoJ2NsYXNzZXMnIGluIGxheWVyICYmICEhbGF5ZXIuY2xhc3NlcyAmJiBsYXllci5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGF5ZXJDbGFzc2VzSWQgPSBsYXllci5jbGFzc2VzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcmFuZ2UgPSB7IG1pbjogMCwgbWF4OiAwIH07XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAoISFsYXllci5pbnRlbnNpdHlBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gT2JqZWN0LmtleXMocmVzdWx0U2V0Lml0ZW1zKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNsYXNzSWQpID0+XG4gICAgICAgICAgICAgICAgICByZXN1bHRTZXQuaXRlbXNbY2xhc3NJZF0ubWFwKChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgICBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlQ2FsY3VsYXRlZFZhbHVlKGl0ZW0sIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10uaW50ZW5zaXR5QXR0cmlidXRlKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIGFzIG51bWJlcltdO1xuXG4gICAgICAgICAgICAgIHJhbmdlID0gdmFsdWVzLnJlZHVjZSgocCwgYykgPT4gKHsgbWluOiBNYXRoLm1pbihwLm1pbiwgYyksIG1heDogTWF0aC5tYXgocC5tYXgsIGMpIH0pLCB7XG4gICAgICAgICAgICAgICAgbWluOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgICAgIG1heDogLU51bWJlci5NQVhfVkFMVUVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGltcGwgPSB0aGlzLndpZGdldE1hcExheWVyU2VydmljZS5sYXllcnNJbXBsZW1lbnRhdGlvbltsYXllci50eXBlXTtcbiAgICAgICAgICAgIGlmICghIWltcGwpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0TGF5ZXIgPSBpbXBsKFxuICAgICAgICAgICAgICAgIGxheWVyIGFzIGFueSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICAgICAgICAgICAgbGF5ZXJDbGFzc2VzSWQsXG4gICAgICAgICAgICAgICAgcmVzdWx0U2V0LFxuICAgICAgICAgICAgICAgIHJhbmdlLFxuICAgICAgICAgICAgICAgIGl0ZW1TdHlsZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgPT09ICdyZWxhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBoYXNSZWxhdGlvbkxheWVyID0gcmVzdWx0TGF5ZXIgYXMgdW5rbm93biBhcyBWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U+O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc3VsdExheWVyLnNldCgndGl0bGUnLCBsYXllci50aXRsZSk7XG5cbiAgICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgPT09ICdnZW9zZXJ2ZXInKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3FsX2ZpbHRlciA9IENxbFV0aWxzLmdldENRTFBhcmFtc0ZvcihsYXllci5kYXRhc291cmNlSWQsIGZpbHRlcnMsIGNsYXNzZXMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNxbF9maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEFkZGluZyBDUUwgcXVlcnkgdG8gZ2Vvc2VydmVyIGxheWVyc1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdExheWVyIGFzIFRpbGU8VGlsZVdNUz4pLmdldFNvdXJjZSgpIS51cGRhdGVQYXJhbXMoeyBjcWxfZmlsdGVyIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRMYXllcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYExheWVyIHR5cGUgJHtsYXllci50eXBlfSBpcyB1bmtub3duYCk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgQmFzZUxheWVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+ICEhbGF5ZXIpO1xuXG4gICAgICAgIGlmICghIWhhc1JlbGF0aW9uTGF5ZXIpIHtcbiAgICAgICAgICBjb25zdCBmZWF0dXJlcyA9IGxheWVyc1xuICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+ICEobGF5ZXIgaW5zdGFuY2VvZiBUaWxlKSlcbiAgICAgICAgICAgIC5tYXAoKGxheWVyKSA9PlxuICAgICAgICAgICAgICBsYXllclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAuZ2V0U291cmNlKClcbiAgICAgICAgICAgICAgICAuZ2V0RmVhdHVyZXMoKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZlYXR1cmVzOiBGZWF0dXJlPGFueT4pID0+ICEhZmVhdHVyZXMuZ2V0KCdpZCcpIHx8ICEhZmVhdHVyZXMuZ2V0KCdmZWF0dXJlcycpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gWy4uLnAsIC4uLmNdLCBbXSk7XG5cbiAgICAgICAgICByZXN1bHRTZXQucmVsYXRpb25zLmZvckVhY2goKHJlbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBmZWF0dXJlcy5maW5kKChmOiBGZWF0dXJlPFBvaW50IHwgQ2lyY2xlPikgPT4gZi5nZXQoJ2lkJykgPT09IHJlbGF0aW9uLnNvdXJjZSk7XG4gICAgICAgICAgICBjb25zdCBkZXN0ID0gZmVhdHVyZXMuZmluZCgoZjogRmVhdHVyZTxQb2ludCB8IENpcmNsZT4pID0+IGYuZ2V0KCdpZCcpID09PSByZWxhdGlvbi5kZXN0aW5hdGlvbik7XG4gICAgICAgICAgICBpZiAoISFzb3VyY2UgJiYgISFkZXN0KSB7XG4gICAgICAgICAgICAgIGhhc1JlbGF0aW9uTGF5ZXIuZ2V0U291cmNlKCk/LmFkZEZlYXR1cmUoZ2V0TGlua0ZlYXR1cmUocmVsYXRpb24sIHNvdXJjZSwgZGVzdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxheWVycy5wdXNoKC4uLmFkZGl0aW9uYWxMYXllcnMpO1xuICAgICAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIsIGluZGV4LCBhcnIpID0+IGxheWVyLnNldCgnekluZGV4JywgYXJyLmxlbmd0aCAtIGluZGV4KSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc2luZ2xlTGF5ZXIpIHtcbiAgICAgICAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIsIGlkeCkgPT4ge1xuICAgICAgICAgICAgbGF5ZXIuc2V0VmlzaWJsZShpZHggPT09IDApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxheWVycztcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMubGVnZW5kTGF5ZXJzJCA9IHRoaXMub3B0aW9ucyQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG9wdGlvbnMpID0+XG4gICAgICAgICAgKG9wdGlvbnMubGF5ZXJzID8/IFtdKS5maWx0ZXIoKGxheWVyKSA9PiBbJ2dlb3NlcnZlcicsICd3bXMnXS5pbmNsdWRlcyhsYXllci50eXBlKSkgYXMgKFxuICAgICAgICAgICAgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnNcbiAgICAgICAgICAgIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnNcbiAgICAgICAgICApW11cbiAgICAgICksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLm1hcFN0eWxlTGF5ZXIkLFxuICAgICAgICB0aGlzLmxheWVycyQsXG4gICAgICAgIHRoaXMuZml0T3B0aW9uJCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkcyQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpKVxuICAgICAgXSkuc3Vic2NyaWJlKChbbWFwU3R5bGVMYXllciwgbGF5ZXJzLCBmaXQsIHNlbGVjdGVkSWRzXSkgPT4ge1xuICAgICAgICBjb25zdCB0b0FwcGx5TGF5ZXJzID0gWy4uLmxheWVycywgLi4ubWFwU3R5bGVMYXllcl07XG4gICAgICAgIHRoaXMubWFwLnNldExheWVycyh0b0FwcGx5TGF5ZXJzKTtcbiAgICAgICAgdGhpcy5tYXBcbiAgICAgICAgICAuZ2V0QWxsTGF5ZXJzKClcbiAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gIShsYXllciBpbnN0YW5jZW9mIFRpbGUpKVxuICAgICAgICAgIC5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2V0RmVhdHVyZXMgPSAobGF5ZXIuZ2V0U291cmNlKCkgYXMgVmVjdG9yU291cmNlKT8uZ2V0RmVhdHVyZXM7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGdldEZlYXR1cmVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIChsYXllci5nZXRTb3VyY2UoKSBhcyBWZWN0b3JTb3VyY2UpPy5nZXRGZWF0dXJlcygpLmZvckVhY2goKGZlYXR1cmU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBmZWF0dXJlLmdldCgndHlwZScpO1xuICAgICAgICAgICAgICAgIGlmIChbJ2J1YmJsZScsICdtYXJrZXInLCAncG9pbnQnLCAnbGluZScsICdwb2x5Z29uJywgJ211bHRpLWxpbmUnLCAnbXVsdGktcG9seWdvbiddLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICBmZWF0dXJlLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLmdldChzZWxlY3RlZElkcy5pbmNsdWRlcyhmZWF0dXJlLmdldCgnaWQnKSkgPyAnc2VsZWN0ZWRTdHlsZScgOiAnY2xhc3NpY1N0eWxlJylcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZpdE1hcEZvck9iamVjdHMoZml0LCBzZWxlY3RlZElkcyk7XG4gICAgICAgICAgdGhpcy5tYXAudXBkYXRlU2l6ZSgpO1xuICAgICAgICB9LCAyMDApO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLndtc0ZlYXR1cmVzJCwgdGhpcy5jbGFzc2ljRmVhdHVyZXMkLCB0aGlzLndpZGdldFNpemUkLCB0aGlzLmRpc3BsYXlIZWFkZXIkXSkuc3Vic2NyaWJlKFxuICAgICAgICAoW3dtc0ZlYXR1cmVzLCBjbGFzc2ljRmVhdHVyZXMsIHNpemUsIGhlYWRlcl0pID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5tYXApIHtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEluZGV4ID0gMDtcbiAgICAgICAgICAgIGNvbnN0IHBvcHVwT3ZlcmxheSA9IG5ldyBPdmVybGF5KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5wb3B1cC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICBvZmZzZXQ6IFs5LCA5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm1hcC5hZGRPdmVybGF5KHBvcHVwT3ZlcmxheSk7XG4gICAgICAgICAgICB0aGlzLnBvcHVwQ29udGVudC5jbGVhcigpO1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UHJvbWlzZXMgPSBbXSBhcyBQcm9taXNlPENvbXBvbmVudFJlZjxCYXNlVG9vbHRpcENvbXBvbmVudD4gfCBudWxsPltdO1xuICAgICAgICAgICAgd21zRmVhdHVyZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgY29tcG9uZW50UHJvbWlzZXMucHVzaCh0aGlzLmdlbmVyYXRlVG9vbHRpcCh2YWx1ZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjbGFzc2ljRmVhdHVyZXMuZm9yRWFjaCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb21wb25lbnRQcm9taXNlcy5wdXNoKHRoaXMuZ2VuZXJhdGVUb29sdGlwKHZhbHVlKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgUHJvbWlzZS5hbGwoY29tcG9uZW50UHJvbWlzZXMpLnRoZW4oKHByb21pc2VzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlYWxDb21wb25lbnRzID0gcHJvbWlzZXMuZmlsdGVyKChjb21wb25lbnQpID0+ICEhY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgdGhpcy50b29sdGlwTnVtYmVyID0gcmVhbENvbXBvbmVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICBpZiAocmVhbENvbXBvbmVudHMubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwLm5hdGl2ZUVsZW1lbnQuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwb3B1cE92ZXJsYXkuc2V0UG9zaXRpb24oWy05OTk5OTk5OTk5LCAtOTk5OTk5OTk5OV0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXAubmF0aXZlRWxlbWVudC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBEbyBub3QgZ28gb3V0c2lkZSB0aGUgbWFwXG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogMjAwICsgKGhlYWRlciA/IFdJREdFVF9IRUFERVJfSEVJR0hUIDogMCkgKyBUT09MVElQX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogMzAwICsgVE9PTFRJUF9QQURESU5HXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBsZXQgcGl4ZWwgPSB0aGlzLmludGVyYWN0aW9uTWFuYWdlci50b29sdGlwRXZlbnQ/LnBpeGVsO1xuICAgICAgICAgICAgICAgIGlmICghIXBpeGVsICYmIHBpeGVsWzBdICsgcmVjdC53aWR0aCA+IHNpemUud2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgIHBpeGVsWzBdID0gc2l6ZS53aWR0aCAtIHJlY3Qud2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghIXBpeGVsICYmIHBpeGVsWzFdICsgcmVjdC5oZWlnaHQgPiBzaXplLmhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgcGl4ZWxbMV0gPSBzaXplLmhlaWdodCAtIHJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcE1vdmUoMCk7XG4gICAgICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICAgICAgICAgIHBvcHVwT3ZlcmxheS5zZXRQb3NpdGlvbih0aGlzLm1hcC5nZXRDb29yZGluYXRlRnJvbVBpeGVsKHBpeGVsID8/IFswLCAwXSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgaW5pdFJlc3VsdFNldCQoKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnJlc3VsdFNldHMpLFxuICAgICAgdGhpcy5kYXRhc291cmNlSWRzJCxcbiAgICAgIHRoaXMuc3RhdGljUmVzdWx0U2V0JCxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhdGFTb3VyY2VTZWxlY3RvcnMuZGF0YXNldHMpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3Jlc3VsdFNldHMsIHJlc3VsdFNldE5hbWVzQXJyYXksIHN0YXRpY1Jlc3VsdFNldCwgZGVmaW5pdGlvbnNdKSA9PiB7XG4gICAgICAgIGlmICghIXN0YXRpY1Jlc3VsdFNldCkge1xuICAgICAgICAgIHJldHVybiBzdGF0aWNSZXN1bHRTZXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0U2V0QXJyYXkgPSByZXN1bHRTZXROYW1lc0FycmF5XG4gICAgICAgICAgLmZpbHRlcigocnNOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gZGVmaW5pdGlvbnMuZmluZCgoZHNkKSA9PiBkc2QuaWQgPT09IHJzTmFtZSkgYXMgRGF0YXNldCB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiAhZGVmaW5pdGlvbiB8fCAhKGRlZmluaXRpb24ubWV0YWRhdGEgPz8gW10pLmZpbmQoKG1ldGEpID0+IG1ldGEubWV0YWRhdGFEZWYubmFtZSA9PT0gJ19nZW9LZXknKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5tYXAoKHJzTmFtZSkgPT4gcmVzdWx0U2V0c1tyc05hbWUgPz8gJyddKVxuICAgICAgICAgIC5maWx0ZXIoKHJzTmFtZSkgPT4gISFyc05hbWUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0U2V0QXJyYXkucmVkdWNlKChyczEsIHJzMikgPT4gUmVzdWx0c2V0VXRpbHMubWVyZ2VSZXN1bHRTZXRzKHJzMSwgcnMyKSwge1xuICAgICAgICAgIGl0ZW1zOiB7fSxcbiAgICAgICAgICByZWxhdGlvbnM6IFtdLFxuICAgICAgICAgIG1lcmdlZDogcmVzdWx0U2V0QXJyYXkubGVuZ3RoXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgdikgPT4gZXF1YWwocCwgdikpXG4gICAgKTtcbiAgfVxuXG4gIGdlbmVyYXRlVG9vbHRpcCh2YWx1ZToge1xuICAgIG9DbGFzczogc3RyaW5nO1xuICAgIGNvb3JkaW5hdGVzOiBQaXhlbDtcbiAgICB2YWx1ZXM6IGFueTtcbiAgfSk6IFByb21pc2U8Q29tcG9uZW50UmVmPEJhc2VUb29sdGlwQ29tcG9uZW50PiB8IG51bGw+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCQgPSB0aGlzLnRvb2x0aXBGYWN0b3J5U2VydmljZS5nZW5lcmF0ZVRvb2x0aXAodmFsdWUub0NsYXNzLCB0aGlzLmluamVjdG9yLCB0aGlzLnBvcHVwQ29udGVudCk7XG4gICAgICBjb21wb25lbnQkLnN1YnNjcmliZSgoY29tcG9uZW50KSA9PiB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuZGF0YS5pdGVtID0gdmFsdWUudmFsdWVzO1xuICAgICAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS5wb3B1cCA9IHRoaXMucG9wdXA7XG4gICAgICAgICAgcmVzb2x2ZShjb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldERlZmF1bHRMYXllclRpdGxlKGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGNhcGFiaWxpdGllczogKEdldENhcGFiaWxpdGllc1Jlc3BvbnNlIHwgbnVsbClbXSkge1xuICAgIGlmICghbGF5ZXIudGl0bGUpIHtcbiAgICAgIGlmIChbJ2dlb3NlcnZlcicsICd3bXMnXS5pbmNsdWRlcyhsYXllci50eXBlKSkge1xuICAgICAgICBjb25zdCBnZW9MYXllciA9IGxheWVyIGFzIE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyB8IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zO1xuICAgICAgICBjb25zdCBsYXllckNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcy5maW5kKChjYXApID0+IGNhcD8ucGFyYW1MYXllciA9PT0gZ2VvTGF5ZXIucGFyYW1MYXllcik7XG5cbiAgICAgICAgaWYgKGxheWVyQ2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdMYXllciA9IFdtc1NlcnZpY2UuZ2V0TWF0Y2hpbmdMYXllcihnZW9MYXllci5wYXJhbUxheWVyLCBsYXllckNhcGFiaWxpdGllcy5kb2MpO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0xheWVyKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ1RpdGxlID0gWE1MVXRpbHMuZmluZChtYXRjaGluZ0xheWVyLmNoaWxkTm9kZXMsICdUaXRsZScpO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nVGl0bGUpIHtcbiAgICAgICAgICAgICAgbGF5ZXIudGl0bGUgPSBtYXRjaGluZ1RpdGxlLnRleHRDb250ZW50ID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxheWVyLnRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYEBwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuJHtsYXllci50eXBlfWAsIHsgLi4ubGF5ZXIgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZml0TWFwRm9yT2JqZWN0cyhmaXQ6IGJvb2xlYW4sIHNlbGVjdGVkSWRzPzogc3RyaW5nW10pIHtcbiAgICBpZiAoZml0KSB7XG4gICAgICBsZXQgZXh0ZW50ID0gY3JlYXRlRW1wdHkoKTtcbiAgICAgIGNvbnN0IGxpc3RPZk1hcmtlcnMgPSBbXSBhcyBhbnlbXTtcblxuICAgICAgdGhpcy5tYXBcbiAgICAgICAgLmdldEFsbExheWVycygpXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGxheWVyKSA9PiAhIWxheWVyLmdldFNvdXJjZSAmJiAhIWxheWVyLmdldFNvdXJjZSgpICYmICEhKGxheWVyLmdldFNvdXJjZSgpIGFzIFZlY3RvclNvdXJjZSkuZ2V0RmVhdHVyZXNcbiAgICAgICAgKVxuICAgICAgICAuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAobGF5ZXIuZ2V0U291cmNlKCkgYXMgVmVjdG9yU291cmNlKS5nZXRGZWF0dXJlcygpLmZvckVhY2goKGZlYXR1cmU6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBmZWF0dXJlLmdldCgnaWQnKTtcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRJZHMgfHwgc2VsZWN0ZWRJZHMubGVuZ3RoIDw9IDAgfHwgKHNlbGVjdGVkSWRzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRJZHMuaW5jbHVkZXMoaWQpKSkge1xuICAgICAgICAgICAgICBzd2l0Y2ggKGZlYXR1cmUuZ2V0KCd0eXBlJykpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdoZWF0cG9pbnQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3BvaW50JzpcbiAgICAgICAgICAgICAgICBjYXNlICdtYXJrZXInOlxuICAgICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKGZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2xpbmUnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKC4uLmZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3BvbHlnb24nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ211bHRpLWxpbmUnOlxuICAgICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKC4uLmZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpLmZsYXQoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtdWx0aS1wb2x5Z29uJzpcbiAgICAgICAgICAgICAgICAgIGxpc3RPZk1hcmtlcnMucHVzaCguLi5mZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0Q29vcmRpbmF0ZXMoKS5mbGF0KCkuZmxhdCgpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBsaXN0T2ZNYXJrZXJzLnB1c2goZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldENlbnRlcigpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgY29uc3Qgc2VsZWN0ZWRFeHRlbnQgPSBib3VuZGluZ0V4dGVudChsaXN0T2ZNYXJrZXJzLmZpbHRlcigoY29vcmQpID0+ICEhY29vcmQpKTtcbiAgICAgIGlmIChcbiAgICAgICAgc2VsZWN0ZWRFeHRlbnRbMF0gIT09IEluZmluaXR5ICYmXG4gICAgICAgIHNlbGVjdGVkRXh0ZW50WzFdICE9PSBJbmZpbml0eSAmJlxuICAgICAgICBzZWxlY3RlZEV4dGVudFsyXSAhPT0gLUluZmluaXR5ICYmXG4gICAgICAgIHNlbGVjdGVkRXh0ZW50WzNdICE9PSAtSW5maW5pdHlcbiAgICAgICkge1xuICAgICAgICBleHRlbnQgPSBzZWxlY3RlZEV4dGVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dGVudFswXSAhPT0gSW5maW5pdHkgJiYgZXh0ZW50WzFdICE9PSBJbmZpbml0eSAmJiBleHRlbnRbMl0gIT09IC1JbmZpbml0eSAmJiBleHRlbnRbM10gIT09IC1JbmZpbml0eSkge1xuICAgICAgICB0aGlzLm1hcC5nZXRWaWV3KCkuZml0KGV4dGVudCwgeyBwYWRkaW5nOiBbMjAsIDIwLCA3MCwgNzBdLCBkdXJhdGlvbjogMjAwIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXR0cmlidXRlc0ZvckRyYXdpbmcoY2xhc3NlczogQ2xhc3NbXSwgY2xhc3NJZDogc3RyaW5nLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgY2xhc3NPYmogPSBjbGFzc2VzLmZpbmQoKGNsKSA9PiBjbC5pZCA9PT0gY2xhc3NJZCkgPz8gKHsgYXR0cmlidXRlczogW10gYXMgQXR0cmlidXRlW10gfSBhcyBDbGFzcyk7XG4gICAgY29uc3QgbG9jYXRpb25BdHRyaWJ1dGUgPSB0aGlzLmdldExvY2F0aW9uQXR0cmlidXRlKGNsYXNzT2JqLCBsYXllcik7XG4gICAgY29uc3QgaW50ZW5zaXR5QXR0cmlidXRlID0gdGhpcy5nZXRJbnRlbnNpdHlBdHRyaWJ1dGUoXG4gICAgICBjbGFzc09iaixcbiAgICAgIGxheWVyIGFzIE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnNcbiAgICApO1xuICAgIHJldHVybiB7IGxvY2F0aW9uQXR0cmlidXRlLCBpbnRlbnNpdHlBdHRyaWJ1dGUgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW50ZW5zaXR5QXR0cmlidXRlKFxuICAgIGNsYXNzT2JqOiBDbGFzcyB8IHVuZGVmaW5lZCxcbiAgICBsYXllcjogTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gKFxuICAgICAgKGNsYXNzT2JqIHx8IHsgYXR0cmlidXRlczogW10gfSkuYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLm5hbWUgPT09IGxheWVyPy5pbnRlbnNpdHlBdHRyaWJ1dGUgPz8gJycpID8/XG4gICAgICAodW5kZWZpbmVkIGFzIHVua25vd24gYXMgQXR0cmlidXRlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2F0aW9uQXR0cmlidXRlKGNsYXNzT2JqOiBDbGFzcywgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyk6IEF0dHJpYnV0ZSB7XG4gICAgdHlwZSBsYXllcnMgPSBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwZWNpZmljTGF5ZXIgPSBsYXllciBhcyBsYXllcnM7XG4gICAgcmV0dXJuIChcbiAgICAgIGNsYXNzT2JqLmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5uYW1lID09PSAoc3BlY2lmaWNMYXllcj8uYXR0cmlidXRlID8/IFtdKSA/PyAnJykgPz9cbiAgICAgICh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBBdHRyaWJ1dGUpXG4gICAgKTtcbiAgfVxuXG4gIGNoYW5nZVN0eWxlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5zdHlsZSA9ICRldmVudDtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5zdHlsZSAhPT0gdGhpcy5TVFlMRV9GUk9NX1VSTCkge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuc3R5bGVVUkw7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU3R5bGVVUkwoJGV2ZW50OiBFdmVudCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLm9wdGlvbnNDb3B5LnN0eWxlVVJMID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlRml0KCRldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuZml0ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlQXR0cmlidXRpb25zKCRldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuYXR0cmlidXRpb25zID0gJGV2ZW50O1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LmF0dHJpYnV0aW9ucykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LmZvckVhY2goKGxheWVyKSA9PiAobGF5ZXIuYXR0cmlidXRpb24gPSAnJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZm9yRWFjaCgobGF5ZXIpID0+IGRlbGV0ZSBsYXllci5hdHRyaWJ1dGlvbik7XG4gICAgfVxuICB9XG5cbiAgYWRkTGF5ZXIoKSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5LmxheWVycykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMucHVzaCh7IGF0dHJpYnV0ZTogJycgfSBhcyBNYXBXaWRnZXRMYXllck9wdGlvbnMpO1xuICB9XG5cbiAgY2hhbmdlTGF5ZXJUeXBlKCRldmVudDogYW55LCBpOiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkubGF5ZXJzKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID8/IFtdO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXS50eXBlID0gJGV2ZW50O1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXS50eXBlID09PSAnd21zJykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zO1xuICAgICAgb3B0aW9ucy5wYXJhbUxheWVyID0gb3B0aW9ucy5wYXJhbUxheWVyID8/ICcnO1xuICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCA/PyAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldLnR5cGUgPT09ICd3bXRzJykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldIGFzIE1hcFdNVFNMYXllckxheWVyT3B0aW9ucztcbiAgICAgIG9wdGlvbnMucGFyYW1MYXllciA9IG9wdGlvbnMucGFyYW1MYXllciA/PyAnJztcbiAgICAgIG9wdGlvbnMuc3R5bGUgPSBvcHRpb25zLnN0eWxlID8/ICcnO1xuICAgICAgb3B0aW9ucy5tYXRyaXhTZXQgPSBvcHRpb25zLm1hdHJpeFNldCA/PyAnJztcbiAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwgPz8gJyc7XG4gICAgfVxuICAgIGlmIChbJ2ZlYXR1cmVsYXllcicsICd2ZWN0b3J0aWxlJywgJ3Jhc3RlcnRpbGUnXS5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXS50eXBlKSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldIGFzIE1hcEZlYXR1cmVMYXllck9wdGlvbnM7XG4gICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsID8/ICcnO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVRpdGxlKCRldmVudDogYW55LCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgbGF5ZXIudGl0bGUgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMub3B0aW9uc0NvcHksIGxheWVyczogKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID8/IFtdKS5maWx0ZXIoKGxheWVyKSA9PiAhIWxheWVyLnR5cGUpIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZUxvY2F0aW9uQXR0cmlidXRlcygkZXZlbnQ6IGFueSwgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5hdHRyaWJ1dGUgPSAkZXZlbnQ7XG4gIH1cblxuICBsYXllckhhc0ludGVuc2l0eShsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKTogTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucyB7XG4gICAgcmV0dXJuIDxNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zPmxheWVyO1xuICB9XG5cbiAgY2hhbmdlSW50ZW5zaXR5QXR0cmlidXRlcygkZXZlbnQ6IGFueSwgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGNvbnN0IGxheWVyXyA9IDxNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zPmxheWVyO1xuICAgIGxheWVyXy5pbnRlbnNpdHlBdHRyaWJ1dGUgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VDbGFzc2VzKCRldmVudDogc3RyaW5nW10sIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBzcGVjaWZpY0xheWVyID0gbGF5ZXIgYXNcbiAgICAgIHwgTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9uc1xuICAgICAgfCBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zO1xuICAgIHNwZWNpZmljTGF5ZXIuY2xhc3NlcyA9ICRldmVudDtcbiAgfVxuXG4gIGRlbGV0ZUxheWVyKGk6IG51bWJlcikge1xuICAgIHRoaXMub3B0aW9uc0NvcHk/LmxheWVycz8uc3BsaWNlKGksIDEpO1xuICB9XG5cbiAgaW52ZXJ0TGF5ZXJzKGlkeDogbnVtYmVyLCBpZHhXaXRoOiBudW1iZXIpIHtcbiAgICBpZiAoISF0aGlzLm9wdGlvbnNDb3B5ICYmICEhdGhpcy5vcHRpb25zQ29weS5sYXllcnMpIHtcbiAgICAgIGNvbnN0IHRtcCA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2lkeFdpdGhdO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaWR4V2l0aF0gPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpZHhdO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaWR4XSA9IHRtcDtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VVcmwoXG4gICAgJGV2ZW50OiBFdmVudCxcbiAgICBsYXllcjpcbiAgICAgIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwRmVhdHVyZUxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBWZWN0b3JUaWxlTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFJhc3RlclRpbGVMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1xuICApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIudXJsID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlQXR0cmlidXRpb24oJGV2ZW50OiBFdmVudCwgbGF5ZXI6IEJhc2VXaWRnZXRNYXBMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIuYXR0cmlidXRpb24gPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VQYXJhbUxheWVyKCRldmVudDogRXZlbnQsIGxheWVyOiBNYXBXTVNMYXllckxheWVyT3B0aW9ucyB8IE1hcFdNVFNMYXllckxheWVyT3B0aW9ucykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5wYXJhbUxheWVyID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlUGFyYW1UaWxlZCgkZXZlbnQ6IGJvb2xlYW4sIGxheWVyOiBNYXBXTVNMYXllckxheWVyT3B0aW9ucykge1xuICAgIGxheWVyLnBhcmFtVGlsZWQgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VNYXRyaXhTZXQoJGV2ZW50OiBFdmVudCwgbGF5ZXI6IE1hcFdNVFNMYXllckxheWVyT3B0aW9ucykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5tYXRyaXhTZXQgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VQYXJhbVN0eWxlKCRldmVudDogRXZlbnQsIGxheWVyOiBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIuc3R5bGUgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBleHBvcnQoKSB7XG4gICAgZXhwb3J0TWFwQXNJbWFnZSh0aGlzLm1hcCwgJ21hcC5wbmcnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvSW1hZ2UoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gZ2V0TWFwQXNQbmcodGhpcy5tYXApO1xuICB9XG5cbiAgY2hhbmdlQ2x1c3RlcmVkKGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsICRldmVudDogYm9vbGVhbikge1xuICAgIGxheWVyLmNsdXN0ZXJlZCA9ICRldmVudDtcbiAgICBpZiAobGF5ZXIuY2x1c3RlcmVkKSB7XG4gICAgICBsYXllci5jbHVzdGVyRGlzdGFuY2UgPSAxMDtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VDbHVzdGVyRGlzdGFuY2UobGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucywgJGV2ZW50OiBFdmVudCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5jbHVzdGVyRGlzdGFuY2UgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBoaWRlQWRkcmVzcygpIHtcbiAgICB0aGlzLmFkZHJlc3MubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG5cbiAgY2hhbmdlT3BhY2l0eShsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCAkZXZlbnQ6IHN0cmluZykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5vcGFjaXR5ID0gcGFyc2VJbnQoJGV2ZW50LCAxMCk7XG4gIH1cblxuICBnZXRXTVNMYXllcnMoKSB7XG4gICAgcmV0dXJuICF0aGlzLm1hcFxuICAgICAgPyBbXVxuICAgICAgOiB0aGlzLm1hcFxuICAgICAgICAgIC5nZXRBbGxMYXllcnMoKVxuICAgICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5nZXRTb3VyY2UoKSBpbnN0YW5jZW9mIFRpbGVXTVMpXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5yZW5kZXJlZCA9PT0gdHJ1ZSk7XG4gIH1cblxuICBpc0xheWVyUmVuZGVyZWQobGF5ZXI6IGFueSkge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0V01TTGF5ZXJzKCkuZmluZCgod21zTGF5ZXIpID0+IHdtc0xheWVyLmdldCgndGl0bGUnKSA9PT0gbGF5ZXIudGl0bGUpO1xuICB9XG5cbiAgaXNMYXllclZpc2libGUobGF5ZXI6IGFueSkge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0V01TTGF5ZXJzKClcbiAgICAgIC5maW5kKCh3bXNMYXllcikgPT4gd21zTGF5ZXIuZ2V0KCd0aXRsZScpID09PSBsYXllci50aXRsZSlcbiAgICAgID8uZ2V0VmlzaWJsZSgpO1xuICB9XG5cbiAgZ2V0RmVhdHVyZUZyb21TZXJ2ZXIod21zTGF5ZXJzOiBhbnlbXSwgcGl4ZWw6IFBpeGVsKSB7XG4gICAgcHJvajQuZGVmcyhcbiAgICAgICdFUFNHOjIxNTQnLFxuICAgICAgJytwcm9qPWxjYyArbGF0XzA9NDYuNSArbG9uXzA9MyArbGF0XzE9NDkgK2xhdF8yPTQ0ICt4XzA9NzAwMDAwICt5XzA9NjYwMDAwMCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmcyArdHlwZT1jcnMnXG4gICAgKTtcbiAgICByZWdpc3Rlcihwcm9qNCk7XG4gICAgY29uc3QgcHJvakdlbyA9IGdldFByb2plY3Rpb24oJ0VQU0c6Mzg1NycpO1xuICAgIGNvbnN0IHByb2pMYW1iZXJ0ID0gZ2V0UHJvamVjdGlvbignRVBTRzoyMTU0Jyk7XG5cbiAgICBpZiAocHJvakxhbWJlcnQgJiYgcHJvakdlbykge1xuICAgICAgZm9yIChjb25zdCBsYXllciBvZiB3bXNMYXllcnMpIHtcbiAgICAgICAgY29uc3QgdXJsID0gbGF5ZXJcbiAgICAgICAgICAuZ2V0U291cmNlKClcbiAgICAgICAgICAuZ2V0RmVhdHVyZUluZm9VcmwodHJhbnNmb3JtKHBpeGVsLCBwcm9qR2VvLCBwcm9qTGFtYmVydCksIHRoaXMubWFwLmdldFZpZXcoKS5nZXRSZXNvbHV0aW9uKCksICdFUFNHOjIxNTQnLCB7XG4gICAgICAgICAgICBJTkZPX0ZPUk1BVDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgRkVBVFVSRV9DT1VOVDogMTBcbiAgICAgICAgICB9KTtcbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmdldFdtc0ZlYXR1cmVzKHtcbiAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICBvQ2xhc3M6IGxheWVyLmdldFByb3BlcnRpZXMoKS5vQ2xhc3MgPz8gJycsXG4gICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBwaXhlbFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlV21zQ2xhc3MoJGV2ZW50OiBhbnksIGxheWVyOiBNYXBXTVNMYXllckxheWVyT3B0aW9ucykge1xuICAgIGxheWVyLm9DbGFzcyA9ICRldmVudDtcbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5sZWdlbmRUYWIgPSB0aGlzLmxlZ2VuZFRhYiA9PT0gaW5kZXggPyAtMSA6IGluZGV4O1xuICB9XG5cbiAgdG9nZ2xlTGVnZW5kV2luZG93KCkge1xuICAgIHRoaXMubGVnZW5kVGFiT3BlbiA9ICF0aGlzLmxlZ2VuZFRhYk9wZW47XG4gICAgdGhpcy5sYXllcnNUYWJPcGVuID0gZmFsc2U7XG4gIH1cblxuICB0b2dnbGVMYXllcnNXaW5kb3coKSB7XG4gICAgdGhpcy5sYXllcnNUYWJPcGVuID0gIXRoaXMubGF5ZXJzVGFiT3BlbjtcbiAgICB0aGlzLmxlZ2VuZFRhYk9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHRvb2x0aXBNb3ZlKG51bWJlcjogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMudG9vbHRpcENhbk1vdmUobnVtYmVyKSkge1xuICAgICAgdGhpcy5zZXRTdHlsZUFzeW5jKHRoaXMudG9vbHRpcEluZGV4LCAnbm9uZScpO1xuICAgICAgdGhpcy50b29sdGlwSW5kZXggPSB0aGlzLnRvb2x0aXBJbmRleCArIG51bWJlcjtcbiAgICAgIHRoaXMuc2V0U3R5bGVBc3luYyh0aGlzLnRvb2x0aXBJbmRleCwgJ2Jsb2NrJyk7XG4gICAgfVxuICB9XG5cbiAgdG9vbHRpcENhbk1vdmUobnVtYmVyOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy50b29sdGlwSW5kZXggKyBudW1iZXIgPj0gMCAmJiB0aGlzLnRvb2x0aXBJbmRleCArIG51bWJlciA8IHRoaXMudG9vbHRpcE51bWJlcjtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3R5bGVBc3luYyhpZHg6IG51bWJlciwgdmFsdWU6IHN0cmluZykge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0Q29udGFpbmVyID0gdGhpcy5wb3B1cENvbnRlbnQuZ2V0KGlkeCk7XG4gICAgICBpZiAodGFyZ2V0Q29udGFpbmVyKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGFyZ2V0Q29udGFpbmVyLnJvb3ROb2Rlc1swXS5zdHlsZS5kaXNwbGF5ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGdldCBtYXBMYXllcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwXG4gICAgICAuZ2V0TGF5ZXJzKClcbiAgICAgIC5nZXRBcnJheSgpXG4gICAgICAuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ2V0KCd0aXRsZScpICE9PSAnYmFja2dyb3VuZCcpO1xuICB9XG5cbiAgY2hhbmdlVmlzaWJpbGl0eShsYXllcjogQmFzZUxheWVyKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkuc2luZ2xlTGF5ZXIpIHtcbiAgICAgIHRoaXMubWFwTGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiBsYXllci5zZXRWaXNpYmxlKGZhbHNlKSk7XG4gICAgICBsYXllci5zZXRWaXNpYmxlKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXllci5zZXRWaXNpYmxlKCFsYXllci5nZXRWaXNpYmxlKCkpO1xuICAgIH1cbiAgICB0aGlzLm1hcC51cGRhdGVTaXplKCk7XG4gIH1cblxuICBjaGFuZ2VTaW5nbGVMYXllcigkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuc2luZ2xlTGF5ZXIgPSAkZXZlbnQ7XG4gIH1cblxuICBnZXQgbGF5ZXJWaXNpYmxlSWR4KCkge1xuICAgIHJldHVybiB0aGlzLm1hcExheWVycy5tYXAoKGxheWVyLCBpZHgpID0+IChsYXllci5nZXRWaXNpYmxlKCkgPyBpZHggOiAwKSkucmVkdWNlKChhLCBiKSA9PiBhICsgYik7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5yZXNldFdtc0ZlYXR1cmVzKCkpO1xuICB9XG59XG4iLCI8cHJ5LXdpZGdldC1tYXAtY3NzPjwvcHJ5LXdpZGdldC1tYXAtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS1tYXBcIj5cbiAgPHByeS13aWRnZXQtaGVhZGVyXG4gICAgW2RhdGFzb3VyY2VJZHNdPVwiKGRhdGFzb3VyY2VJZHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAqbmdJZj1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgW21hbmlmZXN0XT1cIm1hbmlmZXN0XCJcbiAgICAobWFuaWZlc3RNb2RpZmllZCk9XCJtYW5pZmVzdE1vZGlmaWVkLmVtaXQoJGV2ZW50KVwiXG4gICAgW2hlYWRlck9wdGlvbnNdPVwiKGRpc3BsYXlIZWFkZXIkIHwgYXN5bmMpID8/IHt9XCJcbiAgICAjaGVhZGVyXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfc3R5bGVcIj57eyAnQHByeS53aWRnZXQubWFwLnN0eWxlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVN0eWxlKCRldmVudClcIlxuICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgIFtpdGVtc109XCJzdHlsZXMkIHwgYXN5bmNcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnN0eWxlXCJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgYmluZFZhbHVlPVwiaWRlbnRpZmllclwiXG4gICAgICAgICAgaWQ9XCJtYXBfc3R5bGVcIlxuICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJvcHRpb25zQ29weS5zdHlsZSA9PT0gU1RZTEVfRlJPTV9VUkxcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInN0eWxlX1VSTFwiPnt7ICdAcHJ5LndpZGdldC5tYXAuc3R5bGVVcmwnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGlkPVwic3R5bGVfVVJMXCJcbiAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VTdHlsZVVSTCgkZXZlbnQpXCJcbiAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uc0NvcHkuc3R5bGVVUkwgPz8gJydcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2luZ2xlTGF5ZXIoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnNpbmdsZUxheWVyID8/IGZhbHNlXCI+XG4gICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAuc2luZ2xlTGF5ZXInIHwgaTE4biB9fVxuICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlRml0KCRldmVudClcIiBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5maXQgPz8gZmFsc2VcIj5cbiAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5maXQnIHwgaTE4biB9fVxuICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQXR0cmlidXRpb25zKCRldmVudClcIiBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hdHRyaWJ1dGlvbnMgPz8gZmFsc2VcIj5cbiAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5hdHRyaWJ1dGlvbnMnIHwgaTE4biB9fVxuICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fYWN0aW9ucyAtaGFzLXNlcGFyYXRvclwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWRkTGF5ZXIoKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tdGV4dCAtbGluay1saWtlXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJsaWJyYXJ5X2FkZFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5hZGRMYXllcicgfCBpMThuIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGxheWVyIG9mIG9wdGlvbnNDb3B5Py5sYXllcnM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNfX2hlYWRcIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJhLWgzIHNldHRpbmdzLWxheWVyLXRpdGxlX190aXRsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXInIHwgaTE4biA6IHsgaW5kZXg6IGkgKyAxIH0gfX08L2gzPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCIgKGNsaWNrKT1cImludmVydExheWVycyhpLCBpIC0gMSlcIiAqbmdJZj1cImkgPiAwXCI+XG4gICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZmxlY2hlX2hhdXRcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkuYWN0aW9uLm1vdmVVcCcgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW52ZXJ0TGF5ZXJzKGksIGkgKyAxKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaSA8IChvcHRpb25zQ29weT8ubGF5ZXJzPy5sZW5ndGggPz8gMCkgLSAxXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJmbGVjaGVfYmFzXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LmFjdGlvbi5tb3ZlRG93bicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzX19jb250ZW50XCI+XG4gICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgW25nTW9kZWxdPVwiKGxheWVyPy5vcGFjaXR5ID8/IDEwMCkgKyAnJ1wiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VPcGFjaXR5KGxheWVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIGxhYmVsVHJhbnNsYXRlPVwiQHByeS53aWRnZXQubWFwLm9wYWNpdHlcIlxuICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgID48L3ByeS1yYW5nZT5cblxuICAgICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXJPcHRpb25zJyB8IGkxOG4gOiB7IGluZGV4OiBpICsgMSB9IH19PC9sZWdlbmQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfbGF5ZXJUaXRsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXJUaXRsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWQ9XCJtYXBfbGF5ZXJUaXRsZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlVGl0bGUoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJsYXllci50aXRsZSA/PyAnJ1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwibGF5ZXIudHlwZSAhPT0gJ2dlb3NlcnZlcidcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9sYXllclR5cGVcIj57eyAnQHByeS53aWRnZXQubWFwLmxheWVyVHlwZS50aXRsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMYXllclR5cGUoJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgW2JpbmREYXRhXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJsYXllclR5cGVzXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxUcmFuc2xhdGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXIudHlwZVwiXG4gICAgICAgICAgICAgICAgYmFzZVRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJtYXBfbGF5ZXJUeXBlXCJcbiAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3JlbGF0aW9uJyAmJlxuICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd3bXMnICYmXG4gICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3dtdHMnICYmXG4gICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ2dlb3NlcnZlcicgJiZcbiAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnZmVhdHVyZWxheWVyJyAmJlxuICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd2ZWN0b3J0aWxlJyAmJlxuICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdyYXN0ZXJ0aWxlJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfY2xhc3Nlc1wiPnt7ICdAcHJ5LndpZGdldC5tYXAuY2xhc3NlcycgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDbGFzc2VzKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwiY2xhc3NlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLmNsYXNzZXNcIlxuICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJtYXBfY2xhc3Nlc1wiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZmllbGRzZXRcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3JlbGF0aW9uJyAmJlxuICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3dtcycgJiZcbiAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd3bXRzJyAmJlxuICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ2dlb3NlcnZlcicgJiZcbiAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdmZWF0dXJlbGF5ZXInICYmXG4gICAgICAgICAgICBsYXllci50eXBlICE9PSAndmVjdG9ydGlsZScgJiZcbiAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdyYXN0ZXJ0aWxlJ1xuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLmxvY2F0aW9uQXR0cicgfCBpMThuIH19PC9sZWdlbmQ+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgbGF5ZXJcbiAgICAgICAgICAgICAgICB8IGdlb21ldHJ5RmllbGRzRm9yIDogeyByZXN1bHRTZXQ6IHJlc3VsdFNldCQsIGNsYXNzZXM6IGxheWVyLmNsYXNzZXMsIHR5cGU6IGxheWVyLnR5cGUgfVxuICAgICAgICAgICAgICAgIHwgYXN5bmMgYXMgZmllbGRzXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBbJ2hlYXRtYXAnLCAnYnViYmxlJywgJ21hcmtlcicsICdwb2ludCcsICdsaW5lJywgJ3BvbHlnb24nLCAnbXVsdGktbGluZScsICdtdWx0aS1wb2x5Z29uJ10uaW5kZXhPZihcbiAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGVcbiAgICAgICAgICAgICAgICApID49IDBcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfbG9jYXRpb25BdHRyaWJ1dGVfYm90aFwiPnt7XG4gICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLmxvY2F0aW9uQXR0cmlidXRlLmJvdGgnIHwgaTE4blxuICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTG9jYXRpb25BdHRyaWJ1dGVzKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllci5hdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwibWFwX2xvY2F0aW9uQXR0cmlidXRlX2JvdGhcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJbJ2hlYXRtYXAnLCAnYnViYmxlJ10uaW5kZXhPZihsYXllci50eXBlKSA+PSAwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2ludGVuc2l0eUF0dHJpYnV0ZVwiPnt7XG4gICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLmludGVuc2l0eUF0dHJpYnV0ZScgfCBpMThuXG4gICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VJbnRlbnNpdHlBdHRyaWJ1dGVzKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllckhhc0ludGVuc2l0eShsYXllcikuaW50ZW5zaXR5QXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBpZD1cIm1hcF9pbnRlbnNpdHlBdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgICAgPGZpZWxkc2V0XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICd3bXMnIHx8XG4gICAgICAgICAgICBsYXllci50eXBlID09PSAnd210cycgfHxcbiAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICdmZWF0dXJlbGF5ZXInIHx8XG4gICAgICAgICAgICBsYXllci50eXBlID09PSAndmVjdG9ydGlsZScgfHxcbiAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICdyYXN0ZXJ0aWxlJ1xuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLnRpbGUnIHwgaTE4biB9fTwvbGVnZW5kPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfd21zX3VybFwiPnt7ICdAcHJ5LndpZGdldC5tYXAud21zLnVybCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBpZD1cIm1hcF93bXNfdXJsXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VVcmwoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIudXJsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJsYXllci50eXBlID09PSAnd21zJyB8fCBsYXllci50eXBlID09PSAnd210cydcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfd21zX3BhcmFtTGF5ZXJcIj57eyAnQHByeS53aWRnZXQubWFwLndtcy5wYXJhbUxheWVyJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGlkPVwibWFwX3dtc19wYXJhbUxheWVyXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VQYXJhbUxheWVyKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLnBhcmFtTGF5ZXJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cImxheWVyLnR5cGUgPT09ICd3bXRzJ1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF93bXNfbWF0cml4U2V0XCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC53bXMubWF0cml4U2V0JyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGlkPVwibWFwX3dtc19tYXRyaXhTZXRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZU1hdHJpeFNldCgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJsYXllci5tYXRyaXhTZXRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cImxheWVyLnR5cGUgPT09ICd3bXRzJ1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF93bXNfc3R5bGVcIj57eyAnQHByeS53aWRnZXQubWFwLndtcy5zdHlsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBpZD1cIm1hcF93bXNfc3R5bGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZVBhcmFtU3R5bGUoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIuc3R5bGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cImxheWVyLnR5cGUgPT09ICd3bXMnXCI+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVBhcmFtVGlsZWQoJGV2ZW50LCBsYXllcilcIiBbbmdNb2RlbF09XCJsYXllcj8ucGFyYW1UaWxlZCA/PyBmYWxzZVwiPlxuICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLndtcy5wYXJhbVRpbGVkJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuXG4gICAgICAgIDxmaWVsZHNldCAqbmdJZj1cImxheWVyLnR5cGUgPT09ICdtYXJrZXInXCI+XG4gICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5jbHVzdGVyaW5nJyB8IGkxOG4gfX08L2xlZ2VuZD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNsdXN0ZXJlZChsYXllciwgJGV2ZW50KVwiIFtuZ01vZGVsXT1cImxheWVyLmNsdXN0ZXJlZFwiPlxuICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmNsdXN0ZXJlZCcgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGF5ZXIuY2x1c3RlcmVkXCI+XG4gICAgICAgICAgICA8cHJ5LXJhbmdlXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLmNsdXN0ZXJlZFwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNsdXN0ZXJEaXN0YW5jZShsYXllciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGxhYmVsVHJhbnNsYXRlPVwiQHByeS53aWRnZXQubWFwLmNsdXN0ZXJEaXN0YW5jZVwiXG4gICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICBtYXg9XCI1MDBcIlxuICAgICAgICAgICAgPjwvcHJ5LXJhbmdlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cIm9wdGlvbnNDb3B5LmF0dHJpYnV0aW9uc1wiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhdHRyaWJ1dGlvblwiPnt7ICdAcHJ5LndpZGdldC5tYXAuYXR0cmlidXRpb24nIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cImF0dHJpYnV0aW9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VBdHRyaWJ1dGlvbigkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIuYXR0cmlidXRpb24gPyBsYXllci5hdHRyaWJ1dGlvbiA6ICcnXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUxheWVyKGkpXCJcbiAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLXRleHQgLWxpbmstbGlrZVwiXG4gICAgICAgICAgKm5nSWY9XCJsYXllci50eXBlICE9PSAnZ2Vvc2VydmVyJ1wiXG4gICAgICAgICAgZGF0YS1mdW5jPVwiZGVsZXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZGVsZXRlXCIgW3dpZHRoXT1cIjE5XCIgW2hlaWdodF09XCIxOVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5kZWxldGVMYXllcicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcHJ5LXNldHRpbmdzPlxuICA8L3ByeS13aWRnZXQtaGVhZGVyPlxuXG4gIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cCAtc2VsZWN0aW9uLWNob2ljZVwiIFtzdHlsZS50cmFuc2Zvcm1dPVwiYm90dG9tTGVmdCQgfCBhc3luY1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBiYXNpY0FjdGlvbnMkIHwgYXN5bmNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAgIChjbGljayk9XCJpbnRlcmFjdGlvbk1hbmFnZXIuc2VsZWN0aW9uSW50ZXJhY3Rpb24uY2hhbmdlU2VsZWN0aW9uKGFjdGlvbilcIlxuICAgICAgICBbY2xhc3MuLXNlbGVjdGVkXT1cImludGVyYWN0aW9uTWFuYWdlci5zZWxlY3Rpb25JbnRlcmFjdGlvbi5zZWxlY3Rpb25UeXBlID09PSBhY3Rpb25cIlxuICAgICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcEFjdGlvblwiXG4gICAgICAgIHByeVRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbmZvVG9vbHRpcEFjdGlvblwiXG4gICAgICAgIFtwcnlUb29sdGlwQ29udGV4dF09XCJ7IGFjdGlvbjogYWN0aW9uIH1cIlxuICAgICAgPlxuICAgICAgICA8cHJ5LWljb24gW2ljb25TdmddPVwiYWN0aW9uXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAuJyArIGFjdGlvbiB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgIGlkPVwiZXhwb3J0X2NhcmRcIlxuICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgIGFyaWEtY29udHJvbHM9XCJleHBvcnRfdHlwZVwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwibWVudVwiXG4gICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcERvd25cIlxuICAgICAgcHJ5VG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbmZvVG9vbHRpcERvd25fd2lkZ2V0TWFwXCJcbiAgICAgICpuZ0lmPVwiKGFjdGlvbnMkIHwgYXN5bmMpPy5pbmNsdWRlcygnZXhwb3J0JylcIlxuICAgID5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZmlsZV9kb3dubG9hZFwiIChjbGljayk9XCJleHBvcnQoKVwiPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5leHBvcnQnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwib2wtY29udHJvbCBtLWxheWVyLXN3aXRjaGVyXCJcbiAgICAqbmdJZj1cIigobGF5ZXJzJCB8IGFzeW5jKT8ubGVuZ3RoID8/IDApID4gMFwiXG4gICAgW3N0eWxlLnRvcC5weF09XCJsYXllcnNUb3AkIHwgYXN5bmNcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJtLWxheWVyLXN3aXRjaGVyX190b2dnbGVcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUxheWVyc1dpbmRvdygpXCJcbiAgICAgIFt0aXRsZV09XCInQHByeS53aWRnZXQubWFwLnNlbGVjdExheWVycycgfCBpMThuXCJcbiAgICA+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImxheWVyc1wiIFt3aWR0aF09XCIyMlwiIFtoZWlnaHRdPVwiMjJcIj48L3ByeS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxheWVyIG9mIG1hcExheWVyczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWxheWVyLXN3aXRjaGVyX190aXRsZVwiIFtjbGFzcy4taGlkZGVuXT1cIiFsYXllcnNUYWJPcGVuXCI+XG4gICAgICAgIHt7IGxheWVyLmdldCgndGl0bGUnKSB9fVxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShvcHRpb25zJCB8IGFzeW5jKT8uc2luZ2xlTGF5ZXI7IGVsc2Ugc2luZ2xlTGF5ZXJcIj5cbiAgICAgICAgICA8cHJ5LWNoZWNrYm94IFtuZ01vZGVsXT1cImxheWVyLmdldFZpc2libGUoKVwiIChjaGFuZ2UpPVwiY2hhbmdlVmlzaWJpbGl0eShsYXllcilcIj48L3ByeS1jaGVja2JveD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlTGF5ZXI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgbmFtZT1cImxheWVyXCJcbiAgICAgICAgICAgIFtpZF09XCIncmFkaW8tbGF5ZXItJyArIGxheWVyLmdldCgndGl0bGUnKS5zcGxpdCgnICcpWzBdXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyVmlzaWJsZUlkeFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiaW5kZXhcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VWaXNpYmlsaXR5KGxheWVyKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJvbC1jb250cm9sIG0tbGF5ZXItbGVnZW5kXCJcbiAgICAqbmdJZj1cIigobGVnZW5kTGF5ZXJzJCB8IGFzeW5jKT8ubGVuZ3RoID8/IDApID4gMFwiXG4gICAgW3N0eWxlLnRvcC5weF09XCJsZWdlbmRUb3AkIHwgYXN5bmNcIlxuICA+XG4gICAgPGJ1dHRvbiBjbGFzcz1cIm0tbGF5ZXItbGVnZW5kX190b2dnbGVcIiAoY2xpY2spPVwidG9nZ2xlTGVnZW5kV2luZG93KClcIiBbdGl0bGVdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC5sZWdlbmRzJyB8IGkxOG5cIj5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwibGVnZW5kXCIgW3dpZHRoXT1cIjIyXCIgW2hlaWdodF09XCIyMlwiPjwvcHJ5LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ2VvTGF5ZXIgb2YgbGVnZW5kTGF5ZXJzJCB8IGFzeW5jOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm0tbGF5ZXItbGVnZW5kX190aXRsZVwiIFtjbGFzcy4taGlkZGVuXT1cIiFsZWdlbmRUYWJPcGVuXCI+XG4gICAgICAgIHt7IGdlb0xheWVyLnRpdGxlIH19XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xheWVyUmVuZGVyZWQoZ2VvTGF5ZXIpXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm0tbGF5ZXItbGVnZW5kX190b2dnbGVcIiAoY2xpY2spPVwidG9nZ2xlTGVnZW5kKGluZGV4KVwiPlxuICAgICAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgICAgIFtpY29uU3ZnXT1cImxlZ2VuZFRhYiA9PT0gaW5kZXggPyAnY2hldnJvbl90b3AnIDogJ2NoZXZyb25fYm90dG9tJ1wiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCIyMlwiXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiMjJcIlxuICAgICAgICAgICAgPjwvcHJ5LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTGF5ZXJSZW5kZXJlZChnZW9MYXllcilcIj5cbiAgICAgICAgICA8cHJ5LWljb24gW2ljb25TdmddPVwiJ2Nsb3NlJ1wiIFt3aWR0aF09XCIyMlwiIFtoZWlnaHRdPVwiMjJcIj48L3ByeS1pY29uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm0tbGF5ZXItbGVnZW5kX19pbWFnZVwiXG4gICAgICAgIFtjbGFzcy4taGlkZGVuXT1cIiFsZWdlbmRUYWJPcGVuIHx8IGxlZ2VuZFRhYiAhPT0gaW5kZXggfHwgIWlzTGF5ZXJSZW5kZXJlZChnZW9MYXllcilcIlxuICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJsZWdlbmRIZWlnaHQkIHwgYXN5bmNcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2VvTGF5ZXIgfCBsZWdlbmRVcmwgOiB7IGNhcGFiaWxpdGllczogKHdtc0NhcGFiaWxpdGllcyQgfCBhc3luYykgfSBhcyB1cmxcIj5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBbc3JjXT1cInVybFwiXG4gICAgICAgICAgICBbYWx0XT1cIidAcHJ5LndpZGdldC5tYXAubGVnZW5kJyB8IGkxOG4gOiB7IGxheWVyOiBnZW9MYXllci50aXRsZSB9XCJcbiAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZU5vdFByb3ZpZGVkW2luZGV4XSA9IHRydWVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShnZW9MYXllciB8IGxlZ2VuZFVybCA6IHsgY2FwYWJpbGl0aWVzOiAod21zQ2FwYWJpbGl0aWVzJCB8IGFzeW5jKSB9KVwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwibS1sYXllci1sZWdlbmRfX2Vycm9yXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sZWdlbmROb3RQcm92aWRlZCcgfCBpMThuIH19PC9wPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8ZGl2IFtzdHlsZS5oZWlnaHQucHhdPVwiaGVpZ2h0JCB8IGFzeW5jXCIgY2xhc3M9XCJvLW1hcC13cmFwcGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tbWFwXCI+XG4gICAgICA8ZGl2ICNtYXBSZWYgaWQ9XCJtYXBcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlICNpbmZvVG9vbHRpcEFjdGlvbiBsZXQtYWN0aW9uPVwiYWN0aW9uXCI+XG4gICAgPGRpdiBjbGFzcz1cIm0tdG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCIgaWQ9XCJpbmZvVG9vbHRpcEFjdGlvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtLXRvb2x0aXBfX3RleHRcIj57eyAnQHByeS53aWRnZXQubWFwLicgKyBhY3Rpb24gfCBpMThuIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjaW5mb1Rvb2x0aXBEb3duPlxuICAgIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiIGlkPVwiaW5mb1Rvb2x0aXBEb3duX3dpZGdldE1hcFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtLXRvb2x0aXBfX3RleHRcIj57eyAnQHByeS53aWRnZXQubWFwLmV4cG9ydCcgfCBpMThuIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxkaXYgI3BvcHVwIGNsYXNzPVwibS10b29sdGlwIG0tdG9vbHRpcC0tcG9wdXBcIiBbaGlkZGVuXT1cInRydWVcIiByb2xlPVwidG9vbHRpcFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXAtLXBvcHVwX19oZWFkZXJcIj5cbiAgICAgIDxwPnt7IHRoaXMudG9vbHRpcEluZGV4ICsgMSB9fSAvIHt7IHRoaXMudG9vbHRpcE51bWJlciB9fTwvcD5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeSBhLWJ0bi0taWNvbi1vbmx5XCIgKGNsaWNrKT1cInRvb2x0aXBNb3ZlKC0xKVwiIFtkaXNhYmxlZF09XCIhdG9vbHRpcENhbk1vdmUoLTEpXCI+XG4gICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYXJyb3dfYmFja1wiPjwvcHJ5LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeSBhLWJ0bi0taWNvbi1vbmx5XCIgKGNsaWNrKT1cInRvb2x0aXBNb3ZlKDEpXCIgW2Rpc2FibGVkXT1cIiF0b29sdGlwQ2FuTW92ZSgxKVwiPlxuICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImFycm93X3JpZ2h0XCI+PC9wcnktaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXAtLXBvcHVwX19jb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgI3BvcHVwQ29udGVudD48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICAjYWRkcmVzc1xuICAgIGNsYXNzPVwibS10b29sdGlwIG0tdG9vbHRpcC0tYWRkcmVzcyB0b29sdGlwLWFkZHJlc3NcIlxuICAgIFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiXG4gICAgKGNsaWNrKT1cImhpZGVBZGRyZXNzKClcIlxuICA+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
767
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC93aWRnZXRzL3dpZGdldC1tYXAvY29tcG9uZW50L3dpZGdldC1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL2NvbXBvbmVudC93aWRnZXQtbWFwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFFTCxTQUFTLEVBS1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUtMLGNBQWMsRUFDZCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUVsQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBRW5CLGNBQWMsRUFDZCxXQUFXLEVBQ1gsU0FBUyxFQWNULGNBQWMsRUFHZCxXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEtBQUssTUFBTSxxQkFBcUIsQ0FBQztBQUN4QyxPQUFPLEVBQVcsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBR2hDLE9BQU8sZUFBZSxNQUFNLHFCQUFxQixDQUFDO0FBRWxELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7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RCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFUSxXQUFXO1FBQ2xCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQzs4R0EzOEJVLGtCQUFrQjtrR0FBbEIsa0JBQWtCLG1UQUlNLGdCQUFnQixtSEFDVixXQUFXLHlJQzdHdEQsaWtsQkFnZEE7OzJGRHhXYSxrQkFBa0I7a0JBSjlCLFNBQVM7K0JBQ0UsZ0JBQWdCOzRYQUtMLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFDQyxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBQ3FDLFlBQVk7c0JBQWxFLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUNHLGtCQUFrQjtzQkFBekUsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQ2hDLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXkgYXMgY2RrT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIEJhc2VUb29sdGlwQ29tcG9uZW50LFxuICBCYXNlV2lkZ2V0TWFwTGF5ZXJPcHRpb25zLFxuICBDbGFzcyxcbiAgQ2xhc3NTZWxlY3RvcnMsXG4gIENvbmZpZ1NlbGVjdG9ycyxcbiAgRGFzaGJvYXJkQWN0aW9ucyxcbiAgRGFzaGJvYXJkU2VsZWN0b3JzLFxuICBEYXRhc2V0LFxuICBEYXRhU291cmNlU2VsZWN0b3JzLFxuICBEYXRhV2lkZ2V0Q29tcG9uZW50LFxuICBGaWVsZCxcbiAgRmllbGRTZWxlY3RvcnMsXG4gIEdlb01ldGFkYXRhLFxuICBJdGVtVXRpbHMsXG4gIE1hcEZlYXR1cmVMYXllck9wdGlvbnMsXG4gIE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyxcbiAgTWFwUmFzdGVyVGlsZUxheWVyT3B0aW9ucyxcbiAgTWFwVmVjdG9yVGlsZUxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0T3B0aW9ucyxcbiAgTWFwV01TTGF5ZXJMYXllck9wdGlvbnMsXG4gIE1hcFdNVFNMYXllckxheWVyT3B0aW9ucyxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFByeVNuYWNrYmFyU2VydmljZSxcbiAgUmVzdWx0c2V0VXRpbHMsXG4gIFN5bWJvbFNlcnZpY2UsXG4gIFRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgVG9vbHRpcE1vZGUsXG4gIFdJREdFVF9IRUFERVJfSEVJR0hULFxuICB3aWRnZXRNYXBDb25maWdcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwvZXM2JztcbmltcG9ydCB7IEZlYXR1cmUsIE1hcCwgT3ZlcmxheSwgVmlldyB9IGZyb20gJ29sJztcbmltcG9ydCB7IGFwcGx5QmFja2dyb3VuZCwgYXBwbHlTdHlsZSB9IGZyb20gJ29sLW1hcGJveC1zdHlsZSc7XG5pbXBvcnQgeyBib3VuZGluZ0V4dGVudCwgY3JlYXRlRW1wdHkgfSBmcm9tICdvbC9leHRlbnQnO1xuaW1wb3J0IHsgQ2lyY2xlLCBHZW9tZXRyeSwgUG9pbnQgfSBmcm9tICdvbC9nZW9tJztcbmltcG9ydCB7IFRpbGUgfSBmcm9tICdvbC9sYXllcic7XG5pbXBvcnQgQmFzZUxheWVyIGZyb20gJ29sL2xheWVyL0Jhc2UnO1xuaW1wb3J0IFZlY3RvckxheWVyIGZyb20gJ29sL2xheWVyL1ZlY3Rvcic7XG5pbXBvcnQgVmVjdG9yVGlsZUxheWVyIGZyb20gJ29sL2xheWVyL1ZlY3RvclRpbGUnO1xuaW1wb3J0IHsgUGl4ZWwgfSBmcm9tICdvbC9waXhlbCc7XG5pbXBvcnQgeyBmcm9tTG9uTGF0LCBnZXQgYXMgZ2V0UHJvamVjdGlvbiwgdHJhbnNmb3JtIH0gZnJvbSAnb2wvcHJvaic7XG5cbmltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSAnb2wvcHJvai9wcm9qNCc7XG5pbXBvcnQgeyBUaWxlV01TIH0gZnJvbSAnb2wvc291cmNlJztcbmltcG9ydCBWZWN0b3JTb3VyY2UgZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XG5pbXBvcnQgeyBTdHlsZSB9IGZyb20gJ29sL3N0eWxlJztcbmltcG9ydCBwcm9qNCBmcm9tICdwcm9qNCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGRlYm91bmNlVGltZSxcbiAgZGVsYXksXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaWx0ZXIsXG4gIGZyb20sXG4gIG1hcCxcbiAgbWVyZ2VNYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBzdGFydFdpdGgsXG4gIHN3aXRjaE1hcFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEludGVyYWN0aW9uTWFuYWdlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLW1hbmFnZXIuY2xhc3MnO1xuaW1wb3J0IHsgQ3FsVXRpbHMgfSBmcm9tICcuLi91dGlscy9jcWwtdXRpbHMuY2xhc3MnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9NQVBfQ0VOVEVSLFxuICBERUZBVUxUX1pPT01fTUFYLFxuICBERUZBVUxUX1pPT01fTUlOLFxuICBERUZBVUxUX1pPT01fU1RBUlQsXG4gIGV4cG9ydE1hcEFzSW1hZ2UsXG4gIGdldExpbmtGZWF0dXJlLFxuICBnZXRNYXBBc1BuZyxcbiAgcG9wdWxhdGVJbnRlbnNpdHlBdHRyaWJ1dGUsXG4gIHBvcHVsYXRlTG9jYXRpb25BdHRyaWJ1dGVcbn0gZnJvbSAnLi4vdXRpbHMvd2lkZ2V0LW1hcC51dGlscyc7XG5pbXBvcnQgeyBYTUxVdGlscyB9IGZyb20gJy4uL3V0aWxzL3htbC11dGlscy5jbGFzcyc7XG5pbXBvcnQgeyBXaWRnZXRNYXBMYXllclNlcnZpY2UgfSBmcm9tICcuL3dpZGdldC1tYXAtbGF5ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBHZXRDYXBhYmlsaXRpZXNSZXNwb25zZSwgV21zU2VydmljZSB9IGZyb20gJy4vd21zLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgVE9PTFRJUF9QQURESU5HID0gMTU7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtbWFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC1tYXAuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldE1hcENvbXBvbmVudCBleHRlbmRzIERhdGFXaWRnZXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBtYXBVcmwkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIEBWaWV3Q2hpbGQoJ21hcFJlZicpIG1hcFJlZiE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3BvcHVwJykgcG9wdXAhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdwb3B1cENvbnRlbnQnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcG9wdXBDb250ZW50ITogVmlld0NvbnRhaW5lclJlZjtcbiAgQFZpZXdDaGlsZCgnZXhwb3J0VHlwZVRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBleHBvcnRUeXBlVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdhZGRyZXNzJykgYWRkcmVzcyE6IEVsZW1lbnRSZWY7XG4gIG9wdGlvbnMkOiBPYnNlcnZhYmxlPE1hcFdpZGdldE9wdGlvbnM+O1xuICBsYXllclR5cGVzID0gdGhpcy53aWRnZXRNYXBMYXllclNlcnZpY2UuaW1wbGVtZW50YXRpb25MaXN0LnNvcnQoKGEsIGIpID0+XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAuaW5zdGFudCgnQHByeS53aWRnZXQubWFwLmxheWVyVHlwZS4nICsgYSlcbiAgICAgIC5sb2NhbGVDb21wYXJlKHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdAcHJ5LndpZGdldC5tYXAubGF5ZXJUeXBlLicgKyBiKSlcbiAgKTtcbiAgb3B0aW9uc0NvcHk6IE1hcFdpZGdldE9wdGlvbnMgPSB7fSBhcyBNYXBXaWRnZXRPcHRpb25zO1xuICBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgZmllbGRzJDogT2JzZXJ2YWJsZTxGaWVsZFtdPjtcbiAgc2VsZWN0ZWRJZHMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgYm90dG9tTGVmdCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgbGF5ZXJzJCE6IE9ic2VydmFibGU8QmFzZUxheWVyW10+O1xuICBtYXAhOiBNYXA7XG4gIGFkZGl0aW9uYWxMYXllcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U8R2VvbWV0cnk+PltdPihbXSk7XG4gIHByaXZhdGUgb3ZlcmxheVJlZj86IE92ZXJsYXlSZWY7XG4gIHN0eWxlcyQ6IE9ic2VydmFibGU8eyBpZGVudGlmaWVyOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdPjtcbiAgV0lER0VUX0hFQURFUl9IRUlHSFQgPSBXSURHRVRfSEVBREVSX0hFSUdIVDtcbiAgaSA9IDA7XG4gIGl0ZW1TdHlsZXMkITogT2JzZXJ2YWJsZTx7IFtpZDogc3RyaW5nXTogeyBjbGFzc2ljOiBTdHlsZTsgYm9yZGVyZWQ6IFN0eWxlIH0gfT47XG4gIGhlaWdodCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgYWN0aW9ucyQgPSB3aWRnZXRNYXBDb25maWcuYWN0aW9ucyQ7XG4gIHByaXZhdGUgd21zRmVhdHVyZXMkOiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgY2xhc3NpY0ZlYXR1cmVzJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgZ2VvU2VydmVyTGF5ZXJEZXNjcmlwdGlvbnMkOiBPYnNlcnZhYmxlPE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1tdPjtcbiAgbGVnZW5kVGFiT3BlbiA9IGZhbHNlO1xuICBsYXllcnNUYWJPcGVuID0gZmFsc2U7XG4gIGxlZ2VuZFRhYiA9IDA7XG4gIGxlZ2VuZExheWVycyQhOiBPYnNlcnZhYmxlPChNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMgfCBNYXBXTVNMYXllckxheWVyT3B0aW9ucylbXT47XG4gIGxlZ2VuZFRvcCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgbGF5ZXJzVG9wJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBsZWdlbmRIZWlnaHQkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIGltYWdlTm90UHJvdmlkZWQ6IGJvb2xlYW5bXSA9IFtdO1xuICBiYXNpY0FjdGlvbnMkOiBPYnNlcnZhYmxlPCgnY2xpY2snIHwgJ2xhc3NvJyB8ICdyZWN0YW5nbGUnIHwgJ3pvb20nIHwgJ21vdmUnIHwgJ2V4cG9ydCcgfCAndXBsb2FkJylbXT47XG4gIHpvb21BbmRDZW50ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IHpvb20/OiB7IHN0YXJ0OiBudW1iZXI7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9OyBjZW50ZXI/OiBudW1iZXJbXSB9Pih7fSk7XG4gIGZpdE9wdGlvbiQhOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBtYXBTdHlsZVVybCQhOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+O1xuICBpbnRlcmFjdGlvbk1hbmFnZXI6IEludGVyYWN0aW9uTWFuYWdlciA9IG5ldyBJbnRlcmFjdGlvbk1hbmFnZXIoKTtcbiAgbWFwU3R5bGVMYXllciQhOiBPYnNlcnZhYmxlPFZlY3RvclRpbGVMYXllcltdPjtcbiAgdG9vbHRpcEluZGV4ID0gMDtcbiAgdG9vbHRpcE51bWJlciA9IDA7XG4gIFNUWUxFX0ZST01fVVJMID0gJ191cmwnO1xuICBOT19TVFlMRSA9ICdub25lJztcbiAgd21zQ2FwYWJpbGl0aWVzJDogT2JzZXJ2YWJsZTwoR2V0Q2FwYWJpbGl0aWVzUmVzcG9uc2UgfCBudWxsKVtdPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBQcnlTbmFja2JhclNlcnZpY2UsXG4gICAgcHVibGljIHRyYW5zbGF0ZVNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9vbHRpcEZhY3RvcnlTZXJ2aWNlOiBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBjZGtPdmVybGF5LFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIHN5bWJvbFNlcnZpY2U6IFN5bWJvbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSB3aWRnZXRNYXBMYXllclNlcnZpY2U6IFdpZGdldE1hcExheWVyU2VydmljZSxcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHdtc1NlcnZpY2U6IFdtc1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcblxuICAgIHRoaXMuYmFzaWNBY3Rpb25zJCA9IHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICAgIG1hcCgoYWN0aW9ucykgPT4gYWN0aW9ucy5maWx0ZXIoKGFjdGlvbikgPT4gYWN0aW9uICE9PSAnZXhwb3J0JyAmJiBhY3Rpb24gIT09ICd1cGxvYWQnKSlcbiAgICApO1xuXG4gICAgdGhpcy5jbGFzc2VzJCA9IHRoaXMuc3RvcmVcbiAgICAgIC5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3NlcylcbiAgICAgIC5waXBlKG1hcCgoY2xhc3NlcykgPT4gY2xhc3Nlcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKSkpO1xuICAgIHRoaXMuZmllbGRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KEZpZWxkU2VsZWN0b3JzLmZpZWxkcyk7XG4gICAgdGhpcy5zdHlsZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLm1hcFN0eWxlcykucGlwZShcbiAgICAgIG1hcCgoc3R5bGVzKSA9PlxuICAgICAgICBzdHlsZXMuY29uY2F0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHRoaXMuTk9fU1RZTEUsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5ub1N0eWxlJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHRoaXMuU1RZTEVfRlJPTV9VUkwsXG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Bwcnkud2lkZ2V0Lm1hcC5zdHlsZUZyb21VcmwnKVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zZWxlY3RlZElkcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuc2VsZWN0ZWRJdGVtSWRzKTtcblxuICAgIHRoaXMuZ2VvU2VydmVyTGF5ZXJEZXNjcmlwdGlvbnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnVzZWREYXRhc291cmNlcyQucGlwZShzdGFydFdpdGgoW10pKSxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KENvbmZpZ1NlbGVjdG9ycy5nZW9TZXJ2ZXJVcmwpLnBpcGUoZGVib3VuY2VUaW1lKDEwKSwgc3RhcnRXaXRoKHVuZGVmaW5lZCkpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2RhdGFTb3VyY2VzLCBnZW9TZXJ2ZXJVcmxdKSA9PiB7XG4gICAgICAgIGlmICghZ2VvU2VydmVyVXJsKSByZXR1cm4gW107XG4gICAgICAgIHJldHVybiBkYXRhU291cmNlc1xuICAgICAgICAgIC5maWx0ZXIoKGRzKSA9PiBkcy5tZXRhZGF0YT8uZmluZCgobSkgPT4gbS5tZXRhZGF0YURlZi5uYW1lID09PSBHZW9NZXRhZGF0YS5OQU1FU1BBQ0UpICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcCgoZHMpID0+IHtcbiAgICAgICAgICAgIGRzID0gZHMgYXMgdW5rbm93biBhcyBEYXRhc2V0O1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGFzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgICAgICAgICBkcy5tZXRhZGF0YT8uZm9yRWFjaCgobSkgPT4gKG1ldGFkYXRhc1ttLm1ldGFkYXRhRGVmLm5hbWVdID0gbS52YWx1ZSkpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2dlb3NlcnZlcicsXG4gICAgICAgICAgICAgIHVybDogZ2VvU2VydmVyVXJsICsgJy8nICsgbWV0YWRhdGFzW0dlb01ldGFkYXRhLk5BTUVTUEFDRV0gKyAnL3dtcz9TRVJWSUNFPVdNUyZWRVJTSU9OPTEuMy4wJyxcbiAgICAgICAgICAgICAgcGFyYW1UaWxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgb3BhY2l0eTogcGFyc2VJbnQobWV0YWRhdGFzW0dlb01ldGFkYXRhLk9QQUNJVFldID8/IDEwMCwgMTApLFxuICAgICAgICAgICAgICBvQ2xhc3M6IGRzLm9DbGFzcyxcbiAgICAgICAgICAgICAga2V5OiBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuTkFNRVNQQUNFXSArICc6JyArIG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5LRVldLFxuICAgICAgICAgICAgICBuYW1lc3BhY2U6IG1ldGFkYXRhc1tHZW9NZXRhZGF0YS5OQU1FU1BBQ0VdLFxuICAgICAgICAgICAgICBwYXJhbUxheWVyOiBtZXRhZGF0YXNbR2VvTWV0YWRhdGEuS0VZXSxcbiAgICAgICAgICAgICAgbmFtZTogZHMubmFtZSxcbiAgICAgICAgICAgICAgZGF0YXNvdXJjZUlkOiBkcy5pZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5tYXAoKGxheWVyKSA9PiBsYXllciBhcyBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy53bXNDYXBhYmlsaXRpZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm1hbmlmZXN0JC5waXBlKFxuICAgICAgICBtYXAoXG4gICAgICAgICAgKG1hbmlmZXN0KSA9PlxuICAgICAgICAgICAgKChtYW5pZmVzdC5vcHRpb25zID8/IHsgbGF5ZXJzOiBbXSB9KSBhcyBNYXBXaWRnZXRPcHRpb25zKS5sYXllcnM/LmZpbHRlcigobGF5ZXIpID0+XG4gICAgICAgICAgICAgIFsnd21zJ10uaW5jbHVkZXMobGF5ZXIudHlwZSlcbiAgICAgICAgICAgICkgYXMgTWFwV01TTGF5ZXJMYXllck9wdGlvbnNbXVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgdGhpcy5nZW9TZXJ2ZXJMYXllckRlc2NyaXB0aW9ucyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbd21zTGF5ZXJzLCBnZW9TZXJ2ZXJMYXllckRlc2NyaXB0aW9uc10pID0+IHtcbiAgICAgICAgcmV0dXJuIFsuLi53bXNMYXllcnMsIC4uLmdlb1NlcnZlckxheWVyRGVzY3JpcHRpb25zXTtcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKSxcbiAgICAgIHN3aXRjaE1hcCgod21zTGF5ZXJzKSA9PiBjb21iaW5lTGF0ZXN0KHdtc0xheWVycy5tYXAoKGxheWVyKSA9PiB3bXNTZXJ2aWNlLmdldENhcGFiaWxpdGllcyhsYXllcikpKSksXG4gICAgICBzdGFydFdpdGgoW10pXG4gICAgKTtcblxuICAgIHRoaXMub3B0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMubWFuaWZlc3QkLFxuICAgICAgdGhpcy5yZXN1bHRTZXQkLFxuICAgICAgdGhpcy5jbGFzc2VzJCxcbiAgICAgIHRoaXMuZmllbGRzJCxcbiAgICAgIHRoaXMuc3R5bGVzJCxcbiAgICAgIHRoaXMuZ2VvU2VydmVyTGF5ZXJEZXNjcmlwdGlvbnMkLFxuICAgICAgdGhpcy53bXNDYXBhYmlsaXRpZXMkLnBpcGUoc3RhcnRXaXRoKFtdKSlcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbbWFuaWZlc3QsIHJlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzLCBtYXBTdHlsZXMsIGdlb0xheWVycywgY2FwYWJpbGl0aWVzXSkgPT4ge1xuICAgICAgICAvLyBhdXRvIGRldGVybWluZSBsYXllcnMgcGFyYW1ldGVycyB0byBwcm92aWRlIGEgd29ya2luZyB2aWV3XG4gICAgICAgIGNvbnN0IGF1dG9PcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh7IHJlbGF0aW9uczogdHJ1ZSwgLi4ubWFuaWZlc3Qub3B0aW9ucyB9KSkgYXMgTWFwV2lkZ2V0T3B0aW9ucztcbiAgICAgICAgaWYgKCFhdXRvT3B0aW9ucy50b29sdGlwTW9kZSkge1xuICAgICAgICAgIGF1dG9PcHRpb25zLnRvb2x0aXBNb2RlID0gVG9vbHRpcE1vZGUuQ0xJQ0s7XG4gICAgICAgIH1cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzPy5mb3JFYWNoKChsYXllciwgaSkgPT4ge1xuICAgICAgICAgIHBvcHVsYXRlTG9jYXRpb25BdHRyaWJ1dGUobGF5ZXIsIHJlc3VsdFNldCwgY2xhc3NlcywgZmllbGRzKTtcbiAgICAgICAgICBwb3B1bGF0ZUludGVuc2l0eUF0dHJpYnV0ZShsYXllciwgcmVzdWx0U2V0LCBjbGFzc2VzLCBmaWVsZHMpO1xuICAgICAgICAgIGlmIChhdXRvT3B0aW9ucy5hdHRyaWJ1dGlvbnMpIHtcbiAgICAgICAgICAgIGxheWVyLmF0dHJpYnV0aW9uID0gbGF5ZXIuYXR0cmlidXRpb24gPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBhY3R1YWxMYXllcktleXMgPSAoYXV0b09wdGlvbnMubGF5ZXJzID8/IFtdKVxuICAgICAgICAgIC5tYXAoKGxheWVyKSA9PiAobGF5ZXIgYXMgTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zKS5rZXkgPz8gbnVsbClcbiAgICAgICAgICAuZmlsdGVyKChrZXkpID0+ICEha2V5KTtcblxuICAgICAgICAvLyBHZXQgYWxsIHByZXZpb3VzIGxheWVycywgd2l0aG91dCBnZW9zZXJ2ZXIgbGF5ZXJzIHRoYXQgYXJlIG5vdCByZXF1ZXN0ZWQgYW55bW9yZSwgdGhlbiBhZGQgbmV3IGdlb3NlcnZlciBsYXllcnMgKHBvdGVudGlhbGx5IHdpdGggYSBwcmVjb25maWcgZnJvbSBtYW5pZmVzdCkuXG4gICAgICAgIGF1dG9PcHRpb25zLmxheWVycyA9IFtcbiAgICAgICAgICAuLi4oYXV0b09wdGlvbnMubGF5ZXJzID8/IFtdKS5tYXAoKGxheWVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnZW9MYXllciA9IGdlb0xheWVycy5maW5kKChsYXllcikgPT4gbGF5ZXIua2V5ID09PSBsYXllci5rZXkpID8/IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gbGF5ZXIudHlwZSA9PT0gJ2dlb3NlcnZlcidcbiAgICAgICAgICAgICAgPyBnZW9MYXllclxuICAgICAgICAgICAgICAgID8geyAuLi5nZW9MYXllciwgLi4ubGF5ZXIgfVxuICAgICAgICAgICAgICAgIDogKG51bGwgYXMgdW5rbm93biBhcyBNYXBXaWRnZXRMYXllck9wdGlvbnMpXG4gICAgICAgICAgICAgIDogeyAuLi5sYXllciB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLmdlb0xheWVycy5maWx0ZXIoKGxheWVyKSA9PiAhYWN0dWFsTGF5ZXJLZXlzLmluY2x1ZGVzKGxheWVyLmtleSkpXG4gICAgICAgIF0uZmlsdGVyKChsYXllcikgPT4gISFsYXllcik7XG5cbiAgICAgICAgYXV0b09wdGlvbnMubGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXREZWZhdWx0TGF5ZXJUaXRsZShsYXllciwgY2FwYWJpbGl0aWVzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICEhbWFwU3R5bGVzICYmXG4gICAgICAgICAgbWFwU3R5bGVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAoIWF1dG9PcHRpb25zLnN0eWxlIHx8ICFtYXBTdHlsZXMubWFwKChzdHlsZSkgPT4gc3R5bGUuaWRlbnRpZmllcikuaW5jbHVkZXMoYXV0b09wdGlvbnMuc3R5bGUpKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBsaWdodFN0eWxlcyA9IG1hcFN0eWxlcy5maWx0ZXIoKHN0eWxlKSA9PiAhKHN0eWxlLmlkZW50aWZpZXIgPz8gJy0nKS5pbmNsdWRlcygnZGFyaycpKTtcbiAgICAgICAgICBhdXRvT3B0aW9ucy5zdHlsZSA9IGxpZ2h0U3R5bGVzLmxlbmd0aCA+IDAgPyBsaWdodFN0eWxlc1swXS5pZGVudGlmaWVyIDogbWFwU3R5bGVzWzBdLmlkZW50aWZpZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF1dG9PcHRpb25zO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMub3B0aW9ucyQucGlwZShmaWx0ZXIoKG9wdCkgPT4gISFvcHQpKS5zdWJzY3JpYmUoKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5tYXBVcmwkID0gdGhpcy5zdG9yZS5zZWxlY3QoQ29uZmlnU2VsZWN0b3JzLm1hcFVybCk7XG4gICAgdGhpcy53bXNGZWF0dXJlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMud21zRmVhdHVyZXMpO1xuXG4gICAgdGhpcy5ib3R0b21MZWZ0JCA9IHRoaXMud2lkZ2V0U2l6ZSQucGlwZShcbiAgICAgIG1hcCgoc2l6ZSkgPT4gYHRyYW5zbGF0ZSgxMHB4ICxjYWxjKCR7c2l6ZS5oZWlnaHR9cHggLSAxMDAlIC0gMTBweCkpYCksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuXG4gICAgdGhpcy5pdGVtU3R5bGVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMucmVzdWx0U2V0JCwgdGhpcy5tYW5pZmVzdCQsIHRoaXMuc3RhdGljUmVzdWx0U2V0JF0pLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoW3JzLCBtYW5pZmVzdCwgc3JzXSkgPT4ge1xuICAgICAgICBpZiAoKG1hbmlmZXN0LmRhdGFzb3VyY2UgPT09IHVuZGVmaW5lZCB8fCBtYW5pZmVzdC5kYXRhc291cmNlLmxlbmd0aCA9PT0gMCkgJiYgIXNycykge1xuICAgICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgICAgICBuZXcgUHJvbWlzZTx7IFtpZDogc3RyaW5nXTogeyBjbGFzc2ljOiBTdHlsZTsgYm9yZGVyZWQ6IFN0eWxlIH0gfT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0b3RhbCA9IE9iamVjdC52YWx1ZXMocnMuaXRlbXMpLnJlZHVjZSgocCwgYykgPT4gYy5sZW5ndGggKyBwLCAwKTtcbiAgICAgICAgICAgICAgaWYgKHRvdGFsID09PSAwKSByZXNvbHZlKHt9KTtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge30gYXMgeyBbaWQ6IHN0cmluZ106IHsgY2xhc3NpYzogU3R5bGU7IGJvcmRlcmVkOiBTdHlsZSB9IH07XG4gICAgICAgICAgICAgIE9iamVjdC52YWx1ZXMocnMuaXRlbXMpLmZvckVhY2goKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW1ib2xTZXJ2aWNlLmdldFN5bWJvbEFzSWNvblN0eWxlKGl0ZW0pLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bWJvbFNlcnZpY2UuZ2V0U3ltYm9sQXNJY29uU3R5bGUoaXRlbSwgdHJ1ZSlcbiAgICAgICAgICAgICAgICAgIF0pLnRoZW4oKFtzdHlsZSwgYlN0eWxlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbaXRlbS5pZF0gPSB7IGNsYXNzaWM6IHN0eWxlLCBib3JkZXJlZDogYlN0eWxlIH07XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXN1bHQpLmxlbmd0aCA+PSB0b3RhbCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5oZWlnaHQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJC5waXBlKGRlYm91bmNlVGltZSgxMDApKSwgdGhpcy5kaXNwbGF5SGVhZGVyJF0pLnBpcGUoXG4gICAgICBtYXAoKFtzaXplLCBkaXNwbGF5XSkgPT4gKHNpemUuaGVpZ2h0ID8/IDEwMCkgLSAoZGlzcGxheSA/IFdJREdFVF9IRUFERVJfSEVJR0hUIDogMCkpLFxuICAgICAgZGVsYXkoMTApXG4gICAgKTtcblxuICAgIHRoaXMubGF5ZXJzVG9wJCA9IHRoaXMuZGlzcGxheUhlYWRlciQucGlwZShtYXAoKGRpc3BsYXkpID0+IDE0MCAtIChkaXNwbGF5ID8gMCA6IFdJREdFVF9IRUFERVJfSEVJR0hUKSkpO1xuICAgIHRoaXMubGVnZW5kVG9wJCA9IHRoaXMuZGlzcGxheUhlYWRlciQucGlwZShtYXAoKGRpc3BsYXkpID0+IDE4MCAtIChkaXNwbGF5ID8gMCA6IFdJREdFVF9IRUFERVJfSEVJR0hUKSkpO1xuXG4gICAgdGhpcy5sZWdlbmRIZWlnaHQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJC5waXBlKGRlYm91bmNlVGltZSgxMDApKSwgdGhpcy5sZWdlbmRUb3AkXSkucGlwZShcbiAgICAgIG1hcCgoW3NpemUsIHRvcF0pID0+IHtcbiAgICAgICAgcmV0dXJuIChzaXplLmhlaWdodCA/PyAxMDApIC0gV0lER0VUX0hFQURFUl9IRUlHSFQgLSB0b3AgLSA1NjsgLy8gNTZweCBpcyB0aGUgdG9vbHRpcCBoZWlnaHQgKyBtYXJnaW5cbiAgICAgIH0pLFxuICAgICAgZGVsYXkoMTApXG4gICAgKTtcbiAgfVxuXG4gIGluaXRJbnRlcmFjdGlvbk1hbmFnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJhY3Rpb25NYW5hZ2VyLmluaXQodGhpcyk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tYXAgPSBuZXcgTWFwKHsgdGFyZ2V0OiB0aGlzLm1hcFJlZi5uYXRpdmVFbGVtZW50IH0pO1xuICAgIHRoaXMuaW50ZXJhY3Rpb25NYW5hZ2VyID0gdGhpcy5pbml0SW50ZXJhY3Rpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy5tYXBTdHlsZVVybCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLm1hcFVybCRdKS5waXBlKFxuICAgICAgbWFwKChbb3B0aW9ucywgdXJsXSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKG9wdGlvbnMuc3R5bGUpIHtcbiAgICAgICAgICBjYXNlIHRoaXMuTk9fU1RZTEU6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICBjYXNlIHRoaXMuU1RZTEVfRlJPTV9VUkw6XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5zdHlsZVVSTCA/PyAnJztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGAke3VybH0vc3R5bGVzLyR7b3B0aW9ucy5zdHlsZX0vc3R5bGUuanNvbmA7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICk7XG5cbiAgICB0aGlzLm1hcFN0eWxlTGF5ZXIkID0gdGhpcy5tYXBTdHlsZVVybCQucGlwZShcbiAgICAgIG1hcCgoc3R5bGVVcmwpID0+IHtcbiAgICAgICAgaWYgKCFzdHlsZVVybCkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYXllciA9IG5ldyBWZWN0b3JUaWxlTGF5ZXIoe1xuICAgICAgICAgIGRlY2x1dHRlcjogdHJ1ZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7IHRpdGxlOiAnYmFja2dyb3VuZCcgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXBwbHlTdHlsZShsYXllciwgc3R5bGVVcmwpLmNhdGNoKChlcnIpID0+IGNvbnNvbGUud2FybignU3R5bGUgYXBwbGljYXRpb24gcHJvYmxlbScsIGVycikpO1xuICAgICAgICBhcHBseUJhY2tncm91bmQobGF5ZXIsIHN0eWxlVXJsKS5jYXRjaCgoZXJyKSA9PiBjb25zb2xlLndhcm4oJ0JhY2tncm91bmQgYXBwbGljYXRpb24gcHJvYmxlbScsIGVycikpO1xuICAgICAgICByZXR1cm4gW2xheWVyXTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMub3B0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKG9wdGlvbnMpID0+ICh7XG4gICAgICAgICAgY2VudGVyOiBmcm9tTG9uTGF0KG9wdGlvbnMuY2VudGVyID8/IERFRkFVTFRfTUFQX0NFTlRFUiksXG4gICAgICAgICAgbWF4Wm9vbTogb3B0aW9ucy56b29tPy5tYXggPz8gREVGQVVMVF9aT09NX01BWCxcbiAgICAgICAgICBtaW5ab29tOiBvcHRpb25zLnpvb20/Lm1pbiA/PyBERUZBVUxUX1pPT01fTUlOLFxuICAgICAgICAgIHpvb206IG9wdGlvbnMuem9vbT8uc3RhcnQgPz8gREVGQVVMVF9aT09NX1NUQVJUXG4gICAgICAgIH0pKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmlldykgPT4gdGhpcy5tYXAuc2V0VmlldyhuZXcgVmlldyh2aWV3KSkpO1xuXG4gICAgdGhpcy5maXRPcHRpb24kID0gdGhpcy5vcHRpb25zJC5waXBlKFxuICAgICAgbWFwKChvcHRpb25zKSA9PiAhIW9wdGlvbnMuZml0KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuXG4gICAgdGhpcy5maXRPcHRpb24kLnN1YnNjcmliZSgoZml0KSA9PiB0aGlzLmZpdE1hcEZvck9iamVjdHMoZml0KSk7XG5cbiAgICB0aGlzLmxheWVycyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMucmVzdWx0U2V0JCxcbiAgICAgIHRoaXMub3B0aW9ucyQsXG4gICAgICB0aGlzLmNsYXNzZXMkLFxuICAgICAgdGhpcy5hZGRpdGlvbmFsTGF5ZXJzJCxcbiAgICAgIHRoaXMuaXRlbVN0eWxlcyQsXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZGF0YXNvdXJjZUZpbHRlcnMpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKHAsIGMpID0+IGVxdWFsKHAsIGMpKSlcbiAgICBdKS5waXBlKFxuICAgICAgZmlsdGVyKFxuICAgICAgICAoW3Jlc3VsdFNldCwgb3B0aW9ucywgY2xhc3NlcywgYWRkaXRpb25hbExheWVycywgaXRlbVN0eWxlcywgZmlsdGVyc10pID0+ICEhcmVzdWx0U2V0ICYmICEhb3B0aW9ucyAmJiAhIWNsYXNzZXNcbiAgICAgICksXG4gICAgICBtYXAoKFtyZXN1bHRTZXQsIG9wdGlvbnMsIGNsYXNzZXMsIGFkZGl0aW9uYWxMYXllcnMsIGl0ZW1TdHlsZXMsIGZpbHRlcnNdKSA9PiB7XG4gICAgICAgIGxldCBoYXNSZWxhdGlvbkxheWVyID0gbnVsbCBhcyB1bmtub3duIGFzIFZlY3RvckxheWVyPFZlY3RvclNvdXJjZTxhbnk+PjtcblxuICAgICAgICBjb25zdCBsYXllcnMgPSAob3B0aW9ucz8ubGF5ZXJzIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAobGF5ZXIpID0+IHRoaXMud2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLmRvbnROZWVkTG9jYXRpb24uaW5jbHVkZXMobGF5ZXIudHlwZSkgfHwgISFsYXllci5hdHRyaWJ1dGVcbiAgICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIChsYXllcikgPT4gdGhpcy53aWRnZXRNYXBMYXllclNlcnZpY2UuZG9udE5lZWRJbnRlbnNpdHkuaW5jbHVkZXMobGF5ZXIudHlwZSkgfHwgISFsYXllci5pbnRlbnNpdHlBdHRyaWJ1dGVcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcCgobGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucywgaWR4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzRm9yQ2xhc3MgPSBPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpXG4gICAgICAgICAgICAgIC5tYXAoKGNsYXNzSWQpID0+ICh7XG4gICAgICAgICAgICAgICAgY2xhc3NJZCxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldEF0dHJpYnV0ZXNGb3JEcmF3aW5nKGNsYXNzZXMsIGNsYXNzSWQsIGxheWVyKVxuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAocCwgYykgPT4gKHtcbiAgICAgICAgICAgICAgICAgIC4uLnAsXG4gICAgICAgICAgICAgICAgICBbYy5jbGFzc0lkXTogY1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHt9IGFzIHtcbiAgICAgICAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZW5zaXR5QXR0cmlidXRlOiBBdHRyaWJ1dGU7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uQXR0cmlidXRlOiBBdHRyaWJ1dGU7XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbGV0IGxheWVyQ2xhc3Nlc0lkID0gY2xhc3Nlcy5tYXAoKGNsYXp6KSA9PiBjbGF6ei5pZCk7XG4gICAgICAgICAgICBpZiAoJ2NsYXNzZXMnIGluIGxheWVyICYmICEhbGF5ZXIuY2xhc3NlcyAmJiBsYXllci5jbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGF5ZXJDbGFzc2VzSWQgPSBsYXllci5jbGFzc2VzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcmFuZ2UgPSB7IG1pbjogMCwgbWF4OiAwIH07XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBpZiAoISFsYXllci5pbnRlbnNpdHlBdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gT2JqZWN0LmtleXMocmVzdWx0U2V0Lml0ZW1zKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNsYXNzSWQpID0+XG4gICAgICAgICAgICAgICAgICByZXN1bHRTZXQuaXRlbXNbY2xhc3NJZF0ubWFwKChpdGVtKSA9PlxuICAgICAgICAgICAgICAgICAgICBJdGVtVXRpbHMuZ2V0QXR0cmlidXRlQ2FsY3VsYXRlZFZhbHVlKGl0ZW0sIGF0dHJpYnV0ZXNGb3JDbGFzc1tpdGVtLm9DbGFzc10uaW50ZW5zaXR5QXR0cmlidXRlKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlKSA9PiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIGFzIG51bWJlcltdO1xuXG4gICAgICAgICAgICAgIHJhbmdlID0gdmFsdWVzLnJlZHVjZSgocCwgYykgPT4gKHsgbWluOiBNYXRoLm1pbihwLm1pbiwgYyksIG1heDogTWF0aC5tYXgocC5tYXgsIGMpIH0pLCB7XG4gICAgICAgICAgICAgICAgbWluOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgICAgIG1heDogLU51bWJlci5NQVhfVkFMVUVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGltcGwgPSB0aGlzLndpZGdldE1hcExheWVyU2VydmljZS5sYXllcnNJbXBsZW1lbnRhdGlvbltsYXllci50eXBlXTtcbiAgICAgICAgICAgIGlmICghIWltcGwpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0TGF5ZXIgPSBpbXBsKFxuICAgICAgICAgICAgICAgIGxheWVyIGFzIGFueSxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzRm9yQ2xhc3MsXG4gICAgICAgICAgICAgICAgbGF5ZXJDbGFzc2VzSWQsXG4gICAgICAgICAgICAgICAgcmVzdWx0U2V0LFxuICAgICAgICAgICAgICAgIHJhbmdlLFxuICAgICAgICAgICAgICAgIGl0ZW1TdHlsZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgPT09ICdyZWxhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBoYXNSZWxhdGlvbkxheWVyID0gcmVzdWx0TGF5ZXIgYXMgdW5rbm93biBhcyBWZWN0b3JMYXllcjxWZWN0b3JTb3VyY2U+O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc3VsdExheWVyLnNldCgndGl0bGUnLCBsYXllci50aXRsZSk7XG5cbiAgICAgICAgICAgICAgaWYgKGxheWVyLnR5cGUgPT09ICdnZW9zZXJ2ZXInKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3FsX2ZpbHRlciA9IENxbFV0aWxzLmdldENRTFBhcmFtc0ZvcihsYXllci5kYXRhc291cmNlSWQsIGZpbHRlcnMsIGNsYXNzZXMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNxbF9maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEFkZGluZyBDUUwgcXVlcnkgdG8gZ2Vvc2VydmVyIGxheWVyc1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdExheWVyIGFzIFRpbGU8VGlsZVdNUz4pLmdldFNvdXJjZSgpIS51cGRhdGVQYXJhbXMoeyBjcWxfZmlsdGVyIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRMYXllcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYExheWVyIHR5cGUgJHtsYXllci50eXBlfSBpcyB1bmtub3duYCk7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgQmFzZUxheWVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+ICEhbGF5ZXIpO1xuXG4gICAgICAgIGlmICghIWhhc1JlbGF0aW9uTGF5ZXIpIHtcbiAgICAgICAgICBjb25zdCBmZWF0dXJlcyA9IGxheWVyc1xuICAgICAgICAgICAgLmZpbHRlcigobGF5ZXIpID0+ICEobGF5ZXIgaW5zdGFuY2VvZiBUaWxlKSlcbiAgICAgICAgICAgIC5tYXAoKGxheWVyKSA9PlxuICAgICAgICAgICAgICBsYXllclxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAuZ2V0U291cmNlKClcbiAgICAgICAgICAgICAgICAuZ2V0RmVhdHVyZXMoKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZlYXR1cmVzOiBGZWF0dXJlPGFueT4pID0+ICEhZmVhdHVyZXMuZ2V0KCdpZCcpIHx8ICEhZmVhdHVyZXMuZ2V0KCdmZWF0dXJlcycpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gWy4uLnAsIC4uLmNdLCBbXSk7XG5cbiAgICAgICAgICByZXN1bHRTZXQucmVsYXRpb25zLmZvckVhY2goKHJlbGF0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBmZWF0dXJlcy5maW5kKChmOiBGZWF0dXJlPFBvaW50IHwgQ2lyY2xlPikgPT4gZi5nZXQoJ2lkJykgPT09IHJlbGF0aW9uLnNvdXJjZSk7XG4gICAgICAgICAgICBjb25zdCBkZXN0ID0gZmVhdHVyZXMuZmluZCgoZjogRmVhdHVyZTxQb2ludCB8IENpcmNsZT4pID0+IGYuZ2V0KCdpZCcpID09PSByZWxhdGlvbi5kZXN0aW5hdGlvbik7XG4gICAgICAgICAgICBpZiAoISFzb3VyY2UgJiYgISFkZXN0KSB7XG4gICAgICAgICAgICAgIGhhc1JlbGF0aW9uTGF5ZXIuZ2V0U291cmNlKCk/LmFkZEZlYXR1cmUoZ2V0TGlua0ZlYXR1cmUocmVsYXRpb24sIHNvdXJjZSwgZGVzdCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGxheWVycy5wdXNoKC4uLmFkZGl0aW9uYWxMYXllcnMpO1xuICAgICAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIsIGluZGV4LCBhcnIpID0+IGxheWVyLnNldCgnekluZGV4JywgYXJyLmxlbmd0aCAtIGluZGV4KSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc2luZ2xlTGF5ZXIpIHtcbiAgICAgICAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIsIGlkeCkgPT4ge1xuICAgICAgICAgICAgbGF5ZXIuc2V0VmlzaWJsZShpZHggPT09IDApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxheWVycztcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMubGVnZW5kTGF5ZXJzJCA9IHRoaXMub3B0aW9ucyQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG9wdGlvbnMpID0+XG4gICAgICAgICAgKG9wdGlvbnMubGF5ZXJzID8/IFtdKS5maWx0ZXIoKGxheWVyKSA9PiBbJ2dlb3NlcnZlcicsICd3bXMnXS5pbmNsdWRlcyhsYXllci50eXBlKSkgYXMgKFxuICAgICAgICAgICAgfCBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnNcbiAgICAgICAgICAgIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnNcbiAgICAgICAgICApW11cbiAgICAgICksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLm1hcFN0eWxlTGF5ZXIkLFxuICAgICAgICB0aGlzLmxheWVycyQsXG4gICAgICAgIHRoaXMuZml0T3B0aW9uJCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkcyQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gZXF1YWwocCwgYykpKVxuICAgICAgXSkuc3Vic2NyaWJlKChbbWFwU3R5bGVMYXllciwgbGF5ZXJzLCBmaXQsIHNlbGVjdGVkSWRzXSkgPT4ge1xuICAgICAgICBjb25zdCB0b0FwcGx5TGF5ZXJzID0gWy4uLmxheWVycywgLi4ubWFwU3R5bGVMYXllcl07XG4gICAgICAgIHRoaXMubWFwLnNldExheWVycyh0b0FwcGx5TGF5ZXJzKTtcbiAgICAgICAgdGhpcy5tYXBcbiAgICAgICAgICAuZ2V0QWxsTGF5ZXJzKClcbiAgICAgICAgICAuZmlsdGVyKChsYXllcikgPT4gIShsYXllciBpbnN0YW5jZW9mIFRpbGUpKVxuICAgICAgICAgIC5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZ2V0RmVhdHVyZXMgPSAobGF5ZXIuZ2V0U291cmNlKCkgYXMgVmVjdG9yU291cmNlKT8uZ2V0RmVhdHVyZXM7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGdldEZlYXR1cmVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIChsYXllci5nZXRTb3VyY2UoKSBhcyBWZWN0b3JTb3VyY2UpPy5nZXRGZWF0dXJlcygpLmZvckVhY2goKGZlYXR1cmU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBmZWF0dXJlLmdldCgndHlwZScpO1xuICAgICAgICAgICAgICAgIGlmIChbJ2J1YmJsZScsICdtYXJrZXInLCAncG9pbnQnLCAnbGluZScsICdwb2x5Z29uJywgJ211bHRpLWxpbmUnLCAnbXVsdGktcG9seWdvbiddLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICBmZWF0dXJlLnNldFN0eWxlKFxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLmdldChzZWxlY3RlZElkcy5pbmNsdWRlcyhmZWF0dXJlLmdldCgnaWQnKSkgPyAnc2VsZWN0ZWRTdHlsZScgOiAnY2xhc3NpY1N0eWxlJylcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZpdE1hcEZvck9iamVjdHMoZml0LCBzZWxlY3RlZElkcyk7XG4gICAgICAgICAgdGhpcy5tYXAudXBkYXRlU2l6ZSgpO1xuICAgICAgICB9LCAyMDApO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLndtc0ZlYXR1cmVzJCwgdGhpcy5jbGFzc2ljRmVhdHVyZXMkLCB0aGlzLndpZGdldFNpemUkLCB0aGlzLmRpc3BsYXlIZWFkZXIkXSkuc3Vic2NyaWJlKFxuICAgICAgICAoW3dtc0ZlYXR1cmVzLCBjbGFzc2ljRmVhdHVyZXMsIHNpemUsIGhlYWRlcl0pID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5tYXApIHtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEluZGV4ID0gMDtcbiAgICAgICAgICAgIGNvbnN0IHBvcHVwT3ZlcmxheSA9IG5ldyBPdmVybGF5KHtcbiAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5wb3B1cC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICBvZmZzZXQ6IFs5LCA5XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm1hcC5hZGRPdmVybGF5KHBvcHVwT3ZlcmxheSk7XG4gICAgICAgICAgICB0aGlzLnBvcHVwQ29udGVudC5jbGVhcigpO1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UHJvbWlzZXMgPSBbXSBhcyBQcm9taXNlPENvbXBvbmVudFJlZjxCYXNlVG9vbHRpcENvbXBvbmVudD4gfCBudWxsPltdO1xuICAgICAgICAgICAgd21zRmVhdHVyZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgY29tcG9uZW50UHJvbWlzZXMucHVzaCh0aGlzLmdlbmVyYXRlVG9vbHRpcCh2YWx1ZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjbGFzc2ljRmVhdHVyZXMuZm9yRWFjaCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb21wb25lbnRQcm9taXNlcy5wdXNoKHRoaXMuZ2VuZXJhdGVUb29sdGlwKHZhbHVlKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgUHJvbWlzZS5hbGwoY29tcG9uZW50UHJvbWlzZXMpLnRoZW4oKHByb21pc2VzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlYWxDb21wb25lbnRzID0gcHJvbWlzZXMuZmlsdGVyKChjb21wb25lbnQpID0+ICEhY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgdGhpcy50b29sdGlwTnVtYmVyID0gcmVhbENvbXBvbmVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICBpZiAocmVhbENvbXBvbmVudHMubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwLm5hdGl2ZUVsZW1lbnQuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwb3B1cE92ZXJsYXkuc2V0UG9zaXRpb24oWy05OTk5OTk5OTk5LCAtOTk5OTk5OTk5OV0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXAubmF0aXZlRWxlbWVudC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBEbyBub3QgZ28gb3V0c2lkZSB0aGUgbWFwXG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHtcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogMjAwICsgKGhlYWRlciA/IFdJREdFVF9IRUFERVJfSEVJR0hUIDogMCkgKyBUT09MVElQX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogMzAwICsgVE9PTFRJUF9QQURESU5HXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBsZXQgcGl4ZWwgPSB0aGlzLmludGVyYWN0aW9uTWFuYWdlci50b29sdGlwRXZlbnQ/LnBpeGVsO1xuICAgICAgICAgICAgICAgIGlmICghIXBpeGVsICYmIHBpeGVsWzBdICsgcmVjdC53aWR0aCA+IHNpemUud2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgIHBpeGVsWzBdID0gc2l6ZS53aWR0aCAtIHJlY3Qud2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghIXBpeGVsICYmIHBpeGVsWzFdICsgcmVjdC5oZWlnaHQgPiBzaXplLmhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgcGl4ZWxbMV0gPSBzaXplLmhlaWdodCAtIHJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcE1vdmUoMCk7XG4gICAgICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICAgICAgICAgIHBvcHVwT3ZlcmxheS5zZXRQb3NpdGlvbih0aGlzLm1hcC5nZXRDb29yZGluYXRlRnJvbVBpeGVsKHBpeGVsID8/IFswLCAwXSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgaW5pdFJlc3VsdFNldCQoKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLnJlc3VsdFNldHMpLFxuICAgICAgdGhpcy5kYXRhc291cmNlSWRzJCxcbiAgICAgIHRoaXMuc3RhdGljUmVzdWx0U2V0JCxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhdGFTb3VyY2VTZWxlY3RvcnMuZGF0YXNldHMpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW3Jlc3VsdFNldHMsIHJlc3VsdFNldE5hbWVzQXJyYXksIHN0YXRpY1Jlc3VsdFNldCwgZGVmaW5pdGlvbnNdKSA9PiB7XG4gICAgICAgIGlmICghIXN0YXRpY1Jlc3VsdFNldCkge1xuICAgICAgICAgIHJldHVybiBzdGF0aWNSZXN1bHRTZXQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0U2V0QXJyYXkgPSByZXN1bHRTZXROYW1lc0FycmF5XG4gICAgICAgICAgLmZpbHRlcigocnNOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gZGVmaW5pdGlvbnMuZmluZCgoZHNkKSA9PiBkc2QuaWQgPT09IHJzTmFtZSkgYXMgRGF0YXNldCB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiAhZGVmaW5pdGlvbiB8fCAhKGRlZmluaXRpb24ubWV0YWRhdGEgPz8gW10pLmZpbmQoKG1ldGEpID0+IG1ldGEubWV0YWRhdGFEZWYubmFtZSA9PT0gJ19nZW9LZXknKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5tYXAoKHJzTmFtZSkgPT4gcmVzdWx0U2V0c1tyc05hbWUgPz8gJyddKVxuICAgICAgICAgIC5maWx0ZXIoKHJzTmFtZSkgPT4gISFyc05hbWUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0U2V0QXJyYXkucmVkdWNlKChyczEsIHJzMikgPT4gUmVzdWx0c2V0VXRpbHMubWVyZ2VSZXN1bHRTZXRzKHJzMSwgcnMyKSwge1xuICAgICAgICAgIGl0ZW1zOiB7fSxcbiAgICAgICAgICByZWxhdGlvbnM6IFtdLFxuICAgICAgICAgIG1lcmdlZDogcmVzdWx0U2V0QXJyYXkubGVuZ3RoXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgdikgPT4gZXF1YWwocCwgdikpXG4gICAgKTtcbiAgfVxuXG4gIGdlbmVyYXRlVG9vbHRpcCh2YWx1ZToge1xuICAgIG9DbGFzczogc3RyaW5nO1xuICAgIGNvb3JkaW5hdGVzOiBQaXhlbDtcbiAgICB2YWx1ZXM6IGFueTtcbiAgfSk6IFByb21pc2U8Q29tcG9uZW50UmVmPEJhc2VUb29sdGlwQ29tcG9uZW50PiB8IG51bGw+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCQgPSB0aGlzLnRvb2x0aXBGYWN0b3J5U2VydmljZS5nZW5lcmF0ZVRvb2x0aXAodmFsdWUub0NsYXNzLCB0aGlzLmluamVjdG9yLCB0aGlzLnBvcHVwQ29udGVudCk7XG4gICAgICBjb21wb25lbnQkLnN1YnNjcmliZSgoY29tcG9uZW50KSA9PiB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuZGF0YS5pdGVtID0gdmFsdWUudmFsdWVzO1xuICAgICAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS5wb3B1cCA9IHRoaXMucG9wdXA7XG4gICAgICAgICAgcmVzb2x2ZShjb21wb25lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldERlZmF1bHRMYXllclRpdGxlKGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsIGNhcGFiaWxpdGllczogKEdldENhcGFiaWxpdGllc1Jlc3BvbnNlIHwgbnVsbClbXSkge1xuICAgIGlmICghbGF5ZXIudGl0bGUpIHtcbiAgICAgIGlmIChbJ2dlb3NlcnZlcicsICd3bXMnXS5pbmNsdWRlcyhsYXllci50eXBlKSkge1xuICAgICAgICBjb25zdCBnZW9MYXllciA9IGxheWVyIGFzIE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyB8IE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zO1xuICAgICAgICBjb25zdCBsYXllckNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcy5maW5kKChjYXApID0+IGNhcD8ucGFyYW1MYXllciA9PT0gZ2VvTGF5ZXIucGFyYW1MYXllcik7XG5cbiAgICAgICAgaWYgKGxheWVyQ2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdMYXllciA9IFdtc1NlcnZpY2UuZ2V0TWF0Y2hpbmdMYXllcihnZW9MYXllci5wYXJhbUxheWVyLCBsYXllckNhcGFiaWxpdGllcy5kb2MpO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0xheWVyKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ1RpdGxlID0gWE1MVXRpbHMuZmluZChtYXRjaGluZ0xheWVyLmNoaWxkTm9kZXMsICdUaXRsZScpO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nVGl0bGUpIHtcbiAgICAgICAgICAgICAgbGF5ZXIudGl0bGUgPSBtYXRjaGluZ1RpdGxlLnRleHRDb250ZW50ID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxheWVyLnRpdGxlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYEBwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuJHtsYXllci50eXBlfWAsIHsgLi4ubGF5ZXIgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZml0TWFwRm9yT2JqZWN0cyhmaXQ6IGJvb2xlYW4sIHNlbGVjdGVkSWRzPzogc3RyaW5nW10pIHtcbiAgICBpZiAoZml0KSB7XG4gICAgICBsZXQgZXh0ZW50ID0gY3JlYXRlRW1wdHkoKTtcbiAgICAgIGNvbnN0IGxpc3RPZk1hcmtlcnMgPSBbXSBhcyBhbnlbXTtcblxuICAgICAgdGhpcy5tYXBcbiAgICAgICAgLmdldEFsbExheWVycygpXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGxheWVyKSA9PiAhIWxheWVyLmdldFNvdXJjZSAmJiAhIWxheWVyLmdldFNvdXJjZSgpICYmICEhKGxheWVyLmdldFNvdXJjZSgpIGFzIFZlY3RvclNvdXJjZSkuZ2V0RmVhdHVyZXNcbiAgICAgICAgKVxuICAgICAgICAuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAobGF5ZXIuZ2V0U291cmNlKCkgYXMgVmVjdG9yU291cmNlKS5nZXRGZWF0dXJlcygpLmZvckVhY2goKGZlYXR1cmU6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBmZWF0dXJlLmdldCgnaWQnKTtcbiAgICAgICAgICAgIGlmICghc2VsZWN0ZWRJZHMgfHwgc2VsZWN0ZWRJZHMubGVuZ3RoIDw9IDAgfHwgKHNlbGVjdGVkSWRzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRJZHMuaW5jbHVkZXMoaWQpKSkge1xuICAgICAgICAgICAgICBzd2l0Y2ggKGZlYXR1cmUuZ2V0KCd0eXBlJykpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdoZWF0cG9pbnQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3BvaW50JzpcbiAgICAgICAgICAgICAgICBjYXNlICdtYXJrZXInOlxuICAgICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKGZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2xpbmUnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKC4uLmZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3BvbHlnb24nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ211bHRpLWxpbmUnOlxuICAgICAgICAgICAgICAgICAgbGlzdE9mTWFya2Vycy5wdXNoKC4uLmZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpLmZsYXQoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtdWx0aS1wb2x5Z29uJzpcbiAgICAgICAgICAgICAgICAgIGxpc3RPZk1hcmtlcnMucHVzaCguLi5mZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0Q29vcmRpbmF0ZXMoKS5mbGF0KCkuZmxhdCgpKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBsaXN0T2ZNYXJrZXJzLnB1c2goZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldENlbnRlcigpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgY29uc3Qgc2VsZWN0ZWRFeHRlbnQgPSBib3VuZGluZ0V4dGVudChsaXN0T2ZNYXJrZXJzLmZpbHRlcigoY29vcmQpID0+ICEhY29vcmQpKTtcbiAgICAgIGlmIChcbiAgICAgICAgc2VsZWN0ZWRFeHRlbnRbMF0gIT09IEluZmluaXR5ICYmXG4gICAgICAgIHNlbGVjdGVkRXh0ZW50WzFdICE9PSBJbmZpbml0eSAmJlxuICAgICAgICBzZWxlY3RlZEV4dGVudFsyXSAhPT0gLUluZmluaXR5ICYmXG4gICAgICAgIHNlbGVjdGVkRXh0ZW50WzNdICE9PSAtSW5maW5pdHlcbiAgICAgICkge1xuICAgICAgICBleHRlbnQgPSBzZWxlY3RlZEV4dGVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dGVudFswXSAhPT0gSW5maW5pdHkgJiYgZXh0ZW50WzFdICE9PSBJbmZpbml0eSAmJiBleHRlbnRbMl0gIT09IC1JbmZpbml0eSAmJiBleHRlbnRbM10gIT09IC1JbmZpbml0eSkge1xuICAgICAgICB0aGlzLm1hcC5nZXRWaWV3KCkuZml0KGV4dGVudCwgeyBwYWRkaW5nOiBbMjAsIDIwLCA3MCwgNzBdLCBkdXJhdGlvbjogMjAwIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXR0cmlidXRlc0ZvckRyYXdpbmcoY2xhc3NlczogQ2xhc3NbXSwgY2xhc3NJZDogc3RyaW5nLCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgY29uc3QgY2xhc3NPYmogPSBjbGFzc2VzLmZpbmQoKGNsKSA9PiBjbC5pZCA9PT0gY2xhc3NJZCkgPz8gKHsgYXR0cmlidXRlczogW10gYXMgQXR0cmlidXRlW10gfSBhcyBDbGFzcyk7XG4gICAgY29uc3QgbG9jYXRpb25BdHRyaWJ1dGUgPSB0aGlzLmdldExvY2F0aW9uQXR0cmlidXRlKGNsYXNzT2JqLCBsYXllcik7XG4gICAgY29uc3QgaW50ZW5zaXR5QXR0cmlidXRlID0gdGhpcy5nZXRJbnRlbnNpdHlBdHRyaWJ1dGUoXG4gICAgICBjbGFzc09iaixcbiAgICAgIGxheWVyIGFzIE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnNcbiAgICApO1xuICAgIHJldHVybiB7IGxvY2F0aW9uQXR0cmlidXRlLCBpbnRlbnNpdHlBdHRyaWJ1dGUgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW50ZW5zaXR5QXR0cmlidXRlKFxuICAgIGNsYXNzT2JqOiBDbGFzcyB8IHVuZGVmaW5lZCxcbiAgICBsYXllcjogTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9uc1xuICApIHtcbiAgICByZXR1cm4gKFxuICAgICAgKGNsYXNzT2JqIHx8IHsgYXR0cmlidXRlczogW10gfSkuYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLm5hbWUgPT09IGxheWVyPy5pbnRlbnNpdHlBdHRyaWJ1dGUgPz8gJycpID8/XG4gICAgICAodW5kZWZpbmVkIGFzIHVua25vd24gYXMgQXR0cmlidXRlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2F0aW9uQXR0cmlidXRlKGNsYXNzT2JqOiBDbGFzcywgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyk6IEF0dHJpYnV0ZSB7XG4gICAgdHlwZSBsYXllcnMgPSBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zO1xuICAgIGNvbnN0IHNwZWNpZmljTGF5ZXIgPSBsYXllciBhcyBsYXllcnM7XG4gICAgcmV0dXJuIChcbiAgICAgIGNsYXNzT2JqLmF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5uYW1lID09PSAoc3BlY2lmaWNMYXllcj8uYXR0cmlidXRlID8/IFtdKSA/PyAnJykgPz9cbiAgICAgICh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBBdHRyaWJ1dGUpXG4gICAgKTtcbiAgfVxuXG4gIGNoYW5nZVN0eWxlKCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weS5zdHlsZSA9ICRldmVudDtcbiAgICBpZiAodGhpcy5vcHRpb25zQ29weS5zdHlsZSAhPT0gdGhpcy5TVFlMRV9GUk9NX1VSTCkge1xuICAgICAgZGVsZXRlIHRoaXMub3B0aW9uc0NvcHkuc3R5bGVVUkw7XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlU3R5bGVVUkwoJGV2ZW50OiBFdmVudCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLm9wdGlvbnNDb3B5LnN0eWxlVVJMID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlRml0KCRldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuZml0ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlQXR0cmlidXRpb25zKCRldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuYXR0cmlidXRpb25zID0gJGV2ZW50O1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LmF0dHJpYnV0aW9ucykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnM/LmZvckVhY2goKGxheWVyKSA9PiAobGF5ZXIuYXR0cmlidXRpb24gPSAnJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycz8uZm9yRWFjaCgobGF5ZXIpID0+IGRlbGV0ZSBsYXllci5hdHRyaWJ1dGlvbik7XG4gICAgfVxuICB9XG5cbiAgYWRkTGF5ZXIoKSB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnNDb3B5LmxheWVycykge1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnMucHVzaCh7IGF0dHJpYnV0ZTogJycgfSBhcyBNYXBXaWRnZXRMYXllck9wdGlvbnMpO1xuICB9XG5cbiAgY2hhbmdlTGF5ZXJUeXBlKCRldmVudDogYW55LCBpOiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMub3B0aW9uc0NvcHkubGF5ZXJzKSB7XG4gICAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVycyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID8/IFtdO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXS50eXBlID0gJGV2ZW50O1xuICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXS50eXBlID09PSAnd21zJykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldIGFzIE1hcFdNU0xheWVyTGF5ZXJPcHRpb25zO1xuICAgICAgb3B0aW9ucy5wYXJhbUxheWVyID0gb3B0aW9ucy5wYXJhbUxheWVyID8/ICcnO1xuICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCA/PyAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldLnR5cGUgPT09ICd3bXRzJykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldIGFzIE1hcFdNVFNMYXllckxheWVyT3B0aW9ucztcbiAgICAgIG9wdGlvbnMucGFyYW1MYXllciA9IG9wdGlvbnMucGFyYW1MYXllciA/PyAnJztcbiAgICAgIG9wdGlvbnMuc3R5bGUgPSBvcHRpb25zLnN0eWxlID8/ICcnO1xuICAgICAgb3B0aW9ucy5tYXRyaXhTZXQgPSBvcHRpb25zLm1hdHJpeFNldCA/PyAnJztcbiAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwgPz8gJyc7XG4gICAgfVxuICAgIGlmIChbJ2ZlYXR1cmVsYXllcicsICd2ZWN0b3J0aWxlJywgJ3Jhc3RlcnRpbGUnXS5pbmNsdWRlcyh0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpXS50eXBlKSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2ldIGFzIE1hcEZlYXR1cmVMYXllck9wdGlvbnM7XG4gICAgICBvcHRpb25zLnVybCA9IG9wdGlvbnMudXJsID8/ICcnO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVRpdGxlKCRldmVudDogYW55LCBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKSB7XG4gICAgbGF5ZXIudGl0bGUgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBlbWl0TWFuaWZlc3QoKSB7XG4gICAgdGhpcy5tYW5pZmVzdE1vZGlmaWVkLmVtaXQoe1xuICAgICAgd2lkZ2V0SW5kZXg6IHRoaXMud2lkZ2V0SW5kZXgsXG4gICAgICBtYW5pZmVzdDoge1xuICAgICAgICAuLi50aGlzLm1hbmlmZXN0LFxuICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMub3B0aW9uc0NvcHksIGxheWVyczogKHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzID8/IFtdKS5maWx0ZXIoKGxheWVyKSA9PiAhIWxheWVyLnR5cGUpIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNoYW5nZUxvY2F0aW9uQXR0cmlidXRlcygkZXZlbnQ6IGFueSwgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5hdHRyaWJ1dGUgPSAkZXZlbnQ7XG4gIH1cblxuICBsYXllckhhc0ludGVuc2l0eShsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKTogTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyB8IE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucyB7XG4gICAgcmV0dXJuIDxNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zPmxheWVyO1xuICB9XG5cbiAgY2hhbmdlSW50ZW5zaXR5QXR0cmlidXRlcygkZXZlbnQ6IGFueSwgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucykge1xuICAgIGNvbnN0IGxheWVyXyA9IDxNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zPmxheWVyO1xuICAgIGxheWVyXy5pbnRlbnNpdHlBdHRyaWJ1dGUgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VDbGFzc2VzKCRldmVudDogc3RyaW5nW10sIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMpIHtcbiAgICBjb25zdCBzcGVjaWZpY0xheWVyID0gbGF5ZXIgYXNcbiAgICAgIHwgTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9uc1xuICAgICAgfCBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zO1xuICAgIHNwZWNpZmljTGF5ZXIuY2xhc3NlcyA9ICRldmVudDtcbiAgfVxuXG4gIGRlbGV0ZUxheWVyKGk6IG51bWJlcikge1xuICAgIHRoaXMub3B0aW9uc0NvcHk/LmxheWVycz8uc3BsaWNlKGksIDEpO1xuICB9XG5cbiAgaW52ZXJ0TGF5ZXJzKGlkeDogbnVtYmVyLCBpZHhXaXRoOiBudW1iZXIpIHtcbiAgICBpZiAoISF0aGlzLm9wdGlvbnNDb3B5ICYmICEhdGhpcy5vcHRpb25zQ29weS5sYXllcnMpIHtcbiAgICAgIGNvbnN0IHRtcCA9IHRoaXMub3B0aW9uc0NvcHkubGF5ZXJzW2lkeFdpdGhdO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaWR4V2l0aF0gPSB0aGlzLm9wdGlvbnNDb3B5LmxheWVyc1tpZHhdO1xuICAgICAgdGhpcy5vcHRpb25zQ29weS5sYXllcnNbaWR4XSA9IHRtcDtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VVcmwoXG4gICAgJGV2ZW50OiBFdmVudCxcbiAgICBsYXllcjpcbiAgICAgIHwgTWFwV01TTGF5ZXJMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwRmVhdHVyZUxheWVyT3B0aW9uc1xuICAgICAgfCBNYXBWZWN0b3JUaWxlTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcFJhc3RlclRpbGVMYXllck9wdGlvbnNcbiAgICAgIHwgTWFwV01UU0xheWVyTGF5ZXJPcHRpb25zXG4gICAgICB8IE1hcEdlb1NlcnZlckxheWVyT3B0aW9uc1xuICApIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIudXJsID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlQXR0cmlidXRpb24oJGV2ZW50OiBFdmVudCwgbGF5ZXI6IEJhc2VXaWRnZXRNYXBMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIuYXR0cmlidXRpb24gPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VQYXJhbUxheWVyKCRldmVudDogRXZlbnQsIGxheWVyOiBNYXBXTVNMYXllckxheWVyT3B0aW9ucyB8IE1hcFdNVFNMYXllckxheWVyT3B0aW9ucykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5wYXJhbUxheWVyID0gJGV2ZW50LmN1cnJlbnRUYXJnZXQ/LnZhbHVlO1xuICB9XG5cbiAgY2hhbmdlUGFyYW1UaWxlZCgkZXZlbnQ6IGJvb2xlYW4sIGxheWVyOiBNYXBXTVNMYXllckxheWVyT3B0aW9ucykge1xuICAgIGxheWVyLnBhcmFtVGlsZWQgPSAkZXZlbnQ7XG4gIH1cblxuICBjaGFuZ2VNYXRyaXhTZXQoJGV2ZW50OiBFdmVudCwgbGF5ZXI6IE1hcFdNVFNMYXllckxheWVyT3B0aW9ucykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5tYXRyaXhTZXQgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBjaGFuZ2VQYXJhbVN0eWxlKCRldmVudDogRXZlbnQsIGxheWVyOiBNYXBXTVRTTGF5ZXJMYXllck9wdGlvbnMpIHtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgbGF5ZXIuc3R5bGUgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBleHBvcnQoKSB7XG4gICAgZXhwb3J0TWFwQXNJbWFnZSh0aGlzLm1hcCwgJ21hcC5wbmcnKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvSW1hZ2UoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gZ2V0TWFwQXNQbmcodGhpcy5tYXApO1xuICB9XG5cbiAgY2hhbmdlQ2x1c3RlcmVkKGxheWVyOiBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsICRldmVudDogYm9vbGVhbikge1xuICAgIGxheWVyLmNsdXN0ZXJlZCA9ICRldmVudDtcbiAgICBpZiAobGF5ZXIuY2x1c3RlcmVkKSB7XG4gICAgICBsYXllci5jbHVzdGVyRGlzdGFuY2UgPSAxMDtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VDbHVzdGVyRGlzdGFuY2UobGF5ZXI6IE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucywgJGV2ZW50OiBFdmVudCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5jbHVzdGVyRGlzdGFuY2UgPSAkZXZlbnQuY3VycmVudFRhcmdldD8udmFsdWU7XG4gIH1cblxuICBoaWRlQWRkcmVzcygpIHtcbiAgICB0aGlzLmFkZHJlc3MubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9XG5cbiAgY2hhbmdlT3BhY2l0eShsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLCAkZXZlbnQ6IHN0cmluZykge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBsYXllci5vcGFjaXR5ID0gcGFyc2VJbnQoJGV2ZW50LCAxMCk7XG4gIH1cblxuICBnZXRXTVNMYXllcnMoKSB7XG4gICAgcmV0dXJuICF0aGlzLm1hcFxuICAgICAgPyBbXVxuICAgICAgOiB0aGlzLm1hcFxuICAgICAgICAgIC5nZXRBbGxMYXllcnMoKVxuICAgICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5nZXRTb3VyY2UoKSBpbnN0YW5jZW9mIFRpbGVXTVMpXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIC5maWx0ZXIoKGxheWVyKSA9PiBsYXllci5yZW5kZXJlZCA9PT0gdHJ1ZSk7XG4gIH1cblxuICBpc0xheWVyUmVuZGVyZWQobGF5ZXI6IGFueSkge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0V01TTGF5ZXJzKCkuZmluZCgod21zTGF5ZXIpID0+IHdtc0xheWVyLmdldCgndGl0bGUnKSA9PT0gbGF5ZXIudGl0bGUpO1xuICB9XG5cbiAgaXNMYXllclZpc2libGUobGF5ZXI6IGFueSkge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0V01TTGF5ZXJzKClcbiAgICAgIC5maW5kKCh3bXNMYXllcikgPT4gd21zTGF5ZXIuZ2V0KCd0aXRsZScpID09PSBsYXllci50aXRsZSlcbiAgICAgID8uZ2V0VmlzaWJsZSgpO1xuICB9XG5cbiAgZ2V0RmVhdHVyZUZyb21TZXJ2ZXIod21zTGF5ZXJzOiBhbnlbXSwgcGl4ZWw6IFBpeGVsKSB7XG4gICAgcHJvajQuZGVmcyhcbiAgICAgICdFUFNHOjIxNTQnLFxuICAgICAgJytwcm9qPWxjYyArbGF0XzA9NDYuNSArbG9uXzA9MyArbGF0XzE9NDkgK2xhdF8yPTQ0ICt4XzA9NzAwMDAwICt5XzA9NjYwMDAwMCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmcyArdHlwZT1jcnMnXG4gICAgKTtcbiAgICByZWdpc3Rlcihwcm9qNCk7XG4gICAgY29uc3QgcHJvakdlbyA9IGdldFByb2plY3Rpb24oJ0VQU0c6Mzg1NycpO1xuICAgIGNvbnN0IHByb2pMYW1iZXJ0ID0gZ2V0UHJvamVjdGlvbignRVBTRzoyMTU0Jyk7XG5cbiAgICBpZiAocHJvakxhbWJlcnQgJiYgcHJvakdlbykge1xuICAgICAgZm9yIChjb25zdCBsYXllciBvZiB3bXNMYXllcnMpIHtcbiAgICAgICAgY29uc3QgdXJsID0gbGF5ZXJcbiAgICAgICAgICAuZ2V0U291cmNlKClcbiAgICAgICAgICAuZ2V0RmVhdHVyZUluZm9VcmwodHJhbnNmb3JtKHBpeGVsLCBwcm9qR2VvLCBwcm9qTGFtYmVydCksIHRoaXMubWFwLmdldFZpZXcoKS5nZXRSZXNvbHV0aW9uKCksICdFUFNHOjIxNTQnLCB7XG4gICAgICAgICAgICBJTkZPX0ZPUk1BVDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgRkVBVFVSRV9DT1VOVDogMTBcbiAgICAgICAgICB9KTtcbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgICBEYXNoYm9hcmRBY3Rpb25zLmdldFdtc0ZlYXR1cmVzKHtcbiAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICBvQ2xhc3M6IGxheWVyLmdldFByb3BlcnRpZXMoKS5vQ2xhc3MgPz8gJycsXG4gICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBwaXhlbFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hhbmdlV21zQ2xhc3MoJGV2ZW50OiBhbnksIGxheWVyOiBNYXBXTVNMYXllckxheWVyT3B0aW9ucykge1xuICAgIGxheWVyLm9DbGFzcyA9ICRldmVudDtcbiAgfVxuXG4gIHRvZ2dsZUxlZ2VuZChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5sZWdlbmRUYWIgPSB0aGlzLmxlZ2VuZFRhYiA9PT0gaW5kZXggPyAtMSA6IGluZGV4O1xuICB9XG5cbiAgdG9nZ2xlTGVnZW5kV2luZG93KCkge1xuICAgIHRoaXMubGVnZW5kVGFiT3BlbiA9ICF0aGlzLmxlZ2VuZFRhYk9wZW47XG4gICAgdGhpcy5sYXllcnNUYWJPcGVuID0gZmFsc2U7XG4gIH1cblxuICB0b2dnbGVMYXllcnNXaW5kb3coKSB7XG4gICAgdGhpcy5sYXllcnNUYWJPcGVuID0gIXRoaXMubGF5ZXJzVGFiT3BlbjtcbiAgICB0aGlzLmxlZ2VuZFRhYk9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHRvb2x0aXBNb3ZlKG51bWJlcjogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMudG9vbHRpcENhbk1vdmUobnVtYmVyKSkge1xuICAgICAgdGhpcy5zZXRTdHlsZUFzeW5jKHRoaXMudG9vbHRpcEluZGV4LCAnbm9uZScpO1xuICAgICAgdGhpcy50b29sdGlwSW5kZXggPSB0aGlzLnRvb2x0aXBJbmRleCArIG51bWJlcjtcbiAgICAgIHRoaXMuc2V0U3R5bGVBc3luYyh0aGlzLnRvb2x0aXBJbmRleCwgJ2Jsb2NrJyk7XG4gICAgfVxuICB9XG5cbiAgdG9vbHRpcENhbk1vdmUobnVtYmVyOiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy50b29sdGlwSW5kZXggKyBudW1iZXIgPj0gMCAmJiB0aGlzLnRvb2x0aXBJbmRleCArIG51bWJlciA8IHRoaXMudG9vbHRpcE51bWJlcjtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3R5bGVBc3luYyhpZHg6IG51bWJlciwgdmFsdWU6IHN0cmluZykge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0Q29udGFpbmVyID0gdGhpcy5wb3B1cENvbnRlbnQuZ2V0KGlkeCk7XG4gICAgICBpZiAodGFyZ2V0Q29udGFpbmVyKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGFyZ2V0Q29udGFpbmVyLnJvb3ROb2Rlc1swXS5zdHlsZS5kaXNwbGF5ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGdldCBtYXBMYXllcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwXG4gICAgICAuZ2V0TGF5ZXJzKClcbiAgICAgIC5nZXRBcnJheSgpXG4gICAgICAuZmlsdGVyKChsYXllcikgPT4gbGF5ZXIuZ2V0KCd0aXRsZScpICE9PSAnYmFja2dyb3VuZCcpO1xuICB9XG5cbiAgY2hhbmdlVmlzaWJpbGl0eShsYXllcjogQmFzZUxheWVyKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc0NvcHkuc2luZ2xlTGF5ZXIpIHtcbiAgICAgIHRoaXMubWFwTGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiBsYXllci5zZXRWaXNpYmxlKGZhbHNlKSk7XG4gICAgICBsYXllci5zZXRWaXNpYmxlKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXllci5zZXRWaXNpYmxlKCFsYXllci5nZXRWaXNpYmxlKCkpO1xuICAgIH1cbiAgICB0aGlzLm1hcC51cGRhdGVTaXplKCk7XG4gIH1cblxuICBjaGFuZ2VTaW5nbGVMYXllcigkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkuc2luZ2xlTGF5ZXIgPSAkZXZlbnQ7XG4gIH1cblxuICBnZXQgbGF5ZXJWaXNpYmxlSWR4KCkge1xuICAgIHJldHVybiB0aGlzLm1hcExheWVycy5tYXAoKGxheWVyLCBpZHgpID0+IChsYXllci5nZXRWaXNpYmxlKCkgPyBpZHggOiAwKSkucmVkdWNlKChhLCBiKSA9PiBhICsgYik7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5yZXNldFdtc0ZlYXR1cmVzKCkpO1xuICB9XG59XG4iLCI8cHJ5LXdpZGdldC1tYXAtY3NzPjwvcHJ5LXdpZGdldC1tYXAtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS1tYXBcIj5cbiAgPHByeS13aWRnZXQtaGVhZGVyXG4gICAgW2RhdGFzb3VyY2VJZHNdPVwiKGRhdGFzb3VyY2VJZHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAqbmdJZj1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgW21hbmlmZXN0XT1cIm1hbmlmZXN0XCJcbiAgICAobWFuaWZlc3RNb2RpZmllZCk9XCJtYW5pZmVzdE1vZGlmaWVkLmVtaXQoJGV2ZW50KVwiXG4gICAgW2hlYWRlck9wdGlvbnNdPVwiKGRpc3BsYXlIZWFkZXIkIHwgYXN5bmMpID8/IHt9XCJcbiAgICAjaGVhZGVyXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfc3R5bGVcIj57eyAnQHByeS53aWRnZXQubWFwLnN0eWxlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVN0eWxlKCRldmVudClcIlxuICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgIFtpdGVtc109XCJzdHlsZXMkIHwgYXN5bmNcIlxuICAgICAgICAgIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnN0eWxlXCJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgYmluZFZhbHVlPVwiaWRlbnRpZmllclwiXG4gICAgICAgICAgaWQ9XCJtYXBfc3R5bGVcIlxuICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJvcHRpb25zQ29weS5zdHlsZSA9PT0gU1RZTEVfRlJPTV9VUkxcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cInN0eWxlX1VSTFwiPnt7ICdAcHJ5LndpZGdldC5tYXAuc3R5bGVVcmwnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGlkPVwic3R5bGVfVVJMXCJcbiAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VTdHlsZVVSTCgkZXZlbnQpXCJcbiAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uc0NvcHkuc3R5bGVVUkwgPz8gJydcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlU2luZ2xlTGF5ZXIoJGV2ZW50KVwiIFtuZ01vZGVsXT1cIm9wdGlvbnNDb3B5LnNpbmdsZUxheWVyID8/IGZhbHNlXCI+XG4gICAgICAgIHt7ICdAcHJ5LndpZGdldC5tYXAuc2luZ2xlTGF5ZXInIHwgaTE4biB9fVxuICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlRml0KCRldmVudClcIiBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5maXQgPz8gZmFsc2VcIj5cbiAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5maXQnIHwgaTE4biB9fVxuICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgIDxwcnktY2hlY2tib3ggKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQXR0cmlidXRpb25zKCRldmVudClcIiBbbmdNb2RlbF09XCJvcHRpb25zQ29weS5hdHRyaWJ1dGlvbnMgPz8gZmFsc2VcIj5cbiAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5hdHRyaWJ1dGlvbnMnIHwgaTE4biB9fVxuICAgICAgPC9wcnktY2hlY2tib3g+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fYWN0aW9ucyAtaGFzLXNlcGFyYXRvclwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWRkTGF5ZXIoKVwiIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tdGV4dCAtbGluay1saWtlXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJsaWJyYXJ5X2FkZFwiPjwvcHJ5LWljb24+XG4gICAgICAgICAge3sgJ0Bwcnkud2lkZ2V0Lm1hcC5hZGRMYXllcicgfCBpMThuIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGxheWVyIG9mIG9wdGlvbnNDb3B5Py5sYXllcnM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm8tc2V0dGluZ3NfX3BvcHVwX19jb250ZW50X19maWVsZHNfX2hlYWRcIj5cbiAgICAgICAgICA8aDMgY2xhc3M9XCJhLWgzIHNldHRpbmdzLWxheWVyLXRpdGxlX190aXRsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXInIHwgaTE4biA6IHsgaW5kZXg6IGkgKyAxIH0gfX08L2gzPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCIgKGNsaWNrKT1cImludmVydExheWVycyhpLCBpIC0gMSlcIiAqbmdJZj1cImkgPiAwXCI+XG4gICAgICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZmxlY2hlX2hhdXRcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0BwcnkuYWN0aW9uLm1vdmVVcCcgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW52ZXJ0TGF5ZXJzKGksIGkgKyAxKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaSA8IChvcHRpb25zQ29weT8ubGF5ZXJzPy5sZW5ndGggPz8gMCkgLSAxXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJmbGVjaGVfYmFzXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LmFjdGlvbi5tb3ZlRG93bicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLXNldHRpbmdzX19wb3B1cF9fY29udGVudF9fZmllbGRzX19jb250ZW50XCI+XG4gICAgICAgICAgPHByeS1yYW5nZVxuICAgICAgICAgICAgW25nTW9kZWxdPVwiKGxheWVyPy5vcGFjaXR5ID8/IDEwMCkgKyAnJ1wiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VPcGFjaXR5KGxheWVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIGxhYmVsVHJhbnNsYXRlPVwiQHByeS53aWRnZXQubWFwLm9wYWNpdHlcIlxuICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgID48L3ByeS1yYW5nZT5cblxuICAgICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXJPcHRpb25zJyB8IGkxOG4gOiB7IGluZGV4OiBpICsgMSB9IH19PC9sZWdlbmQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfbGF5ZXJUaXRsZVwiPnt7ICdAcHJ5LndpZGdldC5tYXAubGF5ZXJUaXRsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWQ9XCJtYXBfbGF5ZXJUaXRsZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlVGl0bGUoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJsYXllci50aXRsZSA/PyAnJ1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiICpuZ0lmPVwibGF5ZXIudHlwZSAhPT0gJ2dlb3NlcnZlcidcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF9sYXllclR5cGVcIj57eyAnQHByeS53aWRnZXQubWFwLmxheWVyVHlwZS50aXRsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMYXllclR5cGUoJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgW2JpbmREYXRhXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJsYXllclR5cGVzXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxUcmFuc2xhdGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibGF5ZXIudHlwZVwiXG4gICAgICAgICAgICAgICAgYmFzZVRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0Lm1hcC5sYXllclR5cGUuXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJtYXBfbGF5ZXJUeXBlXCJcbiAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3JlbGF0aW9uJyAmJlxuICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd3bXMnICYmXG4gICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3dtdHMnICYmXG4gICAgICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ2dlb3NlcnZlcicgJiZcbiAgICAgICAgICAgICAgICBsYXllci50eXBlICE9PSAnZmVhdHVyZWxheWVyJyAmJlxuICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd2ZWN0b3J0aWxlJyAmJlxuICAgICAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdyYXN0ZXJ0aWxlJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfY2xhc3Nlc1wiPnt7ICdAcHJ5LndpZGdldC5tYXAuY2xhc3NlcycgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VDbGFzc2VzKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNBc09wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbaXRlbXNdPVwiY2xhc3NlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLmNsYXNzZXNcIlxuICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJtYXBfY2xhc3Nlc1wiXG4gICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZmllbGRzZXRcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3JlbGF0aW9uJyAmJlxuICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ3dtcycgJiZcbiAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICd3bXRzJyAmJlxuICAgICAgICAgICAgbGF5ZXIudHlwZSAhPT0gJ2dlb3NlcnZlcicgJiZcbiAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdmZWF0dXJlbGF5ZXInICYmXG4gICAgICAgICAgICBsYXllci50eXBlICE9PSAndmVjdG9ydGlsZScgJiZcbiAgICAgICAgICAgIGxheWVyLnR5cGUgIT09ICdyYXN0ZXJ0aWxlJ1xuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLmxvY2F0aW9uQXR0cicgfCBpMThuIH19PC9sZWdlbmQ+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgbGF5ZXJcbiAgICAgICAgICAgICAgICB8IGdlb21ldHJ5RmllbGRzRm9yIDogeyByZXN1bHRTZXQ6IHJlc3VsdFNldCQsIGNsYXNzZXM6IGxheWVyLmNsYXNzZXMsIHR5cGU6IGxheWVyLnR5cGUgfVxuICAgICAgICAgICAgICAgIHwgYXN5bmMgYXMgZmllbGRzXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBbJ2hlYXRtYXAnLCAnYnViYmxlJywgJ21hcmtlcicsICdwb2ludCcsICdsaW5lJywgJ3BvbHlnb24nLCAnbXVsdGktbGluZScsICdtdWx0aS1wb2x5Z29uJ10uaW5kZXhPZihcbiAgICAgICAgICAgICAgICAgIGxheWVyLnR5cGVcbiAgICAgICAgICAgICAgICApID49IDBcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfbG9jYXRpb25BdHRyaWJ1dGVfYm90aFwiPnt7XG4gICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLmxvY2F0aW9uQXR0cmlidXRlLmJvdGgnIHwgaTE4blxuICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTG9jYXRpb25BdHRyaWJ1dGVzKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllci5hdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBiaW5kVmFsdWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgIGlkPVwibWFwX2xvY2F0aW9uQXR0cmlidXRlX2JvdGhcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJbJ2hlYXRtYXAnLCAnYnViYmxlJ10uaW5kZXhPZihsYXllci50eXBlKSA+PSAwXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwibWFwX2ludGVuc2l0eUF0dHJpYnV0ZVwiPnt7XG4gICAgICAgICAgICAgICAgICAnQHByeS53aWRnZXQubWFwLmludGVuc2l0eUF0dHJpYnV0ZScgfCBpMThuXG4gICAgICAgICAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VJbnRlbnNpdHlBdHRyaWJ1dGVzKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJsYXllckhhc0ludGVuc2l0eShsYXllcikuaW50ZW5zaXR5QXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICBpZD1cIm1hcF9pbnRlbnNpdHlBdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgICAgPGZpZWxkc2V0XG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICd3bXMnIHx8XG4gICAgICAgICAgICBsYXllci50eXBlID09PSAnd210cycgfHxcbiAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICdmZWF0dXJlbGF5ZXInIHx8XG4gICAgICAgICAgICBsYXllci50eXBlID09PSAndmVjdG9ydGlsZScgfHxcbiAgICAgICAgICAgIGxheWVyLnR5cGUgPT09ICdyYXN0ZXJ0aWxlJ1xuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwidS12aXN1YWxseS1oaWRkZW5cIj57eyAnQHByeS53aWRnZXQubWFwLnRpbGUnIHwgaTE4biB9fTwvbGVnZW5kPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfd21zX3VybFwiPnt7ICdAcHJ5LndpZGdldC5tYXAud21zLnVybCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBpZD1cIm1hcF93bXNfdXJsXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VVcmwoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIudXJsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCIgKm5nSWY9XCJsYXllci50eXBlID09PSAnd21zJyB8fCBsYXllci50eXBlID09PSAnd210cydcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJtYXBfd21zX3BhcmFtTGF5ZXJcIj57eyAnQHByeS53aWRnZXQubWFwLndtcy5wYXJhbUxheWVyJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGlkPVwibWFwX3dtc19wYXJhbUxheWVyXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VQYXJhbUxheWVyKCRldmVudCwgbGF5ZXIpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImxheWVyLnBhcmFtTGF5ZXJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cImxheWVyLnR5cGUgPT09ICd3bXRzJ1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF93bXNfbWF0cml4U2V0XCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC53bXMubWF0cml4U2V0JyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGlkPVwibWFwX3dtc19tYXRyaXhTZXRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZU1hdHJpeFNldCgkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJsYXllci5tYXRyaXhTZXRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cImxheWVyLnR5cGUgPT09ICd3bXRzJ1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cIm1hcF93bXNfc3R5bGVcIj57eyAnQHByeS53aWRnZXQubWFwLndtcy5zdHlsZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBpZD1cIm1hcF93bXNfc3R5bGVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cImNoYW5nZVBhcmFtU3R5bGUoJGV2ZW50LCBsYXllcilcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIuc3R5bGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cImxheWVyLnR5cGUgPT09ICd3bXMnXCI+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZVBhcmFtVGlsZWQoJGV2ZW50LCBsYXllcilcIiBbbmdNb2RlbF09XCJsYXllcj8ucGFyYW1UaWxlZCA/PyBmYWxzZVwiPlxuICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLndtcy5wYXJhbVRpbGVkJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuXG4gICAgICAgIDxmaWVsZHNldCAqbmdJZj1cImxheWVyLnR5cGUgPT09ICdtYXJrZXInXCI+XG4gICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5jbHVzdGVyaW5nJyB8IGkxOG4gfX08L2xlZ2VuZD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNsdXN0ZXJlZChsYXllciwgJGV2ZW50KVwiIFtuZ01vZGVsXT1cImxheWVyLmNsdXN0ZXJlZFwiPlxuICAgICAgICAgICAgICB7eyAnQHByeS53aWRnZXQubWFwLmNsdXN0ZXJlZCcgfCBpMThuIH19XG4gICAgICAgICAgICA8L3ByeS1jaGVja2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGF5ZXIuY2x1c3RlcmVkXCI+XG4gICAgICAgICAgICA8cHJ5LXJhbmdlXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyLmNsdXN0ZXJlZFwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUNsdXN0ZXJEaXN0YW5jZShsYXllciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGxhYmVsVHJhbnNsYXRlPVwiQHByeS53aWRnZXQubWFwLmNsdXN0ZXJEaXN0YW5jZVwiXG4gICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICBtYXg9XCI1MDBcIlxuICAgICAgICAgICAgPjwvcHJ5LXJhbmdlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIiAqbmdJZj1cIm9wdGlvbnNDb3B5LmF0dHJpYnV0aW9uc1wiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBmb3I9XCJhdHRyaWJ1dGlvblwiPnt7ICdAcHJ5LndpZGdldC5tYXAuYXR0cmlidXRpb24nIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBpZD1cImF0dHJpYnV0aW9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJjaGFuZ2VBdHRyaWJ1dGlvbigkZXZlbnQsIGxheWVyKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwibGF5ZXIuYXR0cmlidXRpb24gPyBsYXllci5hdHRyaWJ1dGlvbiA6ICcnXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUxheWVyKGkpXCJcbiAgICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLXRleHQgLWxpbmstbGlrZVwiXG4gICAgICAgICAgKm5nSWY9XCJsYXllci50eXBlICE9PSAnZ2Vvc2VydmVyJ1wiXG4gICAgICAgICAgZGF0YS1mdW5jPVwiZGVsZXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZGVsZXRlXCIgW3dpZHRoXT1cIjE5XCIgW2hlaWdodF09XCIxOVwiPjwvcHJ5LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5kZWxldGVMYXllcicgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcHJ5LXNldHRpbmdzPlxuICA8L3ByeS13aWRnZXQtaGVhZGVyPlxuXG4gIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cCAtc2VsZWN0aW9uLWNob2ljZVwiIFtzdHlsZS50cmFuc2Zvcm1dPVwiYm90dG9tTGVmdCQgfCBhc3luY1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBiYXNpY0FjdGlvbnMkIHwgYXN5bmNcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAgIChjbGljayk9XCJpbnRlcmFjdGlvbk1hbmFnZXIuc2VsZWN0aW9uSW50ZXJhY3Rpb24uY2hhbmdlU2VsZWN0aW9uKGFjdGlvbilcIlxuICAgICAgICBbY2xhc3MuLXNlbGVjdGVkXT1cImludGVyYWN0aW9uTWFuYWdlci5zZWxlY3Rpb25JbnRlcmFjdGlvbi5zZWxlY3Rpb25UeXBlID09PSBhY3Rpb25cIlxuICAgICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcEFjdGlvblwiXG4gICAgICAgIHByeVRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbmZvVG9vbHRpcEFjdGlvblwiXG4gICAgICAgIFtwcnlUb29sdGlwQ29udGV4dF09XCJ7IGFjdGlvbjogYWN0aW9uIH1cIlxuICAgICAgPlxuICAgICAgICA8cHJ5LWljb24gW2ljb25TdmddPVwiYWN0aW9uXCI+PC9wcnktaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5tYXAuJyArIGFjdGlvbiB8IGkxOG4gfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJhLWJ0biBhLWJ0bi0taWNvbi1vbmx5XCJcbiAgICAgIGlkPVwiZXhwb3J0X2NhcmRcIlxuICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgIGFyaWEtY29udHJvbHM9XCJleHBvcnRfdHlwZVwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwibWVudVwiXG4gICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcERvd25cIlxuICAgICAgcHJ5VG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbmZvVG9vbHRpcERvd25fd2lkZ2V0TWFwXCJcbiAgICAgICpuZ0lmPVwiKGFjdGlvbnMkIHwgYXN5bmMpPy5pbmNsdWRlcygnZXhwb3J0JylcIlxuICAgID5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiZmlsZV9kb3dubG9hZFwiIChjbGljayk9XCJleHBvcnQoKVwiPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5leHBvcnQnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwib2wtY29udHJvbCBtLWxheWVyLXN3aXRjaGVyXCJcbiAgICAqbmdJZj1cIigobGF5ZXJzJCB8IGFzeW5jKT8ubGVuZ3RoID8/IDApID4gMFwiXG4gICAgW3N0eWxlLnRvcC5weF09XCJsYXllcnNUb3AkIHwgYXN5bmNcIlxuICA+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJtLWxheWVyLXN3aXRjaGVyX190b2dnbGVcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUxheWVyc1dpbmRvdygpXCJcbiAgICAgIFt0aXRsZV09XCInQHByeS53aWRnZXQubWFwLnNlbGVjdExheWVycycgfCBpMThuXCJcbiAgICA+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImxheWVyc1wiIFt3aWR0aF09XCIyMlwiIFtoZWlnaHRdPVwiMjJcIj48L3ByeS1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxheWVyIG9mIG1hcExheWVyczsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWxheWVyLXN3aXRjaGVyX190aXRsZVwiIFtjbGFzcy4taGlkZGVuXT1cIiFsYXllcnNUYWJPcGVuXCI+XG4gICAgICAgIHt7IGxheWVyLmdldCgndGl0bGUnKSB9fVxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShvcHRpb25zJCB8IGFzeW5jKT8uc2luZ2xlTGF5ZXI7IGVsc2Ugc2luZ2xlTGF5ZXJcIj5cbiAgICAgICAgICA8cHJ5LWNoZWNrYm94IFtuZ01vZGVsXT1cImxheWVyLmdldFZpc2libGUoKVwiIChjaGFuZ2UpPVwiY2hhbmdlVmlzaWJpbGl0eShsYXllcilcIj48L3ByeS1jaGVja2JveD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlTGF5ZXI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgbmFtZT1cImxheWVyXCJcbiAgICAgICAgICAgIFtpZF09XCIncmFkaW8tbGF5ZXItJyArIGxheWVyLmdldCgndGl0bGUnKS5zcGxpdCgnICcpWzBdXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImxheWVyVmlzaWJsZUlkeFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiaW5kZXhcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VWaXNpYmlsaXR5KGxheWVyKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJvbC1jb250cm9sIG0tbGF5ZXItbGVnZW5kXCJcbiAgICAqbmdJZj1cIigobGVnZW5kTGF5ZXJzJCB8IGFzeW5jKT8ubGVuZ3RoID8/IDApID4gMFwiXG4gICAgW3N0eWxlLnRvcC5weF09XCJsZWdlbmRUb3AkIHwgYXN5bmNcIlxuICA+XG4gICAgPGJ1dHRvbiBjbGFzcz1cIm0tbGF5ZXItbGVnZW5kX190b2dnbGVcIiAoY2xpY2spPVwidG9nZ2xlTGVnZW5kV2luZG93KClcIiBbdGl0bGVdPVwiJ0Bwcnkud2lkZ2V0Lm1hcC5sZWdlbmRzJyB8IGkxOG5cIj5cbiAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwibGVnZW5kXCIgW3dpZHRoXT1cIjIyXCIgW2hlaWdodF09XCIyMlwiPjwvcHJ5LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ2VvTGF5ZXIgb2YgbGVnZW5kTGF5ZXJzJCB8IGFzeW5jOyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm0tbGF5ZXItbGVnZW5kX190aXRsZVwiIFtjbGFzcy4taGlkZGVuXT1cIiFsZWdlbmRUYWJPcGVuXCI+XG4gICAgICAgIHt7IGdlb0xheWVyLnRpdGxlIH19XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xheWVyUmVuZGVyZWQoZ2VvTGF5ZXIpXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm0tbGF5ZXItbGVnZW5kX190b2dnbGVcIiAoY2xpY2spPVwidG9nZ2xlTGVnZW5kKGluZGV4KVwiPlxuICAgICAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgICAgIFtpY29uU3ZnXT1cImxlZ2VuZFRhYiA9PT0gaW5kZXggPyAnY2hldnJvbl90b3AnIDogJ2NoZXZyb25fYm90dG9tJ1wiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCIyMlwiXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiMjJcIlxuICAgICAgICAgICAgPjwvcHJ5LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTGF5ZXJSZW5kZXJlZChnZW9MYXllcilcIj5cbiAgICAgICAgICA8cHJ5LWljb24gW2ljb25TdmddPVwiJ2Nsb3NlJ1wiIFt3aWR0aF09XCIyMlwiIFtoZWlnaHRdPVwiMjJcIj48L3ByeS1pY29uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm0tbGF5ZXItbGVnZW5kX19pbWFnZVwiXG4gICAgICAgIFtjbGFzcy4taGlkZGVuXT1cIiFsZWdlbmRUYWJPcGVuIHx8IGxlZ2VuZFRhYiAhPT0gaW5kZXggfHwgIWlzTGF5ZXJSZW5kZXJlZChnZW9MYXllcilcIlxuICAgICAgICBbc3R5bGUubWF4LWhlaWdodC5weF09XCJsZWdlbmRIZWlnaHQkIHwgYXN5bmNcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2VvTGF5ZXIgfCBsZWdlbmRVcmwgOiB7IGNhcGFiaWxpdGllczogKHdtc0NhcGFiaWxpdGllcyQgfCBhc3luYykgfSBhcyB1cmxcIj5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICBbc3JjXT1cInVybFwiXG4gICAgICAgICAgICBbYWx0XT1cIidAcHJ5LndpZGdldC5tYXAubGVnZW5kJyB8IGkxOG4gOiB7IGxheWVyOiBnZW9MYXllci50aXRsZSB9XCJcbiAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZU5vdFByb3ZpZGVkW2luZGV4XSA9IHRydWVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShnZW9MYXllciB8IGxlZ2VuZFVybCA6IHsgY2FwYWJpbGl0aWVzOiAod21zQ2FwYWJpbGl0aWVzJCB8IGFzeW5jKSB9KVwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwibS1sYXllci1sZWdlbmRfX2Vycm9yXCI+e3sgJ0Bwcnkud2lkZ2V0Lm1hcC5sZWdlbmROb3RQcm92aWRlZCcgfCBpMThuIH19PC9wPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8ZGl2IFtzdHlsZS5oZWlnaHQucHhdPVwiaGVpZ2h0JCB8IGFzeW5jXCIgY2xhc3M9XCJvLW1hcC13cmFwcGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8tbWFwXCI+XG4gICAgICA8ZGl2ICNtYXBSZWYgaWQ9XCJtYXBcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlICNpbmZvVG9vbHRpcEFjdGlvbiBsZXQtYWN0aW9uPVwiYWN0aW9uXCI+XG4gICAgPGRpdiBjbGFzcz1cIm0tdG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCIgaWQ9XCJpbmZvVG9vbHRpcEFjdGlvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtLXRvb2x0aXBfX3RleHRcIj57eyAnQHByeS53aWRnZXQubWFwLicgKyBhY3Rpb24gfCBpMThuIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjaW5mb1Rvb2x0aXBEb3duPlxuICAgIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiIGlkPVwiaW5mb1Rvb2x0aXBEb3duX3dpZGdldE1hcFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtLXRvb2x0aXBfX3RleHRcIj57eyAnQHByeS53aWRnZXQubWFwLmV4cG9ydCcgfCBpMThuIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxkaXYgI3BvcHVwIGNsYXNzPVwibS10b29sdGlwIG0tdG9vbHRpcC0tcG9wdXBcIiBbaGlkZGVuXT1cInRydWVcIiByb2xlPVwidG9vbHRpcFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXAtLXBvcHVwX19oZWFkZXJcIj5cbiAgICAgIDxwPnt7IHRoaXMudG9vbHRpcEluZGV4ICsgMSB9fSAvIHt7IHRoaXMudG9vbHRpcE51bWJlciB9fTwvcD5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeSBhLWJ0bi0taWNvbi1vbmx5XCIgKGNsaWNrKT1cInRvb2x0aXBNb3ZlKC0xKVwiIFtkaXNhYmxlZF09XCIhdG9vbHRpcENhbk1vdmUoLTEpXCI+XG4gICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYXJyb3dfYmFja1wiPjwvcHJ5LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeSBhLWJ0bi0taWNvbi1vbmx5XCIgKGNsaWNrKT1cInRvb2x0aXBNb3ZlKDEpXCIgW2Rpc2FibGVkXT1cIiF0b29sdGlwQ2FuTW92ZSgxKVwiPlxuICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImFycm93X3JpZ2h0XCI+PC9wcnktaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXAtLXBvcHVwX19jb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgI3BvcHVwQ29udGVudD48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICAjYWRkcmVzc1xuICAgIGNsYXNzPVwibS10b29sdGlwIG0tdG9vbHRpcC0tYWRkcmVzcyB0b29sdGlwLWFkZHJlc3NcIlxuICAgIFtzdHlsZS5kaXNwbGF5XT1cIidub25lJ1wiXG4gICAgKGNsaWNrKT1cImhpZGVBZGRyZXNzKClcIlxuICA+PC9kaXY+XG48L2Rpdj5cbiJdfQ==