@tsi-developpement/tsi-shared-ui 1.9.11 → 1.9.13

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.
@@ -248,6 +248,7 @@ export class TsiViewGridComponent {
248
248
  items: value.items,
249
249
  totalCount: value.totalCount,
250
250
  summaries: value.summaries ? value.summaries : [],
251
+ groups: value.groups,
251
252
  totalPages: (this.page.totalCount - (this.page.totalCount % this.page.pageSize)) / this.page.pageSize + 1,
252
253
  };
253
254
  }
@@ -345,7 +346,7 @@ export class TsiViewGridComponent {
345
346
  }
346
347
  }
347
348
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiViewGridComponent, deps: [{ token: i1.ErrorResponseManagerService }, { token: i2.TsiModalService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
348
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiViewGridComponent, selector: "tsi-view-grid", inputs: { columns: "columns", gridConfiguration: "gridConfiguration", viewComponent: "viewComponent", crudService: "crudService", header: "header", modalSize: "modalSize", showConsultButton: "showConsultButton", showSearchField: "showSearchField", searchFields: "searchFields", formEndpoint: "formEndpoint", formName: "formName", id: "id", showImportExportButton: "showImportExportButton", targetBusinessClass: "targetBusinessClass", getDataFromApi: "getDataFromApi", gridData: "gridData", isSearchButtonDisabled: "isSearchButtonDisabled", selectKeyOnly: "selectKeyOnly", selectionMode: "selectionMode", selectedItems: "selectedItems", key: "key", showGlobalSearch: "showGlobalSearch", showExportButton: "showExportButton", showCalenderView: "showCalenderView", showHeaderFilters: "showHeaderFilters", showFilterButton: "showFilterButton", selectAll: "selectAll", checkedByField: "checkedByField", sortMode: "sortMode", sizingMode: "sizingMode", searchOnInit: "searchOnInit" }, outputs: { summariesChange: "summariesChange", selectedItemsChange: "selectedItemsChange", buttonColumnClicked: "buttonColumnClicked", searchFieldsValueChanged: "searchFieldsValueChanged", getAllPagedResultChanged: "getAllPagedResultChanged" }, viewQueries: [{ propertyName: "genericGridComponent", first: true, predicate: TsiGenericGridComponent, descendants: true }], ngImport: i0, template: "<div class=\"card\">\r\n \r\n <p-toolbar *ngIf=\"formEndpoint\" styleClass=\"border-radius-7 mb-1 flex align-items-center gap-2\">\r\n <ng-template pTemplate=\"left\">\r\n <div class=\"flex gap-2 ml-2\">\r\n <Tsi-Button icon=\"pi pi-sliders-h\" [tooltipPosition]=\"tooltipPosition.Top\" tooltipText=\"shared_tsi_component_grid_menu_view\" *ngIf=\"searchFields\"\r\n styleClass=\"h-2rem hover:shadow-6 p-button-icon-only {{showSearchField ? 'p-button-secondary' : 'p-button-success'}}\" \r\n (click)=\"displaySearchFields()\">\r\n </Tsi-Button>\r\n <Tsi-Button icon=\"p-button-icon pi pi-calendar {{showCalenderView ? 'pi pi-align-justify' : 'pi pi-calendar'}}\" \r\n styleClass=\"p-element p-button-primary hover:shadow-6 h-2rem p-button p-component p-button-icon-only\" (click)=\"toggleCalenderView()\" \r\n tooltipText=\"{{(showCalenderView ? 'shared_tsi_component_grid_list_view' : 'shared_tsi_component_grid_calender_view') | localize}}\" [tooltipPosition]=\"tooltipPosition.Top\"></Tsi-Button>\r\n </div>\r\n </ng-template>\r\n \r\n <ng-template pTemplate=\"right\">\r\n <app-reporting *ngIf=\"formEndpoint || businessClass\"\r\n [formEndpoint]=\"formEndpoint\"\r\n [formName]=\"formName\"\r\n [formEndpointBody]=\"formEndpointBody\"\r\n [isFormEndpointPaged]=\"true\"\r\n [showImportExportButton]=\"showImportExportButton\"\r\n (refreshData)=\"refresh($event)\"\r\n [filtersHtmlTemplate]=\"filtersHtmlTemplate\"\r\n [businessClass]=\"businessClass\"\r\n [pagedRequest]=\"pagedRequest\"\r\n [configModeButtonId]=\"configModeButtonId\"\r\n [showNoteButton]=\"false\"\r\n [showActionButton]=\"false\"\r\n [showInfoButton]=\"false\"\r\n [showUploadButton]=\"false\"\r\n [selectedItemUids]=\"selectedItems\"\r\n ></app-reporting>\r\n </ng-template>\r\n </p-toolbar>\r\n \r\n <div>\r\n\r\n <Tsi-Generic-Grid \r\n [formName]=\"formName\" \r\n [header]=\"header\" \r\n [page]=\"page\" \r\n [pagedRequest]=\"pagedRequest\" \r\n [columns]=\"columns\"\r\n [searchFields]=\"searchFields\" \r\n [showSearchField]=\"showSearchField\" \r\n (load)=\"load($event)\"\r\n (searchFieldsValueChanged)=\"searchFieldsValueChanges($event)\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [(filtersHtmlTemplate)]=\"filtersHtmlTemplate\"\r\n [selectKeyOnly]=\"selectKeyOnly\"\r\n [selectionMode]=\"selectionMode\"\r\n [showImportExportButton]=\"showImportExportButton\"\r\n [key]=\"key\"\r\n [crudService]=\"crudService\"\r\n [(selectedItems)]=\"selectedItems\"\r\n (selectedItemsChange)=\"onSelectedItemsChange($event)\"\r\n [isGridDataPagedInApi]=\"getDataFromApi\"\r\n [searchOnInit]=\"searchOnInit\"\r\n [showExportButton]=\"showExportButton\"\r\n [showHeaderFilters]=\"showHeaderFilters\"\r\n [showFilterButton]=\"showFilterButton\"\r\n [showGlobalSearch]=\"showGlobalSearch\"\r\n [isSearchButtonDisabled]=\"isSearchButtonDisabled\"\r\n [showCalenderView]=\"showCalenderView\"\r\n (calendarEventClick)=\"handleCalendarEventClick($event)\"\r\n [selectAll]=\"selectAll\"\r\n [checkedByField]=\"checkedByField\"\r\n [targetBusinessClass]=\"targetBusinessClass\"\r\n [sortMode]=\"sortMode\"\r\n [sizingMode]=\"sizingMode\"\r\n ></Tsi-Generic-Grid>\r\n </div>\r\n</div>", styles: [".hide-search-fields{background-color:#64748b!important;border-color:#64748b!important}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }, { kind: "component", type: i6.TsiGenericGridComponent, selector: "Tsi-Generic-Grid", inputs: ["cudComponent", "modalSize", "showInfoButton", "showDownloadButton", "showUploadButton", "showNoteButton", "showActionButton", "sizingMode", "formName", "id", "pagedRequest", "configuration", "page", "key", "columns", "isSearchButtonDisabled", "filteredColumns", "gridData", "isTableLoading", "parent", "showSearchBox", "showActionColumn", "showHeaderFilters", "showFilterButton", "isGridDataPagedInApi", "header", "ShowFilterColumns", "showImportExportButton", "crudService", "searchFields", "sortMode", "filtersHtmlTemplate", "presentationSettings", "selectKeyOnly", "selectionMode", "selectedItems", "searchOnInit", "showGlobalSearch", "showExportButton", "showSearchField", "showCalenderView", "calenderSchema", "showCardView", "showKanbanView", "showKanbanViewOfWorkFlowEtat", "page$", "checkedByField", "selectAll", "targetBusinessClass", "descriminatorValue", "businessClass", "entityInfo"], outputs: ["onSave", "editRow", "deleteRow", "load", "buttonColumnClicked", "filtersHtmlTemplateChange", "selectedItemsChange", "searchFieldsValueChanged", "calendarEventClick", "statusFilterChanged"] }, { kind: "component", type: i7.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "component", type: i8.ReportingComponent, selector: "app-reporting", inputs: ["showImportExportButton", "showNoteButton", "showInfoButton", "showUploadButton", "showActionButton", "isReportingToolbarDisabled", "formName", "formEndpoint", "formEndpointBody", "isFormEndpointPaged", "filtersHtmlTemplate", "optionalEndpoints", "businessClass", "cudComponent", "httpMethodType", "requestData", "customReportingMode", "pagedRequest", "reportDiscriminator", "nombreDocumentsJoints", "id", "configModeButtonId", "selectedItemUids", "fromTsiForm", "customSendMailMode", "reportingInformation"], outputs: ["onSave", "refreshData", "closedModalFileUpload", "toggleDesignMode"] }, { kind: "pipe", type: i9.LocalizePipe, name: "localize" }] }); }
349
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiViewGridComponent, selector: "tsi-view-grid", inputs: { columns: "columns", gridConfiguration: "gridConfiguration", viewComponent: "viewComponent", crudService: "crudService", header: "header", modalSize: "modalSize", showConsultButton: "showConsultButton", showSearchField: "showSearchField", searchFields: "searchFields", formEndpoint: "formEndpoint", formName: "formName", id: "id", showImportExportButton: "showImportExportButton", targetBusinessClass: "targetBusinessClass", getDataFromApi: "getDataFromApi", gridData: "gridData", isSearchButtonDisabled: "isSearchButtonDisabled", selectKeyOnly: "selectKeyOnly", selectionMode: "selectionMode", selectedItems: "selectedItems", key: "key", showGlobalSearch: "showGlobalSearch", showExportButton: "showExportButton", showCalenderView: "showCalenderView", showHeaderFilters: "showHeaderFilters", showFilterButton: "showFilterButton", selectAll: "selectAll", checkedByField: "checkedByField", sortMode: "sortMode", sizingMode: "sizingMode", searchOnInit: "searchOnInit" }, outputs: { summariesChange: "summariesChange", selectedItemsChange: "selectedItemsChange", buttonColumnClicked: "buttonColumnClicked", searchFieldsValueChanged: "searchFieldsValueChanged", getAllPagedResultChanged: "getAllPagedResultChanged" }, viewQueries: [{ propertyName: "genericGridComponent", first: true, predicate: TsiGenericGridComponent, descendants: true }], ngImport: i0, template: "<div class=\"card\">\r\n \r\n <p-toolbar *ngIf=\"formEndpoint\" styleClass=\"border-radius-7 mb-1 flex align-items-center gap-2\">\r\n <ng-template pTemplate=\"left\">\r\n <div class=\"flex gap-2 ml-2\">\r\n <Tsi-Button icon=\"pi pi-sliders-h\" [tooltipPosition]=\"tooltipPosition.Top\" tooltipText=\"shared_tsi_component_grid_menu_view\" *ngIf=\"searchFields\"\r\n styleClass=\"h-2rem hover:shadow-6 p-button-icon-only {{showSearchField ? 'p-button-secondary' : 'p-button-success'}}\" \r\n (click)=\"displaySearchFields()\">\r\n </Tsi-Button>\r\n <Tsi-Button icon=\"p-button-icon pi pi-calendar {{showCalenderView ? 'pi pi-align-justify' : 'pi pi-calendar'}}\" \r\n styleClass=\"p-element p-button-primary hover:shadow-6 h-2rem p-button p-component p-button-icon-only\" (click)=\"toggleCalenderView()\" \r\n tooltipText=\"{{(showCalenderView ? 'shared_tsi_component_grid_list_view' : 'shared_tsi_component_grid_calender_view') | localize}}\" [tooltipPosition]=\"tooltipPosition.Top\"></Tsi-Button>\r\n </div>\r\n </ng-template>\r\n \r\n <ng-template pTemplate=\"right\">\r\n <app-reporting *ngIf=\"formEndpoint || businessClass\"\r\n [formEndpoint]=\"formEndpoint\"\r\n [formName]=\"formName\"\r\n [formEndpointBody]=\"formEndpointBody\"\r\n [isFormEndpointPaged]=\"true\"\r\n [showImportExportButton]=\"showImportExportButton\"\r\n (refreshData)=\"refresh($event)\"\r\n [filtersHtmlTemplate]=\"filtersHtmlTemplate\"\r\n [businessClass]=\"businessClass\"\r\n [pagedRequest]=\"pagedRequest\"\r\n [configModeButtonId]=\"configModeButtonId\"\r\n [showNoteButton]=\"false\"\r\n [showActionButton]=\"false\"\r\n [showInfoButton]=\"false\"\r\n [showUploadButton]=\"false\"\r\n [selectedItemUids]=\"selectedItems\"\r\n ></app-reporting>\r\n </ng-template>\r\n </p-toolbar>\r\n \r\n <div>\r\n\r\n <Tsi-Generic-Grid \r\n [formName]=\"formName\" \r\n [header]=\"header\" \r\n [page]=\"page\" \r\n [pagedRequest]=\"pagedRequest\" \r\n [columns]=\"columns\"\r\n [searchFields]=\"searchFields\" \r\n [showSearchField]=\"showSearchField\" \r\n (load)=\"load($event)\"\r\n (searchFieldsValueChanged)=\"searchFieldsValueChanges($event)\"\r\n (buttonColumnClicked)=\"handleButtonColumnClicked($event)\"\r\n [(filtersHtmlTemplate)]=\"filtersHtmlTemplate\"\r\n [selectKeyOnly]=\"selectKeyOnly\"\r\n [selectionMode]=\"selectionMode\"\r\n [showImportExportButton]=\"showImportExportButton\"\r\n [key]=\"key\"\r\n [crudService]=\"crudService\"\r\n [(selectedItems)]=\"selectedItems\"\r\n (selectedItemsChange)=\"onSelectedItemsChange($event)\"\r\n [isGridDataPagedInApi]=\"getDataFromApi\"\r\n [searchOnInit]=\"searchOnInit\"\r\n [showExportButton]=\"showExportButton\"\r\n [showHeaderFilters]=\"showHeaderFilters\"\r\n [showFilterButton]=\"showFilterButton\"\r\n [showGlobalSearch]=\"showGlobalSearch\"\r\n [isSearchButtonDisabled]=\"isSearchButtonDisabled\"\r\n [showCalenderView]=\"showCalenderView\"\r\n (calendarEventClick)=\"handleCalendarEventClick($event)\"\r\n [selectAll]=\"selectAll\"\r\n [checkedByField]=\"checkedByField\"\r\n [targetBusinessClass]=\"targetBusinessClass\"\r\n [sortMode]=\"sortMode\"\r\n [sizingMode]=\"sizingMode\"\r\n ></Tsi-Generic-Grid>\r\n </div>\r\n</div>", styles: [".hide-search-fields{background-color:#64748b!important;border-color:#64748b!important}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass", "ariaLabelledBy"] }, { kind: "component", type: i6.TsiGenericGridComponent, selector: "Tsi-Generic-Grid", inputs: ["cudComponent", "modalSize", "showInfoButton", "showDownloadButton", "showUploadButton", "showNoteButton", "showActionButton", "sizingMode", "formName", "id", "pagedRequest", "configuration", "page", "key", "columns", "isSearchButtonDisabled", "filteredColumns", "gridData", "isTableLoading", "parent", "showSearchBox", "showActionColumn", "showHeaderFilters", "showFilterButton", "isGridDataPagedInApi", "header", "ShowFilterColumns", "showImportExportButton", "crudService", "searchFields", "sortMode", "filtersHtmlTemplate", "presentationSettings", "selectKeyOnly", "selectionMode", "selectedItems", "searchOnInit", "showGlobalSearch", "showExportButton", "showSearchField", "showCalenderView", "calenderSchema", "showCardView", "showKanbanView", "showKanbanViewOfWorkFlowEtat", "page$", "checkedByField", "selectAll", "targetBusinessClass", "descriminatorValue", "businessClass", "groupBy", "entityInfo"], outputs: ["onSave", "editRow", "deleteRow", "load", "buttonColumnClicked", "filtersHtmlTemplateChange", "selectedItemsChange", "searchFieldsValueChanged", "calendarEventClick", "statusFilterChanged"] }, { kind: "component", type: i7.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "component", type: i8.ReportingComponent, selector: "app-reporting", inputs: ["showImportExportButton", "showNoteButton", "showInfoButton", "showUploadButton", "showActionButton", "isReportingToolbarDisabled", "formName", "formEndpoint", "formEndpointBody", "isFormEndpointPaged", "filtersHtmlTemplate", "optionalEndpoints", "businessClass", "cudComponent", "httpMethodType", "requestData", "customReportingMode", "pagedRequest", "reportDiscriminator", "nombreDocumentsJoints", "id", "configModeButtonId", "selectedItemUids", "fromTsiForm", "customSendMailMode", "reportingInformation"], outputs: ["onSave", "refreshData", "closedModalFileUpload", "toggleDesignMode"] }, { kind: "pipe", type: i9.LocalizePipe, name: "localize" }] }); }
349
350
  }
350
351
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiViewGridComponent, decorators: [{
351
352
  type: Component,
@@ -426,4 +427,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
426
427
  }], getAllPagedResultChanged: [{
427
428
  type: Output
428
429
  }] } });
429
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLXZpZXctZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvb3V0cHV0LWNvbXBvbmVudHMvdHNpLXZpZXctZ3JpZC90c2ktdmlldy1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktdmlldy1ncmlkL3RzaS12aWV3LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdHLE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU9uSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7Ozs7Ozs7QUFPekYsTUFBTSxPQUFPLG9CQUFvQjtJQTRCL0IsSUFBSSxJQUFJLENBQUMsS0FBaUI7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBa0JELElBQWEsT0FBTyxDQUFDLEtBQW1CO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQW1CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFVckQsSUFBYSxZQUFZLENBQUMsS0FBeUI7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LEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBYUksZUFBZTtzQkFBeEIsTUFBTTtnQkFFRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHdCQUF3QjtzQkFBakMsTUFBTTtnQkFDRyx3QkFBd0I7c0JBQWpDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgQ29tcG9uZW50X01vZGVzLCBHcmlkU2VsZWN0aW9uTW9kZSwgR3JpZFNpemluZ01vZGUsIEdyaWRTb3J0TW9kZSwgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMnO1xyXG5pbXBvcnQgeyBCdXR0b25DbGlja1Jlc3VsdCwgR3JpZENvbHVtbiwgSUdyaWRDb25maWd1cmF0aW9uLCBJTW9kYWxTaXplIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IElQYWdlLCBJUGFnZWRSZXF1ZXN0LCBJUGFnZWRSZXNwb25zZSwgSVN1bW1hcnlGb3JQcm9wcmV0eSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLWJhc2UnO1xyXG5pbXBvcnQgeyBTZWFyY2hGaWVsZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENydWRCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Jhc2UvY3J1ZC1iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2RhbC90c2ktbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi9lcnJvci1yZXNwb25zZS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lHZW5lcmljR3JpZENvbXBvbmVudCB9IGZyb20gJy4uL3RzaS1nZW5lcmljLWdyaWQvdHNpLWdlbmVyaWMtZ3JpZC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0c2ktdmlldy1ncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHNpLXZpZXctZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHNpLXZpZXctZ3JpZC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHNpVmlld0dyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAvLyNyZWdpb24gbG9jYWwgdmFyc1xyXG4gIHByaXZhdGUgX2RpYWxvZ1JlZj86IER5bmFtaWNEaWFsb2dSZWY7XHJcbiAgcHJpdmF0ZSBfZm9ybUVuZHBvaW50OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgdG9vbHRpcFBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uO1xyXG4gIGl0ZW1zPzogYW55W107XHJcblxyXG4gIHBhZ2VkUmVxdWVzdDogSVBhZ2VkUmVxdWVzdCA9IHtcclxuICAgIG1heFJlc3VsdENvdW50OiAxMCxcclxuICAgIHNraXBDb3VudDogMCxcclxuICAgIHNvcnRpbmc6IFtdLFxyXG4gICAga2V5d29yZDogJycsXHJcbiAgICBmaWx0ZXJzOiBbXSxcclxuICAgIGdldEFsbERhdGE6IGZhbHNlLFxyXG4gICAgc3VtbWFyaWVzOiBbXSxcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9wYWdlOiBJUGFnZTxhbnk+ID0ge1xyXG4gICAgaXRlbXM6IFtdLFxyXG4gICAgcGFnZVNpemU6IDEwLFxyXG4gICAgcGFnZU51bWJlcjogMSxcclxuICAgIHRvdGFsQ291bnQ6IDAsXHJcbiAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgc3VtbWFyaWVzOiBbXSxcclxuICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gIH07XHJcblxyXG4gIHNldCBwYWdlKHZhbHVlOiBJUGFnZTxhbnk+KSB7XHJcbiAgICB0aGlzLl9wYWdlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgcGFnZSgpOiBJUGFnZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9wYWdlO1xyXG4gIH1cclxuICBmaXJzdDogbnVtYmVyID0gMDtcclxuICByb3dzID0gMTtcclxuICBmb3JtRW5kcG9pbnRCb2R5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgZmlsdGVyc0h0bWxUZW1wbGF0ZT86IHN0cmluZyA9ICcnO1xyXG5cclxuICBjb25maWdNb2RlQnV0dG9uSWQ6IHN0cmluZyA9IFwiY29uZmctbW9kZS1idXR0b24tZnJvbS1saXN0XCJcclxuXHJcbiAgcHVibGljIGJ1c2luZXNzQ2xhc3M/OiBzdHJpbmc7XHJcblxyXG4gIF9zZWFyY2hPbkluaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBAVmlld0NoaWxkKFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50KSBnZW5lcmljR3JpZENvbXBvbmVudD86IFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50O1xyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIElucHV0c1xyXG4gIHByaXZhdGUgX2NvbHVtbnM6IEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNldCBjb2x1bW5zKHZhbHVlOiBHcmlkQ29sdW1uW10pIHtcclxuICAgIHRoaXMuX2NvbHVtbnMgPSB2YWx1ZSA/PyBbXTtcclxuICB9XHJcblxyXG4gIGdldCBjb2x1bW5zKCk6IEdyaWRDb2x1bW5bXSB7IHJldHVybiB0aGlzLl9jb2x1bW5zOyB9XHJcblxyXG4gIEBJbnB1dCgpIGdyaWRDb25maWd1cmF0aW9uPzogSUdyaWRDb25maWd1cmF0aW9uO1xyXG4gIEBJbnB1dCgpIHZpZXdDb21wb25lbnQ6IGFueTtcclxuICBASW5wdXQoKSBjcnVkU2VydmljZT86IENydWRCYXNlU2VydmljZTxhbnksIGFueSwgYW55LCBhbnk+O1xyXG4gIEBJbnB1dCgpIGhlYWRlcjogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgbW9kYWxTaXplPzogSU1vZGFsU2l6ZTtcclxuICBASW5wdXQoKSBzaG93Q29uc3VsdEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hGaWVsZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2VhcmNoRmllbGRzOiBTZWFyY2hGaWVsZFtdIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHNldCBmb3JtRW5kcG9pbnQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX2Zvcm1FbmRwb2ludCA9IGAke3ZhbHVlfS9nZXRhbGxwYWdlZGA7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBmb3JtRW5kcG9pbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZm9ybUVuZHBvaW50O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZm9ybU5hbWU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaWQ/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2hvd0ltcG9ydEV4cG9ydEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRhcmdldEJ1c2luZXNzQ2xhc3M/OiBzdHJpbmc7XHJcblxyXG4gIF9ncmlkRGF0YTogQXJyYXk8YW55PiA9IFtdO1xyXG5cclxuICAvL2dyaWQgc2VsZWN0aW9uXHJcbiAgQElucHV0KCkgZ2V0RGF0YUZyb21BcGk6IGJvb2xlYW4gPSB0cnVlXHJcblxyXG4gIC8vIEBJbnB1dCgpIGdyaWREYXRhPzogQXJyYXk8YW55PlxyXG5cclxuICBASW5wdXQoKSBwdWJsaWMgZ2V0IGdyaWREYXRhKCk6IEFycmF5PGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dyaWREYXRhO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBncmlkRGF0YShkYXRhOiBBcnJheTxhbnk+KSB7XHJcbiAgICB0aGlzLl9ncmlkRGF0YSA9IFtdO1xyXG4gICAgdGhpcy5fZ3JpZERhdGEgPSBkYXRhO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9ncmlkRGF0YSAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5fZ3JpZERhdGEgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9pbml0UGFnZUZyb21HcmlkRGF0YShkYXRhKTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuX2dyaWREYXRhID09IHVuZGVmaW5lZCB8fCB0aGlzLl9ncmlkRGF0YSA9PSBudWxsXHJcbiAgICApIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yICEgeW91IG11c3QgcHJvdmlkZSBncmlkIERhdGEhXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pc1NlYXJjaEJ1dHRvbkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHVibGljIHNldCBpc1NlYXJjaEJ1dHRvbkRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pc1NlYXJjaEJ1dHRvbkRpc2FibGVkID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzU2VhcmNoQnV0dG9uRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNTZWFyY2hCdXR0b25EaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNlbGVjdEtleU9ubHk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGU6IEdyaWRTZWxlY3Rpb25Nb2RlID0gR3JpZFNlbGVjdGlvbk1vZGUuTm9uZTtcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgQElucHV0KCkga2V5OiBzdHJpbmcgPSAndWlkJztcclxuICBASW5wdXQoKSBzaG93R2xvYmFsU2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RXhwb3J0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93Q2FsZW5kZXJWaWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0hlYWRlckZpbHRlcnM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dGaWx0ZXJCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNlbGVjdEFsbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgY2hlY2tlZEJ5RmllbGQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIHNvcnRNb2RlOiBHcmlkU29ydE1vZGUgfCBhbnkgPSBHcmlkU29ydE1vZGUuTXVsdGlwbGU7XHJcbiAgQElucHV0KCkgc2l6aW5nTW9kZTogR3JpZFNpemluZ01vZGUgPSBHcmlkU2l6aW5nTW9kZS5GaWxsO1xyXG5cclxuICBASW5wdXQoKSBzZXQgc2VhcmNoT25Jbml0KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkIHx8IHZhbHVlID09IG51bGwpIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NlYXJjaE9uSW5pdCA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNlYXJjaE9uSW5pdCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWFyY2hPbkluaXQ7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvbiBPdXRwdXRzXHJcblxyXG4gIEBPdXRwdXQoKSBzdW1tYXJpZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxJU3VtbWFyeUZvclByb3ByZXR5Pj4gPVxyXG4gICAgbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxJU3VtbWFyeUZvclByb3ByZXR5Pj4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PGFueT4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxhbnk+PigpO1xyXG5cclxuICBAT3V0cHV0KCkgYnV0dG9uQ29sdW1uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPEJ1dHRvbkNsaWNrUmVzdWx0PiA9IG5ldyBFdmVudEVtaXR0ZXI8QnV0dG9uQ2xpY2tSZXN1bHQ+KCk7XHJcbiAgQE91dHB1dCgpIHNlYXJjaEZpZWxkc1ZhbHVlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFycmF5PFNlYXJjaEZpZWxkPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFNlYXJjaEZpZWxkPj4oKTtcclxuICBAT3V0cHV0KCkgZ2V0QWxsUGFnZWRSZXN1bHRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAvLyNyZWdpb24gT3V0cHV0c1xyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZTogRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHNpTW9kYWxTZXJ2aWNlOiBUc2lNb2RhbFNlcnZpY2UsIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29sdW1ucyA9PSBudWxsICYmIHRoaXMuY29sdW1ucyA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICdjb2x1bW5zIGNhbnQgYmUgbnVsbCBvciB1bmRlZmluZWQsIGRldmVsb3BwZXIgbXVzdCBzZXQgY29sdW1ucyBvZiBncmlkICEnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd0NvbnN1bHRCdXR0b24gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyOiAnc2hhcmVkX2FjdGlvbnNfY29uc3VsdCcsXHJcbiAgICAgICAgICBmaWVsZDogJ2NvbnN1bHQnLFxyXG4gICAgICAgICAgaXNCdXR0b246IHRydWUsXHJcbiAgICAgICAgICBidXR0b25JY29uOiAncGkgcGktZXllJyxcclxuICAgICAgICAgIHN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQnLFxyXG4gICAgICAgICAgdG9vbFRpcFRleHQ6IFwic2hhcmVkX2FjdGlvbl9jb25zdWx0XCJcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRoaXMuY29sdW1ucyxcclxuICAgICAgXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICNyZWdpb24gZ3JpZCBzdGF0ZVxyXG5cclxuICBnZXRTdGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50LmdldFN0YXRlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgcmVzdG9yZVN0YXRlKGNvbmZpZ3VyYXRpb246IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5nZW5lcmljR3JpZENvbXBvbmVudC5yZXN0b3JlU3RhdGUoY29uZmlndXJhdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldFNlbGVjdGVkQ29sdW1ucyhjb25maWd1cmF0aW9uOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQucmVzZXRTZWxlY3RlZENvbHVtbnMoY29uZmlndXJhdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIGlzTGFzdFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlXHJcbiAgICAgID8gdGhpcy5wYWdlLnBhZ2VOdW1iZXIgPT09IHRoaXMucGFnZS50b3RhbENvdW50IC0gdGhpcy5wYWdlLnBhZ2VTaXplXHJcbiAgICAgIDogdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlzRmlyc3RQYWdlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZSA/IHRoaXMucGFnZS5wYWdlTnVtYmVyID09PSAwIDogdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNlYXJjaEZpZWxkc1ZhbHVlQ2hhbmdlcyhuZXdTZWFyY2hGaWVsZFZhbHVlczogQXJyYXk8U2VhcmNoRmllbGQ+KSB7XHJcbiAgICB0aGlzLnNlYXJjaEZpZWxkc1ZhbHVlQ2hhbmdlZC5lbWl0KG5ld1NlYXJjaEZpZWxkVmFsdWVzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExhenlMb2FkXHJcbiAgICovXHJcbiAgLy9maXJzdCA9PT4gcGFnZS5wYWdlTnVtYmVyXHJcbiAgLy9yb3dzID09PiBwYWdlLnBhZ2VTaXplXHJcbiAgLy90aGlzLnBhZ2UuaXRlbXMubGVuZ3RoID09PiB0b3RhbCBjb3VudFxyXG5cclxuICBoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKGV2ZW50OiBCdXR0b25DbGlja1Jlc3VsdCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZ2V0RGF0YUZyb21BcGkpIHtcclxuICAgICAgaWYgKGV2ZW50LmZpZWxkID09ICdjb25zdWx0JyAmJiB0aGlzLnZpZXdDb21wb25lbnQgIT0gdW5kZWZpbmVkICYmIHRoaXMudmlld0NvbXBvbmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGl0ZW1LZXk6IGFueSA9IHRoaXMuc2VsZWN0S2V5T25seSA/IGV2ZW50LmtleSA6IGV2ZW50LmtleVt0aGlzLmtleV07XHJcbiAgICAgICAgdGhpcy5fY29uc3VsdFJvdyhpdGVtS2V5KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCh7XHJcbiAgICAgICAga2V5OiBldmVudC5rZXksXHJcbiAgICAgICAgZmllbGQ6IGV2ZW50LmZpZWxkLFxyXG4gICAgICAgIHNlbGVjdEtleU9ubHk6IHRoaXMuc2VsZWN0S2V5T25seSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJ1dHRvbkNvbHVtbkNsaWNrZWQuZW1pdCh7XHJcbiAgICAgICAga2V5OiBldmVudC5rZXksXHJcbiAgICAgICAgZmllbGQ6IGV2ZW50LmZpZWxkLFxyXG4gICAgICAgIHNlbGVjdEtleU9ubHk6IHRoaXMuc2VsZWN0S2V5T25seSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmdldERhdGFGcm9tQXBpKSB7XHJcbiAgICAgIHRoaXMucGFnZWRSZXF1ZXN0ID0gZXZlbnQucmVxdWVzdDtcclxuICAgICAgdGhpcy5fc2V0Zm9ybUVuZHBvaW50Qm9keSgpO1xyXG4gICAgICB0aGlzLl9sb2FkRFMoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQga2V5d29yZCA9IHRoaXMucGFnZWRSZXF1ZXN0Py5rZXl3b3JkPy50b0xvY2FsZUxvd2VyQ2FzZSgpXHJcbiAgICAgIGlmICgha2V5d29yZCB8fCBrZXl3b3JkID09IFwiXCIpIHtcclxuICAgICAgICB0aGlzLl9pbml0UGFnZUZyb21HcmlkRGF0YSgpXHJcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcbiAgICAgIGxldCBkYXRhID0gWy4uLnRoaXMuX2dyaWREYXRhXTtcclxuICAgICAgbGV0IGZpbHRlcmVkRGF0YSA9IGRhdGEuZmlsdGVyKGl0ZW0gPT5cclxuICAgICAgICBPYmplY3QudmFsdWVzKGl0ZW0pLnNvbWUodmFsdWUgPT5cclxuICAgICAgICAgIHZhbHVlICE9IG51bGwgJiZcclxuICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhrZXl3b3JkKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5faW5pdFBhZ2VGcm9tR3JpZERhdGEoZmlsdGVyZWREYXRhKVxyXG4gICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTdW1tYXJ5KGNvbDogR3JpZENvbHVtbiwgZ3JpZERhdGE/OiBBcnJheTxhbnk+KTogbnVtYmVyIHtcclxuICAgIGxldCBzdW0gPSAwO1xyXG4gICAgZ3JpZERhdGE/LmZvckVhY2goKHJvdzogYW55KSA9PiB7XHJcbiAgICAgIHN1bSArPSByb3dbY29sLmZpZWxkXTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHN1bTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWRJdGVtc0NoYW5nZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdChldmVudCk7XHJcbiAgfVxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcml2YXRlIF9zZXRmb3JtRW5kcG9pbnRCb2R5KCk6IHZvaWQge1xyXG4gICAgbGV0IG94OiBhbnkgPSB0aGlzLl9jbG9uZVBhZ2VkUmVxdWVzdCh0aGlzLnBhZ2VkUmVxdWVzdCk7XHJcbiAgICBveFsnZ2V0QWxsRGF0YSddID0gdHJ1ZTtcclxuICAgIHRoaXMuZm9ybUVuZHBvaW50Qm9keSA9IEpTT04uc3RyaW5naWZ5KG94KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvYWREUyhpc0ZvckNhbGVuZGVyOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMucGFnZS5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMucGFnZWRSZXF1ZXN0ID0ge1xyXG4gICAgICAuLi50aGlzLnBhZ2VkUmVxdWVzdCxcclxuICAgICAgZ2V0QWxsRGF0YTogaXNGb3JDYWxlbmRlcixcclxuICAgIH07XHJcbiAgICBpZiAodGhpcy5jcnVkU2VydmljZSAhPSBudWxsICYmIHRoaXMuY3J1ZFNlcnZpY2UgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLmNydWRTZXJ2aWNlLmdldEFsbFBhZ2VkKHRoaXMucGFnZWRSZXF1ZXN0KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICh2YWx1ZTogSVBhZ2VkUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZSA9IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgaXRlbXMgOiB2YWx1ZS5pdGVtcyxcclxuICAgICAgICAgICAgICB0b3RhbENvdW50OiB2YWx1ZS50b3RhbENvdW50LFxyXG4gICAgICAgICAgICAgIHN1bW1hcmllczogdmFsdWUuc3VtbWFyaWVzID8gdmFsdWUuc3VtbWFyaWVzIDogW10sXHJcbiAgICAgICAgICAgICAgdG90YWxQYWdlczogKHRoaXMucGFnZS50b3RhbENvdW50IC0gKHRoaXMucGFnZS50b3RhbENvdW50ICUgdGhpcy5wYWdlLnBhZ2VTaXplKSkgLyB0aGlzLnBhZ2UucGFnZVNpemUgKyAxLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zdW1tYXJpZXNDaGFuZ2UuZW1pdCh0aGlzLnBhZ2Uuc3VtbWFyaWVzKTtcclxuICAgICAgICAgIHRoaXMuZ2V0QWxsUGFnZWRSZXN1bHRDaGFuZ2VkLmVtaXQodmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5wYWdlLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLnBhZ2UubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29uc3VsdFJvdyhpdGVtS2V5OiBhbnkpIHtcclxuICAgIHRoaXMuX29wZW5Nb2RhbChDb21wb25lbnRfTW9kZXMuQ09OU1VMVCwgaXRlbUtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vcGVuTW9kYWwobW9kZTogc3RyaW5nLCBpdGVtS2V5PzogYW55KTogdm9pZCB7XHJcbiAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZztcclxuICAgIGlmICh0aGlzLm1vZGFsU2l6ZSAhPSBudWxsICYmIHRoaXMubW9kYWxTaXplICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25mID0ge1xyXG4gICAgICAgIGRhdGE6IHsgaWQ6IGl0ZW1LZXksIG1vZGU6IG1vZGUgfSxcclxuICAgICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgICB3aWR0aDogdGhpcy5tb2RhbFNpemUud2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiB0aGlzLm1vZGFsU2l6ZS5oZWlnaHQsXHJcbiAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25mID0geyBkYXRhOiB7IGlkOiBpdGVtS2V5LCBtb2RlOiBtb2RlIH0sIG1heGltaXphYmxlOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3Blbih0aGlzLnZpZXdDb21wb25lbnQsIGNvbmYpO1xyXG5cclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKHZhbCkpO1xyXG4gIH1cclxuICBwcml2YXRlIF9jbG9zZU1vZGFsKHZhbD86IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fbG9hZERTKCk7XHJcbiAgICB0aGlzLl9kaWFsb2dSZWY/LmRlc3Ryb3koKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50ID09IHRydWUpIHtcclxuICAgICAgdGhpcy5fbG9hZERTKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbG9uZVBhZ2VkUmVxdWVzdChyZXF1ZXN0OiBJUGFnZWRSZXF1ZXN0KTogSVBhZ2VkUmVxdWVzdCB7XHJcbiAgICBsZXQgY2xvbmU6IElQYWdlZFJlcXVlc3QgPSB7XHJcbiAgICAgIG1heFJlc3VsdENvdW50OiByZXF1ZXN0Lm1heFJlc3VsdENvdW50LFxyXG4gICAgICBza2lwQ291bnQ6IHJlcXVlc3Quc2tpcENvdW50LFxyXG4gICAgICBzb3J0aW5nOiByZXF1ZXN0LnNvcnRpbmcsXHJcbiAgICAgIGtleXdvcmQ6IHJlcXVlc3Qua2V5d29yZCxcclxuICAgICAgZmlsdGVyczogcmVxdWVzdC5maWx0ZXJzLFxyXG4gICAgICBnZXRBbGxEYXRhOiByZXF1ZXN0LmdldEFsbERhdGEsXHJcbiAgICAgIHN1bW1hcmllczogcmVxdWVzdC5zdW1tYXJpZXMsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGNsb25lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdFBhZ2VGcm9tR3JpZERhdGEoZ3JpZERhdGEgPSB0aGlzLl9ncmlkRGF0YSkge1xyXG4gICAgdGhpcy5wYWdlID0ge1xyXG4gICAgICAuLi50aGlzLnBhZ2UsXHJcbiAgICAgIGl0ZW1zOiBbLi4uZ3JpZERhdGFdLFxyXG4gICAgICB0b3RhbENvdW50OiBncmlkRGF0YS5sZW5ndGgsXHJcbiAgICAgIHRvdGFsUGFnZXM6XHJcbiAgICAgICAgKGdyaWREYXRhLmxlbmd0aCAtIChncmlkRGF0YS5sZW5ndGggJSB0aGlzLnBhZ2UucGFnZVNpemUpKSAvXHJcbiAgICAgICAgdGhpcy5wYWdlLnBhZ2VTaXplICtcclxuICAgICAgICAxLFxyXG4gICAgICBwYWdlTnVtYmVyOiAxLFxyXG4gICAgICBwYWdlU2l6ZTogMTAsXHJcbiAgICAgIHN1bW1hcmllczogdGhpcy5jb2x1bW5zXHJcbiAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sLmhhdmVTdW1tYXJ5KVxyXG4gICAgICAgIC5tYXAoY29sID0+ICh7XHJcbiAgICAgICAgICBwcm9wcmV0eTogY29sLmZpZWxkLFxyXG4gICAgICAgICAgc3VtbWFyeTogdGhpcy5nZXRTdW1tYXJ5KGNvbCwgZ3JpZERhdGEpXHJcbiAgICAgICAgfSkpLFxyXG4gICAgICBsb2FkaW5nOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIHRoaXMuc3VtbWFyaWVzQ2hhbmdlLmVtaXQodGhpcy5wYWdlLnN1bW1hcmllcyk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBkaXNwbGF5U2VhcmNoRmllbGRzKCkge1xyXG4gICAgdGhpcy5zaG93U2VhcmNoRmllbGQgPSAhdGhpcy5zaG93U2VhcmNoRmllbGQ7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gY2FsZW5kZXJcclxuICB0b2dnbGVDYWxlbmRlclZpZXcoKSB7XHJcbiAgICB0aGlzLnNob3dDYWxlbmRlclZpZXcgPSAhdGhpcy5zaG93Q2FsZW5kZXJWaWV3O1xyXG4gICAgdGhpcy5fbG9hZERTKHRoaXMuc2hvd0NhbGVuZGVyVmlldyk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDYWxlbmRhckV2ZW50Q2xpY2soaXRlbTogYW55KSB7XHJcbiAgICBzd2l0Y2ggKGl0ZW0ubW9kZSkge1xyXG4gICAgICBjYXNlIENvbXBvbmVudF9Nb2Rlcy5DT05TVUxUOlxyXG4gICAgICAgIHRoaXMuX2NvbnN1bHRSb3coaXRlbS5pZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vIGNhc2UgQ29tcG9uZW50X01vZGVzLkNSRUFURSA6XHJcbiAgICAgIC8vICAgdGhpcy5fb3Blbk1vZGFsKENvbXBvbmVudF9Nb2Rlcy5DUkVBVEUsbnVsbCxudWxsKTtcclxuICAgICAgLy8gYnJlYWs7XHJcbiAgICAgIC8vIGNhc2UgQ29tcG9uZW50X01vZGVzLkVESVQgOlxyXG4gICAgICAvLyAgIHRoaXMuX2VkaXRSb3coaXRlbS5pZCk7XHJcbiAgICAgIC8vIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufSIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgXHJcbiAgPHAtdG9vbGJhciAqbmdJZj1cImZvcm1FbmRwb2ludFwiIHN0eWxlQ2xhc3M9XCJib3JkZXItcmFkaXVzLTcgbWItMSBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgbWwtMlwiPlxyXG4gICAgICAgIDxUc2ktQnV0dG9uICBpY29uPVwicGkgcGktc2xpZGVycy1oXCIgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCIgdG9vbHRpcFRleHQ9XCJzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX21lbnVfdmlld1wiICpuZ0lmPVwic2VhcmNoRmllbGRzXCJcclxuICAgICAgICBzdHlsZUNsYXNzPVwiaC0ycmVtIGhvdmVyOnNoYWRvdy02IHAtYnV0dG9uLWljb24tb25seSB7e3Nob3dTZWFyY2hGaWVsZCA/ICdwLWJ1dHRvbi1zZWNvbmRhcnknIDogJ3AtYnV0dG9uLXN1Y2Nlc3MnfX1cIiBcclxuICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5U2VhcmNoRmllbGRzKClcIj5cclxuICAgICAgICA8L1RzaS1CdXR0b24+XHJcbiAgICAgICAgPFRzaS1CdXR0b24gaWNvbj1cInAtYnV0dG9uLWljb24gcGkgcGktY2FsZW5kYXIge3tzaG93Q2FsZW5kZXJWaWV3ID8gJ3BpIHBpLWFsaWduLWp1c3RpZnknIDogJ3BpIHBpLWNhbGVuZGFyJ319XCIgXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cInAtZWxlbWVudCBwLWJ1dHRvbi1wcmltYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIiAoY2xpY2spPVwidG9nZ2xlQ2FsZW5kZXJWaWV3KClcIiBcclxuICAgICAgICB0b29sdGlwVGV4dD1cInt7KHNob3dDYWxlbmRlclZpZXcgPyAnc2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9saXN0X3ZpZXcnIDogJ3NoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfY2FsZW5kZXJfdmlldycpIHwgbG9jYWxpemV9fVwiIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uLlRvcFwiPjwvVHNpLUJ1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicmlnaHRcIj5cclxuICAgICAgICA8YXBwLXJlcG9ydGluZyAqbmdJZj1cImZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzXCJcclxuICAgICAgICAgIFtmb3JtRW5kcG9pbnRdPVwiZm9ybUVuZHBvaW50XCJcclxuICAgICAgICAgIFtmb3JtTmFtZV09XCJmb3JtTmFtZVwiXHJcbiAgICAgICAgICBbZm9ybUVuZHBvaW50Qm9keV09XCJmb3JtRW5kcG9pbnRCb2R5XCJcclxuICAgICAgICAgIFtpc0Zvcm1FbmRwb2ludFBhZ2VkXT1cInRydWVcIlxyXG4gICAgICAgICAgW3Nob3dJbXBvcnRFeHBvcnRCdXR0b25dPVwic2hvd0ltcG9ydEV4cG9ydEJ1dHRvblwiXHJcbiAgICAgICAgICAocmVmcmVzaERhdGEpPVwicmVmcmVzaCgkZXZlbnQpXCJcclxuICAgICAgICAgIFtmaWx0ZXJzSHRtbFRlbXBsYXRlXT1cImZpbHRlcnNIdG1sVGVtcGxhdGVcIlxyXG4gICAgICAgICAgW2J1c2luZXNzQ2xhc3NdPVwiYnVzaW5lc3NDbGFzc1wiXHJcbiAgICAgICAgICBbcGFnZWRSZXF1ZXN0XT1cInBhZ2VkUmVxdWVzdFwiXHJcbiAgICAgICAgICBbY29uZmlnTW9kZUJ1dHRvbklkXT1cImNvbmZpZ01vZGVCdXR0b25JZFwiXHJcbiAgICAgICAgICBbc2hvd05vdGVCdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW3Nob3dBY3Rpb25CdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW3Nob3dJbmZvQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtzaG93VXBsb2FkQnV0dG9uXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtzZWxlY3RlZEl0ZW1VaWRzXT1cInNlbGVjdGVkSXRlbXNcIlxyXG4gICAgICAgICAgPjwvYXBwLXJlcG9ydGluZz5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRvb2xiYXI+XHJcbiAgXHJcbiAgPGRpdj5cclxuXHJcbiAgICA8VHNpLUdlbmVyaWMtR3JpZCBcclxuICAgICAgW2Zvcm1OYW1lXT1cImZvcm1OYW1lXCIgXHJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCIgXHJcbiAgICAgIFtwYWdlXT1cInBhZ2VcIiBcclxuICAgICAgW3BhZ2VkUmVxdWVzdF09XCJwYWdlZFJlcXVlc3RcIiBcclxuICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAgIFtzZWFyY2hGaWVsZHNdPVwic2VhcmNoRmllbGRzXCIgXHJcbiAgICAgIFtzaG93U2VhcmNoRmllbGRdPVwic2hvd1NlYXJjaEZpZWxkXCIgXHJcbiAgICAgIChsb2FkKT1cImxvYWQoJGV2ZW50KVwiXHJcbiAgICAgIChzZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZWQpPVwic2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VzKCRldmVudClcIlxyXG4gICAgICAoYnV0dG9uQ29sdW1uQ2xpY2tlZCk9XCJoYW5kbGVCdXR0b25Db2x1bW5DbGlja2VkKCRldmVudClcIlxyXG4gICAgICBbKGZpbHRlcnNIdG1sVGVtcGxhdGUpXT1cImZpbHRlcnNIdG1sVGVtcGxhdGVcIlxyXG4gICAgICBbc2VsZWN0S2V5T25seV09XCJzZWxlY3RLZXlPbmx5XCJcclxuICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXHJcbiAgICAgIFtzaG93SW1wb3J0RXhwb3J0QnV0dG9uXT1cInNob3dJbXBvcnRFeHBvcnRCdXR0b25cIlxyXG4gICAgICBba2V5XT1cImtleVwiXHJcbiAgICAgIFtjcnVkU2VydmljZV09XCJjcnVkU2VydmljZVwiXHJcbiAgICAgIFsoc2VsZWN0ZWRJdGVtcyldPVwic2VsZWN0ZWRJdGVtc1wiXHJcbiAgICAgIChzZWxlY3RlZEl0ZW1zQ2hhbmdlKT1cIm9uU2VsZWN0ZWRJdGVtc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgW2lzR3JpZERhdGFQYWdlZEluQXBpXT1cImdldERhdGFGcm9tQXBpXCJcclxuICAgICAgW3NlYXJjaE9uSW5pdF09XCJzZWFyY2hPbkluaXRcIlxyXG4gICAgICBbc2hvd0V4cG9ydEJ1dHRvbl09XCJzaG93RXhwb3J0QnV0dG9uXCJcclxuICAgICAgW3Nob3dIZWFkZXJGaWx0ZXJzXT1cInNob3dIZWFkZXJGaWx0ZXJzXCJcclxuICAgICAgW3Nob3dGaWx0ZXJCdXR0b25dPVwic2hvd0ZpbHRlckJ1dHRvblwiXHJcbiAgICAgIFtzaG93R2xvYmFsU2VhcmNoXT1cInNob3dHbG9iYWxTZWFyY2hcIlxyXG4gICAgICBbaXNTZWFyY2hCdXR0b25EaXNhYmxlZF09XCJpc1NlYXJjaEJ1dHRvbkRpc2FibGVkXCJcclxuICAgICAgW3Nob3dDYWxlbmRlclZpZXddPVwic2hvd0NhbGVuZGVyVmlld1wiXHJcbiAgICAgIChjYWxlbmRhckV2ZW50Q2xpY2spPVwiaGFuZGxlQ2FsZW5kYXJFdmVudENsaWNrKCRldmVudClcIlxyXG4gICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbFwiXHJcbiAgICAgIFtjaGVja2VkQnlGaWVsZF09XCJjaGVja2VkQnlGaWVsZFwiXHJcbiAgICAgIFt0YXJnZXRCdXNpbmVzc0NsYXNzXT1cInRhcmdldEJ1c2luZXNzQ2xhc3NcIlxyXG4gICAgICBbc29ydE1vZGVdPVwic29ydE1vZGVcIlxyXG4gICAgICBbc2l6aW5nTW9kZV09XCJzaXppbmdNb2RlXCJcclxuICAgICAgPjwvVHNpLUdlbmVyaWMtR3JpZD5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
430
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLXZpZXctZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvb3V0cHV0LWNvbXBvbmVudHMvdHNpLXZpZXctZ3JpZC90c2ktdmlldy1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9vdXRwdXQtY29tcG9uZW50cy90c2ktdmlldy1ncmlkL3RzaS12aWV3LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdHLE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU9uSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7Ozs7Ozs7Ozs7QUFPekYsTUFBTSxPQUFPLG9CQUFvQjtJQTRCL0IsSUFBSSxJQUFJLENBQUMsS0FBaUI7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBa0JELElBQWEsT0FBTyxDQUFDLEtBQW1CO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQW1CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFVckQsSUFBYSxZQUFZLENBQUMsS0FBeUI7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QWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRU8sWUFBWTtzQkFBeEIsS0FBSztnQkFhSSxlQUFlO3NCQUF4QixNQUFNO2dCQUVHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csd0JBQXdCO3NCQUFqQyxNQUFNO2dCQUNHLHdCQUF3QjtzQkFBakMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRfTW9kZXMsIEdyaWRTZWxlY3Rpb25Nb2RlLCBHcmlkU2l6aW5nTW9kZSwgR3JpZFNvcnRNb2RlLCBUb29sdGlwUG9zaXRpb24gfSBmcm9tICcuLi8uLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IEJ1dHRvbkNsaWNrUmVzdWx0LCBHcmlkQ29sdW1uLCBJR3JpZENvbmZpZ3VyYXRpb24sIElNb2RhbFNpemUgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSVBhZ2UsIElQYWdlZFJlcXVlc3QsIElQYWdlZFJlc3BvbnNlLCBJU3VtbWFyeUZvclByb3ByZXR5IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9wYWdpbmF0aW9uL3BhZ2luYXRpb24tYmFzZSc7XHJcbmltcG9ydCB7IFNlYXJjaEZpZWxkIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQ3J1ZEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYmFzZS9jcnVkLWJhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZGFsL3RzaS1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL2Vycm9yLXJlc3BvbnNlLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaUdlbmVyaWNHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vdHNpLWdlbmVyaWMtZ3JpZC90c2ktZ2VuZXJpYy1ncmlkLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RzaS12aWV3LWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktdmlldy1ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktdmlldy1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUc2lWaWV3R3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIC8vI3JlZ2lvbiBsb2NhbCB2YXJzXHJcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmPzogRHluYW1pY0RpYWxvZ1JlZjtcclxuICBwcml2YXRlIF9mb3JtRW5kcG9pbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb247XHJcbiAgaXRlbXM/OiBhbnlbXTtcclxuXHJcbiAgcGFnZWRSZXF1ZXN0OiBJUGFnZWRSZXF1ZXN0ID0ge1xyXG4gICAgbWF4UmVzdWx0Q291bnQ6IDEwLFxyXG4gICAgc2tpcENvdW50OiAwLFxyXG4gICAgc29ydGluZzogW10sXHJcbiAgICBrZXl3b3JkOiAnJyxcclxuICAgIGZpbHRlcnM6IFtdLFxyXG4gICAgZ2V0QWxsRGF0YTogZmFsc2UsXHJcbiAgICBzdW1tYXJpZXM6IFtdLFxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX3BhZ2U6IElQYWdlPGFueT4gPSB7XHJcbiAgICBpdGVtczogW10sXHJcbiAgICBwYWdlU2l6ZTogMTAsXHJcbiAgICBwYWdlTnVtYmVyOiAxLFxyXG4gICAgdG90YWxDb3VudDogMCxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICBzdW1tYXJpZXM6IFtdLFxyXG4gICAgbG9hZGluZzogZmFsc2UsXHJcbiAgfTtcclxuXHJcbiAgc2V0IHBhZ2UodmFsdWU6IElQYWdlPGFueT4pIHtcclxuICAgIHRoaXMuX3BhZ2UgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBwYWdlKCk6IElQYWdlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhZ2U7XHJcbiAgfVxyXG4gIGZpcnN0OiBudW1iZXIgPSAwO1xyXG4gIHJvd3MgPSAxO1xyXG4gIGZvcm1FbmRwb2ludEJvZHk6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBmaWx0ZXJzSHRtbFRlbXBsYXRlPzogc3RyaW5nID0gJyc7XHJcblxyXG4gIGNvbmZpZ01vZGVCdXR0b25JZDogc3RyaW5nID0gXCJjb25mZy1tb2RlLWJ1dHRvbi1mcm9tLWxpc3RcIlxyXG5cclxuICBwdWJsaWMgYnVzaW5lc3NDbGFzcz86IHN0cmluZztcclxuXHJcbiAgX3NlYXJjaE9uSW5pdDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBWaWV3Q2hpbGQoVHNpR2VuZXJpY0dyaWRDb21wb25lbnQpIGdlbmVyaWNHcmlkQ29tcG9uZW50PzogVHNpR2VuZXJpY0dyaWRDb21wb25lbnQ7XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSW5wdXRzXHJcbiAgcHJpdmF0ZSBfY29sdW1uczogR3JpZENvbHVtbltdID0gW107XHJcbiAgQElucHV0KCkgc2V0IGNvbHVtbnModmFsdWU6IEdyaWRDb2x1bW5bXSkge1xyXG4gICAgdGhpcy5fY29sdW1ucyA9IHZhbHVlID8/IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbHVtbnMoKTogR3JpZENvbHVtbltdIHsgcmV0dXJuIHRoaXMuX2NvbHVtbnM7IH1cclxuXHJcbiAgQElucHV0KCkgZ3JpZENvbmZpZ3VyYXRpb24/OiBJR3JpZENvbmZpZ3VyYXRpb247XHJcbiAgQElucHV0KCkgdmlld0NvbXBvbmVudDogYW55O1xyXG4gIEBJbnB1dCgpIGNydWRTZXJ2aWNlPzogQ3J1ZEJhc2VTZXJ2aWNlPGFueSwgYW55LCBhbnksIGFueT47XHJcbiAgQElucHV0KCkgaGVhZGVyOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBtb2RhbFNpemU/OiBJTW9kYWxTaXplO1xyXG4gIEBJbnB1dCgpIHNob3dDb25zdWx0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd1NlYXJjaEZpZWxkOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzZWFyY2hGaWVsZHM6IFNlYXJjaEZpZWxkW10gfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgc2V0IGZvcm1FbmRwb2ludCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5fZm9ybUVuZHBvaW50ID0gYCR7dmFsdWV9L2dldGFsbHBhZ2VkYDtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGZvcm1FbmRwb2ludCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3JtRW5kcG9pbnQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBmb3JtTmFtZT86IHN0cmluZztcclxuICBASW5wdXQoKSBpZD86IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93SW1wb3J0RXhwb3J0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdGFyZ2V0QnVzaW5lc3NDbGFzcz86IHN0cmluZztcclxuXHJcbiAgX2dyaWREYXRhOiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gIC8vZ3JpZCBzZWxlY3Rpb25cclxuICBASW5wdXQoKSBnZXREYXRhRnJvbUFwaTogYm9vbGVhbiA9IHRydWVcclxuXHJcbiAgLy8gQElucHV0KCkgZ3JpZERhdGE/OiBBcnJheTxhbnk+XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBnZXQgZ3JpZERhdGEoKTogQXJyYXk8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ3JpZERhdGE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGdyaWREYXRhKGRhdGE6IEFycmF5PGFueT4pIHtcclxuICAgIHRoaXMuX2dyaWREYXRhID0gW107XHJcbiAgICB0aGlzLl9ncmlkRGF0YSA9IGRhdGE7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2dyaWREYXRhICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLl9ncmlkRGF0YSAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX2luaXRQYWdlRnJvbUdyaWREYXRhKGRhdGEpO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5fZ3JpZERhdGEgPT0gdW5kZWZpbmVkIHx8IHRoaXMuX2dyaWREYXRhID09IG51bGxcclxuICAgICkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgISB5b3UgbXVzdCBwcm92aWRlIGdyaWQgRGF0YSFcIilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzU2VhcmNoQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGlzU2VhcmNoQnV0dG9uRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzU2VhcmNoQnV0dG9uRGlzYWJsZWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNTZWFyY2hCdXR0b25EaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1NlYXJjaEJ1dHRvbkRpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2VsZWN0S2V5T25seTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2VsZWN0aW9uTW9kZTogR3JpZFNlbGVjdGlvbk1vZGUgPSBHcmlkU2VsZWN0aW9uTW9kZS5Ob25lO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBASW5wdXQoKSBrZXk6IHN0cmluZyA9ICd1aWQnO1xyXG4gIEBJbnB1dCgpIHNob3dHbG9iYWxTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dFeHBvcnRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dDYWxlbmRlclZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93SGVhZGVyRmlsdGVyczogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0ZpbHRlckJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2VsZWN0QWxsOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBjaGVja2VkQnlGaWVsZDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgc29ydE1vZGU6IEdyaWRTb3J0TW9kZSB8IGFueSA9IEdyaWRTb3J0TW9kZS5NdWx0aXBsZTtcclxuICBASW5wdXQoKSBzaXppbmdNb2RlOiBHcmlkU2l6aW5nTW9kZSA9IEdyaWRTaXppbmdNb2RlLkZpbGw7XHJcblxyXG4gIEBJbnB1dCgpIHNldCBzZWFyY2hPbkluaXQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9zZWFyY2hPbkluaXQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fc2VhcmNoT25Jbml0ID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgc2VhcmNoT25Jbml0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaE9uSW5pdDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uIE91dHB1dHNcclxuXHJcbiAgQE91dHB1dCgpIHN1bW1hcmllc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PElTdW1tYXJ5Rm9yUHJvcHJldHk+PiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PElTdW1tYXJ5Rm9yUHJvcHJldHk+PigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZEl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QXJyYXk8YW55Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PGFueT4+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBidXR0b25Db2x1bW5DbGlja2VkOiBFdmVudEVtaXR0ZXI8QnV0dG9uQ2xpY2tSZXN1bHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxCdXR0b25DbGlja1Jlc3VsdD4oKTtcclxuICBAT3V0cHV0KCkgc2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U2VhcmNoRmllbGQ+PigpO1xyXG4gIEBPdXRwdXQoKSBnZXRBbGxQYWdlZFJlc3VsdENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIC8vI3JlZ2lvbiBPdXRwdXRzXHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90c2lNb2RhbFNlcnZpY2U6IFRzaU1vZGFsU2VydmljZSwgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb2x1bW5zID09IG51bGwgJiYgdGhpcy5jb2x1bW5zID09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgJ2NvbHVtbnMgY2FudCBiZSBudWxsIG9yIHVuZGVmaW5lZCwgZGV2ZWxvcHBlciBtdXN0IHNldCBjb2x1bW5zIG9mIGdyaWQgISdcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zaG93Q29uc3VsdEJ1dHRvbiA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBoZWFkZXI6ICdzaGFyZWRfYWN0aW9uc19jb25zdWx0JyxcclxuICAgICAgICAgIGZpZWxkOiAnY29uc3VsdCcsXHJcbiAgICAgICAgICBpc0J1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgIGJ1dHRvbkljb246ICdwaSBwaS1leWUnLFxyXG4gICAgICAgICAgc3R5bGVDbGFzczogJ3AtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCcsXHJcbiAgICAgICAgICB0b29sVGlwVGV4dDogXCJzaGFyZWRfYWN0aW9uX2NvbnN1bHRcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5jb2x1bW5zLFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gI3JlZ2lvbiBncmlkIHN0YXRlXHJcblxyXG4gIGdldFN0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQuZ2V0U3RhdGUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICByZXN0b3JlU3RhdGUoY29uZmlndXJhdGlvbjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5nZW5lcmljR3JpZENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmdlbmVyaWNHcmlkQ29tcG9uZW50LnJlc3RvcmVTdGF0ZShjb25maWd1cmF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0U2VsZWN0ZWRDb2x1bW5zKGNvbmZpZ3VyYXRpb246IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZ2VuZXJpY0dyaWRDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5nZW5lcmljR3JpZENvbXBvbmVudC5yZXNldFNlbGVjdGVkQ29sdW1ucyhjb25maWd1cmF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb25cclxuXHJcbiAgaXNMYXN0UGFnZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2VcclxuICAgICAgPyB0aGlzLnBhZ2UucGFnZU51bWJlciA9PT0gdGhpcy5wYWdlLnRvdGFsQ291bnQgLSB0aGlzLnBhZ2UucGFnZVNpemVcclxuICAgICAgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaXNGaXJzdFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlID8gdGhpcy5wYWdlLnBhZ2VOdW1iZXIgPT09IDAgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VzKG5ld1NlYXJjaEZpZWxkVmFsdWVzOiBBcnJheTxTZWFyY2hGaWVsZD4pIHtcclxuICAgIHRoaXMuc2VhcmNoRmllbGRzVmFsdWVDaGFuZ2VkLmVtaXQobmV3U2VhcmNoRmllbGRWYWx1ZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGF6eUxvYWRcclxuICAgKi9cclxuICAvL2ZpcnN0ID09PiBwYWdlLnBhZ2VOdW1iZXJcclxuICAvL3Jvd3MgPT0+IHBhZ2UucGFnZVNpemVcclxuICAvL3RoaXMucGFnZS5pdGVtcy5sZW5ndGggPT0+IHRvdGFsIGNvdW50XHJcblxyXG4gIGhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoZXZlbnQ6IEJ1dHRvbkNsaWNrUmVzdWx0KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5nZXREYXRhRnJvbUFwaSkge1xyXG4gICAgICBpZiAoZXZlbnQuZmllbGQgPT0gJ2NvbnN1bHQnICYmIHRoaXMudmlld0NvbXBvbmVudCAhPSB1bmRlZmluZWQgJiYgdGhpcy52aWV3Q29tcG9uZW50ICE9IG51bGwpIHtcclxuICAgICAgICBsZXQgaXRlbUtleTogYW55ID0gdGhpcy5zZWxlY3RLZXlPbmx5ID8gZXZlbnQua2V5IDogZXZlbnQua2V5W3RoaXMua2V5XTtcclxuICAgICAgICB0aGlzLl9jb25zdWx0Um93KGl0ZW1LZXkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYnV0dG9uQ29sdW1uQ2xpY2tlZC5lbWl0KHtcclxuICAgICAgICBrZXk6IGV2ZW50LmtleSxcclxuICAgICAgICBmaWVsZDogZXZlbnQuZmllbGQsXHJcbiAgICAgICAgc2VsZWN0S2V5T25seTogdGhpcy5zZWxlY3RLZXlPbmx5LFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uQ29sdW1uQ2xpY2tlZC5lbWl0KHtcclxuICAgICAgICBrZXk6IGV2ZW50LmtleSxcclxuICAgICAgICBmaWVsZDogZXZlbnQuZmllbGQsXHJcbiAgICAgICAgc2VsZWN0S2V5T25seTogdGhpcy5zZWxlY3RLZXlPbmx5LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWQoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZ2V0RGF0YUZyb21BcGkpIHtcclxuICAgICAgdGhpcy5wYWdlZFJlcXVlc3QgPSBldmVudC5yZXF1ZXN0O1xyXG4gICAgICB0aGlzLl9zZXRmb3JtRW5kcG9pbnRCb2R5KCk7XHJcbiAgICAgIHRoaXMuX2xvYWREUygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBrZXl3b3JkID0gdGhpcy5wYWdlZFJlcXVlc3Q/LmtleXdvcmQ/LnRvTG9jYWxlTG93ZXJDYXNlKClcclxuICAgICAgaWYgKCFrZXl3b3JkIHx8IGtleXdvcmQgPT0gXCJcIikge1xyXG4gICAgICAgIHRoaXMuX2luaXRQYWdlRnJvbUdyaWREYXRhKClcclxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGRhdGEgPSBbLi4udGhpcy5fZ3JpZERhdGFdO1xyXG4gICAgICBsZXQgZmlsdGVyZWREYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PlxyXG4gICAgICAgIE9iamVjdC52YWx1ZXMoaXRlbSkuc29tZSh2YWx1ZSA9PlxyXG4gICAgICAgICAgdmFsdWUgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgdmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLl9pbml0UGFnZUZyb21HcmlkRGF0YShmaWx0ZXJlZERhdGEpXHJcbiAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFN1bW1hcnkoY29sOiBHcmlkQ29sdW1uLCBncmlkRGF0YT86IEFycmF5PGFueT4pOiBudW1iZXIge1xyXG4gICAgbGV0IHN1bSA9IDA7XHJcbiAgICBncmlkRGF0YT8uZm9yRWFjaCgocm93OiBhbnkpID0+IHtcclxuICAgICAgc3VtICs9IHJvd1tjb2wuZmllbGRdO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gc3VtO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZEl0ZW1zQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KGV2ZW50KTtcclxuICB9XHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByaXZhdGUgX3NldGZvcm1FbmRwb2ludEJvZHkoKTogdm9pZCB7XHJcbiAgICBsZXQgb3g6IGFueSA9IHRoaXMuX2Nsb25lUGFnZWRSZXF1ZXN0KHRoaXMucGFnZWRSZXF1ZXN0KTtcclxuICAgIG94WydnZXRBbGxEYXRhJ10gPSB0cnVlO1xyXG4gICAgdGhpcy5mb3JtRW5kcG9pbnRCb2R5ID0gSlNPTi5zdHJpbmdpZnkob3gpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9hZERTKGlzRm9yQ2FsZW5kZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5wYWdlLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5wYWdlZFJlcXVlc3QgPSB7XHJcbiAgICAgIC4uLnRoaXMucGFnZWRSZXF1ZXN0LFxyXG4gICAgICBnZXRBbGxEYXRhOiBpc0ZvckNhbGVuZGVyLFxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLmNydWRTZXJ2aWNlICE9IG51bGwgJiYgdGhpcy5jcnVkU2VydmljZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuY3J1ZFNlcnZpY2UuZ2V0QWxsUGFnZWQodGhpcy5wYWdlZFJlcXVlc3QpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHZhbHVlOiBJUGFnZWRSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdlID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMucGFnZSxcclxuICAgICAgICAgICAgICBpdGVtcyA6IHZhbHVlLml0ZW1zLFxyXG4gICAgICAgICAgICAgIHRvdGFsQ291bnQ6IHZhbHVlLnRvdGFsQ291bnQsXHJcbiAgICAgICAgICAgICAgc3VtbWFyaWVzOiB2YWx1ZS5zdW1tYXJpZXMgPyB2YWx1ZS5zdW1tYXJpZXMgOiBbXSxcclxuICAgICAgICAgICAgICBncm91cHM6IHZhbHVlLmdyb3VwcyxcclxuICAgICAgICAgICAgICB0b3RhbFBhZ2VzOiAodGhpcy5wYWdlLnRvdGFsQ291bnQgLSAodGhpcy5wYWdlLnRvdGFsQ291bnQgJSB0aGlzLnBhZ2UucGFnZVNpemUpKSAvIHRoaXMucGFnZS5wYWdlU2l6ZSArIDEsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnN1bW1hcmllc0NoYW5nZS5lbWl0KHRoaXMucGFnZS5zdW1tYXJpZXMpO1xyXG4gICAgICAgICAgdGhpcy5nZXRBbGxQYWdlZFJlc3VsdENoYW5nZWQuZW1pdCh2YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLnBhZ2UubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKGVycm9yKTtcclxuICAgICAgICAgIHRoaXMucGFnZS5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb25zdWx0Um93KGl0ZW1LZXk6IGFueSkge1xyXG4gICAgdGhpcy5fb3Blbk1vZGFsKENvbXBvbmVudF9Nb2Rlcy5DT05TVUxULCBpdGVtS2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29wZW5Nb2RhbChtb2RlOiBzdHJpbmcsIGl0ZW1LZXk/OiBhbnkpOiB2b2lkIHtcclxuICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnO1xyXG4gICAgaWYgKHRoaXMubW9kYWxTaXplICE9IG51bGwgJiYgdGhpcy5tb2RhbFNpemUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbmYgPSB7XHJcbiAgICAgICAgZGF0YTogeyBpZDogaXRlbUtleSwgbW9kZTogbW9kZSB9LFxyXG4gICAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICAgIHdpZHRoOiB0aGlzLm1vZGFsU2l6ZS53aWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMubW9kYWxTaXplLmhlaWdodCxcclxuICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbmYgPSB7IGRhdGE6IHsgaWQ6IGl0ZW1LZXksIG1vZGU6IG1vZGUgfSwgbWF4aW1pemFibGU6IHRydWUgfTtcclxuICAgIH1cclxuICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKHRoaXMudmlld0NvbXBvbmVudCwgY29uZik7XHJcblxyXG4gICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Nsb3NlTW9kYWwodmFsPzogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9sb2FkRFMoKTtcclxuICAgIHRoaXMuX2RpYWxvZ1JlZj8uZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaChldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLl9sb2FkRFMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Nsb25lUGFnZWRSZXF1ZXN0KHJlcXVlc3Q6IElQYWdlZFJlcXVlc3QpOiBJUGFnZWRSZXF1ZXN0IHtcclxuICAgIGxldCBjbG9uZTogSVBhZ2VkUmVxdWVzdCA9IHtcclxuICAgICAgbWF4UmVzdWx0Q291bnQ6IHJlcXVlc3QubWF4UmVzdWx0Q291bnQsXHJcbiAgICAgIHNraXBDb3VudDogcmVxdWVzdC5za2lwQ291bnQsXHJcbiAgICAgIHNvcnRpbmc6IHJlcXVlc3Quc29ydGluZyxcclxuICAgICAga2V5d29yZDogcmVxdWVzdC5rZXl3b3JkLFxyXG4gICAgICBmaWx0ZXJzOiByZXF1ZXN0LmZpbHRlcnMsXHJcbiAgICAgIGdldEFsbERhdGE6IHJlcXVlc3QuZ2V0QWxsRGF0YSxcclxuICAgICAgc3VtbWFyaWVzOiByZXF1ZXN0LnN1bW1hcmllcyxcclxuICAgIH07XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0UGFnZUZyb21HcmlkRGF0YShncmlkRGF0YSA9IHRoaXMuX2dyaWREYXRhKSB7XHJcbiAgICB0aGlzLnBhZ2UgPSB7XHJcbiAgICAgIC4uLnRoaXMucGFnZSxcclxuICAgICAgaXRlbXM6IFsuLi5ncmlkRGF0YV0sXHJcbiAgICAgIHRvdGFsQ291bnQ6IGdyaWREYXRhLmxlbmd0aCxcclxuICAgICAgdG90YWxQYWdlczpcclxuICAgICAgICAoZ3JpZERhdGEubGVuZ3RoIC0gKGdyaWREYXRhLmxlbmd0aCAlIHRoaXMucGFnZS5wYWdlU2l6ZSkpIC9cclxuICAgICAgICB0aGlzLnBhZ2UucGFnZVNpemUgK1xyXG4gICAgICAgIDEsXHJcbiAgICAgIHBhZ2VOdW1iZXI6IDEsXHJcbiAgICAgIHBhZ2VTaXplOiAxMCxcclxuICAgICAgc3VtbWFyaWVzOiB0aGlzLmNvbHVtbnNcclxuICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wuaGF2ZVN1bW1hcnkpXHJcbiAgICAgICAgLm1hcChjb2wgPT4gKHtcclxuICAgICAgICAgIHByb3ByZXR5OiBjb2wuZmllbGQsXHJcbiAgICAgICAgICBzdW1tYXJ5OiB0aGlzLmdldFN1bW1hcnkoY29sLCBncmlkRGF0YSlcclxuICAgICAgICB9KSksXHJcbiAgICAgIGxvYWRpbmc6IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zdW1tYXJpZXNDaGFuZ2UuZW1pdCh0aGlzLnBhZ2Uuc3VtbWFyaWVzKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIGRpc3BsYXlTZWFyY2hGaWVsZHMoKSB7XHJcbiAgICB0aGlzLnNob3dTZWFyY2hGaWVsZCA9ICF0aGlzLnNob3dTZWFyY2hGaWVsZDtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBjYWxlbmRlclxyXG4gIHRvZ2dsZUNhbGVuZGVyVmlldygpIHtcclxuICAgIHRoaXMuc2hvd0NhbGVuZGVyVmlldyA9ICF0aGlzLnNob3dDYWxlbmRlclZpZXc7XHJcbiAgICB0aGlzLl9sb2FkRFModGhpcy5zaG93Q2FsZW5kZXJWaWV3KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUNhbGVuZGFyRXZlbnRDbGljayhpdGVtOiBhbnkpIHtcclxuICAgIHN3aXRjaCAoaXRlbS5tb2RlKSB7XHJcbiAgICAgIGNhc2UgQ29tcG9uZW50X01vZGVzLkNPTlNVTFQ6XHJcbiAgICAgICAgdGhpcy5fY29uc3VsdFJvdyhpdGVtLmlkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgLy8gY2FzZSBDb21wb25lbnRfTW9kZXMuQ1JFQVRFIDpcclxuICAgICAgLy8gICB0aGlzLl9vcGVuTW9kYWwoQ29tcG9uZW50X01vZGVzLkNSRUFURSxudWxsLG51bGwpO1xyXG4gICAgICAvLyBicmVhaztcclxuICAgICAgLy8gY2FzZSBDb21wb25lbnRfTW9kZXMuRURJVCA6XHJcbiAgICAgIC8vICAgdGhpcy5fZWRpdFJvdyhpdGVtLmlkKTtcclxuICAgICAgLy8gYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG59IiwiPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICBcclxuICA8cC10b29sYmFyICpuZ0lmPVwiZm9ybUVuZHBvaW50XCIgc3R5bGVDbGFzcz1cImJvcmRlci1yYWRpdXMtNyBtYi0xIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibGVmdFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiBtbC0yXCI+XHJcbiAgICAgICAgPFRzaS1CdXR0b24gIGljb249XCJwaSBwaS1zbGlkZXJzLWhcIiBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbi5Ub3BcIiB0b29sdGlwVGV4dD1cInNoYXJlZF90c2lfY29tcG9uZW50X2dyaWRfbWVudV92aWV3XCIgKm5nSWY9XCJzZWFyY2hGaWVsZHNcIlxyXG4gICAgICAgIHN0eWxlQ2xhc3M9XCJoLTJyZW0gaG92ZXI6c2hhZG93LTYgcC1idXR0b24taWNvbi1vbmx5IHt7c2hvd1NlYXJjaEZpZWxkID8gJ3AtYnV0dG9uLXNlY29uZGFyeScgOiAncC1idXR0b24tc3VjY2Vzcyd9fVwiIFxyXG4gICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlTZWFyY2hGaWVsZHMoKVwiPlxyXG4gICAgICAgIDwvVHNpLUJ1dHRvbj5cclxuICAgICAgICA8VHNpLUJ1dHRvbiBpY29uPVwicC1idXR0b24taWNvbiBwaSBwaS1jYWxlbmRhciB7e3Nob3dDYWxlbmRlclZpZXcgPyAncGkgcGktYWxpZ24tanVzdGlmeScgOiAncGkgcGktY2FsZW5kYXInfX1cIiBcclxuICAgICAgICBzdHlsZUNsYXNzPVwicC1lbGVtZW50IHAtYnV0dG9uLXByaW1hcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLWljb24tb25seVwiIChjbGljayk9XCJ0b2dnbGVDYWxlbmRlclZpZXcoKVwiIFxyXG4gICAgICAgIHRvb2x0aXBUZXh0PVwie3soc2hvd0NhbGVuZGVyVmlldyA/ICdzaGFyZWRfdHNpX2NvbXBvbmVudF9ncmlkX2xpc3RfdmlldycgOiAnc2hhcmVkX3RzaV9jb21wb25lbnRfZ3JpZF9jYWxlbmRlcl92aWV3JykgfCBsb2NhbGl6ZX19XCIgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24uVG9wXCI+PC9Uc2ktQnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICBcclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyaWdodFwiPlxyXG4gICAgICAgIDxhcHAtcmVwb3J0aW5nICpuZ0lmPVwiZm9ybUVuZHBvaW50IHx8IGJ1c2luZXNzQ2xhc3NcIlxyXG4gICAgICAgICAgW2Zvcm1FbmRwb2ludF09XCJmb3JtRW5kcG9pbnRcIlxyXG4gICAgICAgICAgW2Zvcm1OYW1lXT1cImZvcm1OYW1lXCJcclxuICAgICAgICAgIFtmb3JtRW5kcG9pbnRCb2R5XT1cImZvcm1FbmRwb2ludEJvZHlcIlxyXG4gICAgICAgICAgW2lzRm9ybUVuZHBvaW50UGFnZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICBbc2hvd0ltcG9ydEV4cG9ydEJ1dHRvbl09XCJzaG93SW1wb3J0RXhwb3J0QnV0dG9uXCJcclxuICAgICAgICAgIChyZWZyZXNoRGF0YSk9XCJyZWZyZXNoKCRldmVudClcIlxyXG4gICAgICAgICAgW2ZpbHRlcnNIdG1sVGVtcGxhdGVdPVwiZmlsdGVyc0h0bWxUZW1wbGF0ZVwiXHJcbiAgICAgICAgICBbYnVzaW5lc3NDbGFzc109XCJidXNpbmVzc0NsYXNzXCJcclxuICAgICAgICAgIFtwYWdlZFJlcXVlc3RdPVwicGFnZWRSZXF1ZXN0XCJcclxuICAgICAgICAgIFtjb25maWdNb2RlQnV0dG9uSWRdPVwiY29uZmlnTW9kZUJ1dHRvbklkXCJcclxuICAgICAgICAgIFtzaG93Tm90ZUJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICBbc2hvd0FjdGlvbkJ1dHRvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICBbc2hvd0luZm9CdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW3Nob3dVcGxvYWRCdXR0b25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgW3NlbGVjdGVkSXRlbVVpZHNdPVwic2VsZWN0ZWRJdGVtc1wiXHJcbiAgICAgICAgICA+PC9hcHAtcmVwb3J0aW5nPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdG9vbGJhcj5cclxuICBcclxuICA8ZGl2PlxyXG5cclxuICAgIDxUc2ktR2VuZXJpYy1HcmlkIFxyXG4gICAgICBbZm9ybU5hbWVdPVwiZm9ybU5hbWVcIiBcclxuICAgICAgW2hlYWRlcl09XCJoZWFkZXJcIiBcclxuICAgICAgW3BhZ2VdPVwicGFnZVwiIFxyXG4gICAgICBbcGFnZWRSZXF1ZXN0XT1cInBhZ2VkUmVxdWVzdFwiIFxyXG4gICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgICAgW3NlYXJjaEZpZWxkc109XCJzZWFyY2hGaWVsZHNcIiBcclxuICAgICAgW3Nob3dTZWFyY2hGaWVsZF09XCJzaG93U2VhcmNoRmllbGRcIiBcclxuICAgICAgKGxvYWQpPVwibG9hZCgkZXZlbnQpXCJcclxuICAgICAgKHNlYXJjaEZpZWxkc1ZhbHVlQ2hhbmdlZCk9XCJzZWFyY2hGaWVsZHNWYWx1ZUNoYW5nZXMoJGV2ZW50KVwiXHJcbiAgICAgIChidXR0b25Db2x1bW5DbGlja2VkKT1cImhhbmRsZUJ1dHRvbkNvbHVtbkNsaWNrZWQoJGV2ZW50KVwiXHJcbiAgICAgIFsoZmlsdGVyc0h0bWxUZW1wbGF0ZSldPVwiZmlsdGVyc0h0bWxUZW1wbGF0ZVwiXHJcbiAgICAgIFtzZWxlY3RLZXlPbmx5XT1cInNlbGVjdEtleU9ubHlcIlxyXG4gICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcclxuICAgICAgW3Nob3dJbXBvcnRFeHBvcnRCdXR0b25dPVwic2hvd0ltcG9ydEV4cG9ydEJ1dHRvblwiXHJcbiAgICAgIFtrZXldPVwia2V5XCJcclxuICAgICAgW2NydWRTZXJ2aWNlXT1cImNydWRTZXJ2aWNlXCJcclxuICAgICAgWyhzZWxlY3RlZEl0ZW1zKV09XCJzZWxlY3RlZEl0ZW1zXCJcclxuICAgICAgKHNlbGVjdGVkSXRlbXNDaGFuZ2UpPVwib25TZWxlY3RlZEl0ZW1zQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICBbaXNHcmlkRGF0YVBhZ2VkSW5BcGldPVwiZ2V0RGF0YUZyb21BcGlcIlxyXG4gICAgICBbc2VhcmNoT25Jbml0XT1cInNlYXJjaE9uSW5pdFwiXHJcbiAgICAgIFtzaG93RXhwb3J0QnV0dG9uXT1cInNob3dFeHBvcnRCdXR0b25cIlxyXG4gICAgICBbc2hvd0hlYWRlckZpbHRlcnNdPVwic2hvd0hlYWRlckZpbHRlcnNcIlxyXG4gICAgICBbc2hvd0ZpbHRlckJ1dHRvbl09XCJzaG93RmlsdGVyQnV0dG9uXCJcclxuICAgICAgW3Nob3dHbG9iYWxTZWFyY2hdPVwic2hvd0dsb2JhbFNlYXJjaFwiXHJcbiAgICAgIFtpc1NlYXJjaEJ1dHRvbkRpc2FibGVkXT1cImlzU2VhcmNoQnV0dG9uRGlzYWJsZWRcIlxyXG4gICAgICBbc2hvd0NhbGVuZGVyVmlld109XCJzaG93Q2FsZW5kZXJWaWV3XCJcclxuICAgICAgKGNhbGVuZGFyRXZlbnRDbGljayk9XCJoYW5kbGVDYWxlbmRhckV2ZW50Q2xpY2soJGV2ZW50KVwiXHJcbiAgICAgIFtzZWxlY3RBbGxdPVwic2VsZWN0QWxsXCJcclxuICAgICAgW2NoZWNrZWRCeUZpZWxkXT1cImNoZWNrZWRCeUZpZWxkXCJcclxuICAgICAgW3RhcmdldEJ1c2luZXNzQ2xhc3NdPVwidGFyZ2V0QnVzaW5lc3NDbGFzc1wiXHJcbiAgICAgIFtzb3J0TW9kZV09XCJzb3J0TW9kZVwiXHJcbiAgICAgIFtzaXppbmdNb2RlXT1cInNpemluZ01vZGVcIlxyXG4gICAgICA+PC9Uc2ktR2VuZXJpYy1HcmlkPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=