gamma-app-controller 1.1.16 → 1.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/application-controller/application-dataset-call.service.mjs +21 -3
- package/esm2020/lib/application-controller/application-dataset-component/application-dataset/application-dataset.component.mjs +25 -3
- package/esm2020/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.mjs +25 -3
- package/esm2020/lib/application-controller/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.mjs +10 -4
- package/fesm2015/gamma-app-controller.mjs +77 -9
- package/fesm2015/gamma-app-controller.mjs.map +1 -1
- package/fesm2020/gamma-app-controller.mjs +77 -9
- package/fesm2020/gamma-app-controller.mjs.map +1 -1
- package/lib/application-controller/application-dataset-call.service.d.ts +1 -0
- package/lib/application-controller/application-dataset-component/application-dataset/application-dataset.component.d.ts +1 -0
- package/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -163,6 +163,7 @@ export class CreateCompViewComponent {
|
|
|
163
163
|
});
|
|
164
164
|
}
|
|
165
165
|
getDatasetForImpala(dataset) {
|
|
166
|
+
debugger;
|
|
166
167
|
let request = dataset.config.queryConfig;
|
|
167
168
|
this.dataSourceModal = {};
|
|
168
169
|
let transformedObject = {};
|
|
@@ -176,11 +177,19 @@ export class CreateCompViewComponent {
|
|
|
176
177
|
transformedObject[key] = value;
|
|
177
178
|
}
|
|
178
179
|
}
|
|
179
|
-
transformedObject['measures'] = request.measures;
|
|
180
|
-
transformedObject['dimensions'] = request.dimensions;
|
|
181
180
|
transformedObject['filters'] = this.transformDataForMFilter([], request.mapedFilters);
|
|
182
181
|
transformedObject['sorters'] = request.sorters;
|
|
183
182
|
transformedObject["paginationRequired"] = false;
|
|
183
|
+
if (dataset.config.api == "/kpi/genericAggregatePaginatedKpiServiceResponse") {
|
|
184
|
+
transformedObject['measures'] = request.measures;
|
|
185
|
+
transformedObject['dimensions'] = request.dimensions;
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
transformedObject['columns'] = this.getFormatObjectForColumn(request.columns);
|
|
189
|
+
}
|
|
190
|
+
if (request.havings && request.havings.length !== 0) {
|
|
191
|
+
transformedObject['havings'] = request.havings;
|
|
192
|
+
}
|
|
184
193
|
console.log(transformedObject);
|
|
185
194
|
const columnData = this.transformColumnsForColumns(request.columns);
|
|
186
195
|
this.service.getData(transformedObject, dataset.config.api).subscribe({
|
|
@@ -197,6 +206,19 @@ export class CreateCompViewComponent {
|
|
|
197
206
|
}
|
|
198
207
|
});
|
|
199
208
|
}
|
|
209
|
+
getFormatObjectForColumn(columns) {
|
|
210
|
+
let columnData = [];
|
|
211
|
+
columns.forEach(element => {
|
|
212
|
+
const { advancedColumn, columnName, enrichFunction, dataField } = element;
|
|
213
|
+
columnData.push({
|
|
214
|
+
"advancedColumn": advancedColumn,
|
|
215
|
+
"columnName": columnName,
|
|
216
|
+
"enrichFunction": enrichFunction,
|
|
217
|
+
"aliasName": dataField
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
return columnData;
|
|
221
|
+
}
|
|
200
222
|
transformColumnsForColumns(inputColumns) {
|
|
201
223
|
const columns = [];
|
|
202
224
|
inputColumns.forEach(col => {
|
|
@@ -587,4 +609,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
587
609
|
type: Input,
|
|
588
610
|
args: ['selectedViewId']
|
|
589
611
|
}] } });
|
|
590
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tdmlldy1jb21wb25lbnRzL2NyZWF0ZS1jb21wLXZpZXcvY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tdmlldy1jb21wb25lbnRzL2NyZWF0ZS1jb21wLXZpZXcvY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLEVBQUUsS0FBSyxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUV2RixPQUFPLE1BQU0sTUFBTSx1QkFBdUIsQ0FBQztBQUszQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNwRCxNQUFNLE9BQU8sdUJBQXVCO0lBZ0RsQyxZQUNVLE1BQXFCLEVBQ3RCLGFBQTRCLEVBQzNCLE9BQWtDLEVBQ2xDLFVBQTRCLEVBQzVCLE1BQWMsRUFDZCxjQUE4QixFQUNMLFdBQWdCO1FBTnpDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFDbEMsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNMLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBOUNuRCxvQkFBZSxHQUFRLEVBQUUs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LFdBQVc7c0JBQW5CLEtBQUs7Z0JBNkJHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUYsY0FBYztzQkFEakIsS0FBSzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnLi8uLi8uLi9tb21lbnQtaGVscGVyJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IGtwaWNvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9rcGktc2VydmljZSc7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY3JlYXRlLWNvbXAtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtY29tcC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENyZWF0ZUNvbXBWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkga3BpVHJlZURhdGE6IGFueVxuICBpc0xvYWRlcjogYm9vbGVhbjtcbiAgaXNHZW5lcmF0ZTogYm9vbGVhbjtcbiAgaXNDcmVhdGVOZXdWaWV3OiBib29sZWFuO1xuICBpc0twaVNlbGVjdGVkOiBib29sZWFuO1xuICBpc0twaUNvbmZpZ1NlbGVjdGVkOiBib29sZWFuO1xuICBhcGlDb25maWdEYXRhOiBhbnk7XG4gIHNpbmdsZURhdGFTZXRDb25maWc6IGFueTtcbiAgc2VsZWN0ZWREYXRhU2V0OiBhbnkgPSB7fTtcbiAgZGF0YVNvdXJjZU1vZGFsOiBhbnk7XG5cbiAgZGF0YVNldHRhYmxlRGF0YVNvdXJjZTogYW55O1xuICBpc0R1cGxpZGF0ZVZpZXc6IGJvb2xlYW47XG4gIGlzRmlsdGVySW5wdXRzOiBib29sZWFuO1xuICBzZWxlY3RlZERhdGFTZXRPbmVkaXQ6IGFueSA9IHt9O1xuICBzZWxlY3RlZFZpZXdUeXBlOiBhbnk7XG4gIGNyZWF0Q29tcFZpZXdPYmplY3Q6IGFueSA9IHt9O1xuICBjb21wb25lbnROYW1lc090aGVycyA9IFtcbiAgICB7IFwiY29tcE5hbWVcIjogXCJHYW1tYVRvZGF5UHJldmlvdXNDb21wb25lbnRcIiwgXCJpdGVtXCI6IFwiVG9kYXkgdnMgUHJldmlvdXMgRGF5IFwiIH0sXG4gICAgeyBcImNvbXBOYW1lXCI6IFwiR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50XCIsIFwiaXRlbVwiOiBcIlRhYmxlIFZpZXcgd2l0aCBwZXJjZW50YWdlXCIgfSxcbiAgICB7IFwiY29tcE5hbWVcIjogXCJHYW1tU2luZ2xlTnVtYmVyQ2FyZENvbXBvbmVudFwiLCBcIml0ZW1cIjogXCJTaW5nbGUgTnVtYmVyIENhcmRcIiB9LFxuICAgIHsgXCJjb21wTmFtZVwiOiBcIkdhbW1hR2VvQ2hhcnRDb21wb25lbnRcIiwgXCJpdGVtXCI6IFwiR2VvIENoYXJ0XCIgfVxuICBdXG4gIGNvbXBvbmVudE5hbWU6IGFueTtcblxuICBkZWZhdWx0U3RhcnREYXRlO1xuICBkZWZhdWx0RW5kRGF0ZTtcbiAgaW5wdXRWaWV3SWQ6IGFueTtcblxuICBASW5wdXQoKSBpc0hlYWRlcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgnc2VsZWN0ZWRWaWV3SWQnKVxuICBzZXQgc2VsZWN0ZWRWaWV3SWQodmFsdWUpIHtcbiAgICBpZiAodGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlICYmIHRoaXMuZGF0YVNldHRhYmxlRGF0YVNvdXJjZS5sZW5ndGggIT09IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3VHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmdldFZpZXdCeUlkKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgdGhpcy5nZXREYXRhU2V0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5wdXRWaWV3SWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuZ2V0RGF0YVNldCgpO1xuICAgIH1cblxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBBcHBsaWNhdGlvbkNvbnRlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUga3BpU2VydmljZToga3BpY29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIEBJbmplY3QoQVBQX0VOVklST05NRU5UKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnlcblxuICApIHtcblxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kZWZhdWx0U3RhcnREYXRlID0gbW9tZW50KCkuc3VidHJhY3QoJzMwJywgJ2RheXMnKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gbW9tZW50KCkuc3VidHJhY3QoJzEnLCAnZGF5cycpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdCA9IHtcbiAgICAgIFwidmlld05hbWVcIjogXCJcIixcbiAgICAgIFwidmlld0xhYmVsXCI6IFwiXCIsXG4gICAgICBcInZpZXdUeXBlXCI6IHRoaXMuc2VsZWN0ZWRWaWV3VHlwZVxuICAgIH1cblxuXG4gICAgdGhpcy5nZXREYXRhU2V0KCk7XG5cbiAgfVxuICBnZXRWaWV3VHlwZShlKSB7XG4gICAgdGhpcy5pc0twaUNvbmZpZ1NlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0twaVNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0dlbmVyYXRlID0gZmFsc2U7XG4gICAgdGhpcy5pc0NyZWF0ZU5ld1ZpZXcgPSBmYWxzZTtcbiAgfVxuXG5cbiAgZ2V0RGF0YVNldCgpIHtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwRGF0YXNldENvbmZpZ3MoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgIHRoaXMuZGF0YVNldHRhYmxlRGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgICAgIGxldCB2aWV3SWQgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWyd2aWV3SWQnXTtcbiAgICAgICAgbGV0IGNvbnRlbnRUeXBlID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snY29udGVudFR5cGUnXTtcbiAgICAgICAgaWYgKGNvbnRlbnRUeXBlID09IFwiY2xvbmVcIikge1xuICAgICAgICAgIHRoaXMuaXNEdXBsaWRhdGVWaWV3ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2aWV3SWQpIHtcbiAgICAgICAgICB0aGlzLmdldFZpZXdCeUlkKHZpZXdJZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRWaWV3SWQpIHtcbiAgICAgICAgICB0aGlzLmdldFZpZXdCeUlkKHRoaXMuaW5wdXRWaWV3SWQpO1xuICAgICAgICB9XG5cbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdWaWV3IENyZWF0aW9uJylcblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBnZXRWaWV3QnlJZCh2aWV3SWQpIHtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwVmlld0NvbmZpZyh2aWV3SWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdCA9IGRhdGE7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3VHlwZSA9IGRhdGEudmlld1R5cGU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhU2V0ID0gdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlLmZpbmQoZGF0YXNldCA9PiBkYXRhc2V0LmRhdGFzZXRJZCA9PT0gZGF0YS5kYXRhc2V0SWQpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YVNldE9uZWRpdCA9IHRoaXMuZGF0YVNldHRhYmxlRGF0YVNvdXJjZS5maW5kKGRhdGFzZXQgPT4gZGF0YXNldC5kYXRhc2V0SWQgPT09IGRhdGEuZGF0YXNldElkKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWaWV3VHlwZSA9PSBcIm90aGVyc1wiKSB7XG4gICAgICAgICAgdGhpcy5jb21wb25lbnROYW1lID0gZGF0YS5rcGlDb25maWcuY29tcG9uZW50TmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhU2V0WydzZWxlY3RlZFdpZGdldENvbmZpZyddID0gZGF0YVsna3BpQ29uZmlnJ107XG5cbiAgICAgICAgLy8gaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlICE9PSAnc3FsUXVlcnknKSB7XG4gICAgICAgIC8vICAgdGhpcy5jcmVhdGVOZXdWaWV3KCk7XG4gICAgICAgIC8vIH1cblxuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1ZpZXcgQ3JlYXRpb24nKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBnZXREYXRhU2V0TmFtZShkYXRhc2V0SWQpIHtcbiAgICBjb25zdCBmb3VuZE9iamVjdCA9IHRoaXMuZGF0YVNldHRhYmxlRGF0YVNvdXJjZS5maW5kKGRhdGFzZXQgPT4gZGF0YXNldC5kYXRhc2V0SWQgPT09IGRhdGFzZXRJZCk7XG4gICAgaWYgKGZvdW5kT2JqZWN0KSB7XG4gICAgICByZXR1cm4gZm91bmRPYmplY3QuZGF0YXNldE5hbWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YVNldERldGFpbHMoZXZlbnQpIHtcbiAgICB0aGlzLnNlbGVjdGVkRGF0YVNldCA9IHRoaXMuZGF0YVNldHRhYmxlRGF0YVNvdXJjZS5maW5kKGRhdGFzZXQgPT4gZGF0YXNldC5kYXRhc2V0SWQgPT09IGV2ZW50LnZhbHVlKTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJxdWVyeWJ1aWxkZXJcIikge1xuICAgICAgdGhpcy5pc0ZpbHRlcklucHV0cyA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInNpbXBsZUFwaVwiKSB7XG4gICAgICB0aGlzLmlzRmlsdGVySW5wdXRzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwicGxhaW5qc29uXCIpIHtcbiAgICAgIHRoaXMuaXNGaWx0ZXJJbnB1dHMgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwic3FsUXVlcnlcIikge1xuICAgICAgdGhpcy5pc0ZpbHRlcklucHV0cyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNGaWx0ZXJJbnB1dHMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuXG4gIGdldEtwaVNpbmdsZUNvbmZpZyhldmVudCkge1xuICAgIHRoaXMuc2luZ2xlRGF0YVNldENvbmZpZyA9IGV2ZW50LnZhbHVlO1xuICAgIHRoaXMuaXNLcGlDb25maWdTZWxlY3RlZCA9IHRydWU7XG4gIH1cblxuICBnZW5lcmF0ZURhdGFTZXQoKSB7XG5cbiAgfVxuXG4gIGdldERhdGFTZXRGb3JNb25nbyhkYXRhc2V0KSB7XG4gICAgdGhpcy5kYXRhU291cmNlTW9kYWwgPSB7fTtcbiAgICBsZXQgYXBpSnNvbk9iamVjdCA9IHtcbiAgICAgIHJlcXVlc3RJZDogZGF0YXNldC5jb25maWcuc2VydmljZUlkLFxuICAgIH07XG4gICAgaWYgKGRhdGFzZXQuY29uZmlnLmZpeE9wZXJhdGlvbkxldmxlcyAmJiBkYXRhc2V0LmNvbmZpZy5maXhPcGVyYXRpb25MZXZsZXMubGVuZ3RoICE9IDApIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhc2V0LmNvbmZpZy5maXhPcGVyYXRpb25MZXZsZXMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhcGlKc29uT2JqZWN0LCBpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbW9uX2NvbmZpZyA9IHRoaXMua3BpU2VydmljZS5nZXRBbGxTZXZpY2VBcGlKc29uKGFwaUpzb25PYmplY3QpO1xuICAgIHRoaXMuc2VydmljZS5nZXREYXRhKG1vbl9jb25maWcsIGRhdGFzZXQuY29uZmlnLmFwaSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydkYXRhJ10gPSBwYXlsb2FkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsncmVxdWVzdElkJ10gPSBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydhcGknXSA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkVmlld1R5cGUnXSA9IHRoaXMuc2VsZWN0ZWRWaWV3VHlwZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0dlbmVyYXRlID0gdHJ1ZTtcblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBnZXREYXRhc2V0Rm9ySW1wYWxhKGRhdGFzZXQpIHtcbiAgICBsZXQgcmVxdWVzdCA9IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnO1xuICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsID0ge307XG4gICAgbGV0IHRyYW5zZm9ybWVkT2JqZWN0OiBhbnkgPSB7fTtcbiAgICBmb3IgKGxldCBpdGVtIG9mIHJlcXVlc3QucmVxRmllbGRzKSB7XG4gICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhpdGVtKVswXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gT2JqZWN0LnZhbHVlcyhpdGVtKVswXTtcbiAgICAgIGlmIChrZXkgPT09ICdzdGFydERhdGUnKSB7XG4gICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0LnJlY29yZERhdGUgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIHRyYW5zZm9ybWVkT2JqZWN0WydtZWFzdXJlcyddID0gcmVxdWVzdC5tZWFzdXJlcztcbiAgICB0cmFuc2Zvcm1lZE9iamVjdFsnZGltZW5zaW9ucyddID0gcmVxdWVzdC5kaW1lbnNpb25zO1xuXG4gICAgLy8gdHJhbnNmb3JtZWRPYmplY3RbJ2ZpbHRlcnMnXSA9IHJlcXVlc3QubWFwZWRGaWx0ZXJzO1xuICAgIHRyYW5zZm9ybWVkT2JqZWN0WydmaWx0ZXJzJ10gPSB0aGlzLnRyYW5zZm9ybURhdGFGb3JNRmlsdGVyKFtdLCByZXF1ZXN0Lm1hcGVkRmlsdGVycyk7XG5cbiAgICB0cmFuc2Zvcm1lZE9iamVjdFsnc29ydGVycyddID0gcmVxdWVzdC5zb3J0ZXJzO1xuICAgIHRyYW5zZm9ybWVkT2JqZWN0W1wicGFnaW5hdGlvblJlcXVpcmVkXCJdID0gZmFsc2U7XG4gICAgY29uc29sZS5sb2codHJhbnNmb3JtZWRPYmplY3QpO1xuICAgIGNvbnN0IGNvbHVtbkRhdGEgPSB0aGlzLnRyYW5zZm9ybUNvbHVtbnNGb3JDb2x1bW5zKHJlcXVlc3QuY29sdW1ucyk7XG4gICAgdGhpcy5zZXJ2aWNlLmdldERhdGEodHJhbnNmb3JtZWRPYmplY3QsIGRhdGFzZXQuY29uZmlnLmFwaSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbJ2RhdGFzZXQnXTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2RhdGEnXSA9IHBheWxvYWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydyZXF1ZXN0SWQnXSA9IGRhdGFzZXQuY29uZmlnLnNlcnZpY2VJZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2FwaSddID0gZGF0YXNldC5jb25maWcuYXBpO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnY29sdW1uRGF0YSddID0gY29sdW1uRGF0YTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkVmlld1R5cGUnXSA9IHRoaXMuc2VsZWN0ZWRWaWV3VHlwZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzR2VuZXJhdGUgPSB0cnVlO1xuXG4gICAgICB9XG4gICAgfSlcblxuICB9XG5cblxuICB0cmFuc2Zvcm1Db2x1bW5zRm9yQ29sdW1ucyhpbnB1dENvbHVtbnMpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gW107XG5cbiAgICBpbnB1dENvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgY29sdW1ucy5wdXNoKHtcbiAgICAgICAgZGF0YUZpZWxkOiBjb2wuZGF0YUZpZWxkLFxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBjYXB0aW9uOiBjb2wuY2FwdGlvbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuXG4gIHRyYW5zZm9ybURhdGFGb3JNRmlsdGVyKGZpbHRlcmRhdGEsIG1hcERhdGEpIHtcblxuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBtYXBEYXRhLmZvckVhY2gobWFwcGluZyA9PiB7XG4gICAgICBsZXQgcmVzdWx0T2JqID0ge1xuICAgICAgICBjb2x1bW5OYW1lOiBtYXBwaW5nLnNlcnZlckNvbHVtbixcbiAgICAgICAgZGF0YVR5cGU6IG1hcHBpbmcuZGF0YVR5cGUsXG4gICAgICAgIG9wZXJhdG9yOiBtYXBwaW5nLm9wZXJhdG9yTmFtZSxcbiAgICAgICAgdmFsdWU6IG1hcHBpbmcuZGVmYXVsdFZhbHVlXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJkYXRhLmZpbmQoZiA9PiBmLmhhc093blByb3BlcnR5KG1hcHBpbmcubG9jYWxDb2x1bW4pKTtcbiAgICAgIGlmIChtYXBwaW5nLnNlcnZlckNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiByZXN1bHRPYmoudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChtYXBwaW5nLmZvcm1hdHRlciAmJiBtYXBwaW5nLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQobWFwcGluZy5mb3JtYXR0ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgaWYgKG1hcHBpbmcuZGVmYXVsdFZhbHVlID09PSBcIlwiKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJbbWFwcGluZy5sb2NhbENvbHVtbl07XG5cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiaW5cIjtcbiAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1hcHBpbmcuc2VydmVyQ29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIHJlc3VsdE9iai52YWx1ZSA9PT0gJ3N0cmluZycpIHtcblxuICAgICAgICAgICAgaWYgKG1hcHBpbmcuZm9ybWF0dGVyICYmIG1hcHBpbmcuZm9ybWF0dGVyICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQobWFwcGluZy5mb3JtYXR0ZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuXG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChtYXBwaW5nLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChyZXN1bHRPYmopO1xuICAgIH0pO1xuICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIob2JqID0+IG9iai52YWx1ZSAhPT0gbnVsbCAmJiBvYmoudmFsdWUgIT09IFwiXCIpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXREYXRhc2V0Rm9yU2ltcGxlQXBpSW1wYWxhKGRhdGFzZXQ6IGFueSkge1xuICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsID0ge307XG4gIFxuICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICBpZiAoZmlsdGVyLmhhc093blByb3BlcnR5KGZpbHRlci5sb2NhbENvbHVtbikpIHtcbiAgICAgICAgZmlsdGVyLmRlZmF1bHRWYWx1ZSA9IGZpbHRlcltmaWx0ZXIubG9jYWxDb2x1bW5dO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGRhdGFzZXQuY29uZmlnLmFwaVR5cGUgPT09IFwicG9zdFwiKSB7XG4gICAgICBsZXQgc2VydmljZUpzb246IGFueSA9IHt9O1xuICAgICAgZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLmZvckVhY2goKGZpbHRlcjogYW55KSA9PiB7XG4gICAgICAgIGxldCBkYXRlY29sdW1uID0gZmlsdGVyLnNlcnZlckNvbHVtbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoZGF0ZWNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiBmaWx0ZXIuZGF0YVR5cGUgPT09ICdzdHJpbmcnKSB7XG5cbiAgICAgICAgICAgaWYgKGZpbHRlci5mb3JtYXR0ZXIgJiYgZmlsdGVyLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgIHNlcnZpY2VKc29uW2ZpbHRlci5zZXJ2ZXJDb2x1bW5dICA9IG1vbWVudChmaWx0ZXIuZGVmYXVsdFZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KGZpbHRlci5mb3JtYXR0ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlcnZpY2VKc29uW2ZpbHRlci5zZXJ2ZXJDb2x1bW5dICA9IG1vbWVudChmaWx0ZXIuZGVmYXVsdFZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VydmljZUpzb25bZmlsdGVyLnNlcnZlckNvbHVtbl0gPSBmaWx0ZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXJ2aWNlLmdldFNpbXBsZUFwaVBvc3RSZXF1ZXN0KGRhdGFzZXQuY29uZmlnLmFwaSwgc2VydmljZUpzb24pLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gcGF5bG9hZDtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsncmVxdWVzdElkJ10gPSBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQ7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2FwaSddID0gZGF0YXNldC5jb25maWcuYXBpO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFZpZXdUeXBlJ10gPSB0aGlzLnNlbGVjdGVkVmlld1R5cGU7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGRhdGFzZXQuY29uZmlnLmFwaVR5cGUgPT09IFwiZ2V0XCIpIHtcbiAgICAgIC8vIENvbnN0cnVjdCBHRVQgVVJMIHdpdGggcGFyYW1ldGVyc1xuICAgICAgbGV0IHJlcXVlc3RVcmwgPSBkYXRhc2V0LmNvbmZpZy5hcGkgKyBcIj9cIjtcbiAgICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXF1ZXN0VXJsICs9IGAke2ZpbHRlci5zZXJ2ZXJDb2x1bW59PSR7ZmlsdGVyLmRlZmF1bHRWYWx1ZX1gO1xuICAgICAgICBpZiAoaW5kZXggPCBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHJlcXVlc3RVcmwgKz0gXCImXCI7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBNYWtlIEdFVCByZXF1ZXN0XG4gICAgICB0aGlzLnNlcnZpY2UuZ2V0U2ltcGxlQXBpR2V0UmVxdWVzdChyZXF1ZXN0VXJsKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2RhdGEnXSA9IHBheWxvYWQ7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3JlcXVlc3RJZCddID0gZGF0YXNldC5jb25maWcuc2VydmljZUlkO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydhcGknXSA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZ2V0RWRpdERhdGFTZXQoKSB7XG4gICAgbGV0IGNvbnRlbnRWaWV3SWQgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydwYWdlSWQnXTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldElkKSB7XG4gICAgICBpZiAoY29udGVudFZpZXdJZCkge1xuICAgICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgJ2RhdGFzZXRJZCc6IHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRJZCxcbiAgICAgICAgICAgICd2aWV3SWQnOiB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3Qudmlld0lkLFxuICAgICAgICAgICAgJ3BhZ2VJZCc6IGNvbnRlbnRWaWV3SWRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYXBwcy9jb250cm9sUGFuZWwvYXBwbGljYXRpb25EYXRhc2V0J10sIG5hdmlnYXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICdkYXRhc2V0SWQnOiB0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0SWQsXG4gICAgICAgICAgICAndmlld0lkJzogdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0LnZpZXdJZCxcblxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvbkRhdGFzZXQnXSwgbmF2aWdhdGlvbik7XG4gICAgICB9XG5cblxuICAgIH1cbiAgfVxuICBjcmVhdGVOZXdWaWV3KCkge1xuICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuaXNHZW5lcmF0ZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykge1xuICAgICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwibW9uZ29cIikge1xuICAgICAgdGhpcy5nZXREYXRhU2V0Rm9yTW9uZ28odGhpcy5zZWxlY3RlZERhdGFTZXQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJxdWVyeWJ1aWxkZXJcIikge1xuICAgICAgdGhpcy5nZXREYXRhc2V0Rm9ySW1wYWxhKHRoaXMuc2VsZWN0ZWREYXRhU2V0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwic2ltcGxlQXBpXCIpIHtcbiAgICAgIHRoaXMuZ2V0RGF0YXNldEZvclNpbXBsZUFwaUltcGFsYSh0aGlzLnNlbGVjdGVkRGF0YVNldCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInBsYWluanNvblwiKSB7XG5cbiAgICAgIHRoaXMuZ2V0RGF0YXNldEZvclBsYWluSnNvbih0aGlzLnNlbGVjdGVkRGF0YVNldCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInNxbFF1ZXJ5XCIpIHtcbiAgICAgIHRoaXMuZ2V0RGF0YXNldEZvclNxbFRlbXBsYXRlKHRoaXMuc2VsZWN0ZWREYXRhU2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy5nZXREYXRhc2V0Rm9ySW1wYWxhKHRoaXMuc2VsZWN0ZWREYXRhU2V0KVxuICAgIH1cbiAgfVxuXG5cbiAgY3JlYXRlT3RoZXJDb21wb25lbnRWaWV3KCkge1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsnZGF0YXNldElkJ10gPSB0aGlzLnNlbGVjdGVkRGF0YVNldFsnZGF0YXNldElkJ107XG4gICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0WydrcGlDb25maWcnXSA9IHtcbiAgICAgIFwic2VydmljZUlkXCI6IFwiXCIsXG4gICAgICBcImFwaVwiOiBcIlwiLFxuICAgICAgXCJkaXNwbGF5VHlwZVwiOiBcImNoYXJ0XCIsXG4gICAgICBcImZvcm1hdGVcIjogXCJcIixcbiAgICAgIFwiY29tcG9uZW50TmFtZVwiOiB0aGlzLmNvbXBvbmVudE5hbWUsXG4gICAgICBcImRhdGFDb25maWdcIjoge1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgaWYgKHRoaXMuaXNEdXBsaWRhdGVWaWV3KSB7XG4gICAgICB0aGlzLmNyZWF0ZUFwcENvbmZpZ1ZpZXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsndmlld0lkJ10pIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZUFwcFZpZXdDb25maWcodGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0KS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdCA9IHtcbiAgICAgICAgICAgICAgXCJ2aWV3TmFtZVwiOiBcIlwiLFxuICAgICAgICAgICAgICBcInZpZXdMYWJlbFwiOiBcIlwiLFxuICAgICAgICAgICAgICBcInZpZXdUeXBlXCI6IFwiXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNDcmVhdGVOZXdWaWV3ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdWaWV3IFVwZGF0ZSBTdWNjZXNzZnVsbHknKVxuICAgICAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnVmlldyBDcmVhdGlvbicpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVBcHBDb25maWdWaWV3KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuXG5cblxuXG4gIGdldENhcGl0YWxpemUoaXRlbTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2VydmljZS5jb252ZXJ0VG9TcGFjZVNlcGFyYXRlZENhcGl0YWxpemVkKGl0ZW0pXG4gIH1cbiAgZ2V0RmlsdGVyKGl0ZW0pIHtcbiAgICBsZXQgY29sX25hbWUgPSBpdGVtLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGNvbF9uYW1lLmluY2x1ZGVzKCdkYXRlJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhcnREYXRlQ2hhbmdlKGUsIGl0ZW0pIHtcbiAgICB0aGlzLmlzQ3JlYXRlTmV3VmlldyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInNpbXBsZUFwaVwiKSB7XG4gICAgICBpdGVtLmRlZmF1bHRWYWx1ZSA9IG1vbWVudChlLnZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0uZGVmYXVsdFZhbHVlID0gbW9tZW50KGUudmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIilcbiAgICB9XG5cbiAgfVxuXG4gIGdvdG9WaWV3c3NldCgpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvblZpZXdzLyddKVxuICB9XG5cblxuICBnZXRFbWl0TmV3VGFibGVDb25maWcoZGF0YSkge1xuICAgIGRlYnVnZ2VyXG4gICAgZGF0YVsnZGF0YXNldElkJ10gPSB0aGlzLnNlbGVjdGVkRGF0YVNldFsnZGF0YXNldElkJ107XG4gICAgdGhpcy5jcmVhdGVWaWV3Q29uZmlnKGRhdGEpO1xuXG4gICAgLy8gdGhpcy5nZXRWaWV3Q29tcG9uZW50Q29uZmlnLmVtaXQoZGF0YSk7XG4gIH1cbiAgZ2V0RW1pdE5ld0hlYXRNYXBDb25maWcoZGF0YSkge1xuICAgIGRhdGFbJ2RhdGFzZXRJZCddID0gdGhpcy5zZWxlY3RlZERhdGFTZXRbJ2RhdGFzZXRJZCddO1xuICAgIHRoaXMuY3JlYXRlVmlld0NvbmZpZyhkYXRhKTtcblxuICAgIC8vIHRoaXMuZ2V0Vmlld0NvbXBvbmVudENvbmZpZy5lbWl0KGRhdGEpO1xuICB9XG5cblxuICBnZXRFbWl0TmV3Q2hhcnRDb25naWcoZGF0YSkge1xuICAgIGRhdGFbJ2RhdGFzZXRJZCddID0gdGhpcy5zZWxlY3RlZERhdGFTZXRbJ2RhdGFzZXRJZCddO1xuICAgIHRoaXMuY3JlYXRlVmlld0NvbmZpZyhkYXRhKTtcblxuICAgIC8vIHRoaXMuZ2V0Vmlld0NvbXBvbmVudENvbmZpZy5lbWl0KGRhdGEpO1xuICB9XG5cbiAgZ2V0RW1pdE5ld090aGVyU2V0Q29uZ2lnKGRhdGEpIHtcbiAgICBkYXRhWydkYXRhc2V0SWQnXSA9IHRoaXMuc2VsZWN0ZWREYXRhU2V0WydkYXRhc2V0SWQnXTtcbiAgICB0aGlzLmNyZWF0ZVZpZXdDb25maWcoZGF0YSk7XG4gICAgLy8gdGhpcy5nZXRWaWV3Q29tcG9uZW50Q29uZmlnLmVtaXQoZGF0YSk7XG4gIH1cblxuICBjcmVhdGVWaWV3Q29uZmlnKGRhdGEpIHtcbiAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ2RhdGFzZXRJZCddID0gZGF0YVsnZGF0YXNldElkJ107XG4gICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0Wyd2aWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsna3BpQ29uZmlnJ10gPSBkYXRhWydrcGlDb25maWcnXTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFZpZXdUeXBlID09IFwib3RoZXJzXCIpIHtcbiAgICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsna3BpQ29uZmlnJ10uY29tcG9uZW50TmFtZSA9IHRoaXMuY29tcG9uZW50TmFtZTtcbiAgICB9XG4gICAgY29uc29sZS5sb2codGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0KTtcbiAgICBpZiAodGhpcy5pc0R1cGxpZGF0ZVZpZXcpIHtcbiAgICAgIHRoaXMuY3JlYXRlQXBwQ29uZmlnVmlldygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0Wyd2aWV3SWQnXSkge1xuICAgICAgICB0aGlzLnNlcnZpY2UudXBkYXRlQXBwVmlld0NvbmZpZyh0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0NyZWF0ZU5ld1ZpZXcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoJ1ZpZXcgVXBkYXRlIFN1Y2Nlc3NmdWxseScpXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5pc0hlYWRlcikge1xuICAgICAgICAgICAgLy8gICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvblZpZXdzLyddKVxuXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdWaWV3IENyZWF0aW9uJylcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZUFwcENvbmZpZ1ZpZXcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjcmVhdGVBcHBDb25maWdWaWV3KCkge1xuICAgIHRoaXMuc2VydmljZS5jcmVhdGVBcHBWaWV3Q29uZmlnKHRoaXMuY3JlYXRDb21wVmlld09iamVjdCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcblxuICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdWaWV3IENyZWF0ZWQgU3VjY2Vzc2Z1bGx5JylcbiAgICAgICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0ID0ge1xuICAgICAgICAgIFwidmlld05hbWVcIjogXCJcIixcbiAgICAgICAgICBcInZpZXdMYWJlbFwiOiBcIlwiLFxuICAgICAgICAgIFwidmlld1R5cGVcIjogXCJcIlxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgLy8gaWYgKHRoaXMuaXNIZWFkZXIpIHtcbiAgICAgICAgLy8gICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvblZpZXdzLyddKVxuXG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gdGhpcy5hZGROZXdWaWV3KCk7XG5cbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdWaWV3IENyZWF0aW9uJylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYWRkTmV3VmlldygpIHtcbiAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QgPSB7XG4gICAgICBcInZpZXdOYW1lXCI6IFwiXCIsXG4gICAgICBcInZpZXdMYWJlbFwiOiBcIlwiLFxuICAgICAgXCJ2aWV3VHlwZVwiOiBcIlwiXG4gICAgfVxuICAgIHRoaXMuaXNHZW5lcmF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhU2V0T25lZGl0ID0ge307XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICd2aWV3SWQnOiBudWxsLFxuICAgICAgICAnY29udGVudFR5cGUnOiBudWxsLFxuICAgICAgfSxcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICB9KVxuICB9XG5cblxuICBnZXREYXRhc2V0Rm9yUGxhaW5Kc29uKGRhdGFzZXQpIHtcbiAgICBsZXQgcmVxdWVzdGFwaSA9IGRhdGFzZXQuY29uZmlnLmFwaSArICc/ZGF0YXNldElkPScgKyBkYXRhc2V0LmRhdGFzZXRJZDtcbiAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbCA9IHt9O1xuICAgIHRoaXMuc2VydmljZS5nZXRKc29uRGF0YXNldFBheWxvYWQocmVxdWVzdGFwaSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2RhdGEnXSA9IGRhdGEuc2xpY2UoMCwgMSk7XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydkYXRhJ10gPSBwYXlsb2FkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsncmVxdWVzdElkJ10gPSBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydhcGknXSA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkVmlld1R5cGUnXSA9IHRoaXMuc2VsZWN0ZWRWaWV3VHlwZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0dlbmVyYXRlID0gdHJ1ZTtcblxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFzZXRGb3JTcWxUZW1wbGF0ZShkYXRhc2V0KSB7XG4gICAgbGV0IHJlcXVlc3RBcCA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbCA9IHt9O1xuICAgIGxldCByZXF1ZXN0X3BhcmFtcyA9IHtcbiAgICAgICdkYkNvbmZpZyc6IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLmRiQ29uZmlnLFxuICAgICAgJ2RhdGFiYXNlTmFtZSc6IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLmRhdGFiYXNlTmFtZSxcbiAgICAgICdmaWx0ZXJzJzogdGhpcy50cmFuc2Zvcm1EYXRhRm9yTUZpbHRlckZvclNRbChkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMpLFxuICAgICAgJ3RlbXBsYXRlUXVlcnknOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy50ZW1wbGF0ZVF1ZXJ5LFxuICAgICAgJ2VucmljaG1lbnRzJzogZGF0YXNldC5jb25maWcucXVlcnlDb25maWcuZW5yaWNobWVudHMsXG4gICAgfVxuXG4gICAgdGhpcy5zZXJ2aWNlLmdlbmVyaWNTcWxRdWVyeVJlc3BvbnNlKHJlcXVlc3RBcCwgcmVxdWVzdF9wYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydkYXRhJ10gPSBwYXlsb2FkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsncmVxdWVzdElkJ10gPSBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydhcGknXSA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkVmlld1R5cGUnXSA9IHRoaXMuc2VsZWN0ZWRWaWV3VHlwZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0dlbmVyYXRlID0gdHJ1ZTtcblxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgdHJhbnNmb3JtRGF0YUZvck1GaWx0ZXJGb3JTUWwobWFwRGF0YSkge1xuXG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIG1hcERhdGEuZm9yRWFjaChtYXBwaW5nID0+IHtcbiAgICAgIGxldCByZXN1bHRPYmogPSB7XG4gICAgICAgIGNvbHVtbk5hbWU6IG1hcHBpbmcuc2VydmVyQ29sdW1uLFxuICAgICAgICBkYXRhVHlwZTogbWFwcGluZy5kYXRhVHlwZSxcbiAgICAgICAgb3BlcmF0b3I6IG1hcHBpbmcub3BlcmF0b3JOYW1lLFxuICAgICAgICBhbGlhc0NvbHVtbk5hbWU6IG1hcHBpbmcubG9jYWxDb2x1bW4sXG4gICAgICAgIC8vIHZhbHVlOiAobWFwcGluZy5vcGVyYXRvck5hbWUgPT0gXCJpblwiIHx8IG1hcHBpbmcub3BlcmF0b3JOYW1lID09IFwibm90SW5cIikgPyBbbWFwcGluZy5kZWZhdWx0VmFsdWVdIDogbWFwcGluZy5kZWZhdWx0VmFsdWVcbiAgICAgICAgdmFsdWU6IG1hcHBpbmcuZGVmYXVsdFZhbHVlXG4gICAgICB9O1xuICAgICAgaWYgKG1hcHBpbmcuc2VydmVyQ29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIHJlc3VsdE9iai52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKG1hcHBpbmcuZm9ybWF0dGVyICYmIG1hcHBpbmcuZm9ybWF0dGVyICE9PSBcIlwiKSB7XG4gICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdChtYXBwaW5nLmZvcm1hdHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzdWx0LnB1c2gocmVzdWx0T2JqKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC1hdXRvIG1pbi13LTBcIj5cbiAgICA8bGliLWNvbW1vbi1oZWFkZXIgW3BhZ2VUaXRsZV09XCInVmlld3MgRWRpdG9yJ1wiICpuZ0lmPVwiaXNIZWFkZXJcIj48L2xpYi1jb21tb24taGVhZGVyPlxuICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLTIgdy1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtLTMgcC00IGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1sZyBzaGFkb3ctbWQgZGFyazpiZy1ncmF5LTgwMCBkYXJrOmJvcmRlci1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5EYXRhc2V0IExpc3QgPHNwYW4gKm5nSWY9XCJpc0ZpbHRlcklucHV0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ibHVlLTUwMCBjdXJzb3ItcG9pbnRlclwiPjxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnZXRFZGl0RGF0YVNldCgpXCI+PC9pPjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJkYXRhU2V0dGFibGVEYXRhU291cmNlXCIgKG9uVmFsdWVDaGFuZ2VkKT1cImdldERhdGFTZXREZXRhaWxzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByPVwiZGF0YXNldE5hbWVcIiB2YWx1ZUV4cHI9XCJkYXRhc2V0SWRcIiBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWREYXRhU2V0T25lZGl0LmRhdGFzZXRJZFwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPlNlbGVjdCBWaWV3IFR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJbJ2NoYXJ0JywndGFibGUnLCdncm91cFRhYmxlJywnb3RoZXJzJywnaGVhdG1hcCddXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFZpZXdUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiZ2V0Vmlld1R5cGUoJGV2ZW50KVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXdUeXBlID09J290aGVycydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5TZWxlY3QgQ29tcG9uZW50PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cImNvbXBvbmVudE5hbWVzT3RoZXJzXCIgZGlzcGxheUV4cHI9XCJpdGVtXCIgdmFsdWVFeHByPVwiY29tcE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbXBvbmVudE5hbWVcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+VmlldyBOYW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJjcmVhdENvbXBWaWV3T2JqZWN0LnZpZXdOYW1lXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPlZpZXcgTGFiZWw8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cImNyZWF0Q29tcFZpZXdPYmplY3Qudmlld0xhYmVsXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRmlsdGVySW5wdXRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlcXVlc3Qgb2Ygc2VsZWN0ZWREYXRhU2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTFcIj4ge3tnZXRDYXBpdGFsaXplKHJlcXVlc3QubG9jYWxDb2x1bW4pfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWRhdGUtYm94IGRpc3BsYXlGb3JtYXQ9XCJ5eXl5LU1NLWRkXCIgdHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cInN0YXJ0RGF0ZUNoYW5nZSgkZXZlbnQscmVxdWVzdClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRGaWx0ZXIocmVxdWVzdC5sb2NhbENvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keC1kYXRlLWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwicmVxdWVzdC5kZWZhdWx0VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZ2V0RmlsdGVyKHJlcXVlc3QubG9jYWxDb2x1bW4pXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG10LTUganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3N1Y2Nlc3NfbWR9fVwiIChjbGljayk9XCJhZGROZXdWaWV3KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0IFZpZXdcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3ByaW1hcnlfbWR9fSBjdXJzb3ItcG9pbnRlciBteC00IG15LTJcIiAoY2xpY2spPVwiY3JlYXRlTmV3VmlldygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBQcm9jZWVkXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS01IGJvcmRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtbG9hZGVyICpuZ0lmPVwiaXNMb2FkZXJcIj48L2FwcC1sb2FkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBmb3IgY2hhcnQgdmlldyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNHZW5lcmF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3VHlwZSA9PSAnY2hhcnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWRhc2gtY2hhcnQgW2RhdGFzZXRtb2RhbF09XCJkYXRhU291cmNlTW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXRDaGFydENvbmZpZ091dFB1dCk9XCJnZXRFbWl0TmV3Q2hhcnRDb25naWcoJGV2ZW50KVwiPjwvYXBwLWRhc2gtY2hhcnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3VHlwZSA9PSAnaGVhdG1hcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtaGVhdC1tYXAgW2RhdGFzZXRtb2RhbF09XCJkYXRhU291cmNlTW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXRIZWF0TWFwQ29uZmlnT3V0UHV0KT1cImdldEVtaXROZXdIZWF0TWFwQ29uZmlnKCRldmVudClcIj48L2FwcC1oZWF0LW1hcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZm9yIHRhYmxlIHZpZXcgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXdUeXBlID09ICd0YWJsZScgfHwgc2VsZWN0ZWRWaWV3VHlwZSA9PSAnZ3JvdXBUYWJsZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZGFzaC10YWJsZSBbZGF0YXNldG1vZGFsXT1cImRhdGFTb3VyY2VNb2RhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdldFRhYmxlQ29uZmlnT3V0UHV0KT1cImdldEVtaXROZXdUYWJsZUNvbmZpZygkZXZlbnQpXCI+PC9hcHAtZGFzaC10YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZm9yIG90aGVycyB2aWV3ICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlld1R5cGUgPT0gJ290aGVycydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnROYW1lID09ICdHYW1tYVRhYmxlV2l0aFBlcmNlbnRhZ2VDb21wb25lbnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC10YWJsZS13aXRoLWJhciBbZGF0YXNldG1vZGFsXT1cImRhdGFTb3VyY2VNb2RhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjcmVhdGVPdGhlckNvbXBvbmVudFZpZXcpPVwiZ2V0RW1pdE5ld090aGVyU2V0Q29uZ2lnKCRldmVudClcIj48L2FwcC10YWJsZS13aXRoLWJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcG9uZW50TmFtZSA9PSAnR2FtbWFHZW9DaGFydENvbXBvbmVudCcgJiYgIGNvbXBvbmVudE5hbWUgIT0gJ0dhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxhcHAtZ2FtbWEtZ2VvLWNoYXJ0PjwvYXBwLWdhbW1hLWdlby1jaGFydD4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1nZW8tbWFwIFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNyZWF0ZU90aGVyQ29tcG9uZW50Vmlldyk9XCJnZXRFbWl0TmV3T3RoZXJTZXRDb25naWcoJGV2ZW50KVwiPjwvYXBwLWdlby1tYXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcG9uZW50TmFtZSAhPSAnR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50JyAmJiBjb21wb25lbnROYW1lICE9ICdHYW1tYUdlb0NoYXJ0Q29tcG9uZW50JyAmJiAgY29tcG9uZW50TmFtZSAhPSAnR2FtbVNpbmdsZU51bWJlckNhcmRDb21wb25lbnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1kYXNoLXRvZGF5LXByZXZpb3VzIFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0dG9kYXlQcmV2aW91c0NvbmZpZ091dFB1dCk9XCJnZXRFbWl0TmV3T3RoZXJTZXRDb25naWcoJGV2ZW50KVwiPjwvbGliLWRhc2gtdG9kYXktcHJldmlvdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcG9uZW50TmFtZSAhPSAnR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50JyAmJiBjb21wb25lbnROYW1lICE9ICdHYW1tYUdlb0NoYXJ0Q29tcG9uZW50JyAmJiBjb21wb25lbnROYW1lICE9ICdHYW1tYVRvZGF5UHJldmlvdXNDb21wb25lbnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zaW5nbGUtY2FyZCBbZGF0YXNldG1vZGFsXT1cImRhdGFTb3VyY2VNb2RhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdldFNpbmdsZUNhcmRDb25maWdPdXRQdXQpPVwiZ2V0RW1pdE5ld090aGVyU2V0Q29uZ2lnKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1zaW5nbGUtY2FyZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
612
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tdmlldy1jb21wb25lbnRzL2NyZWF0ZS1jb21wLXZpZXcvY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tdmlldy1jb21wb25lbnRzL2NyZWF0ZS1jb21wLXZpZXcvY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLEVBQUUsS0FBSyxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUV2RixPQUFPLE1BQU0sTUFBTSx1QkFBdUIsQ0FBQztBQUszQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNwRCxNQUFNLE9BQU8sdUJBQXVCO0lBZ0RsQyxZQUNVLE1BQXFCLEVBQ3RCLGFBQTRCLEVBQzNCLE9BQWtDLEVBQ2xDLFVBQTRCLEVBQzVCLE1BQWMsRUFDZCxjQUE4QixFQUNMLFdBQWdCO1FBTnpDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFDbEMsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNMLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBOUNuRCxvQkFBZSxHQUFRLEVBQUUs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QUMsWUFBWTthQUM1QixDQUFDO1lBQ0YsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUNoRixJQUFJLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxFQUFFLEVBQUU7b0JBQ2pELFNBQVMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDbkY7cUJBQU07b0JBQ0wsU0FBUyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFFN0Y7YUFDRjtZQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOztvSEFuckJVLHVCQUF1Qix5TUF1RHhCLGVBQWU7d0dBdkRkLHVCQUF1Qiw0SkNoQnBDLHVwUEFzSEE7MkZEdEdhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxzQkFBc0I7OzBCQTJEN0IsTUFBTTsyQkFBQyxlQUFlOzRDQXREaEIsV0FBVztzQkFBbkIsS0FBSztnQkE2QkcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRixjQUFjO3NCQURqQixLQUFLO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLy4uLy4uL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkV4dHJhcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsga3BpY29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2twaS1zZXJ2aWNlJztcbmltcG9ydCB7IEFQUF9FTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50JztcblxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jcmVhdGUtY29tcC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1jb21wLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtY29tcC12aWV3LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3JlYXRlQ29tcFZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBrcGlUcmVlRGF0YTogYW55XG4gIGlzTG9hZGVyOiBib29sZWFuO1xuICBpc0dlbmVyYXRlOiBib29sZWFuO1xuICBpc0NyZWF0ZU5ld1ZpZXc6IGJvb2xlYW47XG4gIGlzS3BpU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGlzS3BpQ29uZmlnU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGFwaUNvbmZpZ0RhdGE6IGFueTtcbiAgc2luZ2xlRGF0YVNldENvbmZpZzogYW55O1xuICBzZWxlY3RlZERhdGFTZXQ6IGFueSA9IHt9O1xuICBkYXRhU291cmNlTW9kYWw6IGFueTtcblxuICBkYXRhU2V0dGFibGVEYXRhU291cmNlOiBhbnk7XG4gIGlzRHVwbGlkYXRlVmlldzogYm9vbGVhbjtcbiAgaXNGaWx0ZXJJbnB1dHM6IGJvb2xlYW47XG4gIHNlbGVjdGVkRGF0YVNldE9uZWRpdDogYW55ID0ge307XG4gIHNlbGVjdGVkVmlld1R5cGU6IGFueTtcbiAgY3JlYXRDb21wVmlld09iamVjdDogYW55ID0ge307XG4gIGNvbXBvbmVudE5hbWVzT3RoZXJzID0gW1xuICAgIHsgXCJjb21wTmFtZVwiOiBcIkdhbW1hVG9kYXlQcmV2aW91c0NvbXBvbmVudFwiLCBcIml0ZW1cIjogXCJUb2RheSB2cyBQcmV2aW91cyBEYXkgXCIgfSxcbiAgICB7IFwiY29tcE5hbWVcIjogXCJHYW1tYVRhYmxlV2l0aFBlcmNlbnRhZ2VDb21wb25lbnRcIiwgXCJpdGVtXCI6IFwiVGFibGUgVmlldyB3aXRoIHBlcmNlbnRhZ2VcIiB9LFxuICAgIHsgXCJjb21wTmFtZVwiOiBcIkdhbW1TaW5nbGVOdW1iZXJDYXJkQ29tcG9uZW50XCIsIFwiaXRlbVwiOiBcIlNpbmdsZSBOdW1iZXIgQ2FyZFwiIH0sXG4gICAgeyBcImNvbXBOYW1lXCI6IFwiR2FtbWFHZW9DaGFydENvbXBvbmVudFwiLCBcIml0ZW1cIjogXCJHZW8gQ2hhcnRcIiB9XG4gIF1cbiAgY29tcG9uZW50TmFtZTogYW55O1xuXG4gIGRlZmF1bHRTdGFydERhdGU7XG4gIGRlZmF1bHRFbmREYXRlO1xuICBpbnB1dFZpZXdJZDogYW55O1xuXG4gIEBJbnB1dCgpIGlzSGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCdzZWxlY3RlZFZpZXdJZCcpXG4gIHNldCBzZWxlY3RlZFZpZXdJZCh2YWx1ZSkge1xuICAgIGlmICh0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UgJiYgdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXdUeXBlID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZ2V0Vmlld0J5SWQodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICB0aGlzLmdldERhdGFTZXQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dFZpZXdJZCA9IHZhbHVlO1xuICAgICAgdGhpcy5nZXREYXRhU2V0KCk7XG4gICAgfVxuXG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIHNlcnZpY2U6IEFwcGxpY2F0aW9uQ29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrcGlTZXJ2aWNlOiBrcGljb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgQEluamVjdChBUFBfRU5WSVJPTk1FTlQpIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueVxuXG4gICkge1xuXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRlZmF1bHRTdGFydERhdGUgPSBtb21lbnQoKS5zdWJ0cmFjdCgnMzAnLCAnZGF5cycpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgIHRoaXMuZGVmYXVsdEVuZERhdGUgPSBtb21lbnQoKS5zdWJ0cmFjdCgnMScsICdkYXlzJykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0ID0ge1xuICAgICAgXCJ2aWV3TmFtZVwiOiBcIlwiLFxuICAgICAgXCJ2aWV3TGFiZWxcIjogXCJcIixcbiAgICAgIFwidmlld1R5cGVcIjogdGhpcy5zZWxlY3RlZFZpZXdUeXBlXG4gICAgfVxuXG5cbiAgICB0aGlzLmdldERhdGFTZXQoKTtcblxuICB9XG4gIGdldFZpZXdUeXBlKGUpIHtcbiAgICB0aGlzLmlzS3BpQ29uZmlnU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzS3BpU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzR2VuZXJhdGUgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ3JlYXRlTmV3VmlldyA9IGZhbHNlO1xuICB9XG5cblxuICBnZXREYXRhU2V0KCkge1xuICAgIHRoaXMuc2VydmljZS5nZXRBcHBEYXRhc2V0Q29uZmlncygpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlID0gZGF0YTtcbiAgICAgICAgbGV0IHZpZXdJZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ3ZpZXdJZCddO1xuICAgICAgICBsZXQgY29udGVudFR5cGUgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydjb250ZW50VHlwZSddO1xuICAgICAgICBpZiAoY29udGVudFR5cGUgPT0gXCJjbG9uZVwiKSB7XG4gICAgICAgICAgdGhpcy5pc0R1cGxpZGF0ZVZpZXcgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpZXdJZCkge1xuICAgICAgICAgIHRoaXMuZ2V0Vmlld0J5SWQodmlld0lkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnB1dFZpZXdJZCkge1xuICAgICAgICAgIHRoaXMuZ2V0Vmlld0J5SWQodGhpcy5pbnB1dFZpZXdJZCk7XG4gICAgICAgIH1cblxuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1ZpZXcgQ3JlYXRpb24nKVxuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldFZpZXdCeUlkKHZpZXdJZCkge1xuICAgIHRoaXMuc2VydmljZS5nZXRBcHBWaWV3Q29uZmlnKHZpZXdJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0ID0gZGF0YTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZpZXdUeXBlID0gZGF0YS52aWV3VHlwZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFTZXQgPSB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UuZmluZChkYXRhc2V0ID0+IGRhdGFzZXQuZGF0YXNldElkID09PSBkYXRhLmRhdGFzZXRJZCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhU2V0T25lZGl0ID0gdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlLmZpbmQoZGF0YXNldCA9PiBkYXRhc2V0LmRhdGFzZXRJZCA9PT0gZGF0YS5kYXRhc2V0SWQpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZpZXdUeXBlID09IFwib3RoZXJzXCIpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudE5hbWUgPSBkYXRhLmtwaUNvbmZpZy5jb21wb25lbnROYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFTZXRbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSBkYXRhWydrcGlDb25maWcnXTtcblxuICAgICAgICAvLyBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgIT09ICdzcWxRdWVyeScpIHtcbiAgICAgICAgLy8gICB0aGlzLmNyZWF0ZU5ld1ZpZXcoKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnVmlldyBDcmVhdGlvbicpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldERhdGFTZXROYW1lKGRhdGFzZXRJZCkge1xuICAgIGNvbnN0IGZvdW5kT2JqZWN0ID0gdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlLmZpbmQoZGF0YXNldCA9PiBkYXRhc2V0LmRhdGFzZXRJZCA9PT0gZGF0YXNldElkKTtcbiAgICBpZiAoZm91bmRPYmplY3QpIHtcbiAgICAgIHJldHVybiBmb3VuZE9iamVjdC5kYXRhc2V0TmFtZTtcbiAgICB9XG4gIH1cblxuICBnZXREYXRhU2V0RGV0YWlscyhldmVudCkge1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhU2V0ID0gdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlLmZpbmQoZGF0YXNldCA9PiBkYXRhc2V0LmRhdGFzZXRJZCA9PT0gZXZlbnQudmFsdWUpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInF1ZXJ5YnVpbGRlclwiKSB7XG4gICAgICB0aGlzLmlzRmlsdGVySW5wdXRzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwic2ltcGxlQXBpXCIpIHtcbiAgICAgIHRoaXMuaXNGaWx0ZXJJbnB1dHMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJwbGFpbmpzb25cIikge1xuICAgICAgdGhpcy5pc0ZpbHRlcklucHV0cyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJzcWxRdWVyeVwiKSB7XG4gICAgICB0aGlzLmlzRmlsdGVySW5wdXRzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0ZpbHRlcklucHV0cyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG5cbiAgZ2V0S3BpU2luZ2xlQ29uZmlnKGV2ZW50KSB7XG4gICAgdGhpcy5zaW5nbGVEYXRhU2V0Q29uZmlnID0gZXZlbnQudmFsdWU7XG4gICAgdGhpcy5pc0twaUNvbmZpZ1NlbGVjdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGdlbmVyYXRlRGF0YVNldCgpIHtcblxuICB9XG5cbiAgZ2V0RGF0YVNldEZvck1vbmdvKGRhdGFzZXQpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbCA9IHt9O1xuICAgIGxldCBhcGlKc29uT2JqZWN0ID0ge1xuICAgICAgcmVxdWVzdElkOiBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQsXG4gICAgfTtcbiAgICBpZiAoZGF0YXNldC5jb25maWcuZml4T3BlcmF0aW9uTGV2bGVzICYmIGRhdGFzZXQuY29uZmlnLmZpeE9wZXJhdGlvbkxldmxlcy5sZW5ndGggIT0gMCkge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFzZXQuY29uZmlnLmZpeE9wZXJhdGlvbkxldmxlcykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGFwaUpzb25PYmplY3QsIGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBtb25fY29uZmlnID0gdGhpcy5rcGlTZXJ2aWNlLmdldEFsbFNldmljZUFwaUpzb24oYXBpSnNvbk9iamVjdCk7XG4gICAgdGhpcy5zZXJ2aWNlLmdldERhdGEobW9uX2NvbmZpZywgZGF0YXNldC5jb25maWcuYXBpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2RhdGEnXSA9IHBheWxvYWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydyZXF1ZXN0SWQnXSA9IGRhdGFzZXQuY29uZmlnLnNlcnZpY2VJZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2FwaSddID0gZGF0YXNldC5jb25maWcuYXBpO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRXaWRnZXRDb25maWcnXSA9ICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykgPyB0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZyA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzR2VuZXJhdGUgPSB0cnVlO1xuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldERhdGFzZXRGb3JJbXBhbGEoZGF0YXNldCkge1xuICAgIGRlYnVnZ2VyXG4gICAgbGV0IHJlcXVlc3QgPSBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZztcbiAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbCA9IHt9O1xuICAgIGxldCB0cmFuc2Zvcm1lZE9iamVjdDogYW55ID0ge307XG4gICAgZm9yIChsZXQgaXRlbSBvZiByZXF1ZXN0LnJlcUZpZWxkcykge1xuICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoaXRlbSlbMF07XG4gICAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC52YWx1ZXMoaXRlbSlbMF07XG4gICAgICBpZiAoa2V5ID09PSAnc3RhcnREYXRlJykge1xuICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdC5yZWNvcmREYXRlID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtZWRPYmplY3RbJ2ZpbHRlcnMnXSA9IHRoaXMudHJhbnNmb3JtRGF0YUZvck1GaWx0ZXIoW10sIHJlcXVlc3QubWFwZWRGaWx0ZXJzKTtcbiAgICB0cmFuc2Zvcm1lZE9iamVjdFsnc29ydGVycyddID0gcmVxdWVzdC5zb3J0ZXJzO1xuICAgIHRyYW5zZm9ybWVkT2JqZWN0W1wicGFnaW5hdGlvblJlcXVpcmVkXCJdID0gZmFsc2U7XG5cbiAgICBpZiAoZGF0YXNldC5jb25maWcuYXBpID09IFwiL2twaS9nZW5lcmljQWdncmVnYXRlUGFnaW5hdGVkS3BpU2VydmljZVJlc3BvbnNlXCIpIHtcbiAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydtZWFzdXJlcyddID0gcmVxdWVzdC5tZWFzdXJlcztcbiAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydkaW1lbnNpb25zJ10gPSByZXF1ZXN0LmRpbWVuc2lvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZm9ybWVkT2JqZWN0Wydjb2x1bW5zJ10gPSB0aGlzLmdldEZvcm1hdE9iamVjdEZvckNvbHVtbihyZXF1ZXN0LmNvbHVtbnMpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5oYXZpbmdzICYmIHJlcXVlc3QuaGF2aW5ncy5sZW5ndGggIT09IDApIHtcbiAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydoYXZpbmdzJ10gPSByZXF1ZXN0LmhhdmluZ3M7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2codHJhbnNmb3JtZWRPYmplY3QpO1xuXG5cblxuXG4gICAgY29uc3QgY29sdW1uRGF0YSA9IHRoaXMudHJhbnNmb3JtQ29sdW1uc0ZvckNvbHVtbnMocmVxdWVzdC5jb2x1bW5zKTtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0RGF0YSh0cmFuc2Zvcm1lZE9iamVjdCwgZGF0YXNldC5jb25maWcuYXBpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVsnZGF0YXNldCddO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gcGF5bG9hZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3JlcXVlc3RJZCddID0gZGF0YXNldC5jb25maWcuc2VydmljZUlkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnYXBpJ10gPSBkYXRhc2V0LmNvbmZpZy5hcGk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydjb2x1bW5EYXRhJ10gPSBjb2x1bW5EYXRhO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRXaWRnZXRDb25maWcnXSA9ICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykgPyB0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZyA6IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG5cbiAgICAgIH1cbiAgICB9KVxuXG4gIH1cblxuXG4gIGdldEZvcm1hdE9iamVjdEZvckNvbHVtbihjb2x1bW5zKSB7XG4gICAgbGV0IGNvbHVtbkRhdGEgPSBbXTtcbiAgICBjb2x1bW5zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCB7IGFkdmFuY2VkQ29sdW1uLCBjb2x1bW5OYW1lLCBlbnJpY2hGdW5jdGlvbiwgZGF0YUZpZWxkIH0gPSBlbGVtZW50O1xuICAgICAgY29sdW1uRGF0YS5wdXNoKHtcbiAgICAgICAgXCJhZHZhbmNlZENvbHVtblwiOiBhZHZhbmNlZENvbHVtbixcbiAgICAgICAgXCJjb2x1bW5OYW1lXCI6IGNvbHVtbk5hbWUsXG4gICAgICAgIFwiZW5yaWNoRnVuY3Rpb25cIjogZW5yaWNoRnVuY3Rpb24sXG4gICAgICAgIFwiYWxpYXNOYW1lXCI6IGRhdGFGaWVsZFxuICAgICAgfSlcbiAgICB9KTtcbiAgICByZXR1cm4gY29sdW1uRGF0YTtcbiAgfVxuXG5cbiAgdHJhbnNmb3JtQ29sdW1uc0ZvckNvbHVtbnMoaW5wdXRDb2x1bW5zKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IFtdO1xuXG4gICAgaW5wdXRDb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgIGNvbHVtbnMucHVzaCh7XG4gICAgICAgIGRhdGFGaWVsZDogY29sLmRhdGFGaWVsZCxcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgY2FwdGlvbjogY29sLmNhcHRpb24sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cblxuICB0cmFuc2Zvcm1EYXRhRm9yTUZpbHRlcihmaWx0ZXJkYXRhLCBtYXBEYXRhKSB7XG5cbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgbWFwRGF0YS5mb3JFYWNoKG1hcHBpbmcgPT4ge1xuICAgICAgbGV0IHJlc3VsdE9iaiA9IHtcbiAgICAgICAgY29sdW1uTmFtZTogbWFwcGluZy5zZXJ2ZXJDb2x1bW4sXG4gICAgICAgIGRhdGFUeXBlOiBtYXBwaW5nLmRhdGFUeXBlLFxuICAgICAgICBvcGVyYXRvcjogbWFwcGluZy5vcGVyYXRvck5hbWUsXG4gICAgICAgIHZhbHVlOiBtYXBwaW5nLmRlZmF1bHRWYWx1ZVxuICAgICAgfTtcblxuICAgICAgY29uc3QgZmlsdGVyID0gZmlsdGVyZGF0YS5maW5kKGYgPT4gZi5oYXNPd25Qcm9wZXJ0eShtYXBwaW5nLmxvY2FsQ29sdW1uKSk7XG4gICAgICBpZiAobWFwcGluZy5zZXJ2ZXJDb2x1bW4uaW5jbHVkZXMoJ2RhdGUnKSAmJiB0eXBlb2YgcmVzdWx0T2JqLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAobWFwcGluZy5mb3JtYXR0ZXIgJiYgbWFwcGluZy5mb3JtYXR0ZXIgIT09IFwiXCIpIHtcbiAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KG1hcHBpbmcuZm9ybWF0dGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCk7XG5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgIGlmIChtYXBwaW5nLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyW21hcHBpbmcubG9jYWxDb2x1bW5dO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXN1bHRPYmoub3BlcmF0b3IgPSBcImluXCI7XG4gICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtYXBwaW5nLnNlcnZlckNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiByZXN1bHRPYmoudmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cbiAgICAgICAgICAgIGlmIChtYXBwaW5nLmZvcm1hdHRlciAmJiBtYXBwaW5nLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KG1hcHBpbmcuZm9ybWF0dGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcblxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobWFwcGluZy5kZWZhdWx0VmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2gocmVzdWx0T2JqKTtcbiAgICB9KTtcbiAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKG9iaiA9PiBvYmoudmFsdWUgIT09IG51bGwgJiYgb2JqLnZhbHVlICE9PSBcIlwiKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0RGF0YXNldEZvclNpbXBsZUFwaUltcGFsYShkYXRhc2V0OiBhbnkpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbCA9IHt9O1xuXG4gICAgZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgIGlmIChmaWx0ZXIuaGFzT3duUHJvcGVydHkoZmlsdGVyLmxvY2FsQ29sdW1uKSkge1xuICAgICAgICBmaWx0ZXIuZGVmYXVsdFZhbHVlID0gZmlsdGVyW2ZpbHRlci5sb2NhbENvbHVtbl07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZGF0YXNldC5jb25maWcuYXBpVHlwZSA9PT0gXCJwb3N0XCIpIHtcbiAgICAgIGxldCBzZXJ2aWNlSnNvbjogYW55ID0ge307XG4gICAgICBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGRhdGVjb2x1bW4gPSBmaWx0ZXIuc2VydmVyQ29sdW1uLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChkYXRlY29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIGZpbHRlci5kYXRhVHlwZSA9PT0gJ3N0cmluZycpIHtcblxuICAgICAgICAgIGlmIChmaWx0ZXIuZm9ybWF0dGVyICYmIGZpbHRlci5mb3JtYXR0ZXIgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIHNlcnZpY2VKc29uW2ZpbHRlci5zZXJ2ZXJDb2x1bW5dID0gbW9tZW50KGZpbHRlci5kZWZhdWx0VmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQoZmlsdGVyLmZvcm1hdHRlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNlcnZpY2VKc29uW2ZpbHRlci5zZXJ2ZXJDb2x1bW5dID0gbW9tZW50KGZpbHRlci5kZWZhdWx0VmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcblxuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlcnZpY2VKc29uW2ZpbHRlci5zZXJ2ZXJDb2x1bW5dID0gZmlsdGVyLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc2VydmljZS5nZXRTaW1wbGVBcGlQb3N0UmVxdWVzdChkYXRhc2V0LmNvbmZpZy5hcGksIHNlcnZpY2VKc29uKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2RhdGEnXSA9IHBheWxvYWQ7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3JlcXVlc3RJZCddID0gZGF0YXNldC5jb25maWcuc2VydmljZUlkO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydhcGknXSA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFdpZGdldENvbmZpZyddID0gKHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnKSA/IHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnIDogdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzR2VuZXJhdGUgPSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChkYXRhc2V0LmNvbmZpZy5hcGlUeXBlID09PSBcImdldFwiKSB7XG4gICAgICAvLyBDb25zdHJ1Y3QgR0VUIFVSTCB3aXRoIHBhcmFtZXRlcnNcbiAgICAgIGxldCByZXF1ZXN0VXJsID0gZGF0YXNldC5jb25maWcuYXBpICsgXCI/XCI7XG4gICAgICBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmVxdWVzdFVybCArPSBgJHtmaWx0ZXIuc2VydmVyQ29sdW1ufT0ke2ZpbHRlci5kZWZhdWx0VmFsdWV9YDtcbiAgICAgICAgaWYgKGluZGV4IDwgZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICByZXF1ZXN0VXJsICs9IFwiJlwiO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gTWFrZSBHRVQgcmVxdWVzdFxuICAgICAgdGhpcy5zZXJ2aWNlLmdldFNpbXBsZUFwaUdldFJlcXVlc3QocmVxdWVzdFVybCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydkYXRhJ10gPSBwYXlsb2FkO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydyZXF1ZXN0SWQnXSA9IGRhdGFzZXQuY29uZmlnLnNlcnZpY2VJZDtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnYXBpJ10gPSBkYXRhc2V0LmNvbmZpZy5hcGk7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkVmlld1R5cGUnXSA9IHRoaXMuc2VsZWN0ZWRWaWV3VHlwZTtcblxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFdpZGdldENvbmZpZyddID0gKHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnKSA/IHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnIDogdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmlzR2VuZXJhdGUgPSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGdldEVkaXREYXRhU2V0KCkge1xuICAgIGxldCBjb250ZW50Vmlld0lkID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1sncGFnZUlkJ107XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRJZCkge1xuICAgICAgaWYgKGNvbnRlbnRWaWV3SWQpIHtcbiAgICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICdkYXRhc2V0SWQnOiB0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0SWQsXG4gICAgICAgICAgICAndmlld0lkJzogdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0LnZpZXdJZCxcbiAgICAgICAgICAgICdwYWdlSWQnOiBjb250ZW50Vmlld0lkXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uRGF0YXNldCddLCBuYXZpZ2F0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBuYXZpZ2F0aW9uOiBOYXZpZ2F0aW9uRXh0cmFzID0ge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAnZGF0YXNldElkJzogdGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldElkLFxuICAgICAgICAgICAgJ3ZpZXdJZCc6IHRoaXMuY3JlYXRDb21wVmlld09iamVjdC52aWV3SWQsXG5cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYXBwcy9jb250cm9sUGFuZWwvYXBwbGljYXRpb25EYXRhc2V0J10sIG5hdmlnYXRpb24pO1xuICAgICAgfVxuXG5cbiAgICB9XG4gIH1cbiAgY3JlYXRlTmV3VmlldygpIHtcbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmlzR2VuZXJhdGUgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpIHtcbiAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcIm1vbmdvXCIpIHtcbiAgICAgIHRoaXMuZ2V0RGF0YVNldEZvck1vbmdvKHRoaXMuc2VsZWN0ZWREYXRhU2V0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwicXVlcnlidWlsZGVyXCIpIHtcbiAgICAgIHRoaXMuZ2V0RGF0YXNldEZvckltcGFsYSh0aGlzLnNlbGVjdGVkRGF0YVNldCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInNpbXBsZUFwaVwiKSB7XG4gICAgICB0aGlzLmdldERhdGFzZXRGb3JTaW1wbGVBcGlJbXBhbGEodGhpcy5zZWxlY3RlZERhdGFTZXQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJwbGFpbmpzb25cIikge1xuXG4gICAgICB0aGlzLmdldERhdGFzZXRGb3JQbGFpbkpzb24odGhpcy5zZWxlY3RlZERhdGFTZXQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJzcWxRdWVyeVwiKSB7XG4gICAgICB0aGlzLmdldERhdGFzZXRGb3JTcWxUZW1wbGF0ZSh0aGlzLnNlbGVjdGVkRGF0YVNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMuZ2V0RGF0YXNldEZvckltcGFsYSh0aGlzLnNlbGVjdGVkRGF0YVNldClcbiAgICB9XG4gIH1cblxuXG4gIGNyZWF0ZU90aGVyQ29tcG9uZW50VmlldygpIHtcbiAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ2RhdGFzZXRJZCddID0gdGhpcy5zZWxlY3RlZERhdGFTZXRbJ2RhdGFzZXRJZCddO1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsna3BpQ29uZmlnJ10gPSB7XG4gICAgICBcInNlcnZpY2VJZFwiOiBcIlwiLFxuICAgICAgXCJhcGlcIjogXCJcIixcbiAgICAgIFwiZGlzcGxheVR5cGVcIjogXCJjaGFydFwiLFxuICAgICAgXCJmb3JtYXRlXCI6IFwiXCIsXG4gICAgICBcImNvbXBvbmVudE5hbWVcIjogdGhpcy5jb21wb25lbnROYW1lLFxuICAgICAgXCJkYXRhQ29uZmlnXCI6IHtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgIGlmICh0aGlzLmlzRHVwbGlkYXRlVmlldykge1xuICAgICAgdGhpcy5jcmVhdGVBcHBDb25maWdWaWV3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ3ZpZXdJZCddKSB7XG4gICAgICAgIHRoaXMuc2VydmljZS51cGRhdGVBcHBWaWV3Q29uZmlnKHRoaXMuY3JlYXRDb21wVmlld09iamVjdCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QgPSB7XG4gICAgICAgICAgICAgIFwidmlld05hbWVcIjogXCJcIixcbiAgICAgICAgICAgICAgXCJ2aWV3TGFiZWxcIjogXCJcIixcbiAgICAgICAgICAgICAgXCJ2aWV3VHlwZVwiOiBcIlwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmlzQ3JlYXRlTmV3VmlldyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnVmlldyBVcGRhdGUgU3VjY2Vzc2Z1bGx5JylcbiAgICAgICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1ZpZXcgQ3JlYXRpb24nKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlQXBwQ29uZmlnVmlldygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cblxuXG5cblxuICBnZXRDYXBpdGFsaXplKGl0ZW06IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNlcnZpY2UuY29udmVydFRvU3BhY2VTZXBhcmF0ZWRDYXBpdGFsaXplZChpdGVtKVxuICB9XG4gIGdldEZpbHRlcihpdGVtKSB7XG4gICAgbGV0IGNvbF9uYW1lID0gaXRlbS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChjb2xfbmFtZS5pbmNsdWRlcygnZGF0ZScpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0RGF0ZUNoYW5nZShlLCBpdGVtKSB7XG4gICAgdGhpcy5pc0NyZWF0ZU5ld1ZpZXcgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJzaW1wbGVBcGlcIikge1xuICAgICAgaXRlbS5kZWZhdWx0VmFsdWUgPSBtb21lbnQoZS52YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtLmRlZmF1bHRWYWx1ZSA9IG1vbWVudChlLnZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXG4gICAgfVxuXG4gIH1cblxuICBnb3RvVmlld3NzZXQoKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYXBwcy9jb250cm9sUGFuZWwvYXBwbGljYXRpb25WaWV3cy8nXSlcbiAgfVxuXG5cbiAgZ2V0RW1pdE5ld1RhYmxlQ29uZmlnKGRhdGEpIHtcbiAgICBkZWJ1Z2dlclxuICAgIGRhdGFbJ2RhdGFzZXRJZCddID0gdGhpcy5zZWxlY3RlZERhdGFTZXRbJ2RhdGFzZXRJZCddO1xuICAgIHRoaXMuY3JlYXRlVmlld0NvbmZpZyhkYXRhKTtcblxuICAgIC8vIHRoaXMuZ2V0Vmlld0NvbXBvbmVudENvbmZpZy5lbWl0KGRhdGEpO1xuICB9XG4gIGdldEVtaXROZXdIZWF0TWFwQ29uZmlnKGRhdGEpIHtcbiAgICBkYXRhWydkYXRhc2V0SWQnXSA9IHRoaXMuc2VsZWN0ZWREYXRhU2V0WydkYXRhc2V0SWQnXTtcbiAgICB0aGlzLmNyZWF0ZVZpZXdDb25maWcoZGF0YSk7XG5cbiAgICAvLyB0aGlzLmdldFZpZXdDb21wb25lbnRDb25maWcuZW1pdChkYXRhKTtcbiAgfVxuXG5cbiAgZ2V0RW1pdE5ld0NoYXJ0Q29uZ2lnKGRhdGEpIHtcbiAgICBkYXRhWydkYXRhc2V0SWQnXSA9IHRoaXMuc2VsZWN0ZWREYXRhU2V0WydkYXRhc2V0SWQnXTtcbiAgICB0aGlzLmNyZWF0ZVZpZXdDb25maWcoZGF0YSk7XG5cbiAgICAvLyB0aGlzLmdldFZpZXdDb21wb25lbnRDb25maWcuZW1pdChkYXRhKTtcbiAgfVxuXG4gIGdldEVtaXROZXdPdGhlclNldENvbmdpZyhkYXRhKSB7XG4gICAgZGF0YVsnZGF0YXNldElkJ10gPSB0aGlzLnNlbGVjdGVkRGF0YVNldFsnZGF0YXNldElkJ107XG4gICAgdGhpcy5jcmVhdGVWaWV3Q29uZmlnKGRhdGEpO1xuICAgIC8vIHRoaXMuZ2V0Vmlld0NvbXBvbmVudENvbmZpZy5lbWl0KGRhdGEpO1xuICB9XG5cbiAgY3JlYXRlVmlld0NvbmZpZyhkYXRhKSB7XG4gICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0WydkYXRhc2V0SWQnXSA9IGRhdGFbJ2RhdGFzZXRJZCddO1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsndmlld1R5cGUnXSA9IHRoaXMuc2VsZWN0ZWRWaWV3VHlwZTtcbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ2twaUNvbmZpZyddID0gZGF0YVsna3BpQ29uZmlnJ107XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRWaWV3VHlwZSA9PSBcIm90aGVyc1wiKSB7XG4gICAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ2twaUNvbmZpZyddLmNvbXBvbmVudE5hbWUgPSB0aGlzLmNvbXBvbmVudE5hbWU7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKHRoaXMuY3JlYXRDb21wVmlld09iamVjdCk7XG4gICAgaWYgKHRoaXMuaXNEdXBsaWRhdGVWaWV3KSB7XG4gICAgICB0aGlzLmNyZWF0ZUFwcENvbmZpZ1ZpZXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsndmlld0lkJ10pIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZUFwcFZpZXdDb25maWcodGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0KS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNDcmVhdGVOZXdWaWV3ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdWaWV3IFVwZGF0ZSBTdWNjZXNzZnVsbHknKVxuICAgICAgICAgICAgLy8gaWYgKHRoaXMuaXNIZWFkZXIpIHtcbiAgICAgICAgICAgIC8vICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYXBwcy9jb250cm9sUGFuZWwvYXBwbGljYXRpb25WaWV3cy8nXSlcblxuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnVmlldyBDcmVhdGlvbicpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVBcHBDb25maWdWaWV3KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlQXBwQ29uZmlnVmlldygpIHtcbiAgICB0aGlzLnNlcnZpY2UuY3JlYXRlQXBwVmlld0NvbmZpZyh0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnVmlldyBDcmVhdGVkIFN1Y2Nlc3NmdWxseScpXG4gICAgICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdCA9IHtcbiAgICAgICAgICBcInZpZXdOYW1lXCI6IFwiXCIsXG4gICAgICAgICAgXCJ2aWV3TGFiZWxcIjogXCJcIixcbiAgICAgICAgICBcInZpZXdUeXBlXCI6IFwiXCJcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIC8vIGlmICh0aGlzLmlzSGVhZGVyKSB7XG4gICAgICAgIC8vICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYXBwcy9jb250cm9sUGFuZWwvYXBwbGljYXRpb25WaWV3cy8nXSlcblxuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHRoaXMuYWRkTmV3VmlldygpO1xuXG4gICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnVmlldyBDcmVhdGlvbicpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFkZE5ld1ZpZXcoKSB7XG4gICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0ID0ge1xuICAgICAgXCJ2aWV3TmFtZVwiOiBcIlwiLFxuICAgICAgXCJ2aWV3TGFiZWxcIjogXCJcIixcbiAgICAgIFwidmlld1R5cGVcIjogXCJcIlxuICAgIH1cbiAgICB0aGlzLmlzR2VuZXJhdGUgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkRGF0YVNldE9uZWRpdCA9IHt9O1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAndmlld0lkJzogbnVsbCxcbiAgICAgICAgJ2NvbnRlbnRUeXBlJzogbnVsbCxcbiAgICAgIH0sXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgfSlcbiAgfVxuXG5cbiAgZ2V0RGF0YXNldEZvclBsYWluSnNvbihkYXRhc2V0KSB7XG4gICAgbGV0IHJlcXVlc3RhcGkgPSBkYXRhc2V0LmNvbmZpZy5hcGkgKyAnP2RhdGFzZXRJZD0nICsgZGF0YXNldC5kYXRhc2V0SWQ7XG4gICAgdGhpcy5kYXRhU291cmNlTW9kYWwgPSB7fTtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0SnNvbkRhdGFzZXRQYXlsb2FkKHJlcXVlc3RhcGkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydkYXRhJ10gPSBkYXRhLnNsaWNlKDAsIDEpO1xuXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gcGF5bG9hZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3JlcXVlc3RJZCddID0gZGF0YXNldC5jb25maWcuc2VydmljZUlkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnYXBpJ10gPSBkYXRhc2V0LmNvbmZpZy5hcGk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFZpZXdUeXBlJ10gPSB0aGlzLnNlbGVjdGVkVmlld1R5cGU7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFdpZGdldENvbmZpZyddID0gKHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnKSA/IHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG5cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRhc2V0Rm9yU3FsVGVtcGxhdGUoZGF0YXNldCkge1xuICAgIGxldCByZXF1ZXN0QXAgPSBkYXRhc2V0LmNvbmZpZy5hcGk7XG4gICAgdGhpcy5kYXRhU291cmNlTW9kYWwgPSB7fTtcbiAgICBsZXQgcmVxdWVzdF9wYXJhbXMgPSB7XG4gICAgICAnZGJDb25maWcnOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5kYkNvbmZpZyxcbiAgICAgICdkYXRhYmFzZU5hbWUnOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5kYXRhYmFzZU5hbWUsXG4gICAgICAnZmlsdGVycyc6IHRoaXMudHJhbnNmb3JtRGF0YUZvck1GaWx0ZXJGb3JTUWwoZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzKSxcbiAgICAgICd0ZW1wbGF0ZVF1ZXJ5JzogZGF0YXNldC5jb25maWcucXVlcnlDb25maWcudGVtcGxhdGVRdWVyeSxcbiAgICAgICdlbnJpY2htZW50cyc6IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLmVucmljaG1lbnRzLFxuICAgIH1cblxuICAgIHRoaXMuc2VydmljZS5nZW5lcmljU3FsUXVlcnlSZXNwb25zZShyZXF1ZXN0QXAsIHJlcXVlc3RfcGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gcGF5bG9hZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3JlcXVlc3RJZCddID0gZGF0YXNldC5jb25maWcuc2VydmljZUlkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnYXBpJ10gPSBkYXRhc2V0LmNvbmZpZy5hcGk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFZpZXdUeXBlJ10gPSB0aGlzLnNlbGVjdGVkVmlld1R5cGU7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFdpZGdldENvbmZpZyddID0gKHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnKSA/IHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG5cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIHRyYW5zZm9ybURhdGFGb3JNRmlsdGVyRm9yU1FsKG1hcERhdGEpIHtcblxuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBtYXBEYXRhLmZvckVhY2gobWFwcGluZyA9PiB7XG4gICAgICBsZXQgcmVzdWx0T2JqID0ge1xuICAgICAgICBjb2x1bW5OYW1lOiBtYXBwaW5nLnNlcnZlckNvbHVtbixcbiAgICAgICAgZGF0YVR5cGU6IG1hcHBpbmcuZGF0YVR5cGUsXG4gICAgICAgIG9wZXJhdG9yOiBtYXBwaW5nLm9wZXJhdG9yTmFtZSxcbiAgICAgICAgYWxpYXNDb2x1bW5OYW1lOiBtYXBwaW5nLmxvY2FsQ29sdW1uLFxuICAgICAgICAvLyB2YWx1ZTogKG1hcHBpbmcub3BlcmF0b3JOYW1lID09IFwiaW5cIiB8fCBtYXBwaW5nLm9wZXJhdG9yTmFtZSA9PSBcIm5vdEluXCIpID8gW21hcHBpbmcuZGVmYXVsdFZhbHVlXSA6IG1hcHBpbmcuZGVmYXVsdFZhbHVlXG4gICAgICAgIHZhbHVlOiBtYXBwaW5nLmRlZmF1bHRWYWx1ZVxuICAgICAgfTtcbiAgICAgIGlmIChtYXBwaW5nLnNlcnZlckNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiByZXN1bHRPYmoudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChtYXBwaW5nLmZvcm1hdHRlciAmJiBtYXBwaW5nLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQobWFwcGluZy5mb3JtYXR0ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdE9iaik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wXCI+XG4gICAgPGxpYi1jb21tb24taGVhZGVyIFtwYWdlVGl0bGVdPVwiJ1ZpZXdzIEVkaXRvcidcIiAqbmdJZj1cImlzSGVhZGVyXCI+PC9saWItY29tbW9uLWhlYWRlcj5cbiAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibS0zIHAtNCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbGcgc2hhZG93LW1kIGRhcms6YmctZ3JheS04MDAgZGFyazpib3JkZXItZ3JheS03MDBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+RGF0YXNldCBMaXN0IDxzcGFuICpuZ0lmPVwiaXNGaWx0ZXJJbnB1dHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYmx1ZS01MDAgY3Vyc29yLXBvaW50ZXJcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0RWRpdERhdGFTZXQoKVwiPjwvaT48L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiZGF0YVNldHRhYmxlRGF0YVNvdXJjZVwiIChvblZhbHVlQ2hhbmdlZCk9XCJnZXREYXRhU2V0RGV0YWlscygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RXhwcj1cImRhdGFzZXROYW1lXCIgdmFsdWVFeHByPVwiZGF0YXNldElkXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkRGF0YVNldE9uZWRpdC5kYXRhc2V0SWRcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5TZWxlY3QgVmlldyBUeXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiWydjaGFydCcsJ3RhYmxlJywnZ3JvdXBUYWJsZScsJ290aGVycycsJ2hlYXRtYXAnXVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRWaWV3VHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImdldFZpZXdUeXBlKCRldmVudClcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3VHlwZSA9PSdvdGhlcnMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+U2VsZWN0IENvbXBvbmVudDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJjb21wb25lbnROYW1lc090aGVyc1wiIGRpc3BsYXlFeHByPVwiaXRlbVwiIHZhbHVlRXhwcj1cImNvbXBOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21wb25lbnROYW1lXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPlZpZXcgTmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiY3JlYXRDb21wVmlld09iamVjdC52aWV3TmFtZVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5WaWV3IExhYmVsPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJjcmVhdENvbXBWaWV3T2JqZWN0LnZpZXdMYWJlbFwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0ZpbHRlcklucHV0c1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXF1ZXN0IG9mIHNlbGVjdGVkRGF0YVNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0xXCI+IHt7Z2V0Q2FwaXRhbGl6ZShyZXF1ZXN0LmxvY2FsQ29sdW1uKX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1kYXRlLWJveCBkaXNwbGF5Rm9ybWF0PVwieXl5eS1NTS1kZFwiIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJzdGFydERhdGVDaGFuZ2UoJGV2ZW50LHJlcXVlc3QpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0RmlsdGVyKHJlcXVlc3QubG9jYWxDb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cInJlcXVlc3QuZGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWdldEZpbHRlcihyZXF1ZXN0LmxvY2FsQ29sdW1uKVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBtdC01IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX1cIiAoY2xpY2spPVwiYWRkTmV3VmlldygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNldCBWaWV3XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX0gY3Vyc29yLXBvaW50ZXIgbXgtNCBteS0yXCIgKGNsaWNrKT1cImNyZWF0ZU5ld1ZpZXcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VlZFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tNSBib3JkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWxvYWRlciAqbmdJZj1cImlzTG9hZGVyXCI+PC9hcHAtbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZm9yIGNoYXJ0IHZpZXcgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzR2VuZXJhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlld1R5cGUgPT0gJ2NoYXJ0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1kYXNoLWNoYXJ0IFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0Q2hhcnRDb25maWdPdXRQdXQpPVwiZ2V0RW1pdE5ld0NoYXJ0Q29uZ2lnKCRldmVudClcIj48L2FwcC1kYXNoLWNoYXJ0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlld1R5cGUgPT0gJ2hlYXRtYXAnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWhlYXQtbWFwIFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0SGVhdE1hcENvbmZpZ091dFB1dCk9XCJnZXRFbWl0TmV3SGVhdE1hcENvbmZpZygkZXZlbnQpXCI+PC9hcHAtaGVhdC1tYXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGZvciB0YWJsZSB2aWV3IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3VHlwZSA9PSAndGFibGUnIHx8IHNlbGVjdGVkVmlld1R5cGUgPT0gJ2dyb3VwVGFibGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWRhc2gtdGFibGUgW2RhdGFzZXRtb2RhbF09XCJkYXRhU291cmNlTW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXRUYWJsZUNvbmZpZ091dFB1dCk9XCJnZXRFbWl0TmV3VGFibGVDb25maWcoJGV2ZW50KVwiPjwvYXBwLWRhc2gtdGFibGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGZvciBvdGhlcnMgdmlldyAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXdUeXBlID09ICdvdGhlcnMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50TmFtZSA9PSAnR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtdGFibGUtd2l0aC1iYXIgW2RhdGFzZXRtb2RhbF09XCJkYXRhU291cmNlTW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3JlYXRlT3RoZXJDb21wb25lbnRWaWV3KT1cImdldEVtaXROZXdPdGhlclNldENvbmdpZygkZXZlbnQpXCI+PC9hcHAtdGFibGUtd2l0aC1iYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbXBvbmVudE5hbWUgPT0gJ0dhbW1hR2VvQ2hhcnRDb21wb25lbnQnICYmICBjb21wb25lbnROYW1lICE9ICdHYW1tYVRhYmxlV2l0aFBlcmNlbnRhZ2VDb21wb25lbnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YXBwLWdhbW1hLWdlby1jaGFydD48L2FwcC1nYW1tYS1nZW8tY2hhcnQ+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZ2VvLW1hcCBbZGF0YXNldG1vZGFsXT1cImRhdGFTb3VyY2VNb2RhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjcmVhdGVPdGhlckNvbXBvbmVudFZpZXcpPVwiZ2V0RW1pdE5ld090aGVyU2V0Q29uZ2lnKCRldmVudClcIj48L2FwcC1nZW8tbWFwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbXBvbmVudE5hbWUgIT0gJ0dhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudCcgJiYgY29tcG9uZW50TmFtZSAhPSAnR2FtbWFHZW9DaGFydENvbXBvbmVudCcgJiYgIGNvbXBvbmVudE5hbWUgIT0gJ0dhbW1TaW5nbGVOdW1iZXJDYXJkQ29tcG9uZW50J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItZGFzaC10b2RheS1wcmV2aW91cyBbZGF0YXNldG1vZGFsXT1cImRhdGFTb3VyY2VNb2RhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdldHRvZGF5UHJldmlvdXNDb25maWdPdXRQdXQpPVwiZ2V0RW1pdE5ld090aGVyU2V0Q29uZ2lnKCRldmVudClcIj48L2xpYi1kYXNoLXRvZGF5LXByZXZpb3VzPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbXBvbmVudE5hbWUgIT0gJ0dhbW1hVGFibGVXaXRoUGVyY2VudGFnZUNvbXBvbmVudCcgJiYgY29tcG9uZW50TmFtZSAhPSAnR2FtbWFHZW9DaGFydENvbXBvbmVudCcgJiYgY29tcG9uZW50TmFtZSAhPSAnR2FtbWFUb2RheVByZXZpb3VzQ29tcG9uZW50J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItc2luZ2xlLWNhcmQgW2RhdGFzZXRtb2RhbF09XCJkYXRhU291cmNlTW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXRTaW5nbGVDYXJkQ29uZmlnT3V0UHV0KT1cImdldEVtaXROZXdPdGhlclNldENvbmdpZygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItc2luZ2xlLWNhcmQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|