@fundamental-ngx/platform 0.46.2-rc.2 → 0.46.2-rc.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +2 -2
- package/esm2022/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.mjs +2 -2
- package/esm2022/approval-flow/approval-flow-node/approval-flow-node.component.mjs +2 -2
- package/esm2022/approval-flow/approval-flow-team-list/approval-flow-team-list.component.mjs +1 -1
- package/esm2022/approval-flow/approval-flow.component.mjs +3 -3
- package/esm2022/dynamic-page/dynamic-page.component.mjs +2 -2
- package/esm2022/feed-input/feed-input.component.mjs +2 -2
- package/esm2022/form/combobox/combobox/combobox.component.mjs +3 -3
- package/esm2022/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +3 -3
- package/esm2022/form/combobox/combobox.module.mjs +20 -4
- package/esm2022/form/combobox/commons/base-combobox.mjs +36 -28
- package/esm2022/form/combobox/directives/combobox-item.directive.mjs +148 -0
- package/esm2022/form/combobox/index.mjs +4 -3
- package/esm2022/form/form-group/form-field/form-field.component.mjs +2 -2
- package/esm2022/form/form-group/form-field-group/form-field-group.component.mjs +2 -2
- package/esm2022/form/form-group/form-group-header/form-group-header.component.mjs +2 -2
- package/esm2022/form/form-group/form-group.component.mjs +3 -3
- package/esm2022/form/index.mjs +37 -36
- package/esm2022/form/input-group/input-group.component.mjs +2 -2
- package/esm2022/form/multi-combobox/commons/base-multi-combobox.mjs +4 -2
- package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +7 -5
- package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +3 -3
- package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +3 -3
- package/esm2022/form/multi-input/multi-input.component.mjs +6 -4
- package/esm2022/form/select/select/select.component.mjs +3 -3
- package/esm2022/form/step-input/number/number-step-input.component.mjs +2 -2
- package/esm2022/icon-tab-bar/components/icon-tab-bar-filter-type/icon-tab-bar-filter-type.component.mjs +2 -2
- package/esm2022/icon-tab-bar/components/icon-tab-bar-icon-type/icon-tab-bar-icon-type.component.mjs +2 -2
- package/esm2022/icon-tab-bar/components/icon-tab-bar-process-type/icon-tab-bar-process-type.component.mjs +2 -2
- package/esm2022/icon-tab-bar/components/icon-tab-bar-text-type/icon-tab-bar-text-type.component.mjs +1 -1
- package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover/icon-tab-bar-popover.component.mjs +2 -2
- package/esm2022/icon-tab-bar/components/popovers/text-type-popover/text-type-popover.component.mjs +1 -1
- package/esm2022/icon-tab-bar/icon-tab-bar.component.mjs +2 -2
- package/esm2022/link/link.component.mjs +3 -3
- package/esm2022/list/list.component.mjs +2 -2
- package/esm2022/list/object-list-item/object-list-item-row.component.mjs +2 -2
- package/esm2022/list/object-list-item/object-list-item.component.mjs +2 -2
- package/esm2022/list/standard-list-item/standard-list-item.component.mjs +2 -2
- package/esm2022/menu/menu-item.component.mjs +2 -2
- package/esm2022/menu/menu.component.mjs +2 -2
- package/esm2022/message-popover/components/message-view/message-view.component.mjs +3 -3
- package/esm2022/message-popover/message-popover.component.mjs +2 -2
- package/esm2022/object-attribute/object-attribute.component.mjs +2 -2
- package/esm2022/page-footer/page-footer.component.mjs +2 -2
- package/esm2022/search-field/search-field-mobile/search-field/search-field-mobile.component.mjs +3 -3
- package/esm2022/search-field/search-field.component.mjs +3 -3
- package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.mjs +2 -2
- package/esm2022/shared/domain/data-source.mjs +3 -2
- package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +2 -2
- package/esm2022/split-menu-button/split-menu-button.component.mjs +2 -2
- package/esm2022/table/components/table-header-cell-content/table-header-cell-content.component.mjs +2 -2
- package/esm2022/table/table.component.mjs +13 -12
- package/esm2022/upload-collection/dialogs/move-to/move-to.component.mjs +2 -2
- package/esm2022/upload-collection/upload-collection/upload-collection.component.mjs +2 -2
- package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +2 -2
- package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +3 -3
- package/esm2022/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +2 -2
- package/esm2022/variant-management/variant-management.component.mjs +2 -2
- package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +3 -3
- package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +6 -6
- package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-feed-input.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-form.mjs +484 -311
- package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +8 -8
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-link.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-link.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-list.mjs +7 -7
- package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-menu.mjs +4 -4
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs +4 -4
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-object-attribute.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-page-footer.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-search-field.mjs +4 -4
- package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +1 -1
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-shared.mjs +2 -1
- package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-table.mjs +12 -11
- package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-upload-collection.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +3 -3
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-variant-management.mjs +3 -3
- package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
- package/form/combobox/combobox.module.d.ts +2 -1
- package/form/combobox/commons/base-combobox.d.ts +6 -4
- package/form/combobox/directives/combobox-item.directive.d.ts +86 -0
- package/form/combobox/index.d.ts +3 -2
- package/form/index.d.ts +36 -35
- package/fundamental-ngx-platform-v0.46.2-rc.21.tgz +0 -0
- package/package.json +4 -4
- package/schematics/ng-add/index.js +1 -1
- package/table/table.component.d.ts +4 -3
- package/fundamental-ngx-platform-v0.46.2-rc.2.tgz +0 -0
|
@@ -833,7 +833,7 @@ export class UploadCollectionComponent {
|
|
|
833
833
|
}
|
|
834
834
|
}
|
|
835
835
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: UploadCollectionComponent, deps: [{ token: i1.DialogService }, { token: i2.FilesValidatorService }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
836
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: UploadCollectionComponent, isStandalone: true, selector: "fdp-upload-collection", inputs: { id: "id", itemsPerPage: "itemsPerPage", dataSource: "dataSource", fileTypes: "fileTypes", maxFileSize: "maxFileSize", maxFilenameLength: "maxFilenameLength", mimeTypes: "mimeTypes", disabled: "disabled", readonly: "readonly", hierarchy: "hierarchy", enablePagination: "enablePagination", terminationEnabled: "terminationEnabled", multiple: "multiple", showSearch: "showSearch", sameFileNameAllowed: "sameFileNameAllowed" }, outputs: { typeMismatch: "typeMismatch", filenameLengthExceed: "filenameLengthExceed", fileSizeExceed: "fileSizeExceed" }, viewQueries: [{ propertyName: "_uploadFilesRef", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "_updateVersionRef", first: true, predicate: ["updateVersionInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [id]=\"id\" class=\"fdp-upload-collection\">\n <!-- Message strip -->\n <fd-message-strip *ngIf=\"_message\" [type]=\"_message.messageStripType\" (onDismiss)=\"_messageStripDismiss()\">\n <ng-container\n [ngTemplateOutlet]=\"message\"\n [ngTemplateOutletContext]=\"{\n messageType: _message.messageType,\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n </fd-message-strip>\n\n <!-- Toolbar -->\n <fd-toolbar class=\"fdp-upload-collection__toolbar\">\n <div [style.flex]=\"'1 auto'\">\n <fd-breadcrumb [id]=\"id + '-breadcrumb'\">\n <fd-breadcrumb-item>\n <ng-template #multipleBreadcrumbs>\n <a href=\"#\" fd-link (click)=\"_breadcrumbGoTo($event)\">\n {{ 'platformUploadCollection.breadcrumbLabelAllFiles' | fdTranslate }}\n </a>\n </ng-template>\n <ng-template #singleBreadcrumb>\n <span>\n {{\n 'platformUploadCollection.breadcrumbLabelAllFilesWithTotal'\n | fdTranslate : { total: _totalItems }\n }}\n </span>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"_breadcrumbList.length > 0 ? multipleBreadcrumbs : singleBreadcrumb\"\n ></ng-container>\n </fd-breadcrumb-item>\n <fd-breadcrumb-item *ngFor=\"let item of _breadcrumbList; let i = index\">\n <ng-template #clickableBreadcrumb>\n <a href=\"#\" fd-link (click)=\"_breadcrumbGoTo($event, i)\">{{ item.folderName }}</a>\n </ng-template>\n <ng-template #textBreadcrumb>\n <span>{{ item.folderName }} ({{ _totalItems }})</span>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"item.clikable ? clickableBreadcrumb : textBreadcrumb\"\n ></ng-container>\n </fd-breadcrumb-item>\n </fd-breadcrumb>\n </div>\n\n <fd-toolbar-spacer [style.max-width.rem]=\"3\"></fd-toolbar-spacer>\n <ng-container *ngIf=\"readonly || selectedItems.length === 0\">\n <fd-input-group\n *ngIf=\"showSearch\"\n [(ngModel)]=\"_searchText\"\n (ngModelChange)=\"_searchInputChanged()\"\n glyph=\"search\"\n [ariaLabelledBy]=\"id + '-breadcrumb'\"\n [placeholder]=\"'platformUploadCollection.searchPlaceholder' | fdTranslate\"\n ></fd-input-group>\n\n <ng-container *ngIf=\"!readonly\">\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_openUploadFiles()\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n [label]=\"'platformUploadCollection.addBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.addBtnLabel' | fdTranslate\"\n ></button>\n\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_openNewFolderDialog()\"\n *ngIf=\"hierarchy\"\n [disabled]=\"disabled\"\n fdType=\"transparent\"\n [label]=\"'platformUploadCollection.newFolderBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.newFolderBtnLabel' | fdTranslate\"\n ></button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!readonly && selectedItems.length > 0\">\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_moveToClicked(true)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n [label]=\"'platformUploadCollection.moveToBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.moveToBtnLabel' | fdTranslate\"\n ></button>\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_downloadClicked(true)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n *ngIf=\"_showIfSelectedOnlyFiles()\"\n [label]=\"'platformUploadCollection.downloadBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.downloadBtnLabel' | fdTranslate\"\n ></button>\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_remove(true)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n [label]=\"'platformUploadCollection.removeBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.removeBtnLabel' | fdTranslate\"\n ></button>\n </ng-container>\n </fd-toolbar>\n\n <div class=\"fdp-upload-collection__table--wrapper\">\n <div\n class=\"fdp-upload-collection__table\"\n fdpUploadCollectionDragnDrop\n [fileTypes]=\"fileTypes\"\n [maxFilenameLength]=\"maxFilenameLength\"\n [maxFileSize]=\"maxFileSize\"\n [mimeTypes]=\"mimeTypes\"\n [dragndrop]=\"!readonly\"\n [disabled]=\"disabled\"\n [multiple]=\"multiple\"\n (fileChanged)=\"_handleDrop($event)\"\n (cancel)=\"_dragDropCancel()\"\n (onDropzone)=\"_onDropzone($event)\"\n >\n <!-- Table -->\n <fdp-table\n *ngIf=\"_visibleList$.value.length > 0\"\n [dataSource]=\"_visibleList$\"\n [loading]=\"dataSource.isDataLoading\"\n selectionMode=\"multiple\"\n emptyTableMessage=\"\"\n [noHorizontalBorders]=\"true\"\n [trackBy]=\"_trackByDocumentId\"\n (rowSelectionChange)=\"_onRowSelectionChange($event)\"\n >\n <fdp-column name=\"name\" label=\"Name\" width=\"8rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">\n <div class=\"fdp-upload-collection__vertical-align-center\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n *ngIf=\"item.type === 'folder'\"\n glyph=\"folder-blank\"\n [title]=\"'platformUploadCollection.folderIconTitle' | fdTranslate\"\n ></fd-icon>\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n *ngIf=\"item.type === 'file'\"\n [glyph]=\"_getIconByType(item)\"\n [title]=\"'platformUploadCollection.fileIconTitle' | fdTranslate\"\n ></fd-icon>\n\n <ng-container *ngIf=\"disabled || readonly || !_isSelectedItem(item); else editMode\">\n <span\n [class.fdp-upload-collection__cursor]=\"item.type === 'folder'\"\n (click)=\"_openFolder(item)\"\n >{{ item.name }}</span\n >\n </ng-container>\n </div>\n\n <ng-template #editMode>\n <div fd-form-item>\n <fd-form-input-message-group [triggers]=\"[]\" [isOpen]=\"!!item.sameFilenameState\">\n <div class=\"fdp-upload-collection__vertical-align-center\">\n <input\n fd-form-control\n [value]=\"_getItemName(item)\"\n (blur)=\"_fileNameChange($event, item)\"\n (input)=\"_checkName($event, item)\"\n type=\"text\"\n [placeholder]=\"\n 'platformUploadCollection.editFileNameInputPlaceholder' | fdTranslate\n \"\n [state]=\"item.sameFilenameState\"\n />\n <span class=\"fdp-upload-collection__item_extension\">{{\n _getItemExtension(item)\n }}</span>\n </div>\n\n <fd-form-message [type]=\"item.sameFilenameState\">\n {{\n (item.type === 'file'\n ? 'platformUploadCollection.editFileNameFileAlreadyExistsError'\n : 'platformUploadCollection.editFileNameFolderAlreadyExistsError'\n ) | fdTranslate\n }}\n </fd-form-message>\n </fd-form-input-message-group>\n </div>\n </ng-template>\n </fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"uploadedBy\" label=\"Uploaded by\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.uploadedBy.name }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"uploadedOn\" label=\"Uploaded on\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.uploadedOn | date : 'shortDate' }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"size\" label=\"File size\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.fileSize | convertBytes }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"version\" label=\"Version\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.version || '' }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"status\" label=\"Status\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">\n <fd-busy-indicator\n *ngIf=\"item.status === _uploadCollectionItemStatus.LOADING\"\n [loading]=\"true\"\n ariaLabel=\"Status: Loading\"\n ariaLive=\"polite\"\n size=\"s\"\n ></fd-busy-indicator>\n <span\n *ngIf=\"item.status === _uploadCollectionItemStatus.SUCCESSFUL\"\n fd-object-status\n status=\"positive\"\n >\n {{ 'platformUploadCollection.itemStatusSuccessful' | fdTranslate }}\n </span>\n <span\n *ngIf=\"item.status === _uploadCollectionItemStatus.UNSUCCESSFUL\"\n fd-object-status\n status=\"negative\"\n >\n {{ 'platformUploadCollection.itemStatusUnsuccessful' | fdTranslate }}\n </span>\n </fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"action\" *ngIf=\"!readonly\" width=\"5rem\" align=\"end\">\n <fdp-table-header *fdpHeaderCellDef>Action</fdp-table-header>\n <fdp-table-cell *fdpCellDef=\"let item\">\n <div class=\"fdp-upload-collection__actions\">\n <div class=\"fdp-upload-collection__actions--status\">\n <button\n fd-button\n [label]=\"'platformUploadCollection.uploadNewFileAfterFailAction' | fdTranslate\"\n [title]=\"'platformUploadCollection.uploadNewFileAfterFailAction' | fdTranslate\"\n (click)=\"_runUploadNewFileAfterFail(item)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n *ngIf=\"item.status === _uploadCollectionItemStatus.UNSUCCESSFUL\"\n ></button>\n\n <button\n fd-button\n [label]=\"'platformUploadCollection.cancelUploadNewFileAction' | fdTranslate\"\n [title]=\"'platformUploadCollection.cancelUploadNewFileAction' | fdTranslate\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n (click)=\"_cancelUploadNewFile(item)\"\n *ngIf=\"terminationEnabled && item.status === _uploadCollectionItemStatus.LOADING\"\n ></button>\n </div>\n\n <fdp-menu-button\n icon=\"overflow\"\n [disabled]=\"disabled\"\n type=\"transparent\"\n [title]=\"'platformUploadCollection.itemMenuBtnTitle' | fdTranslate\"\n [fdpMenuTriggerFor]=\"menuActions\"\n (buttonClicked)=\"_actionButton(item)\"\n >\n </fdp-menu-button>\n </div>\n </fdp-table-cell>\n </fdp-column>\n </fdp-table>\n\n <!-- Dragdrop area -->\n <div\n class=\"fdp-upload-collection__dragdrop-area\"\n *ngIf=\"_showDragDropArea\"\n [class.active]=\"_onDragDropArea\"\n >\n <fd-icon class=\"fdp-upload-collection__dragdrop-area--icon\" glyph=\"upload-to-cloud\"></fd-icon>\n <p class=\"fdp-upload-collection__dragdrop-area--text\">\n {{ 'platformUploadCollection.dragDropAreaText' | fdTranslate }}\n </p>\n </div>\n\n <!-- No data -->\n <div\n class=\"fdp-upload-collection__no-data\"\n *ngIf=\"_visibleList$.value.length === 0\"\n [class.invisible]=\"_showDragDropArea\"\n >\n <fd-icon glyph=\"document\"></fd-icon>\n <h3>{{ 'platformUploadCollection.noDataText' | fdTranslate }}</h3>\n <p>{{ 'platformUploadCollection.noDataDescription' | fdTranslate }}</p>\n </div>\n </div>\n\n <!-- Table footer -->\n <div class=\"fdp-upload-collection__table-footer\" *ngIf=\"enablePagination && _totalItems\">\n <!-- Pagination -->\n <div class=\"fdp-upload-collection__pagination\">\n <span [id]=\"id + '-pagination'\" class=\"fdp-upload-collection__pagination--total\">\n {{\n 'platformUploadCollection.paginationTotal'\n | fdTranslate : { from: _countShowedItems, to: _countNotShowedItems, total: _totalItems }\n }}\n </span>\n <fd-pagination\n [totalItems]=\"_totalItems\"\n [displayTotalItems]=\"false\"\n (pageChangeStart)=\"_pageChanged($event)\"\n [itemsPerPage]=\"_itemsPerPage\"\n [currentPage]=\"_currentPage\"\n [attr.aria-labelledby]=\"id + '-pagination'\"\n ></fd-pagination>\n </div>\n\n <!-- Results per page -->\n <div class=\"fdp-upload-collection__results\">\n <span class=\"fdp-upload-collection__results--title\">\n <span [id]=\"id + '-results'\">\n {{ 'platformUploadCollection.resultsPerPage' | fdTranslate }}\n </span>\n <span *ngIf=\"_itemsPerPageOptions.length === 0\">{{ _itemsPerPage }}</span>\n </span>\n <fdp-menu-button\n *ngIf=\"_itemsPerPageOptions.length > 0\"\n type=\"ghost\"\n [ariaLabelledBy]=\"id + '-results'\"\n [fdpMenuTriggerFor]=\"itemsPerPageMenu\"\n [label]=\"_itemsPerPage + ''\"\n >\n </fdp-menu-button>\n </div>\n </div>\n </div>\n</div>\n\n<fdp-menu #itemsPerPageMenu xPosition=\"before\">\n <fdp-menu-item\n *ngFor=\"let value of _itemsPerPageOptions\"\n (itemSelect)=\"_itemsPerPageChange(value.label)\"\n [attr.title]=\"'Results per page: ' + value.label\"\n >\n <span>{{ value.label }}</span>\n </fdp-menu-item>\n</fdp-menu>\n\n<fdp-menu #menuActions xPosition=\"before\">\n <fdp-menu-item (itemSelect)=\"_moveToClicked()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"folder-blank\"\n [title]=\"'platformUploadCollection.moveToBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.moveToBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n <ng-container *ngIf=\"_activeItem?.type === 'file'\">\n <fdp-menu-item (itemSelect)=\"_downloadClicked()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"download\"\n [title]=\"'platformUploadCollection.downloadBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.downloadBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n <fdp-menu-item (itemSelect)=\"_openUpdateFileVersion()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"drill-up\"\n [title]=\"'platformUploadCollection.updateVersionBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.updateVersionBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n </ng-container>\n <fdp-menu-item (itemSelect)=\"_remove()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"delete\"\n [title]=\"'platformUploadCollection.removeBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.removeBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n</fdp-menu>\n\n<input\n #fileInput\n class=\"fdp-upload-collection__hidden\"\n type=\"file\"\n (fileSelected)=\"_selectHandler($event)\"\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n fdFileSelect\n/>\n\n<input\n #updateVersionInput\n class=\"fdp-upload-collection__hidden\"\n type=\"file\"\n (fileSelected)=\"_selectHandler($event)\"\n [disabled]=\"disabled\"\n [multiple]=\"false\"\n fdFileSelect\n/>\n\n<ng-template\n let-messageType=\"messageType\"\n let-payload=\"payload\"\n let-messageStripType=\"messageStripType\"\n let-count=\"count\"\n #message\n>\n <ng-container *ngIf=\"_message\" [ngSwitch]=\"messageType\">\n <ng-container\n *ngSwitchCase=\"_messageType.CREATE\"\n [ngTemplateOutlet]=\"messageNewFolder\"\n [ngTemplateOutletContext]=\"{\n messageStripType: _message.messageStripType,\n payload: _message.payload\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.UPDATE_VERSION\"\n [ngTemplateOutlet]=\"messageUpdateVersion\"\n [ngTemplateOutletContext]=\"{\n messageStripType: _message.messageStripType,\n payload: _message.payload\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.FILE_RENAME\"\n [ngTemplateOutlet]=\"messageFileRename\"\n [ngTemplateOutletContext]=\"{\n messageStripType: _message.messageStripType,\n payload: _message.payload\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.REMOVE\"\n [ngTemplateOutlet]=\"messageRemove\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.MOVE\"\n [ngTemplateOutlet]=\"messageMove\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.TYPE_MISMATCH\"\n [ngTemplateOutlet]=\"messageTypeMismatch\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.FILE_SIZE\"\n [ngTemplateOutlet]=\"messageFileSize\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.FILE_NAME_LENGTH\"\n [ngTemplateOutlet]=\"messageFilenameLength\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #messageNewFolder let-payload=\"payload\" let-messageStripType=\"messageStripType\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersCreated\">\n {{ 'platformUploadCollection.messageCreateFailed' | fdTranslate : { folderName: payload.folder.name } }}\n </ng-container>\n <ng-template #foldersCreated>\n {{ 'platformUploadCollection.messageCreateSuccess' | fdTranslate : { folderName: payload.folder.name } }}\n </ng-template>\n</ng-template>\n\n<ng-template #messageUpdateVersion let-payload=\"payload\" let-messageStripType=\"messageStripType\">\n <ng-container *ngIf=\"messageStripType === 'error'; else versionUpdated\">\n {{ 'platformUploadCollection.messageUpdateVersionFailed' | fdTranslate : { folderName: payload.item.name } }}\n </ng-container>\n <ng-template #versionUpdated>\n {{ 'platformUploadCollection.messageUpdateVersionSuccess' | fdTranslate : { folderName: payload.item.name } }}\n </ng-template>\n</ng-template>\n\n<ng-template #messageFileRename let-payload=\"payload\" let-messageStripType=\"messageStripType\">\n <ng-container *ngIf=\"messageStripType === 'error'; else fileRenamed\">\n {{\n 'platformUploadCollection.messageFileRenameFailed'\n | fdTranslate : { from: payload.item.name, to: payload.fileName }\n }}\n </ng-container>\n <ng-template #fileRenamed>\n {{\n 'platformUploadCollection.messageFileRenameSuccess'\n | fdTranslate : { from: payload.item.name, to: payload.fileName }\n }}\n </ng-template>\n</ng-template>\n\n<ng-template #messageRemove let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersAndFilesRemoved\">\n {{\n 'platformUploadCollection.messageRemoveFoldersAndFilesFailed'\n | fdTranslate : { foldersCount: count.folder, filesCount: count.file }\n }}\n </ng-container>\n <ng-template #foldersAndFilesRemoved>\n {{\n 'platformUploadCollection.messageRemoveFoldersAndFilesSuccess'\n | fdTranslate : { foldersCount: count.folder, filesCount: count.file }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && !count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersRemoved\">\n {{ 'platformUploadCollection.messageRemoveFoldersFailed' | fdTranslate : { foldersCount: count.folder } }}\n </ng-container>\n <ng-template #foldersRemoved>\n {{ 'platformUploadCollection.messageRemoveFoldersSuccess' | fdTranslate : { foldersCount: count.folder } }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.file && !count.folder\">\n <ng-container *ngIf=\"messageStripType === 'error'; else filesRemoved\">\n {{ 'platformUploadCollection.messageRemoveFilesFailed' | fdTranslate : { filesCount: count.file } }}\n </ng-container>\n <ng-template #filesRemoved>\n {{ 'platformUploadCollection.messageRemoveFilesSuccess' | fdTranslate : { filesCount: count.file } }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n <ng-container *ngIf=\"messageStripType === 'error'; else oneItemRemoved\">\n {{\n 'platformUploadCollection.messageRemoveFileOrFolderFailed'\n | fdTranslate : { name: payload.items[0].name }\n }}\n </ng-container>\n <ng-template #oneItemRemoved>\n {{\n 'platformUploadCollection.messageRemoveFileOrFolderSuccess'\n | fdTranslate : { name: payload.items[0].name }\n }}\n </ng-template>\n </ng-container>\n</ng-template>\n\n<ng-template #messageMove let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else filesAndFoldersMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersAndFilesFailed'\n : 'platformUploadCollection.messageMoveRootFoldersAndFilesFailed'\n ) | fdTranslate : { foldersCount: count.folder, filesCount: count.file, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #filesAndFoldersMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersAndFilesSuccess'\n : 'platformUploadCollection.messageMoveRootFoldersAndFilesSuccess'\n ) | fdTranslate : { foldersCount: count.folder, filesCount: count.file, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && !count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersFailed'\n : 'platformUploadCollection.messageMoveRootFoldersFailed'\n ) | fdTranslate : { foldersCount: count.folder, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #foldersMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersSuccess'\n : 'platformUploadCollection.messageMoveRootFoldersSuccess'\n ) | fdTranslate : { foldersCount: count.folder, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.file && !count.folder\">\n <ng-container *ngIf=\"messageStripType === 'error'; else filesMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFilesFailed'\n : 'platformUploadCollection.messageMoveRootFilesFailed'\n ) | fdTranslate : { filesCount: count.file, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #filesMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFilesSuccess'\n : 'platformUploadCollection.messageMoveRootFilesSuccess'\n ) | fdTranslate : { filesCount: count.file, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n <ng-container *ngIf=\"messageStripType === 'error'; else oneItemMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFileOrFolderFailed'\n : 'platformUploadCollection.messageMoveRootFileOrFolderFailed'\n ) | fdTranslate : { name: payload.items[0].name, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #oneItemMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFileOrFolderSuccess'\n : 'platformUploadCollection.messageMoveRootFileOrFolderSuccess'\n ) | fdTranslate : { name: payload.items[0].name, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n</ng-template>\n\n<ng-template #messageTypeMismatch let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1\">\n {{\n 'platformUploadCollection.messageFileTypeMismatchPlural'\n | fdTranslate : { filesCount: payload.items.length, allowedTypes: _getAllowedTypes() }\n }}\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n {{\n 'platformUploadCollection.messageFileTypeMismatchSingular'\n | fdTranslate : { fileName: payload.items[0].name, allowedTypes: _getAllowedTypes() }\n }}\n </ng-container>\n</ng-template>\n\n<ng-template #messageFileSize let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1\">\n {{\n 'platformUploadCollection.messageFileSizeExceededPlural'\n | fdTranslate : { filesCount: payload.items.length, maxFileSize: maxFileSize || 0 }\n }}\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n {{\n 'platformUploadCollection.messageFileSizeExceededSingular'\n | fdTranslate : { fileName: payload.items[0].name, maxFileSize: maxFileSize || 0 }\n }}\n </ng-container>\n</ng-template>\n\n<ng-template #messageFilenameLength let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1\">\n {{\n 'platformUploadCollection.messageFileNameLengthExceededPlural'\n | fdTranslate : { filesCount: payload.items.length, maxFilenameLength: maxFilenameLength || 0 }\n }}\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n {{\n 'platformUploadCollection.messageFileNameLengthExceededSingular'\n | fdTranslate : { fileName: payload.items[0].name, maxFilenameLength: maxFilenameLength || 0 }\n }}\n </ng-container>\n</ng-template>\n", styles: [".fdp-upload-collection__fd-icon{color:#0854a0!important;color:var(--sapHighlightColor)!important;margin-right:.625rem!important;font-size:1rem!important}.fdp-upload-collection fd-message-strip{margin-bottom:.625rem}.fdp-upload-collection__toolbar .fd-toolbar{margin-bottom:.625rem;border:0}.fdp-upload-collection__toolbar .fd-toolbar fd-input-group .sap-icon--search{color:#0854a0;color:var(--sapHighlightColor)}.fdp-upload-collection__no-data{text-align:center;min-height:230px;display:flex;align-items:center;flex-direction:column;justify-content:center}.fdp-upload-collection__no-data fd-icon{font-size:3rem;line-height:3rem;margin:0;color:#6a6d70;color:var(--sapContent_LabelColor)}.fdp-upload-collection__no-data h3{font-size:1.125rem;font-size:var(--sapFontHeader4Size);line-height:1rem;margin:8px 0}.fdp-upload-collection__no-data p{font-size:.875rem;font-size:var(--sapFontSize);line-height:1rem;color:#6a6d70;color:var(--sapContent_LabelColor);margin:0}.fdp-upload-collection__no-data.invisible{opacity:0}.fdp-upload-collection__table{position:relative}.fdp-upload-collection__table-footer{display:flex;justify-content:space-between;align-items:center;margin-top:.625rem}.fdp-upload-collection__table-footer .fdp-upload-collection__results--title,.fdp-upload-collection__table-footer .fdp-upload-collection__pagination--total{line-height:1.4;line-height:var(--sapContent_LineHeight);color:#32363a;color:var(--sapTextColor);font-family:\"72\",\"72full\",Arial,Helvetica,sans-serif;font-family:var(--sapFontFamily);font-weight:400;-webkit-font-smoothing:antialiased;box-sizing:border-box;padding:0;margin:0;border:0;font-size:.875rem;font-size:var(--sapFontSize);color:#6a6d70;color:var(--sapContent_LabelColor);margin-right:.5rem}.fdp-upload-collection__table-footer .fdp-upload-collection__results--title:before,.fdp-upload-collection__table-footer .fdp-upload-collection__results--title:after,.fdp-upload-collection__table-footer .fdp-upload-collection__pagination--total:before,.fdp-upload-collection__table-footer .fdp-upload-collection__pagination--total:after{box-sizing:inherit;font-size:inherit}[dir=rtl] .fdp-upload-collection__table-footer .fdp-upload-collection__results--title,.fdp-upload-collection__table-footer .fdp-upload-collection__results--title[dir=rtl],[dir=rtl] .fdp-upload-collection__table-footer .fdp-upload-collection__pagination--total,.fdp-upload-collection__table-footer .fdp-upload-collection__pagination--total[dir=rtl]{margin-right:0;margin-left:.5rem}.fdp-upload-collection__table-footer .fdp-upload-collection__pagination--total{width:100%;align-self:center}.fdp-upload-collection__table-footer .fdp-upload-collection__pagination{font-size:.875rem;font-size:var(--sapFontSize);line-height:1.4;line-height:var(--sapContent_LineHeight);color:#32363a;color:var(--sapTextColor);font-family:\"72\",\"72full\",Arial,Helvetica,sans-serif;font-family:var(--sapFontFamily);font-weight:400;-webkit-font-smoothing:antialiased;box-sizing:border-box;padding:0;margin:0;border:0;display:flex}.fdp-upload-collection__table-footer .fdp-upload-collection__pagination:before,.fdp-upload-collection__table-footer .fdp-upload-collection__pagination:after{box-sizing:inherit;font-size:inherit}.fdp-upload-collection__hidden{display:none}.fdp-upload-collection__vertical-align-center{display:flex;align-items:center}.fdp-upload-collection__cursor{cursor:pointer}.fdp-upload-collection__item_extension{white-space:nowrap}.fdp-upload-collection__actions{display:flex;justify-content:space-between;align-items:center}.fdp-upload-collection__actions .sap-icon--slim-arrow-down{display:none}.fdp-upload-collection__dragdrop-area{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;flex-direction:column;background:rgba(255,255,255,.5);outline:2px dashed transparent;outline-color:#89919a;outline-color:var(--sapField_BorderColor);outline-offset:-4px;box-sizing:border-box}.fdp-upload-collection__dragdrop-area fd-icon{font-size:3rem;line-height:3rem;margin-bottom:1rem;color:#6a6d70;color:var(--sapContent_LabelColor)}.fdp-upload-collection__dragdrop-area p{font-size:1rem;line-height:1.125rem;color:#6a6d70;color:var(--sapContent_LabelColor)}.fdp-upload-collection__dragdrop-area.active{outline-color:#0854a0;outline-color:var(--sapContent_DragAndDropActiveColor);background:rgba(8,84,160,.08)}.fdp-upload-collection__dragdrop-area.active fd-icon,.fdp-upload-collection__dragdrop-area.active p{color:#0854a0;color:var(--sapContent_DragAndDropActiveColor)}.fdp-upload-collection .fd-form-item{align-items:center;flex-direction:row}.fdp-upload-collection-dialig-no-bg{background-color:transparent!important}[dir=rtl] .fdp-upload-collection fd-icon{margin-right:0;margin-left:.625rem}.fd-menu__list .disabled{background-color:#fff!important;background-color:var(--sapList_Background)!important;cursor:not-allowed}.fd-menu__list .disabled .fd-menu__title{color:#32363a!important;color:var(--sapList_TextColor)!important}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MessageStripComponent, selector: "fd-message-strip", inputs: ["class", "dismissible", "noIcon", "type", "id", "ariaLabelledBy", "ariaLabel", "width", "minWidth", "marginBottom", "indicationColor"], outputs: ["onDismiss"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "ariaLabel", "ariaLabelledBy"] }, { kind: "component", type: BreadcrumbComponent, selector: "fd-breadcrumb", inputs: ["reverse", "tabIndex"], outputs: ["visibleItemsCount", "hiddenItemsCount"] }, { kind: "component", type: BreadcrumbItemComponent, selector: "fd-breadcrumb-item" }, { kind: "component", type: LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["class", "emphasized", "disabled", "inverted", "subtle", "undecorated"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "iconTitle", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: UploadCollectionDragnDropDirective, selector: "[fdpUploadCollectionDragnDrop]", inputs: ["multiple", "fileTypes", "maxFileSize", "maxFilenameLength", "mimeTypes", "disabled", "dragndrop"], outputs: ["fileChanged", "cancel", "onDropzone"] }, { kind: "component", type: TableComponent, selector: "fdp-table", inputs: ["name", "id", "enableDragResize", "fixed", "freezeColumnsTo", "freezeEndColumnsTo", "pageScrolling", "pageSize", "pageScrollingThreshold", "bodyHeight", "emptyTableMessage", "noVisibleColumnsMessage", "noHorizontalBorders", "noVerticalBorders", "noBorders", "noBodyBorders", "noOuterBorders", "noBorderX", "noBorderY", "relationKey", "expandedStateKey", "hasChildrenKey", "rowNavigatable", "highlightNavigatedRow", "rowsActivable", "selectedKey", "selectableKey", "trackBy", "rowComparator", "rowsClass", "editableRowSkeleton", "expandOnInit", "rowHeight", "loadPagesBefore", "selectionMode", "enableTristateMode", "semanticHighlighting", "forceCheckedAllState", "ariaLabelledBy", "loading"], outputs: ["presetChanged", "rowSelectionChange", "sortChange", "filterChange", "groupChange", "columnsChange", "pageChange", "columnFreeze", "rowToggleOpenState", "rowActivate", "rowNavigate", "emptyRowAdded", "save", "cancel", "tableScrolled", "tableRowsSet", "allRowsExpanded", "allRowsCollapsed"] }, { kind: "directive", type: TableInitialStateDirective, selector: "[fdpTableInitialState], fdp-table", inputs: ["initialVisibleColumns", "initialSortBy", "initialFilterBy", "initialGroupBy", "initialPage", "state"] }, { kind: "component", type: TableColumnComponent, selector: "fdp-column", inputs: ["name", "key", "label", "align", "sortable", "filterable", "visible", "dataType", "groupable", "freezable", "endFreezable", "width", "noWrap", "applyText", "role"] }, { kind: "directive", type: FdpCellDef, selector: "[fdpCellDef]", inputs: ["fdpCellDefAs"] }, { kind: "directive", type: FdpTableCell, selector: "fdp-table-cell" }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen"], outputs: ["isOpenChange"] }, { kind: "component", type: FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "component", type: FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "component", type: BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["class", "status", "glyph", "label", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large", "secondaryIndication", "textTemplate"] }, { kind: "directive", type: FdpHeaderCellDef, selector: "[fdpHeaderCellDef]" }, { kind: "directive", type: FdpTableHeader, selector: "fdp-table-header" }, { kind: "component", type: MenuButtonComponent, selector: "fdp-menu-button", inputs: ["label", "title", "icon", "type"], outputs: ["buttonClicked"] }, { kind: "directive", type: MenuTriggerDirective, selector: "[fdpMenuTriggerFor]", inputs: ["fdpMenuTriggerFor"] }, { kind: "component", type: PaginationComponent, selector: "fd-pagination", inputs: ["id", "mobile", "totalItems", "currentPage", "itemsPerPage", "itemsPerPageTemplate", "itemsPerPageOptions", "displayTotalItems", "displayTextTemplate"], outputs: ["pageChangeStart", "itemsPerPageChange"] }, { kind: "component", type: MenuComponent, selector: "fdp-menu", inputs: ["id", "openByArrowKeys", "xPosition"], outputs: ["close"] }, { kind: "component", type: MenuItemComponent, selector: "fdp-menu-item", inputs: ["disabled", "cascadeDirection"], outputs: ["itemSelect"] }, { kind: "directive", type: FileUploaderSelectDirective, selector: "[fdFileSelect]", inputs: ["multiple"], outputs: ["fileSelected"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: ConvertBytesPipe, name: "convertBytes" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
836
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: UploadCollectionComponent, isStandalone: true, selector: "fdp-upload-collection", inputs: { id: "id", itemsPerPage: "itemsPerPage", dataSource: "dataSource", fileTypes: "fileTypes", maxFileSize: "maxFileSize", maxFilenameLength: "maxFilenameLength", mimeTypes: "mimeTypes", disabled: "disabled", readonly: "readonly", hierarchy: "hierarchy", enablePagination: "enablePagination", terminationEnabled: "terminationEnabled", multiple: "multiple", showSearch: "showSearch", sameFileNameAllowed: "sameFileNameAllowed" }, outputs: { typeMismatch: "typeMismatch", filenameLengthExceed: "filenameLengthExceed", fileSizeExceed: "fileSizeExceed" }, viewQueries: [{ propertyName: "_uploadFilesRef", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "_updateVersionRef", first: true, predicate: ["updateVersionInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [id]=\"id\" class=\"fdp-upload-collection\">\n <!-- Message strip -->\n <fd-message-strip *ngIf=\"_message\" [type]=\"_message.messageStripType\" (onDismiss)=\"_messageStripDismiss()\">\n <ng-container\n [ngTemplateOutlet]=\"message\"\n [ngTemplateOutletContext]=\"{\n messageType: _message.messageType,\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n </fd-message-strip>\n\n <!-- Toolbar -->\n <fd-toolbar class=\"fdp-upload-collection__toolbar\">\n <div [style.flex]=\"'1 auto'\">\n <fd-breadcrumb [id]=\"id + '-breadcrumb'\">\n <fd-breadcrumb-item>\n <ng-template #multipleBreadcrumbs>\n <a href=\"#\" fd-link (click)=\"_breadcrumbGoTo($event)\">\n {{ 'platformUploadCollection.breadcrumbLabelAllFiles' | fdTranslate }}\n </a>\n </ng-template>\n <ng-template #singleBreadcrumb>\n <span>\n {{\n 'platformUploadCollection.breadcrumbLabelAllFilesWithTotal'\n | fdTranslate : { total: _totalItems }\n }}\n </span>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"_breadcrumbList.length > 0 ? multipleBreadcrumbs : singleBreadcrumb\"\n ></ng-container>\n </fd-breadcrumb-item>\n <fd-breadcrumb-item *ngFor=\"let item of _breadcrumbList; let i = index\">\n <ng-template #clickableBreadcrumb>\n <a href=\"#\" fd-link (click)=\"_breadcrumbGoTo($event, i)\">{{ item.folderName }}</a>\n </ng-template>\n <ng-template #textBreadcrumb>\n <span>{{ item.folderName }} ({{ _totalItems }})</span>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"item.clikable ? clickableBreadcrumb : textBreadcrumb\"\n ></ng-container>\n </fd-breadcrumb-item>\n </fd-breadcrumb>\n </div>\n\n <fd-toolbar-spacer [style.max-width.rem]=\"3\"></fd-toolbar-spacer>\n <ng-container *ngIf=\"readonly || selectedItems.length === 0\">\n <fd-input-group\n *ngIf=\"showSearch\"\n [(ngModel)]=\"_searchText\"\n (ngModelChange)=\"_searchInputChanged()\"\n glyph=\"search\"\n [ariaLabelledBy]=\"id + '-breadcrumb'\"\n [placeholder]=\"'platformUploadCollection.searchPlaceholder' | fdTranslate\"\n ></fd-input-group>\n\n <ng-container *ngIf=\"!readonly\">\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_openUploadFiles()\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n [label]=\"'platformUploadCollection.addBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.addBtnLabel' | fdTranslate\"\n ></button>\n\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_openNewFolderDialog()\"\n *ngIf=\"hierarchy\"\n [disabled]=\"disabled\"\n fdType=\"transparent\"\n [label]=\"'platformUploadCollection.newFolderBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.newFolderBtnLabel' | fdTranslate\"\n ></button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!readonly && selectedItems.length > 0\">\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_moveToClicked(true)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n [label]=\"'platformUploadCollection.moveToBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.moveToBtnLabel' | fdTranslate\"\n ></button>\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_downloadClicked(true)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n *ngIf=\"_showIfSelectedOnlyFiles()\"\n [label]=\"'platformUploadCollection.downloadBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.downloadBtnLabel' | fdTranslate\"\n ></button>\n <button\n fd-toolbar-item\n fd-button\n (click)=\"_remove(true)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n [label]=\"'platformUploadCollection.removeBtnLabel' | fdTranslate\"\n [title]=\"'platformUploadCollection.removeBtnLabel' | fdTranslate\"\n ></button>\n </ng-container>\n </fd-toolbar>\n\n <div class=\"fdp-upload-collection__table--wrapper\">\n <div\n class=\"fdp-upload-collection__table\"\n fdpUploadCollectionDragnDrop\n [fileTypes]=\"fileTypes\"\n [maxFilenameLength]=\"maxFilenameLength\"\n [maxFileSize]=\"maxFileSize\"\n [mimeTypes]=\"mimeTypes\"\n [dragndrop]=\"!readonly\"\n [disabled]=\"disabled\"\n [multiple]=\"multiple\"\n (fileChanged)=\"_handleDrop($event)\"\n (cancel)=\"_dragDropCancel()\"\n (onDropzone)=\"_onDropzone($event)\"\n >\n <!-- Table -->\n <fdp-table\n *ngIf=\"_visibleList$.value.length > 0\"\n [dataSource]=\"_visibleList$\"\n [loading]=\"dataSource.isDataLoading\"\n selectionMode=\"multiple\"\n emptyTableMessage=\"\"\n [noHorizontalBorders]=\"true\"\n [trackBy]=\"_trackByDocumentId\"\n (rowSelectionChange)=\"_onRowSelectionChange($event)\"\n >\n <fdp-column name=\"name\" label=\"Name\" width=\"8rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">\n <div class=\"fdp-upload-collection__vertical-align-center\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n *ngIf=\"item.type === 'folder'\"\n glyph=\"folder-blank\"\n [title]=\"'platformUploadCollection.folderIconTitle' | fdTranslate\"\n ></fd-icon>\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n *ngIf=\"item.type === 'file'\"\n [glyph]=\"_getIconByType(item)\"\n [title]=\"'platformUploadCollection.fileIconTitle' | fdTranslate\"\n ></fd-icon>\n\n <ng-container *ngIf=\"disabled || readonly || !_isSelectedItem(item); else editMode\">\n <span\n [class.fdp-upload-collection__cursor]=\"item.type === 'folder'\"\n (click)=\"_openFolder(item)\"\n >{{ item.name }}</span\n >\n </ng-container>\n </div>\n\n <ng-template #editMode>\n <div fd-form-item>\n <fd-form-input-message-group [triggers]=\"[]\" [isOpen]=\"!!item.sameFilenameState\">\n <div class=\"fdp-upload-collection__vertical-align-center\">\n <input\n fd-form-control\n [value]=\"_getItemName(item)\"\n (blur)=\"_fileNameChange($event, item)\"\n (input)=\"_checkName($event, item)\"\n type=\"text\"\n [placeholder]=\"\n 'platformUploadCollection.editFileNameInputPlaceholder' | fdTranslate\n \"\n [state]=\"item.sameFilenameState\"\n />\n <span class=\"fdp-upload-collection__item_extension\">{{\n _getItemExtension(item)\n }}</span>\n </div>\n\n <fd-form-message [type]=\"item.sameFilenameState\">\n {{\n (item.type === 'file'\n ? 'platformUploadCollection.editFileNameFileAlreadyExistsError'\n : 'platformUploadCollection.editFileNameFolderAlreadyExistsError'\n ) | fdTranslate\n }}\n </fd-form-message>\n </fd-form-input-message-group>\n </div>\n </ng-template>\n </fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"uploadedBy\" label=\"Uploaded by\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.uploadedBy.name }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"uploadedOn\" label=\"Uploaded on\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.uploadedOn | date : 'shortDate' }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"size\" label=\"File size\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.fileSize | convertBytes }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"version\" label=\"Version\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">{{ item.version || '' }}</fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"status\" label=\"Status\" width=\"5rem\">\n <fdp-table-cell *fdpCellDef=\"let item\">\n <fd-busy-indicator\n *ngIf=\"item.status === _uploadCollectionItemStatus.LOADING\"\n [loading]=\"true\"\n ariaLabel=\"Status: Loading\"\n ariaLive=\"polite\"\n size=\"s\"\n ></fd-busy-indicator>\n <span\n *ngIf=\"item.status === _uploadCollectionItemStatus.SUCCESSFUL\"\n fd-object-status\n status=\"positive\"\n >\n {{ 'platformUploadCollection.itemStatusSuccessful' | fdTranslate }}\n </span>\n <span\n *ngIf=\"item.status === _uploadCollectionItemStatus.UNSUCCESSFUL\"\n fd-object-status\n status=\"negative\"\n >\n {{ 'platformUploadCollection.itemStatusUnsuccessful' | fdTranslate }}\n </span>\n </fdp-table-cell>\n </fdp-column>\n\n <fdp-column name=\"action\" *ngIf=\"!readonly\" width=\"5rem\" align=\"end\">\n <fdp-table-header *fdpHeaderCellDef>Action</fdp-table-header>\n <fdp-table-cell *fdpCellDef=\"let item\">\n <div class=\"fdp-upload-collection__actions\">\n <div class=\"fdp-upload-collection__actions--status\">\n <button\n fd-button\n [label]=\"'platformUploadCollection.uploadNewFileAfterFailAction' | fdTranslate\"\n [title]=\"'platformUploadCollection.uploadNewFileAfterFailAction' | fdTranslate\"\n (click)=\"_runUploadNewFileAfterFail(item)\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n *ngIf=\"item.status === _uploadCollectionItemStatus.UNSUCCESSFUL\"\n ></button>\n\n <button\n fd-button\n [label]=\"'platformUploadCollection.cancelUploadNewFileAction' | fdTranslate\"\n [title]=\"'platformUploadCollection.cancelUploadNewFileAction' | fdTranslate\"\n fdType=\"ghost\"\n [disabled]=\"disabled\"\n (click)=\"_cancelUploadNewFile(item)\"\n *ngIf=\"terminationEnabled && item.status === _uploadCollectionItemStatus.LOADING\"\n ></button>\n </div>\n\n <fdp-menu-button\n icon=\"overflow\"\n [disabled]=\"disabled\"\n type=\"transparent\"\n [title]=\"'platformUploadCollection.itemMenuBtnTitle' | fdTranslate\"\n [fdpMenuTriggerFor]=\"menuActions\"\n (buttonClicked)=\"_actionButton(item)\"\n >\n </fdp-menu-button>\n </div>\n </fdp-table-cell>\n </fdp-column>\n </fdp-table>\n\n <!-- Dragdrop area -->\n <div\n class=\"fdp-upload-collection__dragdrop-area\"\n *ngIf=\"_showDragDropArea\"\n [class.active]=\"_onDragDropArea\"\n >\n <fd-icon class=\"fdp-upload-collection__dragdrop-area--icon\" glyph=\"upload-to-cloud\"></fd-icon>\n <p class=\"fdp-upload-collection__dragdrop-area--text\">\n {{ 'platformUploadCollection.dragDropAreaText' | fdTranslate }}\n </p>\n </div>\n\n <!-- No data -->\n <div\n class=\"fdp-upload-collection__no-data\"\n *ngIf=\"_visibleList$.value.length === 0\"\n [class.invisible]=\"_showDragDropArea\"\n >\n <fd-icon glyph=\"document\"></fd-icon>\n <h3>{{ 'platformUploadCollection.noDataText' | fdTranslate }}</h3>\n <p>{{ 'platformUploadCollection.noDataDescription' | fdTranslate }}</p>\n </div>\n </div>\n\n <!-- Table footer -->\n <div class=\"fdp-upload-collection__table-footer\" *ngIf=\"enablePagination && _totalItems\">\n <!-- Pagination -->\n <div class=\"fdp-upload-collection__pagination\">\n <span [id]=\"id + '-pagination'\" class=\"fdp-upload-collection__pagination--total\">\n {{\n 'platformUploadCollection.paginationTotal'\n | fdTranslate : { from: _countShowedItems, to: _countNotShowedItems, total: _totalItems }\n }}\n </span>\n <fd-pagination\n [totalItems]=\"_totalItems\"\n [displayTotalItems]=\"false\"\n (pageChangeStart)=\"_pageChanged($event)\"\n [itemsPerPage]=\"_itemsPerPage\"\n [currentPage]=\"_currentPage\"\n [attr.aria-labelledby]=\"id + '-pagination'\"\n ></fd-pagination>\n </div>\n\n <!-- Results per page -->\n <div class=\"fdp-upload-collection__results\">\n <span class=\"fdp-upload-collection__results--title\">\n <span [id]=\"id + '-results'\">\n {{ 'platformUploadCollection.resultsPerPage' | fdTranslate }}\n </span>\n <span *ngIf=\"_itemsPerPageOptions.length === 0\">{{ _itemsPerPage }}</span>\n </span>\n <fdp-menu-button\n *ngIf=\"_itemsPerPageOptions.length > 0\"\n type=\"ghost\"\n [ariaLabelledBy]=\"id + '-results'\"\n [fdpMenuTriggerFor]=\"itemsPerPageMenu\"\n [label]=\"_itemsPerPage + ''\"\n >\n </fdp-menu-button>\n </div>\n </div>\n </div>\n</div>\n\n<fdp-menu #itemsPerPageMenu xPosition=\"before\">\n <fdp-menu-item\n *ngFor=\"let value of _itemsPerPageOptions\"\n (itemSelect)=\"_itemsPerPageChange(value.label)\"\n [attr.title]=\"'Results per page: ' + value.label\"\n >\n <span>{{ value.label }}</span>\n </fdp-menu-item>\n</fdp-menu>\n\n<fdp-menu #menuActions xPosition=\"before\">\n <fdp-menu-item (itemSelect)=\"_moveToClicked()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"folder-blank\"\n [title]=\"'platformUploadCollection.moveToBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.moveToBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n <ng-container *ngIf=\"_activeItem?.type === 'file'\">\n <fdp-menu-item (itemSelect)=\"_downloadClicked()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"download\"\n [title]=\"'platformUploadCollection.downloadBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.downloadBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n <fdp-menu-item (itemSelect)=\"_openUpdateFileVersion()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"drill-up\"\n [title]=\"'platformUploadCollection.updateVersionBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.updateVersionBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n </ng-container>\n <fdp-menu-item (itemSelect)=\"_remove()\">\n <fd-icon\n class=\"fdp-upload-collection__fd-icon\"\n glyph=\"delete\"\n [title]=\"'platformUploadCollection.removeBtnLabel' | fdTranslate\"\n ></fd-icon>\n <span>\n {{ 'platformUploadCollection.removeBtnLabel' | fdTranslate }}\n </span>\n </fdp-menu-item>\n</fdp-menu>\n\n<input\n #fileInput\n class=\"fdp-upload-collection__hidden\"\n type=\"file\"\n (fileSelected)=\"_selectHandler($event)\"\n [multiple]=\"multiple\"\n [disabled]=\"disabled\"\n fdFileSelect\n/>\n\n<input\n #updateVersionInput\n class=\"fdp-upload-collection__hidden\"\n type=\"file\"\n (fileSelected)=\"_selectHandler($event)\"\n [disabled]=\"disabled\"\n [multiple]=\"false\"\n fdFileSelect\n/>\n\n<ng-template\n let-messageType=\"messageType\"\n let-payload=\"payload\"\n let-messageStripType=\"messageStripType\"\n let-count=\"count\"\n #message\n>\n <ng-container *ngIf=\"_message\" [ngSwitch]=\"messageType\">\n <ng-container\n *ngSwitchCase=\"_messageType.CREATE\"\n [ngTemplateOutlet]=\"messageNewFolder\"\n [ngTemplateOutletContext]=\"{\n messageStripType: _message.messageStripType,\n payload: _message.payload\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.UPDATE_VERSION\"\n [ngTemplateOutlet]=\"messageUpdateVersion\"\n [ngTemplateOutletContext]=\"{\n messageStripType: _message.messageStripType,\n payload: _message.payload\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.FILE_RENAME\"\n [ngTemplateOutlet]=\"messageFileRename\"\n [ngTemplateOutletContext]=\"{\n messageStripType: _message.messageStripType,\n payload: _message.payload\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.REMOVE\"\n [ngTemplateOutlet]=\"messageRemove\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.MOVE\"\n [ngTemplateOutlet]=\"messageMove\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.TYPE_MISMATCH\"\n [ngTemplateOutlet]=\"messageTypeMismatch\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.FILE_SIZE\"\n [ngTemplateOutlet]=\"messageFileSize\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n\n <ng-container\n *ngSwitchCase=\"_messageType.FILE_NAME_LENGTH\"\n [ngTemplateOutlet]=\"messageFilenameLength\"\n [ngTemplateOutletContext]=\"{\n payload: _message.payload,\n messageStripType: _message.messageStripType,\n count: _message.count\n }\"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #messageNewFolder let-payload=\"payload\" let-messageStripType=\"messageStripType\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersCreated\">\n {{ 'platformUploadCollection.messageCreateFailed' | fdTranslate : { folderName: payload.folder.name } }}\n </ng-container>\n <ng-template #foldersCreated>\n {{ 'platformUploadCollection.messageCreateSuccess' | fdTranslate : { folderName: payload.folder.name } }}\n </ng-template>\n</ng-template>\n\n<ng-template #messageUpdateVersion let-payload=\"payload\" let-messageStripType=\"messageStripType\">\n <ng-container *ngIf=\"messageStripType === 'error'; else versionUpdated\">\n {{ 'platformUploadCollection.messageUpdateVersionFailed' | fdTranslate : { folderName: payload.item.name } }}\n </ng-container>\n <ng-template #versionUpdated>\n {{ 'platformUploadCollection.messageUpdateVersionSuccess' | fdTranslate : { folderName: payload.item.name } }}\n </ng-template>\n</ng-template>\n\n<ng-template #messageFileRename let-payload=\"payload\" let-messageStripType=\"messageStripType\">\n <ng-container *ngIf=\"messageStripType === 'error'; else fileRenamed\">\n {{\n 'platformUploadCollection.messageFileRenameFailed'\n | fdTranslate : { from: payload.item.name, to: payload.fileName }\n }}\n </ng-container>\n <ng-template #fileRenamed>\n {{\n 'platformUploadCollection.messageFileRenameSuccess'\n | fdTranslate : { from: payload.item.name, to: payload.fileName }\n }}\n </ng-template>\n</ng-template>\n\n<ng-template #messageRemove let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersAndFilesRemoved\">\n {{\n 'platformUploadCollection.messageRemoveFoldersAndFilesFailed'\n | fdTranslate : { foldersCount: count.folder, filesCount: count.file }\n }}\n </ng-container>\n <ng-template #foldersAndFilesRemoved>\n {{\n 'platformUploadCollection.messageRemoveFoldersAndFilesSuccess'\n | fdTranslate : { foldersCount: count.folder, filesCount: count.file }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && !count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersRemoved\">\n {{ 'platformUploadCollection.messageRemoveFoldersFailed' | fdTranslate : { foldersCount: count.folder } }}\n </ng-container>\n <ng-template #foldersRemoved>\n {{ 'platformUploadCollection.messageRemoveFoldersSuccess' | fdTranslate : { foldersCount: count.folder } }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.file && !count.folder\">\n <ng-container *ngIf=\"messageStripType === 'error'; else filesRemoved\">\n {{ 'platformUploadCollection.messageRemoveFilesFailed' | fdTranslate : { filesCount: count.file } }}\n </ng-container>\n <ng-template #filesRemoved>\n {{ 'platformUploadCollection.messageRemoveFilesSuccess' | fdTranslate : { filesCount: count.file } }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n <ng-container *ngIf=\"messageStripType === 'error'; else oneItemRemoved\">\n {{\n 'platformUploadCollection.messageRemoveFileOrFolderFailed'\n | fdTranslate : { name: payload.items[0].name }\n }}\n </ng-container>\n <ng-template #oneItemRemoved>\n {{\n 'platformUploadCollection.messageRemoveFileOrFolderSuccess'\n | fdTranslate : { name: payload.items[0].name }\n }}\n </ng-template>\n </ng-container>\n</ng-template>\n\n<ng-template #messageMove let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else filesAndFoldersMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersAndFilesFailed'\n : 'platformUploadCollection.messageMoveRootFoldersAndFilesFailed'\n ) | fdTranslate : { foldersCount: count.folder, filesCount: count.file, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #filesAndFoldersMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersAndFilesSuccess'\n : 'platformUploadCollection.messageMoveRootFoldersAndFilesSuccess'\n ) | fdTranslate : { foldersCount: count.folder, filesCount: count.file, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.folder && !count.file\">\n <ng-container *ngIf=\"messageStripType === 'error'; else foldersMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersFailed'\n : 'platformUploadCollection.messageMoveRootFoldersFailed'\n ) | fdTranslate : { foldersCount: count.folder, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #foldersMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFoldersSuccess'\n : 'platformUploadCollection.messageMoveRootFoldersSuccess'\n ) | fdTranslate : { foldersCount: count.folder, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length > 1 && count.file && !count.folder\">\n <ng-container *ngIf=\"messageStripType === 'error'; else filesMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFilesFailed'\n : 'platformUploadCollection.messageMoveRootFilesFailed'\n ) | fdTranslate : { filesCount: count.file, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #filesMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFilesSuccess'\n : 'platformUploadCollection.messageMoveRootFilesSuccess'\n ) | fdTranslate : { filesCount: count.file, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n <ng-container *ngIf=\"messageStripType === 'error'; else oneItemMovedTo\">\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFileOrFolderFailed'\n : 'platformUploadCollection.messageMoveRootFileOrFolderFailed'\n ) | fdTranslate : { name: payload.items[0].name, to: payload.to?.name }\n }}\n </ng-container>\n <ng-template #oneItemMovedTo>\n {{\n (payload.to\n ? 'platformUploadCollection.messageMoveFileOrFolderSuccess'\n : 'platformUploadCollection.messageMoveRootFileOrFolderSuccess'\n ) | fdTranslate : { name: payload.items[0].name, to: payload.to?.name }\n }}\n </ng-template>\n </ng-container>\n</ng-template>\n\n<ng-template #messageTypeMismatch let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1\">\n {{\n 'platformUploadCollection.messageFileTypeMismatchPlural'\n | fdTranslate : { filesCount: payload.items.length, allowedTypes: _getAllowedTypes() }\n }}\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n {{\n 'platformUploadCollection.messageFileTypeMismatchSingular'\n | fdTranslate : { fileName: payload.items[0].name, allowedTypes: _getAllowedTypes() }\n }}\n </ng-container>\n</ng-template>\n\n<ng-template #messageFileSize let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1\">\n {{\n 'platformUploadCollection.messageFileSizeExceededPlural'\n | fdTranslate : { filesCount: payload.items.length, maxFileSize: maxFileSize || 0 }\n }}\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n {{\n 'platformUploadCollection.messageFileSizeExceededSingular'\n | fdTranslate : { fileName: payload.items[0].name, maxFileSize: maxFileSize || 0 }\n }}\n </ng-container>\n</ng-template>\n\n<ng-template #messageFilenameLength let-payload=\"payload\" let-messageStripType=\"messageStripType\" let-count=\"count\">\n <ng-container *ngIf=\"payload.items.length > 1\">\n {{\n 'platformUploadCollection.messageFileNameLengthExceededPlural'\n | fdTranslate : { filesCount: payload.items.length, maxFilenameLength: maxFilenameLength || 0 }\n }}\n </ng-container>\n\n <ng-container *ngIf=\"payload.items.length === 1\">\n {{\n 'platformUploadCollection.messageFileNameLengthExceededSingular'\n | fdTranslate : { fileName: payload.items[0].name, maxFilenameLength: maxFilenameLength || 0 }\n }}\n </ng-container>\n</ng-template>\n", styles: [".fdp-upload-collection__fd-icon{color:#0854a0!important;color:var(--sapHighlightColor)!important;margin-right:.625rem!important;font-size:1rem!important}.fdp-upload-collection fd-message-strip{margin-bottom:.625rem}.fdp-upload-collection__toolbar .fd-toolbar{margin-bottom:.625rem;border:0}.fdp-upload-collection__toolbar .fd-toolbar fd-input-group .sap-icon--search{color:#0854a0;color:var(--sapHighlightColor)}.fdp-upload-collection__no-data{text-align:center;min-height:230px;display:flex;align-items:center;flex-direction:column;justify-content:center}.fdp-upload-collection__no-data fd-icon{font-size:3rem;line-height:3rem;margin:0;color:#6a6d70;color:var(--sapContent_LabelColor)}.fdp-upload-collection__no-data h3{font-size:1.125rem;font-size:var(--sapFontHeader4Size);line-height:1rem;margin:8px 0}.fdp-upload-collection__no-data p{font-size:.875rem;font-size:var(--sapFontSize);line-height:1rem;color:#6a6d70;color:var(--sapContent_LabelColor);margin:0}.fdp-upload-collection__no-data.invisible{opacity:0}.fdp-upload-collection__table{position:relative}.fdp-upload-collection__table-footer{display:flex;justify-content:space-between;align-items:center;margin-top:.625rem}.fdp-upload-collection__table-footer .fdp-upload-collection__results--title,.fdp-upload-collection__table-footer .fdp-upload-collection__pagination--total{line-height:1.4;line-height:var(--sapContent_LineHeight);color:#32363a;color:var(--sapTextColor);font-family:\"72\",\"72full\",Arial,Helvetica,sans-serif;font-family:var(--sapFontFamily);font-weight:400;-webkit-font-smoothing:antialiased;box-sizing:border-box;padding:0;margin:0;border:0;font-size:.875rem;font-size:var(--sapFontSize);color:#6a6d70;color:var(--sapContent_LabelColor);margin-right:.5rem}.fdp-upload-collection__table-footer .fdp-upload-collection__results--title:before,.fdp-upload-collection__table-footer .fdp-upload-collection__results--title:after,.fdp-upload-collection__table-footer .fdp-upload-collection__pagination--total:before,.fdp-upload-collection__table-footer .fdp-upload-collection__pagination--total:after{box-sizing:inherit;font-size:inherit}[dir=rtl] .fdp-upload-collection__table-footer .fdp-upload-collection__results--title,.fdp-upload-collection__table-footer .fdp-upload-collection__results--title[dir=rtl],[dir=rtl] .fdp-upload-collection__table-footer .fdp-upload-collection__pagination--total,.fdp-upload-collection__table-footer .fdp-upload-collection__pagination--total[dir=rtl]{margin-right:0;margin-left:.5rem}.fdp-upload-collection__table-footer .fdp-upload-collection__pagination--total{width:100%;align-self:center}.fdp-upload-collection__table-footer .fdp-upload-collection__pagination{font-size:.875rem;font-size:var(--sapFontSize);line-height:1.4;line-height:var(--sapContent_LineHeight);color:#32363a;color:var(--sapTextColor);font-family:\"72\",\"72full\",Arial,Helvetica,sans-serif;font-family:var(--sapFontFamily);font-weight:400;-webkit-font-smoothing:antialiased;box-sizing:border-box;padding:0;margin:0;border:0;display:flex}.fdp-upload-collection__table-footer .fdp-upload-collection__pagination:before,.fdp-upload-collection__table-footer .fdp-upload-collection__pagination:after{box-sizing:inherit;font-size:inherit}.fdp-upload-collection__hidden{display:none}.fdp-upload-collection__vertical-align-center{display:flex;align-items:center}.fdp-upload-collection__cursor{cursor:pointer}.fdp-upload-collection__item_extension{white-space:nowrap}.fdp-upload-collection__actions{display:flex;justify-content:space-between;align-items:center}.fdp-upload-collection__actions .sap-icon--slim-arrow-down{display:none}.fdp-upload-collection__dragdrop-area{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;flex-direction:column;background:rgba(255,255,255,.5);outline:2px dashed transparent;outline-color:#89919a;outline-color:var(--sapField_BorderColor);outline-offset:-4px;box-sizing:border-box}.fdp-upload-collection__dragdrop-area fd-icon{font-size:3rem;line-height:3rem;margin-bottom:1rem;color:#6a6d70;color:var(--sapContent_LabelColor)}.fdp-upload-collection__dragdrop-area p{font-size:1rem;line-height:1.125rem;color:#6a6d70;color:var(--sapContent_LabelColor)}.fdp-upload-collection__dragdrop-area.active{outline-color:#0854a0;outline-color:var(--sapContent_DragAndDropActiveColor);background:rgba(8,84,160,.08)}.fdp-upload-collection__dragdrop-area.active fd-icon,.fdp-upload-collection__dragdrop-area.active p{color:#0854a0;color:var(--sapContent_DragAndDropActiveColor)}.fdp-upload-collection .fd-form-item{align-items:center;flex-direction:row}.fdp-upload-collection-dialig-no-bg{background-color:transparent!important}[dir=rtl] .fdp-upload-collection fd-icon{margin-right:0;margin-left:.625rem}.fd-menu__list .disabled{background-color:#fff!important;background-color:var(--sapList_Background)!important;cursor:not-allowed}.fd-menu__list .disabled .fd-menu__title{color:#32363a!important;color:var(--sapList_TextColor)!important}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MessageStripComponent, selector: "fd-message-strip", inputs: ["class", "dismissible", "noIcon", "type", "id", "ariaLabelledBy", "ariaLabel", "width", "minWidth", "marginBottom", "indicationColor"], outputs: ["onDismiss"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "title", "active", "clearBorder", "forceOverflow", "tabindex", "ariaLabel", "ariaLabelledBy"] }, { kind: "component", type: BreadcrumbComponent, selector: "fd-breadcrumb", inputs: ["reverse", "tabIndex"], outputs: ["visibleItemsCount", "hiddenItemsCount"] }, { kind: "component", type: BreadcrumbItemComponent, selector: "fd-breadcrumb-item" }, { kind: "component", type: LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["class", "emphasized", "disabled", "inverted", "subtle", "undecorated"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "iconTitle", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: UploadCollectionDragnDropDirective, selector: "[fdpUploadCollectionDragnDrop]", inputs: ["multiple", "fileTypes", "maxFileSize", "maxFilenameLength", "mimeTypes", "disabled", "dragndrop"], outputs: ["fileChanged", "cancel", "onDropzone"] }, { kind: "component", type: TableComponent, selector: "fdp-table", inputs: ["name", "id", "enableDragResize", "fixed", "freezeColumnsTo", "freezeEndColumnsTo", "pageScrolling", "pageSize", "pageScrollingThreshold", "bodyHeight", "emptyTableMessage", "noVisibleColumnsMessage", "noHorizontalBorders", "noVerticalBorders", "noBorders", "noBodyBorders", "noOuterBorders", "noBorderX", "noBorderY", "relationKey", "expandedStateKey", "hasChildrenKey", "rowNavigatable", "highlightNavigatedRow", "rowsActivable", "selectedKey", "selectableKey", "trackBy", "rowComparator", "rowsClass", "editableRowSkeleton", "expandOnInit", "rowHeight", "loadPagesBefore", "selectionMode", "enableTristateMode", "semanticHighlighting", "forceCheckedAllState", "ariaLabelledBy", "loading"], outputs: ["presetChanged", "rowSelectionChange", "sortChange", "filterChange", "groupChange", "columnsChange", "pageChange", "columnFreeze", "rowToggleOpenState", "rowActivate", "rowNavigate", "emptyRowAdded", "save", "cancel", "tableScrolled", "tableRowsSet", "allRowsExpanded", "allRowsCollapsed"] }, { kind: "directive", type: TableInitialStateDirective, selector: "[fdpTableInitialState], fdp-table", inputs: ["initialVisibleColumns", "initialSortBy", "initialFilterBy", "initialGroupBy", "initialPage", "state"] }, { kind: "component", type: TableColumnComponent, selector: "fdp-column", inputs: ["name", "key", "label", "align", "sortable", "filterable", "visible", "dataType", "groupable", "freezable", "endFreezable", "width", "noWrap", "applyText", "role"] }, { kind: "directive", type: FdpCellDef, selector: "[fdpCellDef]", inputs: ["fdpCellDefAs"] }, { kind: "directive", type: FdpTableCell, selector: "fdp-table-cell" }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen"], outputs: ["isOpenChange"] }, { kind: "component", type: FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "component", type: FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "component", type: BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["class", "status", "glyph", "label", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large", "secondaryIndication", "textTemplate"] }, { kind: "directive", type: FdpHeaderCellDef, selector: "[fdpHeaderCellDef]" }, { kind: "directive", type: FdpTableHeader, selector: "fdp-table-header" }, { kind: "component", type: MenuButtonComponent, selector: "fdp-menu-button", inputs: ["label", "title", "icon", "type"], outputs: ["buttonClicked"] }, { kind: "directive", type: MenuTriggerDirective, selector: "[fdpMenuTriggerFor]", inputs: ["fdpMenuTriggerFor"] }, { kind: "component", type: PaginationComponent, selector: "fd-pagination", inputs: ["id", "mobile", "totalItems", "currentPage", "itemsPerPage", "itemsPerPageTemplate", "itemsPerPageOptions", "displayTotalItems", "displayTextTemplate"], outputs: ["pageChangeStart", "itemsPerPageChange"] }, { kind: "component", type: MenuComponent, selector: "fdp-menu", inputs: ["id", "openByArrowKeys", "xPosition"], outputs: ["close"] }, { kind: "component", type: MenuItemComponent, selector: "fdp-menu-item", inputs: ["disabled", "cascadeDirection"], outputs: ["itemSelect"] }, { kind: "directive", type: FileUploaderSelectDirective, selector: "[fdFileSelect]", inputs: ["multiple"], outputs: ["fileSelected"] }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: ConvertBytesPipe, name: "convertBytes" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
837
837
|
}
|
|
838
838
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: UploadCollectionComponent, decorators: [{
|
|
839
839
|
type: Component,
|
|
@@ -923,4 +923,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
|
|
|
923
923
|
type: ViewChild,
|
|
924
924
|
args: ['updateVersionInput']
|
|
925
925
|
}] } });
|
|
926
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWNvbGxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3VwbG9hZC1jb2xsZWN0aW9uL3VwbG9hZC1jb2xsZWN0aW9uL3VwbG9hZC1jb2xsZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi91cGxvYWQtY29sbGVjdGlvbi91cGxvYWQtY29sbGVjdGlvbi91cGxvYWQtY29sbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0UsT0FBTyxFQUFFLDJC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LGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQiw4QkFBOEI7d0JBQzlCLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3dCQUNwQixzQkFBc0I7d0JBQ3RCLHFCQUFxQjt3QkFDckIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQiwyQkFBMkI7d0JBQzNCLFFBQVE7d0JBQ1IsWUFBWTt3QkFDWixRQUFRO3dCQUNSLGVBQWU7d0JBQ2YsZ0JBQWdCO3FCQUNuQjsrTEFPRCxFQUFFO3NCQURELEtBQUs7Z0JBS0YsWUFBWTtzQkFEZixLQUFLO2dCQTZCRixVQUFVO3NCQURiLEtBQUs7Z0JBaUJOLFNBQVM7c0JBRFIsS0FBSztnQkFRTixXQUFXO3NCQURWLEtBQUs7Z0JBU04saUJBQWlCO3NCQURoQixLQUFLO2dCQVVOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFRTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFRTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBUU4sWUFBWTtzQkFEWCxNQUFNO2dCQVFQLG9CQUFvQjtzQkFEbkIsTUFBTTtnQkFRUCxjQUFjO3NCQURiLE1BQU07Z0JBbUVVLGVBQWU7c0JBRC9CLFNBQVM7dUJBQUMsV0FBVztnQkFLTCxpQkFBaUI7c0JBRGpDLFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBEYXRlUGlwZSwgTmdGb3IsIE5nSWYsIE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCcmVhZGNydW1iQ29tcG9uZW50LCBCcmVhZGNydW1iSXRlbUNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9icmVhZGNydW1iJztcbmltcG9ydCB7IEJ1c3lJbmRpY2F0b3JDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnVzeS1pbmRpY2F0b3InO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBEaWFsb2dDb25maWcsIERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IEZpbGVVcGxvYWRlclNlbGVjdERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9maWxlLXVwbG9hZGVyJztcbmltcG9ydCB7XG4gICAgRm9ybUNvbnRyb2xDb21wb25lbnQsXG4gICAgRm9ybUlucHV0TWVzc2FnZUdyb3VwQ29tcG9uZW50LFxuICAgIEZvcm1JdGVtQ29tcG9uZW50LFxuICAgIEZvcm1NZXNzYWdlQ29tcG9uZW50XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWNvbic7XG5pbXBvcnQgeyBJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lucHV0LWdyb3VwJztcbmltcG9ydCB7IExpbmtDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGluayc7XG5pbXBvcnQgeyBNZXNzYWdlU3RyaXBDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbWVzc2FnZS1zdHJpcCc7XG5pbXBvcnQgeyBPYmplY3RTdGF0dXNDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvb2JqZWN0LXN0YXR1cyc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgVG9vbGJhckNvbXBvbmVudCwgVG9vbGJhckl0ZW1EaXJlY3RpdmUsIFRvb2xiYXJTcGFjZXJEaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdG9vbGJhcic7XG5pbXBvcnQgeyB1dWlkdjQsIHdhcm5PbmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBNZW51Q29tcG9uZW50LCBNZW51SXRlbUNvbXBvbmVudCwgTWVudVRyaWdnZXJEaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL21lbnUnO1xuaW1wb3J0IHsgTWVudUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vbWVudS1idXR0b24nO1xuaW1wb3J0IHsgQ29udmVydEJ5dGVzUGlwZSwgaXNEYXRhU291cmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHtcbiAgICBDb2x1bW5BbGlnbixcbiAgICBTZWxlY3Rpb25Nb2RlLFxuICAgIFRhYmxlQ29sdW1uQ29tcG9uZW50LFxuICAgIFRhYmxlQ29tcG9uZW50LFxuICAgIFRhYmxlUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS90YWJsZSc7XG5pbXBvcnQge1xuICAgIEZkcENlbGxEZWYsXG4gICAgRmRwSGVhZGVyQ2VsbERlZixcbiAgICBGZHBUYWJsZUNlbGwsXG4gICAgRmRwVGFibGVIZWFkZXIsXG4gICAgVGFibGVEYXRhU291cmNlRGlyZWN0aXZlLFxuICAgIFRhYmxlSGVhZGVyUmVzaXplckRpcmVjdGl2ZSxcbiAgICBUYWJsZUluaXRpYWxTdGF0ZURpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3RhYmxlLWhlbHBlcnMnO1xuaW1wb3J0IHsgTW92ZVRvQ29tcG9uZW50LCBNb3ZlVG9Db21wb25lbnREaWFsb2dEYXRhIH0gZnJvbSAnLi4vZGlhbG9ncy9tb3ZlLXRvL21vdmUtdG8uY29tcG9uZW50JztcbmltcG9ydCB7IE5ld0ZvbGRlckNvbXBvbmVudCB9IGZyb20gJy4uL2RpYWxvZ3MvbmV3LWZvbGRlci9uZXctZm9sZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVcGxvYWRDb2xsZWN0aW9uRHJhZ25Ecm9wRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy91cGxvYWQtY29sbGVjdGlvbi1kcmFnbmRyb3AuZGlyZWN0aXZlJztcbmltcG9ydCB7IFVwbG9hZENvbGxlY3Rpb25EYXRhU291cmNlIH0gZnJvbSAnLi4vZG9tYWluL3VwbG9hZC1jb2xsZWN0aW9uLWRhdGEtc291cmNlJztcbmltcG9ydCB7IGdlbmVyYXRlTWVzc2FnZVN0cmlwZURhdGEgfSBmcm9tICcuLi9oZWxwZXJzL2dlbmVyYXRlLW1lc3NhZ2Utc3RyaXBlLWRhdGEnO1xuaW1wb3J0IHtcbiAgICBCcmVhZGNydW1iTGlzdCxcbiAgICBGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuICAgIEZpbGVuYW1lTGVuZ3RoRXhjZWVkRXZlbnQsXG4gICAgRmlsZXNWYWxpZGF0b3JPdXRwdXQsXG4gICAgSXRlbVBlclBhZ2UsXG4gICAgTWVzc2FnZSxcbiAgICBNZXNzYWdlT3B0aW9ucyxcbiAgICBNZXNzYWdlU3RyaXBUeXBlLFxuICAgIE1lc3NhZ2VUeXBlLFxuICAgIE1vdmVUb0V2ZW50LFxuICAgIFR5cGVNaXNtYXRjaEV2ZW50LFxuICAgIFVwZGF0ZVZlcnNpb25FdmVudCxcbiAgICBVcGxvYWRDb2xsZWN0aW9uQ21wLFxuICAgIFVwbG9hZENvbGxlY3Rpb25GaWxlLFxuICAgIFVwbG9hZENvbGxlY3Rpb25Gb2xkZXIsXG4gICAgVXBsb2FkQ29sbGVjdGlvbkl0ZW0sXG4gICAgVXBsb2FkQ29sbGVjdGlvbkl0ZW1TdGF0dXNcbn0gZnJvbSAnLi4vbW9kZWxzL3VwbG9hZC1jb2xsZWN0aW9uLm1vZGVscyc7XG5pbXBvcnQgeyBGaWxlc1ZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlcy12YWxpZGF0b3Iuc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIEZkcFVwbG9hZENvbGxlY3Rpb25EYXRhU291cmNlID0gVXBsb2FkQ29sbGVjdGlvbkRhdGFTb3VyY2U7XG5cbmxldCByYW5kb21JZCA9IDA7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFVwbG9hZENvbGxlY3Rpb24gY29tcG9uZW50IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAwLjQwLjBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtdXBsb2FkLWNvbGxlY3Rpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQtY29sbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdXBsb2FkLWNvbGxlY3Rpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBNZXNzYWdlU3RyaXBDb21wb25lbnQsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIEJyZWFkY3J1bWJDb21wb25lbnQsXG4gICAgICAgIEJyZWFkY3J1bWJJdGVtQ29tcG9uZW50LFxuICAgICAgICBMaW5rQ29tcG9uZW50LFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgVG9vbGJhclNwYWNlckRpcmVjdGl2ZSxcbiAgICAgICAgSW5wdXRHcm91cENvbXBvbmVudCxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgVG9vbGJhckl0ZW1EaXJlY3RpdmUsXG4gICAgICAgIFVwbG9hZENvbGxlY3Rpb25EcmFnbkRyb3BEaXJlY3RpdmUsXG4gICAgICAgIFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICAgICAgVGFibGVIZWFkZXJSZXNpemVyRGlyZWN0aXZlLFxuICAgICAgICBUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgVGFibGVJbml0aWFsU3RhdGVEaXJlY3RpdmUsXG4gICAgICAgIFRhYmxlQ29sdW1uQ29tcG9uZW50LFxuICAgICAgICBGZHBDZWxsRGVmLFxuICAgICAgICBGZHBUYWJsZUNlbGwsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIEZvcm1JdGVtQ29tcG9uZW50LFxuICAgICAgICBGb3JtSW5wdXRNZXNzYWdlR3JvdXBDb21wb25lbnQsXG4gICAgICAgIEZvcm1Db250cm9sQ29tcG9uZW50LFxuICAgICAgICBGb3JtTWVzc2FnZUNvbXBvbmVudCxcbiAgICAgICAgQnVzeUluZGljYXRvckNvbXBvbmVudCxcbiAgICAgICAgT2JqZWN0U3RhdHVzQ29tcG9uZW50LFxuICAgICAgICBGZHBIZWFkZXJDZWxsRGVmLFxuICAgICAgICBGZHBUYWJsZUhlYWRlcixcbiAgICAgICAgTWVudUJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgTWVudVRyaWdnZXJEaXJlY3RpdmUsXG4gICAgICAgIFBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgICAgIE1lbnVDb21wb25lbnQsXG4gICAgICAgIE1lbnVJdGVtQ29tcG9uZW50LFxuICAgICAgICBGaWxlVXBsb2FkZXJTZWxlY3REaXJlY3RpdmUsXG4gICAgICAgIE5nU3dpdGNoLFxuICAgICAgICBOZ1N3aXRjaENhc2UsXG4gICAgICAgIERhdGVQaXBlLFxuICAgICAgICBGZFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIENvbnZlcnRCeXRlc1BpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZENvbGxlY3Rpb25Db21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBVcGxvYWRDb2xsZWN0aW9uQ21wPEZkcFVwbG9hZENvbGxlY3Rpb25EYXRhU291cmNlPlxue1xuICAgIC8qKiBJRCBvZiB0aGUgdXBsb2FkIGNvbGxlY3Rpb24gZWxlbWVudC4gSWYgbm9uZSBpcyBwcm92aWRlZCwgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQgPSBgZmRwLXVwbG9hZC1jb2xsZWN0aW9uLWlkLSR7cmFuZG9tSWQrK31gO1xuXG4gICAgLyoqIERlZmluZXMgdGhlIG51bWJlciBvZiBpdGVtcyBvbiB0aGUgcGFnZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGl0ZW1zUGVyUGFnZSh2YWx1ZTogbnVtYmVyIHwgSXRlbVBlclBhZ2VbXSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhpcy5faXRlbXNQZXJQYWdlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9tYXRjaCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB2YWx1ZS5maW5kKChpdGVtKSA9PiBpdGVtLmRlZmF1bHQpO1xuICAgICAgICB0aGlzLl9pdGVtc1BlclBhZ2VPcHRpb25zID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5faXRlbXNQZXJQYWdlID0gZGVmYXVsdFZhbHVlLmxhYmVsO1xuICAgICAgICAgICAgdGhpcy5fbWF0Y2goKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faXRlbXNQZXJQYWdlID0gdmFsdWVbTWF0aC5yb3VuZCh2YWx1ZS5sZW5ndGggLyAyKV0ubGFiZWw7XG5cbiAgICAgICAgdGhpcy5fbWF0Y2goKTtcbiAgICB9XG4gICAgZ2V0IGl0ZW1zUGVyUGFnZSgpOiBudW1iZXIgfCBJdGVtUGVyUGFnZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZTtcbiAgICB9XG5cbiAgICAvKiogTGlzdCBvZiBpdGVtcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEZkcFVwbG9hZENvbGxlY3Rpb25EYXRhU291cmNlKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURTKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZGF0YVNvdXJjZSgpOiBGZHBVcGxvYWRDb2xsZWN0aW9uRGF0YVNvdXJjZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIGFsbG93ZWQgZmlsZSB0eXBlcyBmb3IgdGhlIHVwbG9hZC5cbiAgICAgKiBUaGUgY2hvc2VuIGZpbGVzIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IGFuIGFycmF5IG9mIGZpbGUgdHlwZXMuXG4gICAgICogSWYgYXQgbGVhc3Qgb25lIGZpbGUgZG9lcyBub3QgZml0IHRoZSBmaWxlIHR5cGUgcmVxdWlyZW1lbnRzLFxuICAgICAqIHRoZSB1cGxvYWQgaXMgcHJldmVudGVkLiBFeGFtcGxlOiBbXCJqcGdcIiwgXCJwbmdcIiwgXCJibXBcIl0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaWxlVHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgYSBmaWxlIHNpemUgbGltaXQgaW4gbWVnYWJ5dGVzIHRoYXQgcHJldmVudHMgdGhlIHVwbG9hZFxuICAgICAqIGlmIGF0IGxlYXN0IG9uZSBmaWxlIGV4Y2VlZHMgdGhlIGxpbWl0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4RmlsZVNpemU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgZmlsZSBuYW1lLlxuICAgICAqIElmIHRoZSBtYXhpbXVtIGZpbGUgbmFtZSBsZW5ndGggaXMgZXhjZWVkZWQsXG4gICAgICogdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQgJ2ZpbGVuYW1lTGVuZ3RoRXhjZWVkJyBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBtYXhGaWxlbmFtZUxlbmd0aD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIGFsbG93ZWQgTUlNRSB0eXBlcyBvZiBmaWxlcyB0byBiZSB1cGxvYWRlZC5cbiAgICAgKiBUaGUgY2hvc2VuIGZpbGVzIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IGFuIGFycmF5IG9mIE1JTUUgdHlwZXMuXG4gICAgICogSWYgYXQgbGVhc3Qgb25lIGZpbGUgZG9lcyBub3QgZml0IHRoZSBNSU1FIHR5cGUgcmVxdWlyZW1lbnRzLCB0aGUgdXBsb2FkIGlzIHByZXZlbnRlZC5cbiAgICAgKiBFeGFtcGxlOiBtaW1lVHlwZXMgW1wiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvanBlZ1wiXS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1pbWVUeXBlczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKiBBbGwgYWN0aW9uIGJ1dHRvbnMgd2lsbCBiZSBkaXNhYmxlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBBbGwgYWN0aW9uIGJ1dHRvbnMgd2lsbCBiZSBpbnZpc2libGUgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgICAvKiogQWxsb3dzIHRvIHN1cHBvcnQgaGllcmFyY2h5ICovXG4gICAgQElucHV0KClcbiAgICBoaWVyYXJjaHkgPSB0cnVlO1xuXG4gICAgLyoqIEFsbG93cyB0byBzaG93L2hpZGUgcGFnaW5hdGlvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW5hYmxlUGFnaW5hdGlvbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlLCB0aGUgYnV0dG9uIHRoYXQgaXMgdXNlZCB0byB0ZXJtaW5hdGUgdGhlIGluc3RhbnQgZmlsZSB1cGxvYWQgZ2V0cyB2aXNpYmxlLlxuICAgICAqIFRoZSBidXR0b24gbm9ybWFsbHkgYXBwZWFycyB3aGVuIGEgZmlsZSBpcyBiZWluZyB1cGxvYWRlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRlcm1pbmF0aW9uRW5hYmxlZCA9IHRydWU7XG5cbiAgICAvKiogR2l2ZXMgdG8gc2VsZWN0IG11bHRpcGxlIGZpbGVzIGZyb20gdGhlIHNhbWUgZm9sZGVyIGFuZCB0aGVuIHVwbG9hZCB0aGVtLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbXVsdGlwbGUgPSB0cnVlO1xuXG4gICAgLyoqIEFsbG93cyB0byBzaG93L2hpZGUgc2VhcmNoICovXG4gICAgQElucHV0KClcbiAgICBzaG93U2VhcmNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFsbG93cyB0byB1c2UgdGhlIHNhbWUgbmFtZSBmb3IgYSBmaWxlIHdoZW4gZWRpdGluZyB0aGUgZmlsZSBuYW1lLlxuICAgICAqICdTYW1lIG5hbWUnIHJlZmVycyB0byBhbiBhbHJlYWR5IGV4aXN0aW5nIGZpbGUgbmFtZSBpbiB0aGUgbGlzdC5cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2FtZUZpbGVOYW1lQWxsb3dlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBmaWxlIHR5cGUgb3IgdGhlIE1JTUUgdHlwZSBkb24ndCBtYXRjaCB0aGUgcGVybWl0dGVkIHR5cGVzXG4gICAgICogKG9ubHkgaWYgdGhlIGZpbGVUeXBlcyBwcm9wZXJ0eSBvciB0aGUgbWltZVR5cGVzIHByb3BlcnR5IGFyZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24pLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHR5cGVNaXNtYXRjaCA9IG5ldyBFdmVudEVtaXR0ZXI8VHlwZU1pc21hdGNoRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIG5hbWUgb2YgYSBjaG9zZW4gZmlsZSBpcyBsb25nZXIgdGhhbiB0aGUgdmFsdWUgc3BlY2lmaWVkXG4gICAgICogd2l0aCB0aGUgbWF4RmlsZW5hbWVMZW5ndGggcHJvcGVydHkgKG9ubHkgaWYgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBmaWxlbmFtZUxlbmd0aEV4Y2VlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZW5hbWVMZW5ndGhFeGNlZWRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgZmlsZSBzaXplIG9mIGFuIHVwbG9hZGVkIGZpbGUgaXMgZXhjZWVkZWRcbiAgICAgKiAob25seSBpZiB0aGUgbWF4RmlsZVNpemUgcHJvcGVydHkgd2FzIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbikuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZmlsZVNpemVFeGNlZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVTaXplRXhjZWVkRXZlbnQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF91cGxvYWRDb2xsZWN0aW9uSXRlbVN0YXR1cyA9IFVwbG9hZENvbGxlY3Rpb25JdGVtU3RhdHVzO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYnJlYWRjcnVtYkxpc3Q6IEJyZWFkY3J1bWJMaXN0W10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2N1cnJlbnRQYWdlID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2l0ZW1zUGVyUGFnZSA9IDEwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXRlbXNQZXJQYWdlT3B0aW9uczogSXRlbVBlclBhZ2VbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG90YWxJdGVtcyA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jb3VudFNob3dlZEl0ZW1zID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NvdW50Tm90U2hvd2VkSXRlbXMgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBMaXN0IG9mIGN1cnJlbnRseSBkaXNwbGF5ZWQgaXRlbXNcbiAgICAgKi9cbiAgICBfdmlzaWJsZUxpc3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVcGxvYWRDb2xsZWN0aW9uSXRlbVtdPihbXSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNlbGVjdGVkSXRlbXM6IFVwbG9hZENvbGxlY3Rpb25JdGVtW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlYXJjaFRleHQgPSAnJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Nob3dEcmFnRHJvcEFyZWEgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uRHJhZ0Ryb3BBcmVhID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hY3RpdmVJdGVtPzogVXBsb2FkQ29sbGVjdGlvbkl0ZW07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jdXJyZW50VXBkYXRlRmlsZVZlcnNpb24/OiBVcGxvYWRDb2xsZWN0aW9uRmlsZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2U/OiBNZXNzYWdlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbWVzc2FnZVR5cGUgPSBNZXNzYWdlVHlwZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2VTdHJpcFR5cGUgPSBNZXNzYWdlU3RyaXBUeXBlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY29sdW1uQWxpZ24gPSBDb2x1bW5BbGlnbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3VwbG9hZEZpbGVzUmVmOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd1cGRhdGVWZXJzaW9uSW5wdXQnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3VwZGF0ZVZlcnNpb25SZWY6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RhdGFTb3VyY2U6IFVwbG9hZENvbGxlY3Rpb25EYXRhU291cmNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnRlbnREZW5zaXR5TWFudWFsbHlTZXQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW1hZ2VFeHRlbnNpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJy5hcG5nJyxcbiAgICAgICAgJy5ibXAnLFxuICAgICAgICAnLmdpZicsXG4gICAgICAgICcuaWNvJyxcbiAgICAgICAgJy5jdXInLFxuICAgICAgICAnLmpwZycsXG4gICAgICAgICcuanBlZycsXG4gICAgICAgICcuamZpZicsXG4gICAgICAgICcucGpwZWcnLFxuICAgICAgICAnLnBqcCcsXG4gICAgICAgICcucG5nJyxcbiAgICAgICAgJy5zdmcnLFxuICAgICAgICAnLnRpZicsXG4gICAgICAgICcudGlmZicsXG4gICAgICAgICcud2VicCcsXG4gICAgICAgICcuZmxpZicsXG4gICAgICAgICcuY3IyJyxcbiAgICAgICAgJy5qeHInLFxuICAgICAgICAnLnBzZCcsXG4gICAgICAgICcuYnBnJyxcbiAgICAgICAgJy5qcDInLFxuICAgICAgICAnLmpwbScsXG4gICAgICAgICcuanB4JyxcbiAgICAgICAgJy5oZWljJyxcbiAgICAgICAgJy5kY20nXG4gICAgXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmFsaWRhdGVkRmlsZXM6IEZpbGVzVmFsaWRhdG9yT3V0cHV0O1xuXG4gICAgLyoqIEBoaWRkZW4gZm9yIGRhdGEgc291cmNlIGhhbmRsaW5nICovXG4gICAgcHJpdmF0ZSBfZHNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNWYWxpZGF0b3JTZXJ2aWNlOiBGaWxlc1ZhbGlkYXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICB3YXJuT25jZSgnVGhlIFVwbG9hZCBDb2xsZWN0aW9uIGNvbXBvbmVudCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCByZWxlYXNlLicpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5jb250ZW50RGVuc2l0eSkge1xuICAgICAgICAgICAgdGhpcy5fY29udGVudERlbnNpdHlNYW51YWxseVNldCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqIFNob3cgbWVlc3NhZ2UgZm9yIHR5cGVzIE5FVyBGT0xERVIgQ1JFQVRFLCBSRU1PVkUsIE1PVkUgVE8sIFVQREFURV9WRVJTSU9OLCBGSUxFX1JFTkFNRUQgKi9cbiAgICBzaG93TWVzc2FnZSh0eXBlOiBNZXNzYWdlVHlwZSwgb3B0aW9uczogTWVzc2FnZU9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZSA9IGdlbmVyYXRlTWVzc2FnZVN0cmlwZURhdGEodHlwZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE9wZW5zIHRoZSBmaWxlIHNlbGVjdG9yLlxuICAgICAqL1xuICAgIF9maWxlTmFtZUNoYW5nZShlOiBGb2N1c0V2ZW50LCBjdXJyZW50SXRlbTogVXBsb2FkQ29sbGVjdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBjb25zdCBpdGVtTmFtZSA9IGlucHV0LnZhbHVlLnRyaW0oKTtcbiAgICAgICAgY29uc3QgbmV3TmFtZSA9IGN1cnJlbnRJdGVtLnR5cGUgPT09ICdmaWxlJyA/IGAke2l0ZW1OYW1lfS4ke2N1cnJlbnRJdGVtLm5hbWUuc3BsaXQoJy4nKS5wb3AoKX1gIDogaXRlbU5hbWU7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRJdGVtLm5hbWUgPT09IG5ld05hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1heEZpbGVuYW1lTGVuZ3RoICYmIGl0ZW1OYW1lLmxlbmd0aCA+IHRoaXMubWF4RmlsZW5hbWVMZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRJdGVtID0ge1xuICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRJdGVtLFxuICAgICAgICAgICAgICAgIG5hbWU6IG5ld05hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgIGl0ZW1zOiBbcmVuYW1lZEl0ZW1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZmlsZW5hbWVMZW5ndGhFdmVudCA9IG5ldyBGaWxlbmFtZUxlbmd0aEV4Y2VlZEV2ZW50KHRoaXMsIHBheWxvYWQpO1xuXG4gICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLkZJTEVfTkFNRV9MRU5HVEgsIHsgcGF5bG9hZCwgdHlwZTogTWVzc2FnZVN0cmlwVHlwZS5FUlJPUiB9KTtcblxuICAgICAgICAgICAgdGhpcy5maWxlbmFtZUxlbmd0aEV4Y2VlZC5lbWl0KGZpbGVuYW1lTGVuZ3RoRXZlbnQpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudEl0ZW0uc2FtZUZpbGVuYW1lU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBwYXJlbnRGb2xkZXJJZDogdGhpcy5fZ2V0Q3VycmVudEZvbGRlcklkKCksXG4gICAgICAgICAgICBmaWxlTmFtZTogbmV3TmFtZSxcbiAgICAgICAgICAgIGl0ZW06IHsgLi4uY3VycmVudEl0ZW0gfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZVxuICAgICAgICAgICAgLmZpbGVSZW5hbWVkKGRhdGEpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXRjaCgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoTWVzc2FnZVR5cGUuRklMRV9SRU5BTUUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXNzYWdlU3RyaXBUeXBlLlNVQ0NFU1NcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLkZJTEVfUkVOQU1FLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWVzc2FnZVN0cmlwVHlwZS5FUlJPUlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jaGVja05hbWUoZTogRXZlbnQsIGN1cnJlbnRJdGVtOiBVcGxvYWRDb2xsZWN0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGl0ZW1OYW1lID0gaW5wdXQudmFsdWUudHJpbSgpO1xuICAgICAgICBjb25zdCBuZXdOYW1lID0gY3VycmVudEl0ZW0udHlwZSA9PT0gJ2ZpbGUnID8gYCR7aXRlbU5hbWV9LiR7Y3VycmVudEl0ZW0ubmFtZS5zcGxpdCgnLicpLnBvcCgpfWAgOiBpdGVtTmFtZTtcbiAgICAgICAgY29uc3QgbmFtZUFscmVhZHlFeGlzdHMgPSB0aGlzLl9nZXRMaXN0KCkuc29tZShcbiAgICAgICAgICAgIChpdGVtKSA9PiBjdXJyZW50SXRlbS5kb2N1bWVudElkICE9PSBpdGVtLmRvY3VtZW50SWQgJiYgaXRlbS5uYW1lID09PSBuZXdOYW1lXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNhbWVGaWxlTmFtZUFsbG93ZWQgJiYgbmFtZUFscmVhZHlFeGlzdHMpIHtcbiAgICAgICAgICAgIGN1cnJlbnRJdGVtLnNhbWVGaWxlbmFtZVN0YXRlID0gJ2Vycm9yJztcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIGN1cnJlbnRJdGVtLnNhbWVGaWxlbmFtZVN0YXRlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogT3BlbnMgdGhlIGZpbGUgc2VsZWN0b3IuXG4gICAgICovXG4gICAgX29wZW5VcGxvYWRGaWxlcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLl91cGxvYWRGaWxlc1JlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgIGlucHV0LmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIE9wZW5zIHRoZSB1cGRhdGUgZmlsZSB2ZXJzaW9uIHNlbGVjdG9yLlxuICAgICAqL1xuICAgIF9vcGVuVXBkYXRlRmlsZVZlcnNpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuX3VwZGF0ZVZlcnNpb25SZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VXBkYXRlRmlsZVZlcnNpb24gPSB0aGlzLl9hY3RpdmVJdGVtIGFzIFVwbG9hZENvbGxlY3Rpb25GaWxlO1xuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdEhhbmRsZXIoZmlsZXM6IEZpbGVbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZUZpbGVzKGZpbGVzKTtcbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlRmlsZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oYW5kbGVEcm9wKG91dHB1dDogRmlsZXNWYWxpZGF0b3JPdXRwdXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVkRmlsZXMgPSBvdXRwdXQ7XG4gICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUZpbGVzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb3Blbk5ld0ZvbGRlckRpYWxvZygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKE5ld0ZvbGRlckNvbXBvbmVudCwge1xuICAgICAgICAgICAgcmVzcG9uc2l2ZVBhZGRpbmc6IHRydWUsXG4gICAgICAgICAgICBiYWNrZHJvcENsaWNrQ2xvc2VhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGhlaWdodDogJzMyMHB4JyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Rm9sZGVyOiB0aGlzLl9nZXRDdXJyZW50Rm9sZGVyKCksXG4gICAgICAgICAgICAgICAgbWF4RmlsZW5hbWVMZW5ndGg6IHRoaXMubWF4RmlsZW5hbWVMZW5ndGhcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBEaWFsb2dDb25maWcpO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoZm9sZGVyTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9sZGVyID0gdGhpcy5fZ2VuZXJhdGVUZW1wb3JhcnlOZXdGb2xkZXIoZm9sZGVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRGb2xkZXJJZCA9IHRoaXMuX2dldEN1cnJlbnRGb2xkZXJJZCgpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICBwYXJlbnRGb2xkZXJJZCxcbiAgICAgICAgICAgICAgICBmb2xkZXI6IHsgLi4uZm9sZGVyIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpbmRQYXJlbnRGb2xkZXJBbmRBZGRUZW1wb3JhcnlGaWxlcyhwYXJlbnRGb2xkZXJJZCwgW2ZvbGRlcl0pO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgICAubmV3Rm9sZGVyKGRhdGEpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFwKCgpID0+IHRoaXMuX21hdGNoKCkpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLkNSRUFURSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWVzc2FnZVN0cmlwVHlwZS5TVUNDRVNTXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoTWVzc2FnZVR5cGUuQ1JFQVRFLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXNzYWdlU3RyaXBUeXBlLkVSUk9SXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tb3ZlVG9DbGlja2VkKG11bHRpcGxlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgX2FjdGl2ZUl0ZW0gPSB0aGlzLl9hY3RpdmVJdGVtO1xuICAgICAgICBjb25zdCBjdXJyZW50Rm9sZGVyID0gdGhpcy5fZ2V0Q3VycmVudEZvbGRlcigpO1xuICAgICAgICBjb25zdCBtb3ZhYmxlSXRlbXMgPSBtdWx0aXBsZSA/IHRoaXMuc2VsZWN0ZWRJdGVtcyA6IF9hY3RpdmVJdGVtID8gW19hY3RpdmVJdGVtXSA6IFtdO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4oXG4gICAgICAgICAgICBNb3ZlVG9Db21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2l2ZVBhZGRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgdmVydGljYWxQYWRkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBiYWNrZHJvcENsaWNrQ2xvc2VhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICczNTBweCcsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBpdGVtczogdGhpcy5kYXRhU291cmNlLmRhdGFQcm92aWRlci5pdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgbW92YWJsZUZvbGRlcnM6IG1vdmFibGVJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0/LnR5cGUgPT09ICdmb2xkZXInKSxcbiAgICAgICAgICAgICAgICAgICAgbWF4RmlsZW5hbWVMZW5ndGg6IHRoaXMubWF4RmlsZW5hbWVMZW5ndGhcbiAgICAgICAgICAgICAgICB9IGFzIE1vdmVUb0NvbXBvbmVudERpYWxvZ0RhdGFcbiAgICAgICAgICAgIH0gYXMgRGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JcbiAgICAgICAgKTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoeyBzZWxlY3RlZEZvbGRlciwgcGFyZW50Rm9sZGVySWQsIGZvbGRlck5hbWUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQ6IE1vdmVUb0V2ZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICBmcm9tOiBjdXJyZW50Rm9sZGVyLFxuICAgICAgICAgICAgICAgICAgICB0bzogc2VsZWN0ZWRGb2xkZXIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBtb3ZhYmxlSXRlbXNcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKGZvbGRlck5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5uZXdGb2xkZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb2xkZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlck5hbWVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgLm1vdmVUbyhwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXRjaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLk1PVkUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWVzc2FnZVN0cmlwVHlwZS5TVUNDRVNTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLk1PVkUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWVzc2FnZVN0cmlwVHlwZS5FUlJPUlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kb3dubG9hZENsaWNrZWQobXVsdGlwbGU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBfYWN0aXZlSXRlbSA9IHsgLi4udGhpcy5fYWN0aXZlSXRlbSB9O1xuICAgICAgICBjb25zdCBpdGVtcyA9IChtdWx0aXBsZSA/IHRoaXMuc2VsZWN0ZWRJdGVtcyA6IFtfYWN0aXZlSXRlbV0pIGFzIFVwbG9hZENvbGxlY3Rpb25GaWxlW107XG5cbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRvd25sb2FkKHsgaXRlbXMgfSkuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcmVtb3ZlKG11bHRpcGxlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgX2FjdGl2ZUl0ZW0gPSB7IC4uLnRoaXMuX2FjdGl2ZUl0ZW0gfSBhcyBVcGxvYWRDb2xsZWN0aW9uSXRlbTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBtdWx0aXBsZSA/IHRoaXMuc2VsZWN0ZWRJdGVtcyA6IFtfYWN0aXZlSXRlbV07XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IHBhcmVudEZvbGRlcklkOiB0aGlzLl9nZXRDdXJyZW50Rm9sZGVySWQoKSwgaXRlbXMgfTtcblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2VcbiAgICAgICAgICAgIC5kZWxldGUoZGF0YSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hdGNoKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShNZXNzYWdlVHlwZS5SRU1PVkUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXNzYWdlU3RyaXBUeXBlLlNVQ0NFU1NcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLlJFTU9WRSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IE1lc3NhZ2VTdHJpcFR5cGUuRVJST1JcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcnVuVXBsb2FkTmV3RmlsZUFmdGVyRmFpbChpdGVtOiBVcGxvYWRDb2xsZWN0aW9uRmlsZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VcbiAgICAgICAgICAgIC5ydW5BZnRlckZhaWwoeyBwYXJlbnRGb2xkZXJJZDogdGhpcy5fZ2V0Q3VycmVudEZvbGRlcklkKCksIGl0ZW1zOiBbaXRlbV0gfSlcbiAgICAgICAgICAgIC5waXBlKHRhcCgoKSA9PiB0aGlzLl9tYXRjaCgpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYW5jZWxVcGxvYWROZXdGaWxlKGZpbGU6IFVwbG9hZENvbGxlY3Rpb25GaWxlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZVxuICAgICAgICAgICAgLmNhbmNlbFVwbG9hZE5ld0ZpbGUoeyBwYXJlbnRGb2xkZXJJZDogdGhpcy5fZ2V0Q3VycmVudEZvbGRlcklkKCksIGl0ZW06IGZpbGUgfSlcbiAgICAgICAgICAgIC5waXBlKHRhcCgoKSA9PiB0aGlzLl9tYXRjaCgpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlU3RyaXBEaXNtaXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29wZW5Gb2xkZXIoaXRlbTogVXBsb2FkQ29sbGVjdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2ZpbGUnIHx8ICFpdGVtLmRvY3VtZW50SWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9icmVhZGNydW1iTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9icmVhZGNydW1iTGlzdFt0aGlzLl9icmVhZGNydW1iTGlzdC5sZW5ndGggLSAxXS5jbGlrYWJsZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9icmVhZGNydW1iTGlzdC5wdXNoKHtcbiAgICAgICAgICAgIGNsaWthYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGZvbGRlcklkOiBpdGVtLmRvY3VtZW50SWQsXG4gICAgICAgICAgICBmb2xkZXJOYW1lOiBpdGVtLm5hbWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fbWF0Y2goKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hY3Rpb25CdXR0b24oaXRlbTogVXBsb2FkQ29sbGVjdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IGl0ZW07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Ecm9wem9uZShldmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9zaG93RHJhZ0Ryb3BBcmVhID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fb25EcmFnRHJvcEFyZWEgPSBldmVudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kcmFnRHJvcENhbmNlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2hvd0RyYWdEcm9wQXJlYSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2JyZWFkY3J1bWJHb1RvKGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoaW5kZXgpKSB7XG4gICAgICAgICAgICB0aGlzLl9icmVhZGNydW1iTGlzdCA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWF0Y2goKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYnJlYWRjcnVtYkxpc3QgPSB0aGlzLl9icmVhZGNydW1iTGlzdC5zbGljZSgwLCBpbmRleCEgKyAxKTtcbiAgICAgICAgdGhpcy5fYnJlYWRjcnVtYkxpc3RbdGhpcy5fYnJlYWRjcnVtYkxpc3QubGVuZ3RoIC0gMV0uY2xpa2FibGUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9tYXRjaCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3BhZ2VDaGFuZ2VkKHBhZ2VOdW1iZXI6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlUGFnaW5hdGlvbiB8fCB0aGlzLl9jdXJyZW50UGFnZSA9PT0gcGFnZU51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgIHRoaXMuX2N1cnJlbnRQYWdlID0gcGFnZU51bWJlcjtcblxuICAgICAgICB0aGlzLl9tYXRjaCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2l0ZW1zUGVyUGFnZUNoYW5nZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5faXRlbXNQZXJQYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRQYWdlICogdGhpcy5faXRlbXNQZXJQYWdlID4gdGhpcy5fdG90YWxJdGVtcykge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFBhZ2UgPSBNYXRoLmNlaWwodGhpcy5fdG90YWxJdGVtcyAvIHRoaXMuX2l0ZW1zUGVyUGFnZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tYXRjaCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlYXJjaElucHV0Q2hhbmdlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbWF0Y2goKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vblJvd1NlbGVjdGlvbkNoYW5nZShkYXRhOiBUYWJsZVJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50PFVwbG9hZENvbGxlY3Rpb25JdGVtPik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2FtZUZpbGVOYW1lQWxsb3dlZCkge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZEl0ZW0gPSBkYXRhLnJlbW92ZWRbMF07XG4gICAgICAgICAgICB0aGlzLl9jbGVhckl0ZW1TYW1lRmlsZW5hbWVTdGF0ZShyZW1vdmVkSXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBkYXRhLnNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9nZXRJdGVtTmFtZShpdGVtOiBVcGxvYWRDb2xsZWN0aW9uSXRlbSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdmb2xkZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZS5zcGxpdCgnLicpLnNsaWNlKDAsIC0xKS5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZ2V0SXRlbUV4dGVuc2lvbihpdGVtOiBVcGxvYWRDb2xsZWN0aW9uSXRlbSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdmb2xkZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYC4ke2l0ZW0ubmFtZS5zcGxpdCgnLicpLnBvcCgpfWA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZ2V0SWNvbkJ5VHlwZShmaWxlOiBVcGxvYWRDb2xsZWN0aW9uRmlsZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBgLiR7ZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCl9YDtcblxuICAgICAgICByZXR1cm4gdGhpcy5faW1hZ2VFeHRlbnNpb25zLmluY2x1ZGVzKHR5cGUpID8gJ2JhY2tncm91bmQnIDogJ2RvY3VtZW50JztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93SWZTZWxlY3RlZE9ubHlGaWxlcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNlbGVjdGVkSXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS50eXBlID09PSAnZm9sZGVyJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNTZWxlY3RlZEl0ZW0oaXRlbTogVXBsb2FkQ29sbGVjdGlvbkl0ZW0pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5zb21lKChzZWxlY3RlZEl0ZW0pID0+IHNlbGVjdGVkSXRlbS5kb2N1bWVudElkID09PSBpdGVtLmRvY3VtZW50SWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dldExpc3QoKTogVXBsb2FkQ29sbGVjdGlvbkl0ZW1bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZGF0YVByb3ZpZGVyLmxpc3Q7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdHJhY2tCeURvY3VtZW50SWQoaW5kZXg6IG51bWJlciwgaXRlbTogVXBsb2FkQ29sbGVjdGlvbkl0ZW0pOiBVcGxvYWRDb2xsZWN0aW9uSXRlbVsnZG9jdW1lbnRJZCddIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uZG9jdW1lbnRJZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9nZXRBbGxvd2VkVHlwZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZmlsZVR5cGVzPy5qb2luKCcsICcpfSR7XG4gICAgICAgICAgICB0aGlzLmZpbGVUeXBlcz8ubGVuZ3RoICYmIHRoaXMubWltZVR5cGVzPy5sZW5ndGggPyAnLCAnIDogJydcbiAgICAgICAgfSR7dGhpcy5taW1lVHlwZXM/LmpvaW4oJywgJyl9YDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbGlkYXRlRmlsZXMoZmlsZXM6IEZpbGVbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZWRGaWxlcyA9IHRoaXMuX2ZpbGVzVmFsaWRhdG9yU2VydmljZS52YWxpZGF0aW9uKGZpbGVzLCB7XG4gICAgICAgICAgICBtYXhGaWxlU2l6ZTogdGhpcy5tYXhGaWxlU2l6ZSxcbiAgICAgICAgICAgIG1heEZpbGVOYW1lTGVuZ3RoOiB0aGlzLm1heEZpbGVuYW1lTGVuZ3RoLFxuICAgICAgICAgICAgZmlsZVR5cGVzOiB0aGlzLmZpbGVUeXBlcyxcbiAgICAgICAgICAgIG1pbWVUeXBlczogdGhpcy5taW1lVHlwZXNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcm9wYWdhdGVGaWxlcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB2YWxpZEZpbGVzLCB0eXBlTWlzbWF0Y2gsIGZpbGVuYW1lTGVuZ3RoRXhjZWVkLCBmaWxlU2l6ZUV4Y2VlZCB9ID0gdGhpcy5fdmFsaWRhdGVkRmlsZXM7XG5cbiAgICAgICAgaWYgKHZhbGlkRmlsZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50VXBkYXRlRmlsZVZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVGaWxlVmVyc2lvbih2YWxpZEZpbGVzWzBdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBsb2FkTmV3RmlsZXModmFsaWRGaWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZU1pc21hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0geyBpdGVtczogdHlwZU1pc21hdGNoIH07XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBUeXBlTWlzbWF0Y2hFdmVudCh0aGlzLCBwYXlsb2FkKTtcblxuICAgICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShNZXNzYWdlVHlwZS5UWVBFX01JU01BVENILCB7IHBheWxvYWQsIHR5cGU6IE1lc3NhZ2VTdHJpcFR5cGUuRVJST1IgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudHlwZU1pc21hdGNoLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVuYW1lTGVuZ3RoRXhjZWVkKSB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0geyBpdGVtczogZmlsZW5hbWVMZW5ndGhFeGNlZWQgfTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEZpbGVuYW1lTGVuZ3RoRXhjZWVkRXZlbnQodGhpcywgcGF5bG9hZCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoTWVzc2FnZVR5cGUuRklMRV9OQU1FX0xFTkdUSCwgeyBwYXlsb2FkLCB0eXBlOiBNZXNzYWdlU3RyaXBUeXBlLkVSUk9SIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmZpbGVuYW1lTGVuZ3RoRXhjZWVkLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVTaXplRXhjZWVkKSB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0geyBpdGVtczogZmlsZVNpemVFeGNlZWQgfTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEZpbGVTaXplRXhjZWVkRXZlbnQodGhpcywgcGF5bG9hZCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoTWVzc2FnZVR5cGUuRklMRV9TSVpFLCB7IHBheWxvYWQsIHR5cGU6IE1lc3NhZ2VTdHJpcFR5cGUuRVJST1IgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZmlsZVNpemVFeGNlZWQuZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUZpbGVWZXJzaW9uKG5ld0l0ZW06IEZpbGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudEZvbGRlcklkID0gdGhpcy5fZ2V0Q3VycmVudEZvbGRlcklkKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0ge1xuICAgICAgICAgICAgLi4udGhpcy5fY3VycmVudFVwZGF0ZUZpbGVWZXJzaW9uLFxuICAgICAgICAgICAgc3RhdHVzOiBVcGxvYWRDb2xsZWN0aW9uSXRlbVN0YXR1cy5MT0FESU5HXG4gICAgICAgIH0gYXMgVXBsb2FkQ29sbGVjdGlvbkl0ZW07XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIHBhcmVudEZvbGRlcklkOiB0aGlzLl9nZXRDdXJyZW50Rm9sZGVySWQoKSxcbiAgICAgICAgICAgIGl0ZW06IHRoaXMuX2N1cnJlbnRVcGRhdGVGaWxlVmVyc2lvbixcbiAgICAgICAgICAgIG5ld0l0ZW1cbiAgICAgICAgfSBhcyBVcGRhdGVWZXJzaW9uRXZlbnQ7XG5cbiAgICAgICAgdGhpcy5fZmluZFBhcmVudEZvbGRlckFuZFVwZGF0ZUl0ZW0oY3VycmVudEZvbGRlcklkLCBjdXJyZW50SXRlbSk7XG5cbiAgICAgICAgdGhpcy5kYXRhU291cmNlXG4gICAgICAgICAgICAudXBkYXRlVmVyc2lvbihkYXRhKVxuICAgICAgICAgICAgLnBpcGUodGFwKCgpID0+IHRoaXMuX21hdGNoKCkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLlVQREFURV9WRVJTSU9OLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWVzc2FnZVN0cmlwVHlwZS5TVUNDRVNTXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50VXBkYXRlRmlsZVZlcnNpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLlVQREFURV9WRVJTSU9OLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWVzc2FnZVN0cmlwVHlwZS5FUlJPUlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VwbG9hZE5ld0ZpbGVzKGZpbGVzOiBGaWxlW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudEZvbGRlcklkID0gdGhpcy5fZ2V0Q3VycmVudEZvbGRlcklkKCk7XG4gICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gdGhpcy5fZ2VuZXJhdGVUZW1wb3JhcnlOZXdGaWxlcyhmaWxlcyk7XG5cbiAgICAgICAgdGhpcy5fZmluZFBhcmVudEZvbGRlckFuZEFkZFRlbXBvcmFyeUZpbGVzKGN1cnJlbnRGb2xkZXJJZCwgbmV3SXRlbXMpO1xuXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZVxuICAgICAgICAgICAgLnVwbG9hZCh7XG4gICAgICAgICAgICAgICAgcGFyZW50Rm9sZGVySWQ6IGN1cnJlbnRGb2xkZXJJZCxcbiAgICAgICAgICAgICAgICBpdGVtczogbmV3SXRlbXMubWFwKChpdGVtKSA9PiAoeyAuLi5pdGVtIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKHRhcCgoKSA9PiB0aGlzLl9tYXRjaCgpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEN1cnJlbnRGb2xkZXIoKTogVXBsb2FkQ29sbGVjdGlvbkZvbGRlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGb2xkZXJJZCA9IHRoaXMuX2dldEN1cnJlbnRGb2xkZXJJZCgpO1xuXG4gICAgICAgIHJldHVybiAhY3VycmVudEZvbGRlcklkID8gdW5kZWZpbmVkIDogdGhpcy5fZmluZEZvbGRlckJ5SWQoY3VycmVudEZvbGRlcklkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEN1cnJlbnRGb2xkZXJJZCgpOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWRjcnVtYkxpc3QubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiB0aGlzLl9icmVhZGNydW1iTGlzdFt0aGlzLl9icmVhZGNydW1iTGlzdC5sZW5ndGggLSAxXS5mb2xkZXJJZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZpbmRGb2xkZXJCeUlkKFxuICAgICAgICBmb2xkZXJJZDogbnVtYmVyIHwgc3RyaW5nLFxuICAgICAgICBpdGVtczogVXBsb2FkQ29sbGVjdGlvbkl0ZW1bXSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhUHJvdmlkZXIuaXRlbXNcbiAgICApOiBVcGxvYWRDb2xsZWN0aW9uRm9sZGVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IGZvdW5kT2JqOiBVcGxvYWRDb2xsZWN0aW9uRm9sZGVyIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGl0ZW1zLCAoXywgbmVzdGVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChuZXN0ZWRWYWx1ZSAmJiBuZXN0ZWRWYWx1ZS5kb2N1bWVudElkID09PSBmb2xkZXJJZCkge1xuICAgICAgICAgICAgICAgIGZvdW5kT2JqID0gbmVzdGVkVmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXN0ZWRWYWx1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZvdW5kT2JqO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmluZFBhcmVudEZvbGRlckFuZFVwZGF0ZUl0ZW0oXG4gICAgICAgIHBhcmVudEZvbGRlcklkOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgICAgIHVwZGF0ZWRJdGVtOiBVcGxvYWRDb2xsZWN0aW9uSXRlbSxcbiAgICAgICAgaXRlbXMgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YVByb3ZpZGVyLml0ZW1zXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghcGFyZW50Rm9sZGVySWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmRvY3VtZW50SWQgPT09IHVwZGF0ZWRJdGVtLmRvY3VtZW50SWQpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zW2luZGV4XSA9IHVwZGF0ZWRJdGVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXRjaCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SXRlbSA9IGl0ZW1zW2ldO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEl0ZW0udHlwZSAhPT0gJ2ZvbGRlcicpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtLmRvY3VtZW50SWQgPT09IHBhcmVudEZvbGRlcklkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjdXJyZW50SXRlbS5maWxlcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uZG9jdW1lbnRJZCA9PT0gdXBkYXRlZEl0ZW0uZG9jdW1lbnRJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50SXRlbS5maWxlc1tpXSA9IHVwZGF0ZWRJdGVtO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXRjaCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluZFBhcmVudEZvbGRlckFuZFVwZGF0ZUl0ZW0ocGFyZW50Rm9sZGVySWQsIHVwZGF0ZWRJdGVtLCBjdXJyZW50SXRlbS5maWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZpbmRQYXJlbnRGb2xkZXJBbmRBZGRUZW1wb3JhcnlGaWxlcyhcbiAgICAgICAgcGFyZW50Rm9sZGVySWQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICAgICAgbmV3SXRlbXM6IFVwbG9hZENvbGxlY3Rpb25JdGVtW10sXG4gICAgICAgIGl0ZW1zID0gdGhpcy5kYXRhU291cmNlLmRhdGFQcm92aWRlci5pdGVtc1xuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoIXBhcmVudEZvbGRlcklkKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKC4uLm5ld0l0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMuX21hdGNoKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICBpZiAoY3VycmVudEl0ZW0udHlwZSAhPT0gJ2ZvbGRlcicpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtLmRvY3VtZW50SWQgPT09IHBhcmVudEZvbGRlcklkKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEl0ZW0uZmlsZXMucHVzaCguLi5uZXdJdGVtcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF0Y2goKTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5kUGFyZW50Rm9sZGVyQW5kQWRkVGVtcG9yYXJ5RmlsZXMocGFyZW50Rm9sZGVySWQsIG5ld0l0ZW1zLCBjdXJyZW50SXRlbS5maWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dlbmVyYXRlVGVtcG9yYXJ5TmV3RmlsZXMoZmlsZXM6IEZpbGVbXSk6IFVwbG9hZENvbGxlY3Rpb25GaWxlW10ge1xuICAgICAgICByZXR1cm4gZmlsZXMubWFwKChmaWxlKSA9PiAoe1xuICAgICAgICAgICAgZG9jdW1lbnRJZDogdXVpZHY0KCksXG4gICAgICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICB1cGxvYWRlZEJ5OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxuICAgICAgICAgICAgICAgIG5hbWU6IGBZb3VgXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBsb2FkZWRPbjogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIGZpbGVTaXplOiBmaWxlLnNpemUsXG4gICAgICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICAgICAgdXJsOiAnJyxcbiAgICAgICAgICAgIHN0YXR1czogVXBsb2FkQ29sbGVjdGlvbkl0ZW1TdGF0dXMuTE9BRElORyxcbiAgICAgICAgICAgIGZpbGVcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2VuZXJhdGVUZW1wb3JhcnlOZXdGb2xkZXIoZm9sZGVyTmFtZTogc3RyaW5nKTogVXBsb2FkQ29sbGVjdGlvbkZvbGRlciB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb2N1bWVudElkOiB1dWlkdjQoKSxcbiAgICAgICAgICAgIHR5cGU6ICdmb2xkZXInLFxuICAgICAgICAgICAgbmFtZTogZm9sZGVyTmFtZSxcbiAgICAgICAgICAgIHVwbG9hZGVkQnk6IHtcbiAgICAgICAgICAgICAgICBpZDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnWW91J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVwbG9hZGVkT246IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBmaWxlczogW10sXG4gICAgICAgICAgICBzdGF0dXM6IFVwbG9hZENvbGxlY3Rpb25JdGVtU3RhdHVzLkxPQURJTkdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVEUyhkczogRmRwVXBsb2FkQ29sbGVjdGlvbkRhdGFTb3VyY2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZUxpc3QkLm5leHQoW10pO1xuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jbG9zZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB0aGlzLl9vcGVuRGF0YVN0cmVhbShkcyk7XG5cbiAgICAgICAgLy8gaW5pdGlhbCBkYXRhIGZldGNoXG4gICAgICAgIHRoaXMuX21hdGNoKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vcGVuRGF0YVN0cmVhbShkczogRmRwVXBsb2FkQ29sbGVjdGlvbkRhdGFTb3VyY2UpOiBVcGxvYWRDb2xsZWN0aW9uRGF0YVNvdXJjZSB7XG4gICAgICAgIGNvbnN0IGluaXREYXRhU291cmNlID0gdGhpcy5fdG9EYXRhU3RyZWFtKGRzKTtcbiAgICAgICAgaWYgKGluaXREYXRhU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW2RhdGFTb3VyY2VdIHNvdXJjZSBkaWQgbm90IG1hdGNoIGFuIGFycmF5LCBPYnNlcnZhYmxlLCBvciBEYXRhU291cmNlYCk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgaXMgc2luZ2xlIHBvaW50IG9mIGRhdGEgZW50cnkgdG8gdGhlIGNvbXBvbmVudC4gV2UgZG9udCB3YW50IHRvIHNldCBkYXRhIG9uIGRpZmZlcmVudFxuICAgICAgICAgKiBwbGFjZXMuIElmIGFueSBuZXcgZGF0YSBjb21lcyBpbiBlaXRoZXIgeW91IGRvIGEgc2VhcmNoIGFuZCB5b3Ugd2FudCB0byBwYXNzIGluaXRpYWwgZGF0YVxuICAgICAgICAgKiBpdHMgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gaW5pdERhdGFTb3VyY2Uub3BlbigpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdmlzaWJsZUxpc3QkLm5leHQoZGF0YSk7XG5cbiAgICAgICAgICAgIHRoaXMuX3RvdGFsSXRlbXMgPSBpbml0RGF0YVNvdXJjZS5kYXRhUHJvdmlkZXIudG90YWxJdGVtcztcblxuICAgICAgICAgICAgdGhpcy5fY291bnRVbnZpc2libGVJdGVtcygpO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGluaXREYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9EYXRhU3RyZWFtKGRzOiBGZHBVcGxvYWRDb2xsZWN0aW9uRGF0YVNvdXJjZSk6IFVwbG9hZENvbGxlY3Rpb25EYXRhU291cmNlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShkcykpIHtcbiAgICAgICAgICAgIHJldHVybiBkcyBhcyBVcGxvYWRDb2xsZWN0aW9uRGF0YVNvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tYXRjaCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBuZXcgTWFwKCk7XG5cbiAgICAgICAgcXVlcnkuc2V0KCdmb2xkZXJJZCcsIHRoaXMuX2dldEN1cnJlbnRGb2xkZXJJZCgpKTtcbiAgICAgICAgcXVlcnkuc2V0KCdwYWdlJywgdGhpcy5fY3VycmVudFBhZ2UpO1xuICAgICAgICBxdWVyeS5zZXQoJ3NlYXJjaFRleHQnLCB0aGlzLl9zZWFyY2hUZXh0IHx8ICcqJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlUGFnaW5hdGlvbikge1xuICAgICAgICAgICAgcXVlcnkuc2V0KCdsaW1pdCcsIHRoaXMuX2l0ZW1zUGVyUGFnZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UubWF0Y2gocXVlcnkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY291bnRVbnZpc2libGVJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbXNQZXJQYWdlID0gdGhpcy5faXRlbXNQZXJQYWdlIGFzIG51bWJlcjtcbiAgICAgICAgdGhpcy5fY291bnRTaG93ZWRJdGVtcyA9IHRoaXMuX2N1cnJlbnRQYWdlICogaXRlbXNQZXJQYWdlIC0gaXRlbXNQZXJQYWdlICsgMTtcbiAgICAgICAgdGhpcy5fY291bnROb3RTaG93ZWRJdGVtcyA9IHRoaXMuX2NvdW50U2hvd2VkSXRlbXMgKyB0aGlzLl92aXNpYmxlTGlzdCQudmFsdWUubGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NsZWFySXRlbVNhbWVGaWxlbmFtZVN0YXRlKGN1cnJlbnRJdGVtOiBVcGxvYWRDb2xsZWN0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICBpZiAoIWN1cnJlbnRJdGVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fZ2V0TGlzdCgpKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5kb2N1bWVudElkID09PSBjdXJyZW50SXRlbS5kb2N1bWVudElkKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW0uc2FtZUZpbGVuYW1lU3RhdGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IFtpZF09XCJpZFwiIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uXCI+XG4gICAgPCEtLSBNZXNzYWdlIHN0cmlwIC0tPlxuICAgIDxmZC1tZXNzYWdlLXN0cmlwICpuZ0lmPVwiX21lc3NhZ2VcIiBbdHlwZV09XCJfbWVzc2FnZS5tZXNzYWdlU3RyaXBUeXBlXCIgKG9uRGlzbWlzcyk9XCJfbWVzc2FnZVN0cmlwRGlzbWlzcygpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogX21lc3NhZ2UubWVzc2FnZVR5cGUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogX21lc3NhZ2UucGF5bG9hZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlU3RyaXBUeXBlOiBfbWVzc2FnZS5tZXNzYWdlU3RyaXBUeXBlLFxuICAgICAgICAgICAgICAgIGNvdW50OiBfbWVzc2FnZS5jb3VudFxuICAgICAgICAgICAgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2ZkLW1lc3NhZ2Utc3RyaXA+XG5cbiAgICA8IS0tIFRvb2xiYXIgLS0+XG4gICAgPGZkLXRvb2xiYXIgY2xhc3M9XCJmZHAtdXBsb2FkLWNvbGxlY3Rpb25fX3Rvb2xiYXJcIj5cbiAgICAgICAgPGRpdiBbc3R5bGUuZmxleF09XCInMSBhdXRvJ1wiPlxuICAgICAgICAgICAgPGZkLWJyZWFkY3J1bWIgW2lkXT1cImlkICsgJy1icmVhZGNydW1iJ1wiPlxuICAgICAgICAgICAgICAgIDxmZC1icmVhZGNydW1iLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVCcmVhZGNydW1icz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgZmQtbGluayAoY2xpY2spPVwiX2JyZWFkY3J1bWJHb1RvKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLmJyZWFkY3J1bWJMYWJlbEFsbEZpbGVzJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlQnJlYWRjcnVtYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uYnJlYWRjcnVtYkxhYmVsQWxsRmlsZXNXaXRoVG90YWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyB0b3RhbDogX3RvdGFsSXRlbXMgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiX2JyZWFkY3J1bWJMaXN0Lmxlbmd0aCA+IDAgPyBtdWx0aXBsZUJyZWFkY3J1bWJzIDogc2luZ2xlQnJlYWRjcnVtYlwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJyZWFkY3J1bWItaXRlbT5cbiAgICAgICAgICAgICAgICA8ZmQtYnJlYWRjcnVtYi1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9icmVhZGNydW1iTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NsaWNrYWJsZUJyZWFkY3J1bWI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGZkLWxpbmsgKGNsaWNrKT1cIl9icmVhZGNydW1iR29UbygkZXZlbnQsIGkpXCI+e3sgaXRlbS5mb2xkZXJOYW1lIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RleHRCcmVhZGNydW1iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5mb2xkZXJOYW1lIH19ICh7eyBfdG90YWxJdGVtcyB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbS5jbGlrYWJsZSA/IGNsaWNrYWJsZUJyZWFkY3J1bWIgOiB0ZXh0QnJlYWRjcnVtYlwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJyZWFkY3J1bWItaXRlbT5cbiAgICAgICAgICAgIDwvZmQtYnJlYWRjcnVtYj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGZkLXRvb2xiYXItc3BhY2VyIFtzdHlsZS5tYXgtd2lkdGgucmVtXT1cIjNcIj48L2ZkLXRvb2xiYXItc3BhY2VyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVhZG9ubHkgfHwgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgIDxmZC1pbnB1dC1ncm91cFxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1NlYXJjaFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJfc2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiX3NlYXJjaElucHV0Q2hhbmdlZCgpXCJcbiAgICAgICAgICAgICAgICBnbHlwaD1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgW2FyaWFMYWJlbGxlZEJ5XT1cImlkICsgJy1icmVhZGNydW1iJ1wiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uc2VhcmNoUGxhY2Vob2xkZXInIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgPjwvZmQtaW5wdXQtZ3JvdXA+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVhZG9ubHlcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vcGVuVXBsb2FkRmlsZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uYWRkQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5hZGRCdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfb3Blbk5ld0ZvbGRlckRpYWxvZygpXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoaWVyYXJjaHlcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm5ld0ZvbGRlckJ0bkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubmV3Rm9sZGVyQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJlYWRvbmx5ICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfbW92ZVRvQ2xpY2tlZCh0cnVlKVwiXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubW92ZVRvQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1vdmVUb0J0bkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2Rvd25sb2FkQ2xpY2tlZCh0cnVlKVwiXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJfc2hvd0lmU2VsZWN0ZWRPbmx5RmlsZXMoKVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uZG93bmxvYWRCdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uZG93bmxvYWRCdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9yZW1vdmUodHJ1ZSlcIlxuICAgICAgICAgICAgICAgIGZkVHlwZT1cImdob3N0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLnJlbW92ZUJ0bkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5yZW1vdmVCdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZmQtdG9vbGJhcj5cblxuICAgIDxkaXYgY2xhc3M9XCJmZHAtdXBsb2FkLWNvbGxlY3Rpb25fX3RhYmxlLS13cmFwcGVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX190YWJsZVwiXG4gICAgICAgICAgICBmZHBVcGxvYWRDb2xsZWN0aW9uRHJhZ25Ecm9wXG4gICAgICAgICAgICBbZmlsZVR5cGVzXT1cImZpbGVUeXBlc1wiXG4gICAgICAgICAgICBbbWF4RmlsZW5hbWVMZW5ndGhdPVwibWF4RmlsZW5hbWVMZW5ndGhcIlxuICAgICAgICAgICAgW21heEZpbGVTaXplXT1cIm1heEZpbGVTaXplXCJcbiAgICAgICAgICAgIFttaW1lVHlwZXNdPVwibWltZVR5cGVzXCJcbiAgICAgICAgICAgIFtkcmFnbmRyb3BdPVwiIXJlYWRvbmx5XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgKGZpbGVDaGFuZ2VkKT1cIl9oYW5kbGVEcm9wKCRldmVudClcIlxuICAgICAgICAgICAgKGNhbmNlbCk9XCJfZHJhZ0Ryb3BDYW5jZWwoKVwiXG4gICAgICAgICAgICAob25Ecm9wem9uZSk9XCJfb25Ecm9wem9uZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBUYWJsZSAtLT5cbiAgICAgICAgICAgIDxmZHAtdGFibGVcbiAgICAgICAgICAgICAgICAqbmdJZj1cIl92aXNpYmxlTGlzdCQudmFsdWUubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiX3Zpc2libGVMaXN0JFwiXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiZGF0YVNvdXJjZS5pc0RhdGFMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIGVtcHR5VGFibGVNZXNzYWdlPVwiXCJcbiAgICAgICAgICAgICAgICBbbm9Ib3Jpem9udGFsQm9yZGVyc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdHJhY2tCeV09XCJfdHJhY2tCeURvY3VtZW50SWRcIlxuICAgICAgICAgICAgICAgIChyb3dTZWxlY3Rpb25DaGFuZ2UpPVwiX29uUm93U2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxmZHAtY29sdW1uIG5hbWU9XCJuYW1lXCIgbGFiZWw9XCJOYW1lXCIgd2lkdGg9XCI4cmVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmZHAtdGFibGUtY2VsbCAqZmRwQ2VsbERlZj1cImxldCBpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX192ZXJ0aWNhbC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9fZmQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnZm9sZGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwiZm9sZGVyLWJsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uZm9sZGVySWNvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19mZC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdmaWxlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtnbHlwaF09XCJfZ2V0SWNvbkJ5VHlwZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLmZpbGVJY29uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkLWljb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHkgfHwgIV9pc1NlbGVjdGVkSXRlbShpdGVtKTsgZWxzZSBlZGl0TW9kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC11cGxvYWQtY29sbGVjdGlvbl9fY3Vyc29yXT1cIml0ZW0udHlwZSA9PT0gJ2ZvbGRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vcGVuRm9sZGVyKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBpdGVtLm5hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdE1vZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1mb3JtLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1mb3JtLWlucHV0LW1lc3NhZ2UtZ3JvdXAgW3RyaWdnZXJzXT1cIltdXCIgW2lzT3Blbl09XCIhIWl0ZW0uc2FtZUZpbGVuYW1lU3RhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZHAtdXBsb2FkLWNvbGxlY3Rpb25fX3ZlcnRpY2FsLWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIl9nZXRJdGVtTmFtZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIl9maWxlTmFtZUNoYW5nZSgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIl9jaGVja05hbWUoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5lZGl0RmlsZU5hbWVJbnB1dFBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJpdGVtLnNhbWVGaWxlbmFtZVN0YXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19pdGVtX2V4dGVuc2lvblwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nZXRJdGVtRXh0ZW5zaW9uKGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSBbdHlwZV09XCJpdGVtLnNhbWVGaWxlbmFtZVN0YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0udHlwZSA9PT0gJ2ZpbGUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uZWRpdEZpbGVOYW1lRmlsZUFscmVhZHlFeGlzdHNFcnJvcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5lZGl0RmlsZU5hbWVGb2xkZXJBbHJlYWR5RXhpc3RzRXJyb3InXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCBmZFRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1mb3JtLWlucHV0LW1lc3NhZ2UtZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2ZkcC10YWJsZS1jZWxsPlxuICAgICAgICAgICAgICAgIDwvZmRwLWNvbHVtbj5cblxuICAgICAgICAgICAgICAgIDxmZHAtY29sdW1uIG5hbWU9XCJ1cGxvYWRlZEJ5XCIgbGFiZWw9XCJVcGxvYWRlZCBieVwiIHdpZHRoPVwiNXJlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZmRwLXRhYmxlLWNlbGwgKmZkcENlbGxEZWY9XCJsZXQgaXRlbVwiPnt7IGl0ZW0udXBsb2FkZWRCeS5uYW1lIH19PC9mZHAtdGFibGUtY2VsbD5cbiAgICAgICAgICAgICAgICA8L2ZkcC1jb2x1bW4+XG5cbiAgICAgICAgICAgICAgICA8ZmRwLWNvbHVtbiBuYW1lPVwidXBsb2FkZWRPblwiIGxhYmVsPVwiVXBsb2FkZWQgb25cIiB3aWR0aD1cIjVyZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGZkcC10YWJsZS1jZWxsICpmZHBDZWxsRGVmPVwibGV0IGl0ZW1cIj57eyBpdGVtLnVwbG9hZGVkT24gfCBkYXRlIDogJ3Nob3J0RGF0ZScgfX08L2ZkcC10YWJsZS1jZWxsPlxuICAgICAgICAgICAgICAgIDwvZmRwLWNvbHVtbj5cblxuICAgICAgICAgICAgICAgIDxmZHAtY29sdW1uIG5hbWU9XCJzaXplXCIgbGFiZWw9XCJGaWxlIHNpemVcIiB3aWR0aD1cIjVyZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGZkcC10YWJsZS1jZWxsICpmZHBDZWxsRGVmPVwibGV0IGl0ZW1cIj57eyBpdGVtLmZpbGVTaXplIHwgY29udmVydEJ5dGVzIH19PC9mZHAtdGFibGUtY2VsbD5cbiAgICAgICAgICAgICAgICA8L2ZkcC1jb2x1bW4+XG5cbiAgICAgICAgICAgICAgICA8ZmRwLWNvbHVtbiBuYW1lPVwidmVyc2lvblwiIGxhYmVsPVwiVmVyc2lvblwiIHdpZHRoPVwiNXJlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZmRwLXRhYmxlLWNlbGwgKmZkcENlbGxEZWY9XCJsZXQgaXRlbVwiPnt7IGl0ZW0udmVyc2lvbiB8fCAnJyB9fTwvZmRwLXRhYmxlLWNlbGw+XG4gICAgICAgICAgICAgICAgPC9mZHAtY29sdW1uPlxuXG4gICAgICAgICAgICAgICAgPGZkcC1jb2x1bW4gbmFtZT1cInN0YXR1c1wiIGxhYmVsPVwiU3RhdHVzXCIgd2lkdGg9XCI1cmVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmZHAtdGFibGUtY2VsbCAqZmRwQ2VsbERlZj1cImxldCBpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uc3RhdHVzID09PSBfdXBsb2FkQ29sbGVjdGlvbkl0ZW1TdGF0dXMuTE9BRElOR1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiU3RhdHVzOiBMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhTGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtYnVzeS1pbmRpY2F0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5zdGF0dXMgPT09IF91cGxvYWRDb2xsZWN0aW9uSXRlbVN0YXR1cy5TVUNDRVNTRlVMXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1vYmplY3Qtc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzPVwicG9zaXRpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uaXRlbVN0YXR1c1N1Y2Nlc3NmdWwnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnN0YXR1cyA9PT0gX3VwbG9hZENvbGxlY3Rpb25JdGVtU3RhdHVzLlVOU1VDQ0VTU0ZVTFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtb2JqZWN0LXN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz1cIm5lZ2F0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLml0ZW1TdGF0dXNVbnN1Y2Nlc3NmdWwnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9mZHAtdGFibGUtY2VsbD5cbiAgICAgICAgICAgICAgICA8L2ZkcC1jb2x1bW4+XG5cbiAgICAgICAgICAgICAgICA8ZmRwLWNvbHVtbiBuYW1lPVwiYWN0aW9uXCIgKm5nSWY9XCIhcmVhZG9ubHlcIiB3aWR0aD1cIjVyZW1cIiBhbGlnbj1cImVuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZmRwLXRhYmxlLWhlYWRlciAqZmRwSGVhZGVyQ2VsbERlZj5BY3Rpb248L2ZkcC10YWJsZS1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxmZHAtdGFibGUtY2VsbCAqZmRwQ2VsbERlZj1cImxldCBpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9fYWN0aW9ucy0tc3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24udXBsb2FkTmV3RmlsZUFmdGVyRmFpbEFjdGlvbicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi51cGxvYWROZXdGaWxlQWZ0ZXJGYWlsQWN0aW9uJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfcnVuVXBsb2FkTmV3RmlsZUFmdGVyRmFpbChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnN0YXR1cyA9PT0gX3VwbG9hZENvbGxlY3Rpb25JdGVtU3RhdHVzLlVOU1VDQ0VTU0ZVTFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLmNhbmNlbFVwbG9hZE5ld0ZpbGVBY3Rpb24nIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uY2FuY2VsVXBsb2FkTmV3RmlsZUFjdGlvbicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9jYW5jZWxVcGxvYWROZXdGaWxlKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGVybWluYXRpb25FbmFibGVkICYmIGl0ZW0uc3RhdHVzID09PSBfdXBsb2FkQ29sbGVjdGlvbkl0ZW1TdGF0dXMuTE9BRElOR1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZHAtbWVudS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cIm92ZXJmbG93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uaXRlbU1lbnVCdG5UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZHBNZW51VHJpZ2dlckZvcl09XCJtZW51QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidXR0b25DbGlja2VkKT1cIl9hY3Rpb25CdXR0b24oaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkcC1tZW51LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2ZkcC10YWJsZS1jZWxsPlxuICAgICAgICAgICAgICAgIDwvZmRwLWNvbHVtbj5cbiAgICAgICAgICAgIDwvZmRwLXRhYmxlPlxuXG4gICAgICAgICAgICA8IS0tIERyYWdkcm9wIGFyZWEgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdXBsb2FkLWNvbGxlY3Rpb25fX2RyYWdkcm9wLWFyZWFcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiX3Nob3dEcmFnRHJvcEFyZWFcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiX29uRHJhZ0Ryb3BBcmVhXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZmQtaWNvbiBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9fZHJhZ2Ryb3AtYXJlYS0taWNvblwiIGdseXBoPVwidXBsb2FkLXRvLWNsb3VkXCI+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19kcmFnZHJvcC1hcmVhLS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uZHJhZ0Ryb3BBcmVhVGV4dCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIE5vIGRhdGEgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdXBsb2FkLWNvbGxlY3Rpb25fX25vLWRhdGFcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiX3Zpc2libGVMaXN0JC52YWx1ZS5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pbnZpc2libGVdPVwiX3Nob3dEcmFnRHJvcEFyZWFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxmZC1pY29uIGdseXBoPVwiZG9jdW1lbnRcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgPGgzPnt7ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubm9EYXRhVGV4dCcgfCBmZFRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICAgICAgICAgICAgPHA+e3sgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5ub0RhdGFEZXNjcmlwdGlvbicgfCBmZFRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFRhYmxlIGZvb3RlciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9fdGFibGUtZm9vdGVyXCIgKm5nSWY9XCJlbmFibGVQYWdpbmF0aW9uICYmIF90b3RhbEl0ZW1zXCI+XG4gICAgICAgICAgICA8IS0tIFBhZ2luYXRpb24gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19wYWdpbmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2lkXT1cImlkICsgJy1wYWdpbmF0aW9uJ1wiIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19wYWdpbmF0aW9uLS10b3RhbFwiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5wYWdpbmF0aW9uVG90YWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZnJvbTogX2NvdW50U2hvd2VkSXRlbXMsIHRvOiBfY291bnROb3RTaG93ZWRJdGVtcywgdG90YWw6IF90b3RhbEl0ZW1zIH1cbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGZkLXBhZ2luYXRpb25cbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwiX3RvdGFsSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheVRvdGFsSXRlbXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZVN0YXJ0KT1cIl9wYWdlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJfaXRlbXNQZXJQYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRQYWdlXT1cIl9jdXJyZW50UGFnZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpZCArICctcGFnaW5hdGlvbidcIlxuICAgICAgICAgICAgICAgID48L2ZkLXBhZ2luYXRpb24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBSZXN1bHRzIHBlciBwYWdlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9fcmVzdWx0c1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19yZXN1bHRzLS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaWRdPVwiaWQgKyAnLXJlc3VsdHMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLnJlc3VsdHNQZXJQYWdlJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJfaXRlbXNQZXJQYWdlT3B0aW9ucy5sZW5ndGggPT09IDBcIj57eyBfaXRlbXNQZXJQYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZmRwLW1lbnUtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiX2l0ZW1zUGVyUGFnZU9wdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxsZWRCeV09XCJpZCArICctcmVzdWx0cydcIlxuICAgICAgICAgICAgICAgICAgICBbZmRwTWVudVRyaWdnZXJGb3JdPVwiaXRlbXNQZXJQYWdlTWVudVwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJfaXRlbXNQZXJQYWdlICsgJydcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2ZkcC1tZW51LWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZmRwLW1lbnUgI2l0ZW1zUGVyUGFnZU1lbnUgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XG4gICAgPGZkcC1tZW51LWl0ZW1cbiAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIF9pdGVtc1BlclBhZ2VPcHRpb25zXCJcbiAgICAgICAgKGl0ZW1TZWxlY3QpPVwiX2l0ZW1zUGVyUGFnZUNoYW5nZSh2YWx1ZS5sYWJlbClcIlxuICAgICAgICBbYXR0ci50aXRsZV09XCInUmVzdWx0cyBwZXIgcGFnZTogJyArIHZhbHVlLmxhYmVsXCJcbiAgICA+XG4gICAgICAgIDxzcGFuPnt7IHZhbHVlLmxhYmVsIH19PC9zcGFuPlxuICAgIDwvZmRwLW1lbnUtaXRlbT5cbjwvZmRwLW1lbnU+XG5cbjxmZHAtbWVudSAjbWVudUFjdGlvbnMgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XG4gICAgPGZkcC1tZW51LWl0ZW0gKGl0ZW1TZWxlY3QpPVwiX21vdmVUb0NsaWNrZWQoKVwiPlxuICAgICAgICA8ZmQtaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJmZHAtdXBsb2FkLWNvbGxlY3Rpb25fX2ZkLWljb25cIlxuICAgICAgICAgICAgZ2x5cGg9XCJmb2xkZXItYmxhbmtcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubW92ZVRvQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICA+PC9mZC1pY29uPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubW92ZVRvQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZmRwLW1lbnUtaXRlbT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX2FjdGl2ZUl0ZW0/LnR5cGUgPT09ICdmaWxlJ1wiPlxuICAgICAgICA8ZmRwLW1lbnUtaXRlbSAoaXRlbVNlbGVjdCk9XCJfZG93bmxvYWRDbGlja2VkKClcIj5cbiAgICAgICAgICAgIDxmZC1pY29uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdXBsb2FkLWNvbGxlY3Rpb25fX2ZkLWljb25cIlxuICAgICAgICAgICAgICAgIGdseXBoPVwiZG93bmxvYWRcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLmRvd25sb2FkQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgPjwvZmQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uZG93bmxvYWRCdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2ZkcC1tZW51LWl0ZW0+XG4gICAgICAgIDxmZHAtbWVudS1pdGVtIChpdGVtU2VsZWN0KT1cIl9vcGVuVXBkYXRlRmlsZVZlcnNpb24oKVwiPlxuICAgICAgICAgICAgPGZkLWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9fZmQtaWNvblwiXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJkcmlsbC11cFwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24udXBkYXRlVmVyc2lvbkJ0bkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgID48L2ZkLWljb24+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLnVwZGF0ZVZlcnNpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2ZkcC1tZW51LWl0ZW0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGZkcC1tZW51LWl0ZW0gKGl0ZW1TZWxlY3QpPVwiX3JlbW92ZSgpXCI+XG4gICAgICAgIDxmZC1pY29uXG4gICAgICAgICAgICBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9fZmQtaWNvblwiXG4gICAgICAgICAgICBnbHlwaD1cImRlbGV0ZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5yZW1vdmVCdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgID48L2ZkLWljb24+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5yZW1vdmVCdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9mZHAtbWVudS1pdGVtPlxuPC9mZHAtbWVudT5cblxuPGlucHV0XG4gICAgI2ZpbGVJbnB1dFxuICAgIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19oaWRkZW5cIlxuICAgIHR5cGU9XCJmaWxlXCJcbiAgICAoZmlsZVNlbGVjdGVkKT1cIl9zZWxlY3RIYW5kbGVyKCRldmVudClcIlxuICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBmZEZpbGVTZWxlY3Rcbi8+XG5cbjxpbnB1dFxuICAgICN1cGRhdGVWZXJzaW9uSW5wdXRcbiAgICBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9faGlkZGVuXCJcbiAgICB0eXBlPVwiZmlsZVwiXG4gICAgKGZpbGVTZWxlY3RlZCk9XCJfc2VsZWN0SGFuZGxlcigkZXZlbnQpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgZmRGaWxlU2VsZWN0XG4vPlxuXG48bmctdGVtcGxhdGVcbiAgICBsZXQtbWVzc2FnZVR5cGU9XCJtZXNzYWdlVHlwZVwiXG4gICAgbGV0LXBheWxvYWQ9XCJwYXlsb2FkXCJcbiAgICBsZXQtbWVzc2FnZVN0cmlwVHlwZT1cIm1lc3NhZ2VTdHJpcFR5cGVcIlxuICAgIGxldC1jb3VudD1cImNvdW50XCJcbiAgICAjbWVzc2FnZVxuPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfbWVzc2FnZVwiIFtuZ1N3aXRjaF09XCJtZXNzYWdlVHlwZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiX21lc3NhZ2VUeXBlLkNSRUFURVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZXNzYWdlTmV3Rm9sZGVyXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgbWVzc2FnZVN0cmlwVHlwZTogX21lc3NhZ2UubWVzc2FnZVN0cmlwVHlwZSxcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBfbWVzc2FnZS5wYXlsb2FkXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJfbWVzc2FnZVR5cGUuVVBEQVRFX1ZFUlNJT05cIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibWVzc2FnZVVwZGF0ZVZlcnNpb25cIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBtZXNzYWdlU3RyaXBUeXBlOiBfbWVzc2FnZS5tZXNzYWdlU3RyaXBUeXBlLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IF9tZXNzYWdlLnBheWxvYWRcbiAgICAgICAgICAgIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIl9tZXNzYWdlVHlwZS5GSUxFX1JFTkFNRVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZXNzYWdlRmlsZVJlbmFtZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VTdHJpcFR5cGU6IF9tZXNzYWdlLm1lc3NhZ2VTdHJpcFR5cGUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogX21lc3NhZ2UucGF5bG9hZFxuICAgICAgICAgICAgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiX21lc3NhZ2VUeXBlLlJFTU9WRVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZXNzYWdlUmVtb3ZlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgcGF5bG9hZDogX21lc3NhZ2UucGF5bG9hZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlU3RyaXBUeXBlOiBfbWVzc2FnZS5tZXNzYWdlU3RyaXBUeXBlLFxuICAgICAgICAgICAgICAgIGNvdW50OiBfbWVzc2FnZS5jb3VudFxuICAgICAgICAgICAgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiX21lc3NhZ2VUeXBlLk1PVkVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibWVzc2FnZU1vdmVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBfbWVzc2FnZS5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VTdHJpcFR5cGU6IF9tZXNzYWdlLm1lc3NhZ2VTdHJpcFR5cGUsXG4gICAgICAgICAgICAgICAgY291bnQ6IF9tZXNzYWdlLmNvdW50XG4gICAgICAgICAgICB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJfbWVzc2FnZVR5cGUuVFlQRV9NSVNNQVRDSFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZXNzYWdlVHlwZU1pc21hdGNoXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgcGF5bG9hZDogX21lc3NhZ2UucGF5bG9hZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlU3RyaXBUeXBlOiBfbWVzc2FnZS5tZXNzYWdlU3RyaXBUeXBlLFxuICAgICAgICAgICAgICAgIGNvdW50OiBfbWVzc2FnZS5jb3VudFxuICAgICAgICAgICAgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiX21lc3NhZ2VUeXBlLkZJTEVfU0laRVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZXNzYWdlRmlsZVNpemVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBfbWVzc2FnZS5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VTdHJpcFR5cGU6IF9tZXNzYWdlLm1lc3NhZ2VTdHJpcFR5cGUsXG4gICAgICAgICAgICAgICAgY291bnQ6IF9tZXNzYWdlLmNvdW50XG4gICAgICAgICAgICB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJfbWVzc2FnZVR5cGUuRklMRV9OQU1FX0xFTkdUSFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZXNzYWdlRmlsZW5hbWVMZW5ndGhcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBfbWVzc2FnZS5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VTdHJpcFR5cGU6IF9tZXNzYWdlLm1lc3NhZ2VTdHJpcFR5cGUsXG4gICAgICAgICAgICAgICAgY291bnQ6IF9tZXNzYWdlLmNvdW50XG4gICAgICAgICAgICB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtZXNzYWdlTmV3Rm9sZGVyIGxldC1wYXlsb2FkPVwicGF5bG9hZFwiIGxldC1tZXNzYWdlU3RyaXBUeXBlPVwibWVzc2FnZVN0cmlwVHlwZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlU3RyaXBUeXBlID09PSAnZXJyb3InOyBlbHNlIGZvbGRlcnNDcmVhdGVkXCI+XG4gICAgICAgIHt7ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZUNyZWF0ZUZhaWxlZCcgfCBmZFRyYW5zbGF0ZSA6IHsgZm9sZGVyTmFtZTogcGF5bG9hZC5mb2xkZXIubmFtZSB9IH19XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNmb2xkZXJzQ3JlYXRlZD5cbiAgICAgICAge3sgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlQ3JlYXRlU3VjY2VzcycgfCBmZFRyYW5zbGF0ZSA6IHsgZm9sZGVyTmFtZTogcGF5bG9hZC5mb2xkZXIubmFtZSB9IH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWVzc2FnZVVwZGF0ZVZlcnNpb24gbGV0LXBheWxvYWQ9XCJwYXlsb2FkXCIgbGV0LW1lc3NhZ2VTdHJpcFR5cGU9XCJtZXNzYWdlU3RyaXBUeXBlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VTdHJpcFR5cGUgPT09ICdlcnJvcic7IGVsc2UgdmVyc2lvblVwZGF0ZWRcIj5cbiAgICAgICAge3sgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlVXBkYXRlVmVyc2lvbkZhaWxlZCcgfCBmZFRyYW5zbGF0ZSA6IHsgZm9sZGVyTmFtZTogcGF5bG9hZC5pdGVtLm5hbWUgfSB9fVxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjdmVyc2lvblVwZGF0ZWQ+XG4gICAgICAgIHt7ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZVVwZGF0ZVZlcnNpb25TdWNjZXNzJyB8IGZkVHJhbnNsYXRlIDogeyBmb2xkZXJOYW1lOiBwYXlsb2FkLml0ZW0ubmFtZSB9IH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWVzc2FnZUZpbGVSZW5hbWUgbGV0LXBheWxvYWQ9XCJwYXlsb2FkXCIgbGV0LW1lc3NhZ2VTdHJpcFR5cGU9XCJtZXNzYWdlU3RyaXBUeXBlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VTdHJpcFR5cGUgPT09ICdlcnJvcic7IGVsc2UgZmlsZVJlbmFtZWRcIj5cbiAgICAgICAge3tcbiAgICAgICAgICAgICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZUZpbGVSZW5hbWVGYWlsZWQnXG4gICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZnJvbTogcGF5bG9hZC5pdGVtLm5hbWUsIHRvOiBwYXlsb2FkLmZpbGVOYW1lIH1cbiAgICAgICAgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2ZpbGVSZW5hbWVkPlxuICAgICAgICB7e1xuICAgICAgICAgICAgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlRmlsZVJlbmFtZVN1Y2Nlc3MnXG4gICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZnJvbTogcGF5bG9hZC5pdGVtLm5hbWUsIHRvOiBwYXlsb2FkLmZpbGVOYW1lIH1cbiAgICAgICAgfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtZXNzYWdlUmVtb3ZlIGxldC1wYXlsb2FkPVwicGF5bG9hZFwiIGxldC1tZXNzYWdlU3RyaXBUeXBlPVwibWVzc2FnZVN0cmlwVHlwZVwiIGxldC1jb3VudD1cImNvdW50XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBheWxvYWQuaXRlbXMubGVuZ3RoID4gMSAmJiBjb3VudC5mb2xkZXIgJiYgY291bnQuZmlsZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZVN0cmlwVHlwZSA9PT0gJ2Vycm9yJzsgZWxzZSBmb2xkZXJzQW5kRmlsZXNSZW1vdmVkXCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZVJlbW92ZUZvbGRlcnNBbmRGaWxlc0ZhaWxlZCdcbiAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZm9sZGVyc0NvdW50OiBjb3VudC5mb2xkZXIsIGZpbGVzQ291bnQ6IGNvdW50LmZpbGUgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZm9sZGVyc0FuZEZpbGVzUmVtb3ZlZD5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlUmVtb3ZlRm9sZGVyc0FuZEZpbGVzU3VjY2VzcydcbiAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZm9sZGVyc0NvdW50OiBjb3VudC5mb2xkZXIsIGZpbGVzQ291bnQ6IGNvdW50LmZpbGUgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXlsb2FkLml0ZW1zLmxlbmd0aCA+IDEgJiYgY291bnQuZm9sZGVyICYmICFjb3VudC5maWxlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlU3RyaXBUeXBlID09PSAnZXJyb3InOyBlbHNlIGZvbGRlcnNSZW1vdmVkXCI+XG4gICAgICAgICAgICB7eyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VSZW1vdmVGb2xkZXJzRmFpbGVkJyB8IGZkVHJhbnNsYXRlIDogeyBmb2xkZXJzQ291bnQ6IGNvdW50LmZvbGRlciB9IH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2ZvbGRlcnNSZW1vdmVkPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlUmVtb3ZlRm9sZGVyc1N1Y2Nlc3MnIHwgZmRUcmFuc2xhdGUgOiB7IGZvbGRlcnNDb3VudDogY291bnQuZm9sZGVyIH0gfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXlsb2FkLml0ZW1zLmxlbmd0aCA+IDEgJiYgY291bnQuZmlsZSAmJiAhY291bnQuZm9sZGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlU3RyaXBUeXBlID09PSAnZXJyb3InOyBlbHNlIGZpbGVzUmVtb3ZlZFwiPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlUmVtb3ZlRmlsZXNGYWlsZWQnIHwgZmRUcmFuc2xhdGUgOiB7IGZpbGVzQ291bnQ6IGNvdW50LmZpbGUgfSB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNmaWxlc1JlbW92ZWQ+XG4gICAgICAgICAgICB7eyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VSZW1vdmVGaWxlc1N1Y2Nlc3MnIHwgZmRUcmFuc2xhdGUgOiB7IGZpbGVzQ291bnQ6IGNvdW50LmZpbGUgfSB9fVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBheWxvYWQuaXRlbXMubGVuZ3RoID09PSAxXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlU3RyaXBUeXBlID09PSAnZXJyb3InOyBlbHNlIG9uZUl0ZW1SZW1vdmVkXCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZVJlbW92ZUZpbGVPckZvbGRlckZhaWxlZCdcbiAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgbmFtZTogcGF5bG9hZC5pdGVtc1swXS5uYW1lIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI29uZUl0ZW1SZW1vdmVkPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VSZW1vdmVGaWxlT3JGb2xkZXJTdWNjZXNzJ1xuICAgICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyBuYW1lOiBwYXlsb2FkLml0ZW1zWzBdLm5hbWUgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWVzc2FnZU1vdmUgbGV0LXBheWxvYWQ9XCJwYXlsb2FkXCIgbGV0LW1lc3NhZ2VTdHJpcFR5cGU9XCJtZXNzYWdlU3RyaXBUeXBlXCIgbGV0LWNvdW50PVwiY291bnRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGF5bG9hZC5pdGVtcy5sZW5ndGggPiAxICYmIGNvdW50LmZvbGRlciAmJiBjb3VudC5maWxlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlU3RyaXBUeXBlID09PSAnZXJyb3InOyBlbHNlIGZpbGVzQW5kRm9sZGVyc01vdmVkVG9cIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgKHBheWxvYWQudG9cbiAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VNb3ZlRm9sZGVyc0FuZEZpbGVzRmFpbGVkJ1xuICAgICAgICAgICAgICAgICAgICA6ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZU1vdmVSb290Rm9sZGVyc0FuZEZpbGVzRmFpbGVkJ1xuICAgICAgICAgICAgICAgICkgfCBmZFRyYW5zbGF0ZSA6IHsgZm9sZGVyc0NvdW50OiBjb3VudC5mb2xkZXIsIGZpbGVzQ291bnQ6IGNvdW50LmZpbGUsIHRvOiBwYXlsb2FkLnRvPy5uYW1lIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbGVzQW5kRm9sZGVyc01vdmVkVG8+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIChwYXlsb2FkLnRvXG4gICAgICAgICAgICAgICAgICAgID8gJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlTW92ZUZvbGRlcnNBbmRGaWxlc1N1Y2Nlc3MnXG4gICAgICAgICAgICAgICAgICAgIDogJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlTW92ZVJvb3RGb2xkZXJzQW5kRmlsZXNTdWNjZXNzJ1xuICAgICAgICAgICAgICAgICkgfCBmZFRyYW5zbGF0ZSA6IHsgZm9sZGVyc0NvdW50OiBjb3VudC5mb2xkZXIsIGZpbGVzQ291bnQ6IGNvdW50LmZpbGUsIHRvOiBwYXlsb2FkLnRvPy5uYW1lIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGF5bG9hZC5pdGVtcy5sZW5ndGggPiAxICYmIGNvdW50LmZvbGRlciAmJiAhY291bnQuZmlsZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZVN0cmlwVHlwZSA9PT0gJ2Vycm9yJzsgZWxzZSBmb2xkZXJzTW92ZWRUb1wiPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAocGF5bG9hZC50b1xuICAgICAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZU1vdmVGb2xkZXJzRmFpbGVkJ1xuICAgICAgICAgICAgICAgICAgICA6ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZU1vdmVSb290Rm9sZGVyc0ZhaWxlZCdcbiAgICAgICAgICAgICAgICApIHwgZmRUcmFuc2xhdGUgOiB7IGZvbGRlcnNDb3VudDogY291bnQuZm9sZGVyLCB0bzogcGF5bG9hZC50bz8ubmFtZSB9XG4gICAgICAgICAgICB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNmb2xkZXJzTW92ZWRUbz5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgKHBheWxvYWQudG9cbiAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VNb3ZlRm9sZGVyc1N1Y2Nlc3MnXG4gICAgICAgICAgICAgICAgICAgIDogJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlTW92ZVJvb3RGb2xkZXJzU3VjY2VzcydcbiAgICAgICAgICAgICAgICApIHwgZmRUcmFuc2xhdGUgOiB7IGZvbGRlcnNDb3VudDogY291bnQuZm9sZGVyLCB0bzogcGF5bG9hZC50bz8ubmFtZSB9XG4gICAgICAgICAgICB9fVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBheWxvYWQuaXRlbXMubGVuZ3RoID4gMSAmJiBjb3VudC5maWxlICYmICFjb3VudC5mb2xkZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VTdHJpcFR5cGUgPT09ICdlcnJvcic7IGVsc2UgZmlsZXNNb3ZlZFRvXCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIChwYXlsb2FkLnRvXG4gICAgICAgICAgICAgICAgICAgID8gJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlTW92ZUZpbGVzRmFpbGVkJ1xuICAgICAgICAgICAgICAgICAgICA6ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZU1vdmVSb290RmlsZXNGYWlsZWQnXG4gICAgICAgICAgICAgICAgKSB8IGZkVHJhbnNsYXRlIDogeyBmaWxlc0NvdW50OiBjb3VudC5maWxlLCB0bzogcGF5bG9hZC50bz8ubmFtZSB9XG4gICAgICAgICAgICB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNmaWxlc01vdmVkVG8+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIChwYXlsb2FkLnRvXG4gICAgICAgICAgICAgICAgICAgID8gJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlTW92ZUZpbGVzU3VjY2VzcydcbiAgICAgICAgICAgICAgICAgICAgOiAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VNb3ZlUm9vdEZpbGVzU3VjY2VzcydcbiAgICAgICAgICAgICAgICApIHwgZmRUcmFuc2xhdGUgOiB7IGZpbGVzQ291bnQ6IGNvdW50LmZpbGUsIHRvOiBwYXlsb2FkLnRvPy5uYW1lIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGF5bG9hZC5pdGVtcy5sZW5ndGggPT09IDFcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VTdHJpcFR5cGUgPT09ICdlcnJvcic7IGVsc2Ugb25lSXRlbU1vdmVkVG9cIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgKHBheWxvYWQudG9cbiAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VNb3ZlRmlsZU9yRm9sZGVyRmFpbGVkJ1xuICAgICAgICAgICAgICAgICAgICA6ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZU1vdmVSb290RmlsZU9yRm9sZGVyRmFpbGVkJ1xuICAgICAgICAgICAgICAgICkgfCBmZFRyYW5zbGF0ZSA6IHsgbmFtZTogcGF5bG9hZC5pdGVtc1swXS5uYW1lLCB0bzogcGF5bG9hZC50bz8ubmFtZSB9XG4gICAgICAgICAgICB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNvbmVJdGVtTW92ZWRUbz5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgKHBheWxvYWQudG9cbiAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VNb3ZlRmlsZU9yRm9sZGVyU3VjY2VzcydcbiAgICAgICAgICAgICAgICAgICAgOiAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VNb3ZlUm9vdEZpbGVPckZvbGRlclN1Y2Nlc3MnXG4gICAgICAgICAgICAgICAgKSB8IGZkVHJhbnNsYXRlIDogeyBuYW1lOiBwYXlsb2FkLml0ZW1zWzBdLm5hbWUsIHRvOiBwYXlsb2FkLnRvPy5uYW1lIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21lc3NhZ2VUeXBlTWlzbWF0Y2ggbGV0LXBheWxvYWQ9XCJwYXlsb2FkXCIgbGV0LW1lc3NhZ2VTdHJpcFR5cGU9XCJtZXNzYWdlU3RyaXBUeXBlXCIgbGV0LWNvdW50PVwiY291bnRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGF5bG9hZC5pdGVtcy5sZW5ndGggPiAxXCI+XG4gICAgICAgIHt7XG4gICAgICAgICAgICAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VGaWxlVHlwZU1pc21hdGNoUGx1cmFsJ1xuICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IGZpbGVzQ291bnQ6IHBheWxvYWQuaXRlbXMubGVuZ3RoLCBhbGxvd2VkVHlwZXM6IF9nZXRBbGxvd2VkVHlwZXMoKSB9XG4gICAgICAgIH19XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGF5bG9hZC5pdGVtcy5sZW5ndGggPT09IDFcIj5cbiAgICAgICAge3tcbiAgICAgICAgICAgICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZUZpbGVUeXBlTWlzbWF0Y2hTaW5ndWxhcidcbiAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyBmaWxlTmFtZTogcGF5bG9hZC5pdGVtc1swXS5uYW1lLCBhbGxvd2VkVHlwZXM6IF9nZXRBbGxvd2VkVHlwZXMoKSB9XG4gICAgICAgIH19XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21lc3NhZ2VGaWxlU2l6ZSBsZXQtcGF5bG9hZD1cInBheWxvYWRcIiBsZXQtbWVzc2FnZVN0cmlwVHlwZT1cIm1lc3NhZ2VTdHJpcFR5cGVcIiBsZXQtY291bnQ9XCJjb3VudFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXlsb2FkLml0ZW1zLmxlbmd0aCA+IDFcIj5cbiAgICAgICAge3tcbiAgICAgICAgICAgICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZUZpbGVTaXplRXhjZWVkZWRQbHVyYWwnXG4gICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZmlsZXNDb3VudDogcGF5bG9hZC5pdGVtcy5sZW5ndGgsIG1heEZpbGVTaXplOiBtYXhGaWxlU2l6ZSB8fCAwIH1cbiAgICAgICAgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXlsb2FkLml0ZW1zLmxlbmd0aCA9PT0gMVwiPlxuICAgICAgICB7e1xuICAgICAgICAgICAgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlRmlsZVNpemVFeGNlZWRlZFNpbmd1bGFyJ1xuICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IGZpbGVOYW1lOiBwYXlsb2FkLml0ZW1zWzBdLm5hbWUsIG1heEZpbGVTaXplOiBtYXhGaWxlU2l6ZSB8fCAwIH1cbiAgICAgICAgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWVzc2FnZUZpbGVuYW1lTGVuZ3RoIGxldC1wYXlsb2FkPVwicGF5bG9hZFwiIGxldC1tZXNzYWdlU3RyaXBUeXBlPVwibWVzc2FnZVN0cmlwVHlwZVwiIGxldC1jb3VudD1cImNvdW50XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBheWxvYWQuaXRlbXMubGVuZ3RoID4gMVwiPlxuICAgICAgICB7e1xuICAgICAgICAgICAgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlRmlsZU5hbWVMZW5ndGhFeGNlZWRlZFBsdXJhbCdcbiAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyBmaWxlc0NvdW50OiBwYXlsb2FkLml0ZW1zLmxlbmd0aCwgbWF4RmlsZW5hbWVMZW5ndGg6IG1heEZpbGVuYW1lTGVuZ3RoIHx8IDAgfVxuICAgICAgICB9fVxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBheWxvYWQuaXRlbXMubGVuZ3RoID09PSAxXCI+XG4gICAgICAgIHt7XG4gICAgICAgICAgICAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VGaWxlTmFtZUxlbmd0aEV4Y2VlZGVkU2luZ3VsYXInXG4gICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZmlsZU5hbWU6IHBheWxvYWQuaXRlbXNbMF0ubmFtZSwgbWF4RmlsZW5hbWVMZW5ndGg6IG1heEZpbGVuYW1lTGVuZ3RoIHx8IDAgfVxuICAgICAgICB9fVxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
926
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWNvbGxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3VwbG9hZC1jb2xsZWN0aW9uL3VwbG9hZC1jb2xsZWN0aW9uL3VwbG9hZC1jb2xsZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi91cGxvYWQtY29sbGVjdGlvbi91cGxvYWQtY29sbGVjdGlvbi91cGxvYWQtY29sbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0UsT0FBTyxFQUFFLDJC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LGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQiw4QkFBOEI7d0JBQzlCLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3dCQUNwQixzQkFBc0I7d0JBQ3RCLHFCQUFxQjt3QkFDckIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQiwyQkFBMkI7d0JBQzNCLFFBQVE7d0JBQ1IsWUFBWTt3QkFDWixRQUFRO3dCQUNSLGVBQWU7d0JBQ2YsZ0JBQWdCO3FCQUNuQjsrTEFPRCxFQUFFO3NCQURELEtBQUs7Z0JBS0YsWUFBWTtzQkFEZixLQUFLO2dCQTZCRixVQUFVO3NCQURiLEtBQUs7Z0JBaUJOLFNBQVM7c0JBRFIsS0FBSztnQkFRTixXQUFXO3NCQURWLEtBQUs7Z0JBU04saUJBQWlCO3NCQURoQixLQUFLO2dCQVVOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFRTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFRTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBUU4sWUFBWTtzQkFEWCxNQUFNO2dCQVFQLG9CQUFvQjtzQkFEbkIsTUFBTTtnQkFRUCxjQUFjO3NCQURiLE1BQU07Z0JBbUVVLGVBQWU7c0JBRC9CLFNBQVM7dUJBQUMsV0FBVztnQkFLTCxpQkFBaUI7c0JBRGpDLFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBEYXRlUGlwZSwgTmdGb3IsIE5nSWYsIE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCcmVhZGNydW1iQ29tcG9uZW50LCBCcmVhZGNydW1iSXRlbUNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9icmVhZGNydW1iJztcbmltcG9ydCB7IEJ1c3lJbmRpY2F0b3JDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnVzeS1pbmRpY2F0b3InO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBEaWFsb2dDb25maWcsIERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IEZpbGVVcGxvYWRlclNlbGVjdERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9maWxlLXVwbG9hZGVyJztcbmltcG9ydCB7XG4gICAgRm9ybUNvbnRyb2xDb21wb25lbnQsXG4gICAgRm9ybUlucHV0TWVzc2FnZUdyb3VwQ29tcG9uZW50LFxuICAgIEZvcm1JdGVtQ29tcG9uZW50LFxuICAgIEZvcm1NZXNzYWdlQ29tcG9uZW50XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9mb3JtJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWNvbic7XG5pbXBvcnQgeyBJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lucHV0LWdyb3VwJztcbmltcG9ydCB7IExpbmtDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGluayc7XG5pbXBvcnQgeyBNZXNzYWdlU3RyaXBDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbWVzc2FnZS1zdHJpcCc7XG5pbXBvcnQgeyBPYmplY3RTdGF0dXNDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvb2JqZWN0LXN0YXR1cyc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgVG9vbGJhckNvbXBvbmVudCwgVG9vbGJhckl0ZW1EaXJlY3RpdmUsIFRvb2xiYXJTcGFjZXJEaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdG9vbGJhcic7XG5pbXBvcnQgeyB1dWlkdjQsIHdhcm5PbmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBNZW51Q29tcG9uZW50LCBNZW51SXRlbUNvbXBvbmVudCwgTWVudVRyaWdnZXJEaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL21lbnUnO1xuaW1wb3J0IHsgTWVudUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vbWVudS1idXR0b24nO1xuaW1wb3J0IHsgQ29udmVydEJ5dGVzUGlwZSwgaXNEYXRhU291cmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHtcbiAgICBDb2x1bW5BbGlnbixcbiAgICBTZWxlY3Rpb25Nb2RlLFxuICAgIFRhYmxlQ29sdW1uQ29tcG9uZW50LFxuICAgIFRhYmxlQ29tcG9uZW50LFxuICAgIFRhYmxlUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS90YWJsZSc7XG5pbXBvcnQge1xuICAgIEZkcENlbGxEZWYsXG4gICAgRmRwSGVhZGVyQ2VsbERlZixcbiAgICBGZHBUYWJsZUNlbGwsXG4gICAgRmRwVGFibGVIZWFkZXIsXG4gICAgVGFibGVEYXRhU291cmNlRGlyZWN0aXZlLFxuICAgIFRhYmxlSGVhZGVyUmVzaXplckRpcmVjdGl2ZSxcbiAgICBUYWJsZUluaXRpYWxTdGF0ZURpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3RhYmxlLWhlbHBlcnMnO1xuaW1wb3J0IHsgTW92ZVRvQ29tcG9uZW50LCBNb3ZlVG9Db21wb25lbnREaWFsb2dEYXRhIH0gZnJvbSAnLi4vZGlhbG9ncy9tb3ZlLXRvL21vdmUtdG8uY29tcG9uZW50JztcbmltcG9ydCB7IE5ld0ZvbGRlckNvbXBvbmVudCB9IGZyb20gJy4uL2RpYWxvZ3MvbmV3LWZvbGRlci9uZXctZm9sZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVcGxvYWRDb2xsZWN0aW9uRHJhZ25Ecm9wRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy91cGxvYWQtY29sbGVjdGlvbi1kcmFnbmRyb3AuZGlyZWN0aXZlJztcbmltcG9ydCB7IFVwbG9hZENvbGxlY3Rpb25EYXRhU291cmNlIH0gZnJvbSAnLi4vZG9tYWluL3VwbG9hZC1jb2xsZWN0aW9uLWRhdGEtc291cmNlJztcbmltcG9ydCB7IGdlbmVyYXRlTWVzc2FnZVN0cmlwZURhdGEgfSBmcm9tICcuLi9oZWxwZXJzL2dlbmVyYXRlLW1lc3NhZ2Utc3RyaXBlLWRhdGEnO1xuaW1wb3J0IHtcbiAgICBCcmVhZGNydW1iTGlzdCxcbiAgICBGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuICAgIEZpbGVuYW1lTGVuZ3RoRXhjZWVkRXZlbnQsXG4gICAgRmlsZXNWYWxpZGF0b3JPdXRwdXQsXG4gICAgSXRlbVBlclBhZ2UsXG4gICAgTWVzc2FnZSxcbiAgICBNZXNzYWdlT3B0aW9ucyxcbiAgICBNZXNzYWdlU3RyaXBUeXBlLFxuICAgIE1lc3NhZ2VUeXBlLFxuICAgIE1vdmVUb0V2ZW50LFxuICAgIFR5cGVNaXNtYXRjaEV2ZW50LFxuICAgIFVwZGF0ZVZlcnNpb25FdmVudCxcbiAgICBVcGxvYWRDb2xsZWN0aW9uQ21wLFxuICAgIFVwbG9hZENvbGxlY3Rpb25GaWxlLFxuICAgIFVwbG9hZENvbGxlY3Rpb25Gb2xkZXIsXG4gICAgVXBsb2FkQ29sbGVjdGlvbkl0ZW0sXG4gICAgVXBsb2FkQ29sbGVjdGlvbkl0ZW1TdGF0dXNcbn0gZnJvbSAnLi4vbW9kZWxzL3VwbG9hZC1jb2xsZWN0aW9uLm1vZGVscyc7XG5pbXBvcnQgeyBGaWxlc1ZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9maWxlcy12YWxpZGF0b3Iuc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIEZkcFVwbG9hZENvbGxlY3Rpb25EYXRhU291cmNlID0gVXBsb2FkQ29sbGVjdGlvbkRhdGFTb3VyY2U7XG5cbmxldCByYW5kb21JZCA9IDA7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFVwbG9hZENvbGxlY3Rpb24gY29tcG9uZW50IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAwLjQwLjBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtdXBsb2FkLWNvbGxlY3Rpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91cGxvYWQtY29sbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdXBsb2FkLWNvbGxlY3Rpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBNZXNzYWdlU3RyaXBDb21wb25lbnQsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIEJyZWFkY3J1bWJDb21wb25lbnQsXG4gICAgICAgIEJyZWFkY3J1bWJJdGVtQ29tcG9uZW50LFxuICAgICAgICBMaW5rQ29tcG9uZW50LFxuICAgICAgICBOZ0ZvcixcbiAgICAgICAgVG9vbGJhclNwYWNlckRpcmVjdGl2ZSxcbiAgICAgICAgSW5wdXRHcm91cENvbXBvbmVudCxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgVG9vbGJhckl0ZW1EaXJlY3RpdmUsXG4gICAgICAgIFVwbG9hZENvbGxlY3Rpb25EcmFnbkRyb3BEaXJlY3RpdmUsXG4gICAgICAgIFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICAgICAgVGFibGVIZWFkZXJSZXNpemVyRGlyZWN0aXZlLFxuICAgICAgICBUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgVGFibGVJbml0aWFsU3RhdGVEaXJlY3RpdmUsXG4gICAgICAgIFRhYmxlQ29sdW1uQ29tcG9uZW50LFxuICAgICAgICBGZHBDZWxsRGVmLFxuICAgICAgICBGZHBUYWJsZUNlbGwsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIEZvcm1JdGVtQ29tcG9uZW50LFxuICAgICAgICBGb3JtSW5wdXRNZXNzYWdlR3JvdXBDb21wb25lbnQsXG4gICAgICAgIEZvcm1Db250cm9sQ29tcG9uZW50LFxuICAgICAgICBGb3JtTWVzc2FnZUNvbXBvbmVudCxcbiAgICAgICAgQnVzeUluZGljYXRvckNvbXBvbmVudCxcbiAgICAgICAgT2JqZWN0U3RhdHVzQ29tcG9uZW50LFxuICAgICAgICBGZHBIZWFkZXJDZWxsRGVmLFxuICAgICAgICBGZHBUYWJsZUhlYWRlcixcbiAgICAgICAgTWVudUJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgTWVudVRyaWdnZXJEaXJlY3RpdmUsXG4gICAgICAgIFBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgICAgIE1lbnVDb21wb25lbnQsXG4gICAgICAgIE1lbnVJdGVtQ29tcG9uZW50LFxuICAgICAgICBGaWxlVXBsb2FkZXJTZWxlY3REaXJlY3RpdmUsXG4gICAgICAgIE5nU3dpdGNoLFxuICAgICAgICBOZ1N3aXRjaENhc2UsXG4gICAgICAgIERhdGVQaXBlLFxuICAgICAgICBGZFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIENvbnZlcnRCeXRlc1BpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZENvbGxlY3Rpb25Db21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBVcGxvYWRDb2xsZWN0aW9uQ21wPEZkcFVwbG9hZENvbGxlY3Rpb25EYXRhU291cmNlPlxue1xuICAgIC8qKiBJRCBvZiB0aGUgdXBsb2FkIGNvbGxlY3Rpb24gZWxlbWVudC4gSWYgbm9uZSBpcyBwcm92aWRlZCwgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQgPSBgZmRwLXVwbG9hZC1jb2xsZWN0aW9uLWlkLSR7cmFuZG9tSWQrK31gO1xuXG4gICAgLyoqIERlZmluZXMgdGhlIG51bWJlciBvZiBpdGVtcyBvbiB0aGUgcGFnZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGl0ZW1zUGVyUGFnZSh2YWx1ZTogbnVtYmVyIHwgSXRlbVBlclBhZ2VbXSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhpcy5faXRlbXNQZXJQYWdlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9tYXRjaCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB2YWx1ZS5maW5kKChpdGVtKSA9PiBpdGVtLmRlZmF1bHQpO1xuICAgICAgICB0aGlzLl9pdGVtc1BlclBhZ2VPcHRpb25zID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5faXRlbXNQZXJQYWdlID0gZGVmYXVsdFZhbHVlLmxhYmVsO1xuICAgICAgICAgICAgdGhpcy5fbWF0Y2goKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faXRlbXNQZXJQYWdlID0gdmFsdWVbTWF0aC5yb3VuZCh2YWx1ZS5sZW5ndGggLyAyKV0ubGFiZWw7XG5cbiAgICAgICAgdGhpcy5fbWF0Y2goKTtcbiAgICB9XG4gICAgZ2V0IGl0ZW1zUGVyUGFnZSgpOiBudW1iZXIgfCBJdGVtUGVyUGFnZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zUGVyUGFnZTtcbiAgICB9XG5cbiAgICAvKiogTGlzdCBvZiBpdGVtcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEZkcFVwbG9hZENvbGxlY3Rpb25EYXRhU291cmNlKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURTKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZGF0YVNvdXJjZSgpOiBGZHBVcGxvYWRDb2xsZWN0aW9uRGF0YVNvdXJjZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIGFsbG93ZWQgZmlsZSB0eXBlcyBmb3IgdGhlIHVwbG9hZC5cbiAgICAgKiBUaGUgY2hvc2VuIGZpbGVzIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IGFuIGFycmF5IG9mIGZpbGUgdHlwZXMuXG4gICAgICogSWYgYXQgbGVhc3Qgb25lIGZpbGUgZG9lcyBub3QgZml0IHRoZSBmaWxlIHR5cGUgcmVxdWlyZW1lbnRzLFxuICAgICAqIHRoZSB1cGxvYWQgaXMgcHJldmVudGVkLiBFeGFtcGxlOiBbXCJqcGdcIiwgXCJwbmdcIiwgXCJibXBcIl0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaWxlVHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgYSBmaWxlIHNpemUgbGltaXQgaW4gbWVnYWJ5dGVzIHRoYXQgcHJldmVudHMgdGhlIHVwbG9hZFxuICAgICAqIGlmIGF0IGxlYXN0IG9uZSBmaWxlIGV4Y2VlZHMgdGhlIGxpbWl0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4RmlsZVNpemU/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgZmlsZSBuYW1lLlxuICAgICAqIElmIHRoZSBtYXhpbXVtIGZpbGUgbmFtZSBsZW5ndGggaXMgZXhjZWVkZWQsXG4gICAgICogdGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQgJ2ZpbGVuYW1lTGVuZ3RoRXhjZWVkJyBpcyB0cmlnZ2VyZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBtYXhGaWxlbmFtZUxlbmd0aD86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIGFsbG93ZWQgTUlNRSB0eXBlcyBvZiBmaWxlcyB0byBiZSB1cGxvYWRlZC5cbiAgICAgKiBUaGUgY2hvc2VuIGZpbGVzIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IGFuIGFycmF5IG9mIE1JTUUgdHlwZXMuXG4gICAgICogSWYgYXQgbGVhc3Qgb25lIGZpbGUgZG9lcyBub3QgZml0IHRoZSBNSU1FIHR5cGUgcmVxdWlyZW1lbnRzLCB0aGUgdXBsb2FkIGlzIHByZXZlbnRlZC5cbiAgICAgKiBFeGFtcGxlOiBtaW1lVHlwZXMgW1wiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvanBlZ1wiXS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG1pbWVUeXBlczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKiBBbGwgYWN0aW9uIGJ1dHRvbnMgd2lsbCBiZSBkaXNhYmxlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBBbGwgYWN0aW9uIGJ1dHRvbnMgd2lsbCBiZSBpbnZpc2libGUgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlYWRvbmx5ID0gZmFsc2U7XG5cbiAgICAvKiogQWxsb3dzIHRvIHN1cHBvcnQgaGllcmFyY2h5ICovXG4gICAgQElucHV0KClcbiAgICBoaWVyYXJjaHkgPSB0cnVlO1xuXG4gICAgLyoqIEFsbG93cyB0byBzaG93L2hpZGUgcGFnaW5hdGlvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW5hYmxlUGFnaW5hdGlvbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0cnVlLCB0aGUgYnV0dG9uIHRoYXQgaXMgdXNlZCB0byB0ZXJtaW5hdGUgdGhlIGluc3RhbnQgZmlsZSB1cGxvYWQgZ2V0cyB2aXNpYmxlLlxuICAgICAqIFRoZSBidXR0b24gbm9ybWFsbHkgYXBwZWFycyB3aGVuIGEgZmlsZSBpcyBiZWluZyB1cGxvYWRlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRlcm1pbmF0aW9uRW5hYmxlZCA9IHRydWU7XG5cbiAgICAvKiogR2l2ZXMgdG8gc2VsZWN0IG11bHRpcGxlIGZpbGVzIGZyb20gdGhlIHNhbWUgZm9sZGVyIGFuZCB0aGVuIHVwbG9hZCB0aGVtLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbXVsdGlwbGUgPSB0cnVlO1xuXG4gICAgLyoqIEFsbG93cyB0byBzaG93L2hpZGUgc2VhcmNoICovXG4gICAgQElucHV0KClcbiAgICBzaG93U2VhcmNoID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEFsbG93cyB0byB1c2UgdGhlIHNhbWUgbmFtZSBmb3IgYSBmaWxlIHdoZW4gZWRpdGluZyB0aGUgZmlsZSBuYW1lLlxuICAgICAqICdTYW1lIG5hbWUnIHJlZmVycyB0byBhbiBhbHJlYWR5IGV4aXN0aW5nIGZpbGUgbmFtZSBpbiB0aGUgbGlzdC5cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2FtZUZpbGVOYW1lQWxsb3dlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBmaWxlIHR5cGUgb3IgdGhlIE1JTUUgdHlwZSBkb24ndCBtYXRjaCB0aGUgcGVybWl0dGVkIHR5cGVzXG4gICAgICogKG9ubHkgaWYgdGhlIGZpbGVUeXBlcyBwcm9wZXJ0eSBvciB0aGUgbWltZVR5cGVzIHByb3BlcnR5IGFyZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24pLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHR5cGVNaXNtYXRjaCA9IG5ldyBFdmVudEVtaXR0ZXI8VHlwZU1pc21hdGNoRXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIG5hbWUgb2YgYSBjaG9zZW4gZmlsZSBpcyBsb25nZXIgdGhhbiB0aGUgdmFsdWUgc3BlY2lmaWVkXG4gICAgICogd2l0aCB0aGUgbWF4RmlsZW5hbWVMZW5ndGggcHJvcGVydHkgKG9ubHkgaWYgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uKS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBmaWxlbmFtZUxlbmd0aEV4Y2VlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZW5hbWVMZW5ndGhFeGNlZWRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBldmVudCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgZmlsZSBzaXplIG9mIGFuIHVwbG9hZGVkIGZpbGUgaXMgZXhjZWVkZWRcbiAgICAgKiAob25seSBpZiB0aGUgbWF4RmlsZVNpemUgcHJvcGVydHkgd2FzIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbikuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgZmlsZVNpemVFeGNlZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVTaXplRXhjZWVkRXZlbnQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF91cGxvYWRDb2xsZWN0aW9uSXRlbVN0YXR1cyA9IFVwbG9hZENvbGxlY3Rpb25JdGVtU3RhdHVzO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYnJlYWRjcnVtYkxpc3Q6IEJyZWFkY3J1bWJMaXN0W10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2N1cnJlbnRQYWdlID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2l0ZW1zUGVyUGFnZSA9IDEwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXRlbXNQZXJQYWdlT3B0aW9uczogSXRlbVBlclBhZ2VbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG90YWxJdGVtcyA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jb3VudFNob3dlZEl0ZW1zID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NvdW50Tm90U2hvd2VkSXRlbXMgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBMaXN0IG9mIGN1cnJlbnRseSBkaXNwbGF5ZWQgaXRlbXNcbiAgICAgKi9cbiAgICBfdmlzaWJsZUxpc3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVcGxvYWRDb2xsZWN0aW9uSXRlbVtdPihbXSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNlbGVjdGVkSXRlbXM6IFVwbG9hZENvbGxlY3Rpb25JdGVtW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlYXJjaFRleHQgPSAnJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3Nob3dEcmFnRHJvcEFyZWEgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uRHJhZ0Ryb3BBcmVhID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hY3RpdmVJdGVtPzogVXBsb2FkQ29sbGVjdGlvbkl0ZW07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jdXJyZW50VXBkYXRlRmlsZVZlcnNpb24/OiBVcGxvYWRDb2xsZWN0aW9uRmlsZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2U/OiBNZXNzYWdlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbWVzc2FnZVR5cGUgPSBNZXNzYWdlVHlwZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2VTdHJpcFR5cGUgPSBNZXNzYWdlU3RyaXBUeXBlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY29sdW1uQWxpZ24gPSBDb2x1bW5BbGlnbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3VwbG9hZEZpbGVzUmVmOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd1cGRhdGVWZXJzaW9uSW5wdXQnKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3VwZGF0ZVZlcnNpb25SZWY6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RhdGFTb3VyY2U6IFVwbG9hZENvbGxlY3Rpb25EYXRhU291cmNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnRlbnREZW5zaXR5TWFudWFsbHlTZXQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW1hZ2VFeHRlbnNpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgJy5hcG5nJyxcbiAgICAgICAgJy5ibXAnLFxuICAgICAgICAnLmdpZicsXG4gICAgICAgICcuaWNvJyxcbiAgICAgICAgJy5jdXInLFxuICAgICAgICAnLmpwZycsXG4gICAgICAgICcuanBlZycsXG4gICAgICAgICcuamZpZicsXG4gICAgICAgICcucGpwZWcnLFxuICAgICAgICAnLnBqcCcsXG4gICAgICAgICcucG5nJyxcbiAgICAgICAgJy5zdmcnLFxuICAgICAgICAnLnRpZicsXG4gICAgICAgICcudGlmZicsXG4gICAgICAgICcud2VicCcsXG4gICAgICAgICcuZmxpZicsXG4gICAgICAgICcuY3IyJyxcbiAgICAgICAgJy5qeHInLFxuICAgICAgICAnLnBzZCcsXG4gICAgICAgICcuYnBnJyxcbiAgICAgICAgJy5qcDInLFxuICAgICAgICAnLmpwbScsXG4gICAgICAgICcuanB4JyxcbiAgICAgICAgJy5oZWljJyxcbiAgICAgICAgJy5kY20nXG4gICAgXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmFsaWRhdGVkRmlsZXM6IEZpbGVzVmFsaWRhdG9yT3V0cHV0O1xuXG4gICAgLyoqIEBoaWRkZW4gZm9yIGRhdGEgc291cmNlIGhhbmRsaW5nICovXG4gICAgcHJpdmF0ZSBfZHNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZmlsZXNWYWxpZGF0b3JTZXJ2aWNlOiBGaWxlc1ZhbGlkYXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICB3YXJuT25jZSgnVGhlIFVwbG9hZCBDb2xsZWN0aW9uIGNvbXBvbmVudCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCByZWxlYXNlLicpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5jb250ZW50RGVuc2l0eSkge1xuICAgICAgICAgICAgdGhpcy5fY29udGVudERlbnNpdHlNYW51YWxseVNldCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqIFNob3cgbWVlc3NhZ2UgZm9yIHR5cGVzIE5FVyBGT0xERVIgQ1JFQVRFLCBSRU1PVkUsIE1PVkUgVE8sIFVQREFURV9WRVJTSU9OLCBGSUxFX1JFTkFNRUQgKi9cbiAgICBzaG93TWVzc2FnZSh0eXBlOiBNZXNzYWdlVHlwZSwgb3B0aW9uczogTWVzc2FnZU9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZSA9IGdlbmVyYXRlTWVzc2FnZVN0cmlwZURhdGEodHlwZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE9wZW5zIHRoZSBmaWxlIHNlbGVjdG9yLlxuICAgICAqL1xuICAgIF9maWxlTmFtZUNoYW5nZShlOiBGb2N1c0V2ZW50LCBjdXJyZW50SXRlbTogVXBsb2FkQ29sbGVjdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBjb25zdCBpdGVtTmFtZSA9IGlucHV0LnZhbHVlLnRyaW0oKTtcbiAgICAgICAgY29uc3QgbmV3TmFtZSA9IGN1cnJlbnRJdGVtLnR5cGUgPT09ICdmaWxlJyA/IGAke2l0ZW1OYW1lfS4ke2N1cnJlbnRJdGVtLm5hbWUuc3BsaXQoJy4nKS5wb3AoKX1gIDogaXRlbU5hbWU7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRJdGVtLm5hbWUgPT09IG5ld05hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm1heEZpbGVuYW1lTGVuZ3RoICYmIGl0ZW1OYW1lLmxlbmd0aCA+IHRoaXMubWF4RmlsZW5hbWVMZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmFtZWRJdGVtID0ge1xuICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRJdGVtLFxuICAgICAgICAgICAgICAgIG5hbWU6IG5ld05hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgICAgIGl0ZW1zOiBbcmVuYW1lZEl0ZW1dXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZmlsZW5hbWVMZW5ndGhFdmVudCA9IG5ldyBGaWxlbmFtZUxlbmd0aEV4Y2VlZEV2ZW50KHRoaXMsIHBheWxvYWQpO1xuXG4gICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLkZJTEVfTkFNRV9MRU5HVEgsIHsgcGF5bG9hZCwgdHlwZTogTWVzc2FnZVN0cmlwVHlwZS5FUlJPUiB9KTtcblxuICAgICAgICAgICAgdGhpcy5maWxlbmFtZUxlbmd0aEV4Y2VlZC5lbWl0KGZpbGVuYW1lTGVuZ3RoRXZlbnQpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudEl0ZW0uc2FtZUZpbGVuYW1lU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBwYXJlbnRGb2xkZXJJZDogdGhpcy5fZ2V0Q3VycmVudEZvbGRlcklkKCksXG4gICAgICAgICAgICBmaWxlTmFtZTogbmV3TmFtZSxcbiAgICAgICAgICAgIGl0ZW06IHsgLi4uY3VycmVudEl0ZW0gfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZVxuICAgICAgICAgICAgLmZpbGVSZW5hbWVkKGRhdGEpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXRjaCgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoTWVzc2FnZVR5cGUuRklMRV9SRU5BTUUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXNzYWdlU3RyaXBUeXBlLlNVQ0NFU1NcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLkZJTEVfUkVOQU1FLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWVzc2FnZVN0cmlwVHlwZS5FUlJPUlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jaGVja05hbWUoZTogRXZlbnQsIGN1cnJlbnRJdGVtOiBVcGxvYWRDb2xsZWN0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGl0ZW1OYW1lID0gaW5wdXQudmFsdWUudHJpbSgpO1xuICAgICAgICBjb25zdCBuZXdOYW1lID0gY3VycmVudEl0ZW0udHlwZSA9PT0gJ2ZpbGUnID8gYCR7aXRlbU5hbWV9LiR7Y3VycmVudEl0ZW0ubmFtZS5zcGxpdCgnLicpLnBvcCgpfWAgOiBpdGVtTmFtZTtcbiAgICAgICAgY29uc3QgbmFtZUFscmVhZHlFeGlzdHMgPSB0aGlzLl9nZXRMaXN0KCkuc29tZShcbiAgICAgICAgICAgIChpdGVtKSA9PiBjdXJyZW50SXRlbS5kb2N1bWVudElkICE9PSBpdGVtLmRvY3VtZW50SWQgJiYgaXRlbS5uYW1lID09PSBuZXdOYW1lXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNhbWVGaWxlTmFtZUFsbG93ZWQgJiYgbmFtZUFscmVhZHlFeGlzdHMpIHtcbiAgICAgICAgICAgIGN1cnJlbnRJdGVtLnNhbWVGaWxlbmFtZVN0YXRlID0gJ2Vycm9yJztcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIGN1cnJlbnRJdGVtLnNhbWVGaWxlbmFtZVN0YXRlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogT3BlbnMgdGhlIGZpbGUgc2VsZWN0b3IuXG4gICAgICovXG4gICAgX29wZW5VcGxvYWRGaWxlcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLl91cGxvYWRGaWxlc1JlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgIGlucHV0LmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIE9wZW5zIHRoZSB1cGRhdGUgZmlsZSB2ZXJzaW9uIHNlbGVjdG9yLlxuICAgICAqL1xuICAgIF9vcGVuVXBkYXRlRmlsZVZlcnNpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuX3VwZGF0ZVZlcnNpb25SZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50VXBkYXRlRmlsZVZlcnNpb24gPSB0aGlzLl9hY3RpdmVJdGVtIGFzIFVwbG9hZENvbGxlY3Rpb25GaWxlO1xuICAgICAgICAgICAgaW5wdXQuY2xpY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdEhhbmRsZXIoZmlsZXM6IEZpbGVbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZUZpbGVzKGZpbGVzKTtcbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlRmlsZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oYW5kbGVEcm9wKG91dHB1dDogRmlsZXNWYWxpZGF0b3JPdXRwdXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVkRmlsZXMgPSBvdXRwdXQ7XG4gICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUZpbGVzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb3Blbk5ld0ZvbGRlckRpYWxvZygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKE5ld0ZvbGRlckNvbXBvbmVudCwge1xuICAgICAgICAgICAgcmVzcG9uc2l2ZVBhZGRpbmc6IHRydWUsXG4gICAgICAgICAgICBiYWNrZHJvcENsaWNrQ2xvc2VhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGhlaWdodDogJzMyMHB4JyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Rm9sZGVyOiB0aGlzLl9nZXRDdXJyZW50Rm9sZGVyKCksXG4gICAgICAgICAgICAgICAgbWF4RmlsZW5hbWVMZW5ndGg6IHRoaXMubWF4RmlsZW5hbWVMZW5ndGhcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBEaWFsb2dDb25maWcpO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoZm9sZGVyTmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9sZGVyID0gdGhpcy5fZ2VuZXJhdGVUZW1wb3JhcnlOZXdGb2xkZXIoZm9sZGVyTmFtZSk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRGb2xkZXJJZCA9IHRoaXMuX2dldEN1cnJlbnRGb2xkZXJJZCgpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICBwYXJlbnRGb2xkZXJJZCxcbiAgICAgICAgICAgICAgICBmb2xkZXI6IHsgLi4uZm9sZGVyIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpbmRQYXJlbnRGb2xkZXJBbmRBZGRUZW1wb3JhcnlGaWxlcyhwYXJlbnRGb2xkZXJJZCwgW2ZvbGRlcl0pO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgICAubmV3Rm9sZGVyKGRhdGEpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFwKCgpID0+IHRoaXMuX21hdGNoKCkpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLkNSRUFURSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWVzc2FnZVN0cmlwVHlwZS5TVUNDRVNTXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoTWVzc2FnZVR5cGUuQ1JFQVRFLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXNzYWdlU3RyaXBUeXBlLkVSUk9SXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tb3ZlVG9DbGlja2VkKG11bHRpcGxlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgX2FjdGl2ZUl0ZW0gPSB0aGlzLl9hY3RpdmVJdGVtO1xuICAgICAgICBjb25zdCBjdXJyZW50Rm9sZGVyID0gdGhpcy5fZ2V0Q3VycmVudEZvbGRlcigpO1xuICAgICAgICBjb25zdCBtb3ZhYmxlSXRlbXMgPSBtdWx0aXBsZSA/IHRoaXMuc2VsZWN0ZWRJdGVtcyA6IF9hY3RpdmVJdGVtID8gW19hY3RpdmVJdGVtXSA6IFtdO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4oXG4gICAgICAgICAgICBNb3ZlVG9Db21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2l2ZVBhZGRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgdmVydGljYWxQYWRkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBiYWNrZHJvcENsaWNrQ2xvc2VhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICczNTBweCcsXG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBpdGVtczogdGhpcy5kYXRhU291cmNlLmRhdGFQcm92aWRlci5pdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgbW92YWJsZUZvbGRlcnM6IG1vdmFibGVJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0/LnR5cGUgPT09ICdmb2xkZXInKSxcbiAgICAgICAgICAgICAgICAgICAgbWF4RmlsZW5hbWVMZW5ndGg6IHRoaXMubWF4RmlsZW5hbWVMZW5ndGhcbiAgICAgICAgICAgICAgICB9IGFzIE1vdmVUb0NvbXBvbmVudERpYWxvZ0RhdGFcbiAgICAgICAgICAgIH0gYXMgRGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JcbiAgICAgICAgKTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoeyBzZWxlY3RlZEZvbGRlciwgcGFyZW50Rm9sZGVySWQsIGZvbGRlck5hbWUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQ6IE1vdmVUb0V2ZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICBmcm9tOiBjdXJyZW50Rm9sZGVyLFxuICAgICAgICAgICAgICAgICAgICB0bzogc2VsZWN0ZWRGb2xkZXIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBtb3ZhYmxlSXRlbXNcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKGZvbGRlck5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5uZXdGb2xkZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb2xkZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlck5hbWVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgLm1vdmVUbyhwYXlsb2FkKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXRjaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLk1PVkUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWVzc2FnZVN0cmlwVHlwZS5TVUNDRVNTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLk1PVkUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWVzc2FnZVN0cmlwVHlwZS5FUlJPUlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kb3dubG9hZENsaWNrZWQobXVsdGlwbGU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBfYWN0aXZlSXRlbSA9IHsgLi4udGhpcy5fYWN0aXZlSXRlbSB9O1xuICAgICAgICBjb25zdCBpdGVtcyA9IChtdWx0aXBsZSA/IHRoaXMuc2VsZWN0ZWRJdGVtcyA6IFtfYWN0aXZlSXRlbV0pIGFzIFVwbG9hZENvbGxlY3Rpb25GaWxlW107XG5cbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRvd25sb2FkKHsgaXRlbXMgfSkuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcmVtb3ZlKG11bHRpcGxlPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgX2FjdGl2ZUl0ZW0gPSB7IC4uLnRoaXMuX2FjdGl2ZUl0ZW0gfSBhcyBVcGxvYWRDb2xsZWN0aW9uSXRlbTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBtdWx0aXBsZSA/IHRoaXMuc2VsZWN0ZWRJdGVtcyA6IFtfYWN0aXZlSXRlbV07XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IHBhcmVudEZvbGRlcklkOiB0aGlzLl9nZXRDdXJyZW50Rm9sZGVySWQoKSwgaXRlbXMgfTtcblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2VcbiAgICAgICAgICAgIC5kZWxldGUoZGF0YSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hdGNoKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShNZXNzYWdlVHlwZS5SRU1PVkUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBNZXNzYWdlU3RyaXBUeXBlLlNVQ0NFU1NcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLlJFTU9WRSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IE1lc3NhZ2VTdHJpcFR5cGUuRVJST1JcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcnVuVXBsb2FkTmV3RmlsZUFmdGVyRmFpbChpdGVtOiBVcGxvYWRDb2xsZWN0aW9uRmlsZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VcbiAgICAgICAgICAgIC5ydW5BZnRlckZhaWwoeyBwYXJlbnRGb2xkZXJJZDogdGhpcy5fZ2V0Q3VycmVudEZvbGRlcklkKCksIGl0ZW1zOiBbaXRlbV0gfSlcbiAgICAgICAgICAgIC5waXBlKHRhcCgoKSA9PiB0aGlzLl9tYXRjaCgpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYW5jZWxVcGxvYWROZXdGaWxlKGZpbGU6IFVwbG9hZENvbGxlY3Rpb25GaWxlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZVxuICAgICAgICAgICAgLmNhbmNlbFVwbG9hZE5ld0ZpbGUoeyBwYXJlbnRGb2xkZXJJZDogdGhpcy5fZ2V0Q3VycmVudEZvbGRlcklkKCksIGl0ZW06IGZpbGUgfSlcbiAgICAgICAgICAgIC5waXBlKHRhcCgoKSA9PiB0aGlzLl9tYXRjaCgpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZXNzYWdlU3RyaXBEaXNtaXNzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29wZW5Gb2xkZXIoaXRlbTogVXBsb2FkQ29sbGVjdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2ZpbGUnIHx8ICFpdGVtLmRvY3VtZW50SWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9icmVhZGNydW1iTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9icmVhZGNydW1iTGlzdFt0aGlzLl9icmVhZGNydW1iTGlzdC5sZW5ndGggLSAxXS5jbGlrYWJsZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9icmVhZGNydW1iTGlzdC5wdXNoKHtcbiAgICAgICAgICAgIGNsaWthYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGZvbGRlcklkOiBpdGVtLmRvY3VtZW50SWQsXG4gICAgICAgICAgICBmb2xkZXJOYW1lOiBpdGVtLm5hbWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fbWF0Y2goKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hY3Rpb25CdXR0b24oaXRlbTogVXBsb2FkQ29sbGVjdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IGl0ZW07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Ecm9wem9uZShldmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9zaG93RHJhZ0Ryb3BBcmVhID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fb25EcmFnRHJvcEFyZWEgPSBldmVudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kcmFnRHJvcENhbmNlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2hvd0RyYWdEcm9wQXJlYSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2JyZWFkY3J1bWJHb1RvKGV2ZW50OiBNb3VzZUV2ZW50LCBpbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoaW5kZXgpKSB7XG4gICAgICAgICAgICB0aGlzLl9icmVhZGNydW1iTGlzdCA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWF0Y2goKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYnJlYWRjcnVtYkxpc3QgPSB0aGlzLl9icmVhZGNydW1iTGlzdC5zbGljZSgwLCBpbmRleCEgKyAxKTtcbiAgICAgICAgdGhpcy5fYnJlYWRjcnVtYkxpc3RbdGhpcy5fYnJlYWRjcnVtYkxpc3QubGVuZ3RoIC0gMV0uY2xpa2FibGUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLl9tYXRjaCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3BhZ2VDaGFuZ2VkKHBhZ2VOdW1iZXI6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlUGFnaW5hdGlvbiB8fCB0aGlzLl9jdXJyZW50UGFnZSA9PT0gcGFnZU51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgIHRoaXMuX2N1cnJlbnRQYWdlID0gcGFnZU51bWJlcjtcblxuICAgICAgICB0aGlzLl9tYXRjaCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2l0ZW1zUGVyUGFnZUNoYW5nZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5faXRlbXNQZXJQYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRQYWdlICogdGhpcy5faXRlbXNQZXJQYWdlID4gdGhpcy5fdG90YWxJdGVtcykge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudFBhZ2UgPSBNYXRoLmNlaWwodGhpcy5fdG90YWxJdGVtcyAvIHRoaXMuX2l0ZW1zUGVyUGFnZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tYXRjaCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlYXJjaElucHV0Q2hhbmdlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbWF0Y2goKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vblJvd1NlbGVjdGlvbkNoYW5nZShkYXRhOiBUYWJsZVJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50PFVwbG9hZENvbGxlY3Rpb25JdGVtPik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2FtZUZpbGVOYW1lQWxsb3dlZCkge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZEl0ZW0gPSBkYXRhLnJlbW92ZWRbMF07XG4gICAgICAgICAgICB0aGlzLl9jbGVhckl0ZW1TYW1lRmlsZW5hbWVTdGF0ZShyZW1vdmVkSXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBkYXRhLnNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9nZXRJdGVtTmFtZShpdGVtOiBVcGxvYWRDb2xsZWN0aW9uSXRlbSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdmb2xkZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZS5zcGxpdCgnLicpLnNsaWNlKDAsIC0xKS5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZ2V0SXRlbUV4dGVuc2lvbihpdGVtOiBVcGxvYWRDb2xsZWN0aW9uSXRlbSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdmb2xkZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYC4ke2l0ZW0ubmFtZS5zcGxpdCgnLicpLnBvcCgpfWA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZ2V0SWNvbkJ5VHlwZShmaWxlOiBVcGxvYWRDb2xsZWN0aW9uRmlsZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBgLiR7ZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCl9YDtcblxuICAgICAgICByZXR1cm4gdGhpcy5faW1hZ2VFeHRlbnNpb25zLmluY2x1ZGVzKHR5cGUpID8gJ2JhY2tncm91bmQnIDogJ2RvY3VtZW50JztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93SWZTZWxlY3RlZE9ubHlGaWxlcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNlbGVjdGVkSXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS50eXBlID09PSAnZm9sZGVyJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNTZWxlY3RlZEl0ZW0oaXRlbTogVXBsb2FkQ29sbGVjdGlvbkl0ZW0pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5zb21lKChzZWxlY3RlZEl0ZW0pID0+IHNlbGVjdGVkSXRlbS5kb2N1bWVudElkID09PSBpdGVtLmRvY3VtZW50SWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dldExpc3QoKTogVXBsb2FkQ29sbGVjdGlvbkl0ZW1bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZGF0YVByb3ZpZGVyLmxpc3Q7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdHJhY2tCeURvY3VtZW50SWQoaW5kZXg6IG51bWJlciwgaXRlbTogVXBsb2FkQ29sbGVjdGlvbkl0ZW0pOiBVcGxvYWRDb2xsZWN0aW9uSXRlbVsnZG9jdW1lbnRJZCddIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uZG9jdW1lbnRJZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9nZXRBbGxvd2VkVHlwZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZmlsZVR5cGVzPy5qb2luKCcsICcpfSR7XG4gICAgICAgICAgICB0aGlzLmZpbGVUeXBlcz8ubGVuZ3RoICYmIHRoaXMubWltZVR5cGVzPy5sZW5ndGggPyAnLCAnIDogJydcbiAgICAgICAgfSR7dGhpcy5taW1lVHlwZXM/LmpvaW4oJywgJyl9YDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbGlkYXRlRmlsZXMoZmlsZXM6IEZpbGVbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZWRGaWxlcyA9IHRoaXMuX2ZpbGVzVmFsaWRhdG9yU2VydmljZS52YWxpZGF0aW9uKGZpbGVzLCB7XG4gICAgICAgICAgICBtYXhGaWxlU2l6ZTogdGhpcy5tYXhGaWxlU2l6ZSxcbiAgICAgICAgICAgIG1heEZpbGVOYW1lTGVuZ3RoOiB0aGlzLm1heEZpbGVuYW1lTGVuZ3RoLFxuICAgICAgICAgICAgZmlsZVR5cGVzOiB0aGlzLmZpbGVUeXBlcyxcbiAgICAgICAgICAgIG1pbWVUeXBlczogdGhpcy5taW1lVHlwZXNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcm9wYWdhdGVGaWxlcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyB2YWxpZEZpbGVzLCB0eXBlTWlzbWF0Y2gsIGZpbGVuYW1lTGVuZ3RoRXhjZWVkLCBmaWxlU2l6ZUV4Y2VlZCB9ID0gdGhpcy5fdmFsaWRhdGVkRmlsZXM7XG5cbiAgICAgICAgaWYgKHZhbGlkRmlsZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50VXBkYXRlRmlsZVZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVGaWxlVmVyc2lvbih2YWxpZEZpbGVzWzBdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBsb2FkTmV3RmlsZXModmFsaWRGaWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZU1pc21hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0geyBpdGVtczogdHlwZU1pc21hdGNoIH07XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBUeXBlTWlzbWF0Y2hFdmVudCh0aGlzLCBwYXlsb2FkKTtcblxuICAgICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShNZXNzYWdlVHlwZS5UWVBFX01JU01BVENILCB7IHBheWxvYWQsIHR5cGU6IE1lc3NhZ2VTdHJpcFR5cGUuRVJST1IgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudHlwZU1pc21hdGNoLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVuYW1lTGVuZ3RoRXhjZWVkKSB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0geyBpdGVtczogZmlsZW5hbWVMZW5ndGhFeGNlZWQgfTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEZpbGVuYW1lTGVuZ3RoRXhjZWVkRXZlbnQodGhpcywgcGF5bG9hZCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoTWVzc2FnZVR5cGUuRklMRV9OQU1FX0xFTkdUSCwgeyBwYXlsb2FkLCB0eXBlOiBNZXNzYWdlU3RyaXBUeXBlLkVSUk9SIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmZpbGVuYW1lTGVuZ3RoRXhjZWVkLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVTaXplRXhjZWVkKSB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0geyBpdGVtczogZmlsZVNpemVFeGNlZWQgfTtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEZpbGVTaXplRXhjZWVkRXZlbnQodGhpcywgcGF5bG9hZCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2hvd01lc3NhZ2UoTWVzc2FnZVR5cGUuRklMRV9TSVpFLCB7IHBheWxvYWQsIHR5cGU6IE1lc3NhZ2VTdHJpcFR5cGUuRVJST1IgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZmlsZVNpemVFeGNlZWQuZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUZpbGVWZXJzaW9uKG5ld0l0ZW06IEZpbGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudEZvbGRlcklkID0gdGhpcy5fZ2V0Q3VycmVudEZvbGRlcklkKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0ge1xuICAgICAgICAgICAgLi4udGhpcy5fY3VycmVudFVwZGF0ZUZpbGVWZXJzaW9uLFxuICAgICAgICAgICAgc3RhdHVzOiBVcGxvYWRDb2xsZWN0aW9uSXRlbVN0YXR1cy5MT0FESU5HXG4gICAgICAgIH0gYXMgVXBsb2FkQ29sbGVjdGlvbkl0ZW07XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIHBhcmVudEZvbGRlcklkOiB0aGlzLl9nZXRDdXJyZW50Rm9sZGVySWQoKSxcbiAgICAgICAgICAgIGl0ZW06IHRoaXMuX2N1cnJlbnRVcGRhdGVGaWxlVmVyc2lvbixcbiAgICAgICAgICAgIG5ld0l0ZW1cbiAgICAgICAgfSBhcyBVcGRhdGVWZXJzaW9uRXZlbnQ7XG5cbiAgICAgICAgdGhpcy5fZmluZFBhcmVudEZvbGRlckFuZFVwZGF0ZUl0ZW0oY3VycmVudEZvbGRlcklkLCBjdXJyZW50SXRlbSk7XG5cbiAgICAgICAgdGhpcy5kYXRhU291cmNlXG4gICAgICAgICAgICAudXBkYXRlVmVyc2lvbihkYXRhKVxuICAgICAgICAgICAgLnBpcGUodGFwKCgpID0+IHRoaXMuX21hdGNoKCkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLlVQREFURV9WRVJTSU9OLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWVzc2FnZVN0cmlwVHlwZS5TVUNDRVNTXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50VXBkYXRlRmlsZVZlcnNpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dNZXNzYWdlKE1lc3NhZ2VUeXBlLlVQREFURV9WRVJTSU9OLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWVzc2FnZVN0cmlwVHlwZS5FUlJPUlxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3VwbG9hZE5ld0ZpbGVzKGZpbGVzOiBGaWxlW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudEZvbGRlcklkID0gdGhpcy5fZ2V0Q3VycmVudEZvbGRlcklkKCk7XG4gICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gdGhpcy5fZ2VuZXJhdGVUZW1wb3JhcnlOZXdGaWxlcyhmaWxlcyk7XG5cbiAgICAgICAgdGhpcy5fZmluZFBhcmVudEZvbGRlckFuZEFkZFRlbXBvcmFyeUZpbGVzKGN1cnJlbnRGb2xkZXJJZCwgbmV3SXRlbXMpO1xuXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZVxuICAgICAgICAgICAgLnVwbG9hZCh7XG4gICAgICAgICAgICAgICAgcGFyZW50Rm9sZGVySWQ6IGN1cnJlbnRGb2xkZXJJZCxcbiAgICAgICAgICAgICAgICBpdGVtczogbmV3SXRlbXMubWFwKChpdGVtKSA9PiAoeyAuLi5pdGVtIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKHRhcCgoKSA9PiB0aGlzLl9tYXRjaCgpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEN1cnJlbnRGb2xkZXIoKTogVXBsb2FkQ29sbGVjdGlvbkZvbGRlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGb2xkZXJJZCA9IHRoaXMuX2dldEN1cnJlbnRGb2xkZXJJZCgpO1xuXG4gICAgICAgIHJldHVybiAhY3VycmVudEZvbGRlcklkID8gdW5kZWZpbmVkIDogdGhpcy5fZmluZEZvbGRlckJ5SWQoY3VycmVudEZvbGRlcklkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEN1cnJlbnRGb2xkZXJJZCgpOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWRjcnVtYkxpc3QubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiB0aGlzLl9icmVhZGNydW1iTGlzdFt0aGlzLl9icmVhZGNydW1iTGlzdC5sZW5ndGggLSAxXS5mb2xkZXJJZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZpbmRGb2xkZXJCeUlkKFxuICAgICAgICBmb2xkZXJJZDogbnVtYmVyIHwgc3RyaW5nLFxuICAgICAgICBpdGVtczogVXBsb2FkQ29sbGVjdGlvbkl0ZW1bXSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhUHJvdmlkZXIuaXRlbXNcbiAgICApOiBVcGxvYWRDb2xsZWN0aW9uRm9sZGVyIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IGZvdW5kT2JqOiBVcGxvYWRDb2xsZWN0aW9uRm9sZGVyIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGl0ZW1zLCAoXywgbmVzdGVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChuZXN0ZWRWYWx1ZSAmJiBuZXN0ZWRWYWx1ZS5kb2N1bWVudElkID09PSBmb2xkZXJJZCkge1xuICAgICAgICAgICAgICAgIGZvdW5kT2JqID0gbmVzdGVkVmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXN0ZWRWYWx1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZvdW5kT2JqO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmluZFBhcmVudEZvbGRlckFuZFVwZGF0ZUl0ZW0oXG4gICAgICAgIHBhcmVudEZvbGRlcklkOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgICAgIHVwZGF0ZWRJdGVtOiBVcGxvYWRDb2xsZWN0aW9uSXRlbSxcbiAgICAgICAgaXRlbXMgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YVByb3ZpZGVyLml0ZW1zXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghcGFyZW50Rm9sZGVySWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmRvY3VtZW50SWQgPT09IHVwZGF0ZWRJdGVtLmRvY3VtZW50SWQpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zW2luZGV4XSA9IHVwZGF0ZWRJdGVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9tYXRjaCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SXRlbSA9IGl0ZW1zW2ldO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEl0ZW0udHlwZSAhPT0gJ2ZvbGRlcicpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtLmRvY3VtZW50SWQgPT09IHBhcmVudEZvbGRlcklkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjdXJyZW50SXRlbS5maWxlcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0uZG9jdW1lbnRJZCA9PT0gdXBkYXRlZEl0ZW0uZG9jdW1lbnRJZCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50SXRlbS5maWxlc1tpXSA9IHVwZGF0ZWRJdGVtO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXRjaCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluZFBhcmVudEZvbGRlckFuZFVwZGF0ZUl0ZW0ocGFyZW50Rm9sZGVySWQsIHVwZGF0ZWRJdGVtLCBjdXJyZW50SXRlbS5maWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZpbmRQYXJlbnRGb2xkZXJBbmRBZGRUZW1wb3JhcnlGaWxlcyhcbiAgICAgICAgcGFyZW50Rm9sZGVySWQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICAgICAgbmV3SXRlbXM6IFVwbG9hZENvbGxlY3Rpb25JdGVtW10sXG4gICAgICAgIGl0ZW1zID0gdGhpcy5kYXRhU291cmNlLmRhdGFQcm92aWRlci5pdGVtc1xuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoIXBhcmVudEZvbGRlcklkKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKC4uLm5ld0l0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMuX21hdGNoKCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICBpZiAoY3VycmVudEl0ZW0udHlwZSAhPT0gJ2ZvbGRlcicpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtLmRvY3VtZW50SWQgPT09IHBhcmVudEZvbGRlcklkKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEl0ZW0uZmlsZXMucHVzaCguLi5uZXdJdGVtcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWF0Y2goKTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5kUGFyZW50Rm9sZGVyQW5kQWRkVGVtcG9yYXJ5RmlsZXMocGFyZW50Rm9sZGVySWQsIG5ld0l0ZW1zLCBjdXJyZW50SXRlbS5maWxlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dlbmVyYXRlVGVtcG9yYXJ5TmV3RmlsZXMoZmlsZXM6IEZpbGVbXSk6IFVwbG9hZENvbGxlY3Rpb25GaWxlW10ge1xuICAgICAgICByZXR1cm4gZmlsZXMubWFwKChmaWxlKSA9PiAoe1xuICAgICAgICAgICAgZG9jdW1lbnRJZDogdXVpZHY0KCksXG4gICAgICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICB1cGxvYWRlZEJ5OiB7XG4gICAgICAgICAgICAgICAgaWQ6IHV1aWR2NCgpLFxuICAgICAgICAgICAgICAgIG5hbWU6IGBZb3VgXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBsb2FkZWRPbjogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIGZpbGVTaXplOiBmaWxlLnNpemUsXG4gICAgICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICAgICAgdXJsOiAnJyxcbiAgICAgICAgICAgIHN0YXR1czogVXBsb2FkQ29sbGVjdGlvbkl0ZW1TdGF0dXMuTE9BRElORyxcbiAgICAgICAgICAgIGZpbGVcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2VuZXJhdGVUZW1wb3JhcnlOZXdGb2xkZXIoZm9sZGVyTmFtZTogc3RyaW5nKTogVXBsb2FkQ29sbGVjdGlvbkZvbGRlciB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkb2N1bWVudElkOiB1dWlkdjQoKSxcbiAgICAgICAgICAgIHR5cGU6ICdmb2xkZXInLFxuICAgICAgICAgICAgbmFtZTogZm9sZGVyTmFtZSxcbiAgICAgICAgICAgIHVwbG9hZGVkQnk6IHtcbiAgICAgICAgICAgICAgICBpZDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnWW91J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVwbG9hZGVkT246IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBmaWxlczogW10sXG4gICAgICAgICAgICBzdGF0dXM6IFVwbG9hZENvbGxlY3Rpb25JdGVtU3RhdHVzLkxPQURJTkdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVEUyhkczogRmRwVXBsb2FkQ29sbGVjdGlvbkRhdGFTb3VyY2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmlzaWJsZUxpc3QkLm5leHQoW10pO1xuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jbG9zZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2RzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB0aGlzLl9vcGVuRGF0YVN0cmVhbShkcyk7XG5cbiAgICAgICAgLy8gaW5pdGlhbCBkYXRhIGZldGNoXG4gICAgICAgIHRoaXMuX21hdGNoKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vcGVuRGF0YVN0cmVhbShkczogRmRwVXBsb2FkQ29sbGVjdGlvbkRhdGFTb3VyY2UpOiBVcGxvYWRDb2xsZWN0aW9uRGF0YVNvdXJjZSB7XG4gICAgICAgIGNvbnN0IGluaXREYXRhU291cmNlID0gdGhpcy5fdG9EYXRhU3RyZWFtKGRzKTtcbiAgICAgICAgaWYgKGluaXREYXRhU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW2RhdGFTb3VyY2VdIHNvdXJjZSBkaWQgbm90IG1hdGNoIGFuIGFycmF5LCBPYnNlcnZhYmxlLCBvciBEYXRhU291cmNlYCk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgaXMgc2luZ2xlIHBvaW50IG9mIGRhdGEgZW50cnkgdG8gdGhlIGNvbXBvbmVudC4gV2UgZG9udCB3YW50IHRvIHNldCBkYXRhIG9uIGRpZmZlcmVudFxuICAgICAgICAgKiBwbGFjZXMuIElmIGFueSBuZXcgZGF0YSBjb21lcyBpbiBlaXRoZXIgeW91IGRvIGEgc2VhcmNoIGFuZCB5b3Ugd2FudCB0byBwYXNzIGluaXRpYWwgZGF0YVxuICAgICAgICAgKiBpdHMgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gaW5pdERhdGFTb3VyY2Uub3BlbigpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdmlzaWJsZUxpc3QkLm5leHQoZGF0YSk7XG5cbiAgICAgICAgICAgIHRoaXMuX3RvdGFsSXRlbXMgPSBpbml0RGF0YVNvdXJjZS5kYXRhUHJvdmlkZXIudG90YWxJdGVtcztcblxuICAgICAgICAgICAgdGhpcy5fY291bnRVbnZpc2libGVJdGVtcygpO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGluaXREYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9EYXRhU3RyZWFtKGRzOiBGZHBVcGxvYWRDb2xsZWN0aW9uRGF0YVNvdXJjZSk6IFVwbG9hZENvbGxlY3Rpb25EYXRhU291cmNlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShkcykpIHtcbiAgICAgICAgICAgIHJldHVybiBkcyBhcyBVcGxvYWRDb2xsZWN0aW9uRGF0YVNvdXJjZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tYXRjaCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBuZXcgTWFwKCk7XG5cbiAgICAgICAgcXVlcnkuc2V0KCdmb2xkZXJJZCcsIHRoaXMuX2dldEN1cnJlbnRGb2xkZXJJZCgpKTtcbiAgICAgICAgcXVlcnkuc2V0KCdwYWdlJywgdGhpcy5fY3VycmVudFBhZ2UpO1xuICAgICAgICBxdWVyeS5zZXQoJ3NlYXJjaFRleHQnLCB0aGlzLl9zZWFyY2hUZXh0IHx8ICcqJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlUGFnaW5hdGlvbikge1xuICAgICAgICAgICAgcXVlcnkuc2V0KCdsaW1pdCcsIHRoaXMuX2l0ZW1zUGVyUGFnZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UubWF0Y2gocXVlcnkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY291bnRVbnZpc2libGVJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbXNQZXJQYWdlID0gdGhpcy5faXRlbXNQZXJQYWdlIGFzIG51bWJlcjtcbiAgICAgICAgdGhpcy5fY291bnRTaG93ZWRJdGVtcyA9IHRoaXMuX2N1cnJlbnRQYWdlICogaXRlbXNQZXJQYWdlIC0gaXRlbXNQZXJQYWdlICsgMTtcbiAgICAgICAgdGhpcy5fY291bnROb3RTaG93ZWRJdGVtcyA9IHRoaXMuX2NvdW50U2hvd2VkSXRlbXMgKyB0aGlzLl92aXNpYmxlTGlzdCQudmFsdWUubGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NsZWFySXRlbVNhbWVGaWxlbmFtZVN0YXRlKGN1cnJlbnRJdGVtOiBVcGxvYWRDb2xsZWN0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICBpZiAoIWN1cnJlbnRJdGVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fZ2V0TGlzdCgpKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5kb2N1bWVudElkID09PSBjdXJyZW50SXRlbS5kb2N1bWVudElkKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW0uc2FtZUZpbGVuYW1lU3RhdGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IFtpZF09XCJpZFwiIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uXCI+XG4gICAgPCEtLSBNZXNzYWdlIHN0cmlwIC0tPlxuICAgIDxmZC1tZXNzYWdlLXN0cmlwICpuZ0lmPVwiX21lc3NhZ2VcIiBbdHlwZV09XCJfbWVzc2FnZS5tZXNzYWdlU3RyaXBUeXBlXCIgKG9uRGlzbWlzcyk9XCJfbWVzc2FnZVN0cmlwRGlzbWlzcygpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogX21lc3NhZ2UubWVzc2FnZVR5cGUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogX21lc3NhZ2UucGF5bG9hZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlU3RyaXBUeXBlOiBfbWVzc2FnZS5tZXNzYWdlU3RyaXBUeXBlLFxuICAgICAgICAgICAgICAgIGNvdW50OiBfbWVzc2FnZS5jb3VudFxuICAgICAgICAgICAgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2ZkLW1lc3NhZ2Utc3RyaXA+XG5cbiAgICA8IS0tIFRvb2xiYXIgLS0+XG4gICAgPGZkLXRvb2xiYXIgY2xhc3M9XCJmZHAtdXBsb2FkLWNvbGxlY3Rpb25fX3Rvb2xiYXJcIj5cbiAgICAgICAgPGRpdiBbc3R5bGUuZmxleF09XCInMSBhdXRvJ1wiPlxuICAgICAgICAgICAgPGZkLWJyZWFkY3J1bWIgW2lkXT1cImlkICsgJy1icmVhZGNydW1iJ1wiPlxuICAgICAgICAgICAgICAgIDxmZC1icmVhZGNydW1iLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVCcmVhZGNydW1icz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgZmQtbGluayAoY2xpY2spPVwiX2JyZWFkY3J1bWJHb1RvKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLmJyZWFkY3J1bWJMYWJlbEFsbEZpbGVzJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlQnJlYWRjcnVtYj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uYnJlYWRjcnVtYkxhYmVsQWxsRmlsZXNXaXRoVG90YWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyB0b3RhbDogX3RvdGFsSXRlbXMgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiX2JyZWFkY3J1bWJMaXN0Lmxlbmd0aCA+IDAgPyBtdWx0aXBsZUJyZWFkY3J1bWJzIDogc2luZ2xlQnJlYWRjcnVtYlwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJyZWFkY3J1bWItaXRlbT5cbiAgICAgICAgICAgICAgICA8ZmQtYnJlYWRjcnVtYi1pdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9icmVhZGNydW1iTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NsaWNrYWJsZUJyZWFkY3J1bWI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGZkLWxpbmsgKGNsaWNrKT1cIl9icmVhZGNydW1iR29UbygkZXZlbnQsIGkpXCI+e3sgaXRlbS5mb2xkZXJOYW1lIH19PC9hPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RleHRCcmVhZGNydW1iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS5mb2xkZXJOYW1lIH19ICh7eyBfdG90YWxJdGVtcyB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbS5jbGlrYWJsZSA/IGNsaWNrYWJsZUJyZWFkY3J1bWIgOiB0ZXh0QnJlYWRjcnVtYlwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJyZWFkY3J1bWItaXRlbT5cbiAgICAgICAgICAgIDwvZmQtYnJlYWRjcnVtYj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGZkLXRvb2xiYXItc3BhY2VyIFtzdHlsZS5tYXgtd2lkdGgucmVtXT1cIjNcIj48L2ZkLXRvb2xiYXItc3BhY2VyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVhZG9ubHkgfHwgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgIDxmZC1pbnB1dC1ncm91cFxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1NlYXJjaFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJfc2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiX3NlYXJjaElucHV0Q2hhbmdlZCgpXCJcbiAgICAgICAgICAgICAgICBnbHlwaD1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgW2FyaWFMYWJlbGxlZEJ5XT1cImlkICsgJy1icmVhZGNydW1iJ1wiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uc2VhcmNoUGxhY2Vob2xkZXInIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgPjwvZmQtaW5wdXQtZ3JvdXA+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcmVhZG9ubHlcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vcGVuVXBsb2FkRmlsZXMoKVwiXG4gICAgICAgICAgICAgICAgICAgIGZkVHlwZT1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uYWRkQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5hZGRCdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfb3Blbk5ld0ZvbGRlckRpYWxvZygpXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoaWVyYXJjaHlcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm5ld0ZvbGRlckJ0bkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubmV3Rm9sZGVyQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJlYWRvbmx5ICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfbW92ZVRvQ2xpY2tlZCh0cnVlKVwiXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubW92ZVRvQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1vdmVUb0J0bkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2Rvd25sb2FkQ2xpY2tlZCh0cnVlKVwiXG4gICAgICAgICAgICAgICAgZmRUeXBlPVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJfc2hvd0lmU2VsZWN0ZWRPbmx5RmlsZXMoKVwiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uZG93bmxvYWRCdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uZG93bmxvYWRCdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9yZW1vdmUodHJ1ZSlcIlxuICAgICAgICAgICAgICAgIGZkVHlwZT1cImdob3N0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLnJlbW92ZUJ0bkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5yZW1vdmVCdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZmQtdG9vbGJhcj5cblxuICAgIDxkaXYgY2xhc3M9XCJmZHAtdXBsb2FkLWNvbGxlY3Rpb25fX3RhYmxlLS13cmFwcGVyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX190YWJsZVwiXG4gICAgICAgICAgICBmZHBVcGxvYWRDb2xsZWN0aW9uRHJhZ25Ecm9wXG4gICAgICAgICAgICBbZmlsZVR5cGVzXT1cImZpbGVUeXBlc1wiXG4gICAgICAgICAgICBbbWF4RmlsZW5hbWVMZW5ndGhdPVwibWF4RmlsZW5hbWVMZW5ndGhcIlxuICAgICAgICAgICAgW21heEZpbGVTaXplXT1cIm1heEZpbGVTaXplXCJcbiAgICAgICAgICAgIFttaW1lVHlwZXNdPVwibWltZVR5cGVzXCJcbiAgICAgICAgICAgIFtkcmFnbmRyb3BdPVwiIXJlYWRvbmx5XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgKGZpbGVDaGFuZ2VkKT1cIl9oYW5kbGVEcm9wKCRldmVudClcIlxuICAgICAgICAgICAgKGNhbmNlbCk9XCJfZHJhZ0Ryb3BDYW5jZWwoKVwiXG4gICAgICAgICAgICAob25Ecm9wem9uZSk9XCJfb25Ecm9wem9uZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSBUYWJsZSAtLT5cbiAgICAgICAgICAgIDxmZHAtdGFibGVcbiAgICAgICAgICAgICAgICAqbmdJZj1cIl92aXNpYmxlTGlzdCQudmFsdWUubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiX3Zpc2libGVMaXN0JFwiXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiZGF0YVNvdXJjZS5pc0RhdGFMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIGVtcHR5VGFibGVNZXNzYWdlPVwiXCJcbiAgICAgICAgICAgICAgICBbbm9Ib3Jpem9udGFsQm9yZGVyc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdHJhY2tCeV09XCJfdHJhY2tCeURvY3VtZW50SWRcIlxuICAgICAgICAgICAgICAgIChyb3dTZWxlY3Rpb25DaGFuZ2UpPVwiX29uUm93U2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxmZHAtY29sdW1uIG5hbWU9XCJuYW1lXCIgbGFiZWw9XCJOYW1lXCIgd2lkdGg9XCI4cmVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmZHAtdGFibGUtY2VsbCAqZmRwQ2VsbERlZj1cImxldCBpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX192ZXJ0aWNhbC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9fZmQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnZm9sZGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoPVwiZm9sZGVyLWJsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uZm9sZGVySWNvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19mZC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdmaWxlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtnbHlwaF09XCJfZ2V0SWNvbkJ5VHlwZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLmZpbGVJY29uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkLWljb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzYWJsZWQgfHwgcmVhZG9ubHkgfHwgIV9pc1NlbGVjdGVkSXRlbShpdGVtKTsgZWxzZSBlZGl0TW9kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC11cGxvYWQtY29sbGVjdGlvbl9fY3Vyc29yXT1cIml0ZW0udHlwZSA9PT0gJ2ZvbGRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vcGVuRm9sZGVyKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBpdGVtLm5hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZWRpdE1vZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1mb3JtLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1mb3JtLWlucHV0LW1lc3NhZ2UtZ3JvdXAgW3RyaWdnZXJzXT1cIltdXCIgW2lzT3Blbl09XCIhIWl0ZW0uc2FtZUZpbGVuYW1lU3RhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZHAtdXBsb2FkLWNvbGxlY3Rpb25fX3ZlcnRpY2FsLWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1mb3JtLWNvbnRyb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIl9nZXRJdGVtTmFtZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIl9maWxlTmFtZUNoYW5nZSgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIl9jaGVja05hbWUoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5lZGl0RmlsZU5hbWVJbnB1dFBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJpdGVtLnNhbWVGaWxlbmFtZVN0YXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19pdGVtX2V4dGVuc2lvblwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nZXRJdGVtRXh0ZW5zaW9uKGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWZvcm0tbWVzc2FnZSBbdHlwZV09XCJpdGVtLnNhbWVGaWxlbmFtZVN0YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0udHlwZSA9PT0gJ2ZpbGUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uZWRpdEZpbGVOYW1lRmlsZUFscmVhZHlFeGlzdHNFcnJvcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5lZGl0RmlsZU5hbWVGb2xkZXJBbHJlYWR5RXhpc3RzRXJyb3InXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCBmZFRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkLWZvcm0tbWVzc2FnZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1mb3JtLWlucHV0LW1lc3NhZ2UtZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2ZkcC10YWJsZS1jZWxsPlxuICAgICAgICAgICAgICAgIDwvZmRwLWNvbHVtbj5cblxuICAgICAgICAgICAgICAgIDxmZHAtY29sdW1uIG5hbWU9XCJ1cGxvYWRlZEJ5XCIgbGFiZWw9XCJVcGxvYWRlZCBieVwiIHdpZHRoPVwiNXJlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZmRwLXRhYmxlLWNlbGwgKmZkcENlbGxEZWY9XCJsZXQgaXRlbVwiPnt7IGl0ZW0udXBsb2FkZWRCeS5uYW1lIH19PC9mZHAtdGFibGUtY2VsbD5cbiAgICAgICAgICAgICAgICA8L2ZkcC1jb2x1bW4+XG5cbiAgICAgICAgICAgICAgICA8ZmRwLWNvbHVtbiBuYW1lPVwidXBsb2FkZWRPblwiIGxhYmVsPVwiVXBsb2FkZWQgb25cIiB3aWR0aD1cIjVyZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGZkcC10YWJsZS1jZWxsICpmZHBDZWxsRGVmPVwibGV0IGl0ZW1cIj57eyBpdGVtLnVwbG9hZGVkT24gfCBkYXRlIDogJ3Nob3J0RGF0ZScgfX08L2ZkcC10YWJsZS1jZWxsPlxuICAgICAgICAgICAgICAgIDwvZmRwLWNvbHVtbj5cblxuICAgICAgICAgICAgICAgIDxmZHAtY29sdW1uIG5hbWU9XCJzaXplXCIgbGFiZWw9XCJGaWxlIHNpemVcIiB3aWR0aD1cIjVyZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGZkcC10YWJsZS1jZWxsICpmZHBDZWxsRGVmPVwibGV0IGl0ZW1cIj57eyBpdGVtLmZpbGVTaXplIHwgY29udmVydEJ5dGVzIH19PC9mZHAtdGFibGUtY2VsbD5cbiAgICAgICAgICAgICAgICA8L2ZkcC1jb2x1bW4+XG5cbiAgICAgICAgICAgICAgICA8ZmRwLWNvbHVtbiBuYW1lPVwidmVyc2lvblwiIGxhYmVsPVwiVmVyc2lvblwiIHdpZHRoPVwiNXJlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZmRwLXRhYmxlLWNlbGwgKmZkcENlbGxEZWY9XCJsZXQgaXRlbVwiPnt7IGl0ZW0udmVyc2lvbiB8fCAnJyB9fTwvZmRwLXRhYmxlLWNlbGw+XG4gICAgICAgICAgICAgICAgPC9mZHAtY29sdW1uPlxuXG4gICAgICAgICAgICAgICAgPGZkcC1jb2x1bW4gbmFtZT1cInN0YXR1c1wiIGxhYmVsPVwiU3RhdHVzXCIgd2lkdGg9XCI1cmVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmZHAtdGFibGUtY2VsbCAqZmRwQ2VsbERlZj1cImxldCBpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uc3RhdHVzID09PSBfdXBsb2FkQ29sbGVjdGlvbkl0ZW1TdGF0dXMuTE9BRElOR1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiU3RhdHVzOiBMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhTGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtYnVzeS1pbmRpY2F0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5zdGF0dXMgPT09IF91cGxvYWRDb2xsZWN0aW9uSXRlbVN0YXR1cy5TVUNDRVNTRlVMXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1vYmplY3Qtc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzPVwicG9zaXRpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uaXRlbVN0YXR1c1N1Y2Nlc3NmdWwnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnN0YXR1cyA9PT0gX3VwbG9hZENvbGxlY3Rpb25JdGVtU3RhdHVzLlVOU1VDQ0VTU0ZVTFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtb2JqZWN0LXN0YXR1c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz1cIm5lZ2F0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLml0ZW1TdGF0dXNVbnN1Y2Nlc3NmdWwnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9mZHAtdGFibGUtY2VsbD5cbiAgICAgICAgICAgICAgICA8L2ZkcC1jb2x1bW4+XG5cbiAgICAgICAgICAgICAgICA8ZmRwLWNvbHVtbiBuYW1lPVwiYWN0aW9uXCIgKm5nSWY9XCIhcmVhZG9ubHlcIiB3aWR0aD1cIjVyZW1cIiBhbGlnbj1cImVuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZmRwLXRhYmxlLWhlYWRlciAqZmRwSGVhZGVyQ2VsbERlZj5BY3Rpb248L2ZkcC10YWJsZS1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxmZHAtdGFibGUtY2VsbCAqZmRwQ2VsbERlZj1cImxldCBpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9fYWN0aW9ucy0tc3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24udXBsb2FkTmV3RmlsZUFmdGVyRmFpbEFjdGlvbicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi51cGxvYWROZXdGaWxlQWZ0ZXJGYWlsQWN0aW9uJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfcnVuVXBsb2FkTmV3RmlsZUFmdGVyRmFpbChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnN0YXR1cyA9PT0gX3VwbG9hZENvbGxlY3Rpb25JdGVtU3RhdHVzLlVOU1VDQ0VTU0ZVTFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLmNhbmNlbFVwbG9hZE5ld0ZpbGVBY3Rpb24nIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uY2FuY2VsVXBsb2FkTmV3RmlsZUFjdGlvbicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9jYW5jZWxVcGxvYWROZXdGaWxlKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGVybWluYXRpb25FbmFibGVkICYmIGl0ZW0uc3RhdHVzID09PSBfdXBsb2FkQ29sbGVjdGlvbkl0ZW1TdGF0dXMuTE9BRElOR1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZHAtbWVudS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cIm92ZXJmbG93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uaXRlbU1lbnVCdG5UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmZHBNZW51VHJpZ2dlckZvcl09XCJtZW51QWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidXR0b25DbGlja2VkKT1cIl9hY3Rpb25CdXR0b24oaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZkcC1tZW51LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2ZkcC10YWJsZS1jZWxsPlxuICAgICAgICAgICAgICAgIDwvZmRwLWNvbHVtbj5cbiAgICAgICAgICAgIDwvZmRwLXRhYmxlPlxuXG4gICAgICAgICAgICA8IS0tIERyYWdkcm9wIGFyZWEgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdXBsb2FkLWNvbGxlY3Rpb25fX2RyYWdkcm9wLWFyZWFcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiX3Nob3dEcmFnRHJvcEFyZWFcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiX29uRHJhZ0Ryb3BBcmVhXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZmQtaWNvbiBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9fZHJhZ2Ryb3AtYXJlYS0taWNvblwiIGdseXBoPVwidXBsb2FkLXRvLWNsb3VkXCI+PC9mZC1pY29uPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19kcmFnZHJvcC1hcmVhLS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uZHJhZ0Ryb3BBcmVhVGV4dCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIE5vIGRhdGEgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdXBsb2FkLWNvbGxlY3Rpb25fX25vLWRhdGFcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiX3Zpc2libGVMaXN0JC52YWx1ZS5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pbnZpc2libGVdPVwiX3Nob3dEcmFnRHJvcEFyZWFcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxmZC1pY29uIGdseXBoPVwiZG9jdW1lbnRcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgPGgzPnt7ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubm9EYXRhVGV4dCcgfCBmZFRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICAgICAgICAgICAgPHA+e3sgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5ub0RhdGFEZXNjcmlwdGlvbicgfCBmZFRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFRhYmxlIGZvb3RlciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9fdGFibGUtZm9vdGVyXCIgKm5nSWY9XCJlbmFibGVQYWdpbmF0aW9uICYmIF90b3RhbEl0ZW1zXCI+XG4gICAgICAgICAgICA8IS0tIFBhZ2luYXRpb24gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19wYWdpbmF0aW9uXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2lkXT1cImlkICsgJy1wYWdpbmF0aW9uJ1wiIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19wYWdpbmF0aW9uLS10b3RhbFwiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5wYWdpbmF0aW9uVG90YWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZnJvbTogX2NvdW50U2hvd2VkSXRlbXMsIHRvOiBfY291bnROb3RTaG93ZWRJdGVtcywgdG90YWw6IF90b3RhbEl0ZW1zIH1cbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGZkLXBhZ2luYXRpb25cbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwiX3RvdGFsSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheVRvdGFsSXRlbXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZVN0YXJ0KT1cIl9wYWdlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJfaXRlbXNQZXJQYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRQYWdlXT1cIl9jdXJyZW50UGFnZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpZCArICctcGFnaW5hdGlvbidcIlxuICAgICAgICAgICAgICAgID48L2ZkLXBhZ2luYXRpb24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBSZXN1bHRzIHBlciBwYWdlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9fcmVzdWx0c1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19yZXN1bHRzLS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaWRdPVwiaWQgKyAnLXJlc3VsdHMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLnJlc3VsdHNQZXJQYWdlJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJfaXRlbXNQZXJQYWdlT3B0aW9ucy5sZW5ndGggPT09IDBcIj57eyBfaXRlbXNQZXJQYWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZmRwLW1lbnUtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiX2l0ZW1zUGVyUGFnZU9wdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxsZWRCeV09XCJpZCArICctcmVzdWx0cydcIlxuICAgICAgICAgICAgICAgICAgICBbZmRwTWVudVRyaWdnZXJGb3JdPVwiaXRlbXNQZXJQYWdlTWVudVwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJfaXRlbXNQZXJQYWdlICsgJydcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2ZkcC1tZW51LWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZmRwLW1lbnUgI2l0ZW1zUGVyUGFnZU1lbnUgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XG4gICAgPGZkcC1tZW51LWl0ZW1cbiAgICAgICAgKm5nRm9yPVwibGV0IHZhbHVlIG9mIF9pdGVtc1BlclBhZ2VPcHRpb25zXCJcbiAgICAgICAgKGl0ZW1TZWxlY3QpPVwiX2l0ZW1zUGVyUGFnZUNoYW5nZSh2YWx1ZS5sYWJlbClcIlxuICAgICAgICBbYXR0ci50aXRsZV09XCInUmVzdWx0cyBwZXIgcGFnZTogJyArIHZhbHVlLmxhYmVsXCJcbiAgICA+XG4gICAgICAgIDxzcGFuPnt7IHZhbHVlLmxhYmVsIH19PC9zcGFuPlxuICAgIDwvZmRwLW1lbnUtaXRlbT5cbjwvZmRwLW1lbnU+XG5cbjxmZHAtbWVudSAjbWVudUFjdGlvbnMgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XG4gICAgPGZkcC1tZW51LWl0ZW0gKGl0ZW1TZWxlY3QpPVwiX21vdmVUb0NsaWNrZWQoKVwiPlxuICAgICAgICA8ZmQtaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJmZHAtdXBsb2FkLWNvbGxlY3Rpb25fX2ZkLWljb25cIlxuICAgICAgICAgICAgZ2x5cGg9XCJmb2xkZXItYmxhbmtcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubW92ZVRvQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICA+PC9mZC1pY29uPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubW92ZVRvQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZmRwLW1lbnUtaXRlbT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX2FjdGl2ZUl0ZW0/LnR5cGUgPT09ICdmaWxlJ1wiPlxuICAgICAgICA8ZmRwLW1lbnUtaXRlbSAoaXRlbVNlbGVjdCk9XCJfZG93bmxvYWRDbGlja2VkKClcIj5cbiAgICAgICAgICAgIDxmZC1pY29uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdXBsb2FkLWNvbGxlY3Rpb25fX2ZkLWljb25cIlxuICAgICAgICAgICAgICAgIGdseXBoPVwiZG93bmxvYWRcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLmRvd25sb2FkQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgPjwvZmQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24uZG93bmxvYWRCdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2ZkcC1tZW51LWl0ZW0+XG4gICAgICAgIDxmZHAtbWVudS1pdGVtIChpdGVtU2VsZWN0KT1cIl9vcGVuVXBkYXRlRmlsZVZlcnNpb24oKVwiPlxuICAgICAgICAgICAgPGZkLWljb25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9fZmQtaWNvblwiXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJkcmlsbC11cFwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24udXBkYXRlVmVyc2lvbkJ0bkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgID48L2ZkLWljb24+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLnVwZGF0ZVZlcnNpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2ZkcC1tZW51LWl0ZW0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGZkcC1tZW51LWl0ZW0gKGl0ZW1TZWxlY3QpPVwiX3JlbW92ZSgpXCI+XG4gICAgICAgIDxmZC1pY29uXG4gICAgICAgICAgICBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9fZmQtaWNvblwiXG4gICAgICAgICAgICBnbHlwaD1cImRlbGV0ZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5yZW1vdmVCdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgID48L2ZkLWljb24+XG4gICAgICAgIDxzcGFuPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5yZW1vdmVCdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9mZHAtbWVudS1pdGVtPlxuPC9mZHAtbWVudT5cblxuPGlucHV0XG4gICAgI2ZpbGVJbnB1dFxuICAgIGNsYXNzPVwiZmRwLXVwbG9hZC1jb2xsZWN0aW9uX19oaWRkZW5cIlxuICAgIHR5cGU9XCJmaWxlXCJcbiAgICAoZmlsZVNlbGVjdGVkKT1cIl9zZWxlY3RIYW5kbGVyKCRldmVudClcIlxuICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICBmZEZpbGVTZWxlY3Rcbi8+XG5cbjxpbnB1dFxuICAgICN1cGRhdGVWZXJzaW9uSW5wdXRcbiAgICBjbGFzcz1cImZkcC11cGxvYWQtY29sbGVjdGlvbl9faGlkZGVuXCJcbiAgICB0eXBlPVwiZmlsZVwiXG4gICAgKGZpbGVTZWxlY3RlZCk9XCJfc2VsZWN0SGFuZGxlcigkZXZlbnQpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgZmRGaWxlU2VsZWN0XG4vPlxuXG48bmctdGVtcGxhdGVcbiAgICBsZXQtbWVzc2FnZVR5cGU9XCJtZXNzYWdlVHlwZVwiXG4gICAgbGV0LXBheWxvYWQ9XCJwYXlsb2FkXCJcbiAgICBsZXQtbWVzc2FnZVN0cmlwVHlwZT1cIm1lc3NhZ2VTdHJpcFR5cGVcIlxuICAgIGxldC1jb3VudD1cImNvdW50XCJcbiAgICAjbWVzc2FnZVxuPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfbWVzc2FnZVwiIFtuZ1N3aXRjaF09XCJtZXNzYWdlVHlwZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiX21lc3NhZ2VUeXBlLkNSRUFURVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZXNzYWdlTmV3Rm9sZGVyXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgbWVzc2FnZVN0cmlwVHlwZTogX21lc3NhZ2UubWVzc2FnZVN0cmlwVHlwZSxcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBfbWVzc2FnZS5wYXlsb2FkXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJfbWVzc2FnZVR5cGUuVVBEQVRFX1ZFUlNJT05cIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibWVzc2FnZVVwZGF0ZVZlcnNpb25cIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBtZXNzYWdlU3RyaXBUeXBlOiBfbWVzc2FnZS5tZXNzYWdlU3RyaXBUeXBlLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IF9tZXNzYWdlLnBheWxvYWRcbiAgICAgICAgICAgIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIl9tZXNzYWdlVHlwZS5GSUxFX1JFTkFNRVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZXNzYWdlRmlsZVJlbmFtZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VTdHJpcFR5cGU6IF9tZXNzYWdlLm1lc3NhZ2VTdHJpcFR5cGUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogX21lc3NhZ2UucGF5bG9hZFxuICAgICAgICAgICAgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiX21lc3NhZ2VUeXBlLlJFTU9WRVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZXNzYWdlUmVtb3ZlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgcGF5bG9hZDogX21lc3NhZ2UucGF5bG9hZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlU3RyaXBUeXBlOiBfbWVzc2FnZS5tZXNzYWdlU3RyaXBUeXBlLFxuICAgICAgICAgICAgICAgIGNvdW50OiBfbWVzc2FnZS5jb3VudFxuICAgICAgICAgICAgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiX21lc3NhZ2VUeXBlLk1PVkVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibWVzc2FnZU1vdmVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBfbWVzc2FnZS5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VTdHJpcFR5cGU6IF9tZXNzYWdlLm1lc3NhZ2VTdHJpcFR5cGUsXG4gICAgICAgICAgICAgICAgY291bnQ6IF9tZXNzYWdlLmNvdW50XG4gICAgICAgICAgICB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJfbWVzc2FnZVR5cGUuVFlQRV9NSVNNQVRDSFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZXNzYWdlVHlwZU1pc21hdGNoXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgcGF5bG9hZDogX21lc3NhZ2UucGF5bG9hZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlU3RyaXBUeXBlOiBfbWVzc2FnZS5tZXNzYWdlU3RyaXBUeXBlLFxuICAgICAgICAgICAgICAgIGNvdW50OiBfbWVzc2FnZS5jb3VudFxuICAgICAgICAgICAgfVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiX21lc3NhZ2VUeXBlLkZJTEVfU0laRVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZXNzYWdlRmlsZVNpemVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBfbWVzc2FnZS5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VTdHJpcFR5cGU6IF9tZXNzYWdlLm1lc3NhZ2VTdHJpcFR5cGUsXG4gICAgICAgICAgICAgICAgY291bnQ6IF9tZXNzYWdlLmNvdW50XG4gICAgICAgICAgICB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCJfbWVzc2FnZVR5cGUuRklMRV9OQU1FX0xFTkdUSFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJtZXNzYWdlRmlsZW5hbWVMZW5ndGhcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBfbWVzc2FnZS5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VTdHJpcFR5cGU6IF9tZXNzYWdlLm1lc3NhZ2VTdHJpcFR5cGUsXG4gICAgICAgICAgICAgICAgY291bnQ6IF9tZXNzYWdlLmNvdW50XG4gICAgICAgICAgICB9XCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtZXNzYWdlTmV3Rm9sZGVyIGxldC1wYXlsb2FkPVwicGF5bG9hZFwiIGxldC1tZXNzYWdlU3RyaXBUeXBlPVwibWVzc2FnZVN0cmlwVHlwZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlU3RyaXBUeXBlID09PSAnZXJyb3InOyBlbHNlIGZvbGRlcnNDcmVhdGVkXCI+XG4gICAgICAgIHt7ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZUNyZWF0ZUZhaWxlZCcgfCBmZFRyYW5zbGF0ZSA6IHsgZm9sZGVyTmFtZTogcGF5bG9hZC5mb2xkZXIubmFtZSB9IH19XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNmb2xkZXJzQ3JlYXRlZD5cbiAgICAgICAge3sgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlQ3JlYXRlU3VjY2VzcycgfCBmZFRyYW5zbGF0ZSA6IHsgZm9sZGVyTmFtZTogcGF5bG9hZC5mb2xkZXIubmFtZSB9IH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWVzc2FnZVVwZGF0ZVZlcnNpb24gbGV0LXBheWxvYWQ9XCJwYXlsb2FkXCIgbGV0LW1lc3NhZ2VTdHJpcFR5cGU9XCJtZXNzYWdlU3RyaXBUeXBlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VTdHJpcFR5cGUgPT09ICdlcnJvcic7IGVsc2UgdmVyc2lvblVwZGF0ZWRcIj5cbiAgICAgICAge3sgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlVXBkYXRlVmVyc2lvbkZhaWxlZCcgfCBmZFRyYW5zbGF0ZSA6IHsgZm9sZGVyTmFtZTogcGF5bG9hZC5pdGVtLm5hbWUgfSB9fVxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjdmVyc2lvblVwZGF0ZWQ+XG4gICAgICAgIHt7ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZVVwZGF0ZVZlcnNpb25TdWNjZXNzJyB8IGZkVHJhbnNsYXRlIDogeyBmb2xkZXJOYW1lOiBwYXlsb2FkLml0ZW0ubmFtZSB9IH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWVzc2FnZUZpbGVSZW5hbWUgbGV0LXBheWxvYWQ9XCJwYXlsb2FkXCIgbGV0LW1lc3NhZ2VTdHJpcFR5cGU9XCJtZXNzYWdlU3RyaXBUeXBlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VTdHJpcFR5cGUgPT09ICdlcnJvcic7IGVsc2UgZmlsZVJlbmFtZWRcIj5cbiAgICAgICAge3tcbiAgICAgICAgICAgICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZUZpbGVSZW5hbWVGYWlsZWQnXG4gICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZnJvbTogcGF5bG9hZC5pdGVtLm5hbWUsIHRvOiBwYXlsb2FkLmZpbGVOYW1lIH1cbiAgICAgICAgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2ZpbGVSZW5hbWVkPlxuICAgICAgICB7e1xuICAgICAgICAgICAgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlRmlsZVJlbmFtZVN1Y2Nlc3MnXG4gICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZnJvbTogcGF5bG9hZC5pdGVtLm5hbWUsIHRvOiBwYXlsb2FkLmZpbGVOYW1lIH1cbiAgICAgICAgfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtZXNzYWdlUmVtb3ZlIGxldC1wYXlsb2FkPVwicGF5bG9hZFwiIGxldC1tZXNzYWdlU3RyaXBUeXBlPVwibWVzc2FnZVN0cmlwVHlwZVwiIGxldC1jb3VudD1cImNvdW50XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBheWxvYWQuaXRlbXMubGVuZ3RoID4gMSAmJiBjb3VudC5mb2xkZXIgJiYgY291bnQuZmlsZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZVN0cmlwVHlwZSA9PT0gJ2Vycm9yJzsgZWxzZSBmb2xkZXJzQW5kRmlsZXNSZW1vdmVkXCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZVJlbW92ZUZvbGRlcnNBbmRGaWxlc0ZhaWxlZCdcbiAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZm9sZGVyc0NvdW50OiBjb3VudC5mb2xkZXIsIGZpbGVzQ291bnQ6IGNvdW50LmZpbGUgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZm9sZGVyc0FuZEZpbGVzUmVtb3ZlZD5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlUmVtb3ZlRm9sZGVyc0FuZEZpbGVzU3VjY2VzcydcbiAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZm9sZGVyc0NvdW50OiBjb3VudC5mb2xkZXIsIGZpbGVzQ291bnQ6IGNvdW50LmZpbGUgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXlsb2FkLml0ZW1zLmxlbmd0aCA+IDEgJiYgY291bnQuZm9sZGVyICYmICFjb3VudC5maWxlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlU3RyaXBUeXBlID09PSAnZXJyb3InOyBlbHNlIGZvbGRlcnNSZW1vdmVkXCI+XG4gICAgICAgICAgICB7eyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VSZW1vdmVGb2xkZXJzRmFpbGVkJyB8IGZkVHJhbnNsYXRlIDogeyBmb2xkZXJzQ291bnQ6IGNvdW50LmZvbGRlciB9IH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2ZvbGRlcnNSZW1vdmVkPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlUmVtb3ZlRm9sZGVyc1N1Y2Nlc3MnIHwgZmRUcmFuc2xhdGUgOiB7IGZvbGRlcnNDb3VudDogY291bnQuZm9sZGVyIH0gfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXlsb2FkLml0ZW1zLmxlbmd0aCA+IDEgJiYgY291bnQuZmlsZSAmJiAhY291bnQuZm9sZGVyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlU3RyaXBUeXBlID09PSAnZXJyb3InOyBlbHNlIGZpbGVzUmVtb3ZlZFwiPlxuICAgICAgICAgICAge3sgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlUmVtb3ZlRmlsZXNGYWlsZWQnIHwgZmRUcmFuc2xhdGUgOiB7IGZpbGVzQ291bnQ6IGNvdW50LmZpbGUgfSB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNmaWxlc1JlbW92ZWQ+XG4gICAgICAgICAgICB7eyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VSZW1vdmVGaWxlc1N1Y2Nlc3MnIHwgZmRUcmFuc2xhdGUgOiB7IGZpbGVzQ291bnQ6IGNvdW50LmZpbGUgfSB9fVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBheWxvYWQuaXRlbXMubGVuZ3RoID09PSAxXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlU3RyaXBUeXBlID09PSAnZXJyb3InOyBlbHNlIG9uZUl0ZW1SZW1vdmVkXCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZVJlbW92ZUZpbGVPckZvbGRlckZhaWxlZCdcbiAgICAgICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgbmFtZTogcGF5bG9hZC5pdGVtc1swXS5uYW1lIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI29uZUl0ZW1SZW1vdmVkPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VSZW1vdmVGaWxlT3JGb2xkZXJTdWNjZXNzJ1xuICAgICAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyBuYW1lOiBwYXlsb2FkLml0ZW1zWzBdLm5hbWUgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWVzc2FnZU1vdmUgbGV0LXBheWxvYWQ9XCJwYXlsb2FkXCIgbGV0LW1lc3NhZ2VTdHJpcFR5cGU9XCJtZXNzYWdlU3RyaXBUeXBlXCIgbGV0LWNvdW50PVwiY291bnRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGF5bG9hZC5pdGVtcy5sZW5ndGggPiAxICYmIGNvdW50LmZvbGRlciAmJiBjb3VudC5maWxlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlU3RyaXBUeXBlID09PSAnZXJyb3InOyBlbHNlIGZpbGVzQW5kRm9sZGVyc01vdmVkVG9cIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgKHBheWxvYWQudG9cbiAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VNb3ZlRm9sZGVyc0FuZEZpbGVzRmFpbGVkJ1xuICAgICAgICAgICAgICAgICAgICA6ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZU1vdmVSb290Rm9sZGVyc0FuZEZpbGVzRmFpbGVkJ1xuICAgICAgICAgICAgICAgICkgfCBmZFRyYW5zbGF0ZSA6IHsgZm9sZGVyc0NvdW50OiBjb3VudC5mb2xkZXIsIGZpbGVzQ291bnQ6IGNvdW50LmZpbGUsIHRvOiBwYXlsb2FkLnRvPy5uYW1lIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbGVzQW5kRm9sZGVyc01vdmVkVG8+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIChwYXlsb2FkLnRvXG4gICAgICAgICAgICAgICAgICAgID8gJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlTW92ZUZvbGRlcnNBbmRGaWxlc1N1Y2Nlc3MnXG4gICAgICAgICAgICAgICAgICAgIDogJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlTW92ZVJvb3RGb2xkZXJzQW5kRmlsZXNTdWNjZXNzJ1xuICAgICAgICAgICAgICAgICkgfCBmZFRyYW5zbGF0ZSA6IHsgZm9sZGVyc0NvdW50OiBjb3VudC5mb2xkZXIsIGZpbGVzQ291bnQ6IGNvdW50LmZpbGUsIHRvOiBwYXlsb2FkLnRvPy5uYW1lIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGF5bG9hZC5pdGVtcy5sZW5ndGggPiAxICYmIGNvdW50LmZvbGRlciAmJiAhY291bnQuZmlsZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZVN0cmlwVHlwZSA9PT0gJ2Vycm9yJzsgZWxzZSBmb2xkZXJzTW92ZWRUb1wiPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAocGF5bG9hZC50b1xuICAgICAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZU1vdmVGb2xkZXJzRmFpbGVkJ1xuICAgICAgICAgICAgICAgICAgICA6ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZU1vdmVSb290Rm9sZGVyc0ZhaWxlZCdcbiAgICAgICAgICAgICAgICApIHwgZmRUcmFuc2xhdGUgOiB7IGZvbGRlcnNDb3VudDogY291bnQuZm9sZGVyLCB0bzogcGF5bG9hZC50bz8ubmFtZSB9XG4gICAgICAgICAgICB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNmb2xkZXJzTW92ZWRUbz5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgKHBheWxvYWQudG9cbiAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VNb3ZlRm9sZGVyc1N1Y2Nlc3MnXG4gICAgICAgICAgICAgICAgICAgIDogJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlTW92ZVJvb3RGb2xkZXJzU3VjY2VzcydcbiAgICAgICAgICAgICAgICApIHwgZmRUcmFuc2xhdGUgOiB7IGZvbGRlcnNDb3VudDogY291bnQuZm9sZGVyLCB0bzogcGF5bG9hZC50bz8ubmFtZSB9XG4gICAgICAgICAgICB9fVxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBheWxvYWQuaXRlbXMubGVuZ3RoID4gMSAmJiBjb3VudC5maWxlICYmICFjb3VudC5mb2xkZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VTdHJpcFR5cGUgPT09ICdlcnJvcic7IGVsc2UgZmlsZXNNb3ZlZFRvXCI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIChwYXlsb2FkLnRvXG4gICAgICAgICAgICAgICAgICAgID8gJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlTW92ZUZpbGVzRmFpbGVkJ1xuICAgICAgICAgICAgICAgICAgICA6ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZU1vdmVSb290RmlsZXNGYWlsZWQnXG4gICAgICAgICAgICAgICAgKSB8IGZkVHJhbnNsYXRlIDogeyBmaWxlc0NvdW50OiBjb3VudC5maWxlLCB0bzogcGF5bG9hZC50bz8ubmFtZSB9XG4gICAgICAgICAgICB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNmaWxlc01vdmVkVG8+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIChwYXlsb2FkLnRvXG4gICAgICAgICAgICAgICAgICAgID8gJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlTW92ZUZpbGVzU3VjY2VzcydcbiAgICAgICAgICAgICAgICAgICAgOiAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VNb3ZlUm9vdEZpbGVzU3VjY2VzcydcbiAgICAgICAgICAgICAgICApIHwgZmRUcmFuc2xhdGUgOiB7IGZpbGVzQ291bnQ6IGNvdW50LmZpbGUsIHRvOiBwYXlsb2FkLnRvPy5uYW1lIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGF5bG9hZC5pdGVtcy5sZW5ndGggPT09IDFcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VTdHJpcFR5cGUgPT09ICdlcnJvcic7IGVsc2Ugb25lSXRlbU1vdmVkVG9cIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgKHBheWxvYWQudG9cbiAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VNb3ZlRmlsZU9yRm9sZGVyRmFpbGVkJ1xuICAgICAgICAgICAgICAgICAgICA6ICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZU1vdmVSb290RmlsZU9yRm9sZGVyRmFpbGVkJ1xuICAgICAgICAgICAgICAgICkgfCBmZFRyYW5zbGF0ZSA6IHsgbmFtZTogcGF5bG9hZC5pdGVtc1swXS5uYW1lLCB0bzogcGF5bG9hZC50bz8ubmFtZSB9XG4gICAgICAgICAgICB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNvbmVJdGVtTW92ZWRUbz5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgKHBheWxvYWQudG9cbiAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VNb3ZlRmlsZU9yRm9sZGVyU3VjY2VzcydcbiAgICAgICAgICAgICAgICAgICAgOiAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VNb3ZlUm9vdEZpbGVPckZvbGRlclN1Y2Nlc3MnXG4gICAgICAgICAgICAgICAgKSB8IGZkVHJhbnNsYXRlIDogeyBuYW1lOiBwYXlsb2FkLml0ZW1zWzBdLm5hbWUsIHRvOiBwYXlsb2FkLnRvPy5uYW1lIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21lc3NhZ2VUeXBlTWlzbWF0Y2ggbGV0LXBheWxvYWQ9XCJwYXlsb2FkXCIgbGV0LW1lc3NhZ2VTdHJpcFR5cGU9XCJtZXNzYWdlU3RyaXBUeXBlXCIgbGV0LWNvdW50PVwiY291bnRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGF5bG9hZC5pdGVtcy5sZW5ndGggPiAxXCI+XG4gICAgICAgIHt7XG4gICAgICAgICAgICAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VGaWxlVHlwZU1pc21hdGNoUGx1cmFsJ1xuICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IGZpbGVzQ291bnQ6IHBheWxvYWQuaXRlbXMubGVuZ3RoLCBhbGxvd2VkVHlwZXM6IF9nZXRBbGxvd2VkVHlwZXMoKSB9XG4gICAgICAgIH19XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGF5bG9hZC5pdGVtcy5sZW5ndGggPT09IDFcIj5cbiAgICAgICAge3tcbiAgICAgICAgICAgICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZUZpbGVUeXBlTWlzbWF0Y2hTaW5ndWxhcidcbiAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyBmaWxlTmFtZTogcGF5bG9hZC5pdGVtc1swXS5uYW1lLCBhbGxvd2VkVHlwZXM6IF9nZXRBbGxvd2VkVHlwZXMoKSB9XG4gICAgICAgIH19XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21lc3NhZ2VGaWxlU2l6ZSBsZXQtcGF5bG9hZD1cInBheWxvYWRcIiBsZXQtbWVzc2FnZVN0cmlwVHlwZT1cIm1lc3NhZ2VTdHJpcFR5cGVcIiBsZXQtY291bnQ9XCJjb3VudFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXlsb2FkLml0ZW1zLmxlbmd0aCA+IDFcIj5cbiAgICAgICAge3tcbiAgICAgICAgICAgICdwbGF0Zm9ybVVwbG9hZENvbGxlY3Rpb24ubWVzc2FnZUZpbGVTaXplRXhjZWVkZWRQbHVyYWwnXG4gICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZmlsZXNDb3VudDogcGF5bG9hZC5pdGVtcy5sZW5ndGgsIG1heEZpbGVTaXplOiBtYXhGaWxlU2l6ZSB8fCAwIH1cbiAgICAgICAgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXlsb2FkLml0ZW1zLmxlbmd0aCA9PT0gMVwiPlxuICAgICAgICB7e1xuICAgICAgICAgICAgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlRmlsZVNpemVFeGNlZWRlZFNpbmd1bGFyJ1xuICAgICAgICAgICAgICAgIHwgZmRUcmFuc2xhdGUgOiB7IGZpbGVOYW1lOiBwYXlsb2FkLml0ZW1zWzBdLm5hbWUsIG1heEZpbGVTaXplOiBtYXhGaWxlU2l6ZSB8fCAwIH1cbiAgICAgICAgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWVzc2FnZUZpbGVuYW1lTGVuZ3RoIGxldC1wYXlsb2FkPVwicGF5bG9hZFwiIGxldC1tZXNzYWdlU3RyaXBUeXBlPVwibWVzc2FnZVN0cmlwVHlwZVwiIGxldC1jb3VudD1cImNvdW50XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBheWxvYWQuaXRlbXMubGVuZ3RoID4gMVwiPlxuICAgICAgICB7e1xuICAgICAgICAgICAgJ3BsYXRmb3JtVXBsb2FkQ29sbGVjdGlvbi5tZXNzYWdlRmlsZU5hbWVMZW5ndGhFeGNlZWRlZFBsdXJhbCdcbiAgICAgICAgICAgICAgICB8IGZkVHJhbnNsYXRlIDogeyBmaWxlc0NvdW50OiBwYXlsb2FkLml0ZW1zLmxlbmd0aCwgbWF4RmlsZW5hbWVMZW5ndGg6IG1heEZpbGVuYW1lTGVuZ3RoIHx8IDAgfVxuICAgICAgICB9fVxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBheWxvYWQuaXRlbXMubGVuZ3RoID09PSAxXCI+XG4gICAgICAgIHt7XG4gICAgICAgICAgICAncGxhdGZvcm1VcGxvYWRDb2xsZWN0aW9uLm1lc3NhZ2VGaWxlTmFtZUxlbmd0aEV4Y2VlZGVkU2luZ3VsYXInXG4gICAgICAgICAgICAgICAgfCBmZFRyYW5zbGF0ZSA6IHsgZmlsZU5hbWU6IHBheWxvYWQuaXRlbXNbMF0ubmFtZSwgbWF4RmlsZW5hbWVMZW5ndGg6IG1heEZpbGVuYW1lTGVuZ3RoIHx8IDAgfVxuICAgICAgICB9fVxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|