@eo-sdk/client 11.12.2 → 11.12.4

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.
@@ -528,7 +528,7 @@ let PrepareDetailsComponent = class PrepareDetailsComponent {
528
528
  }
529
529
  }
530
530
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PrepareDetailsComponent, deps: [{ token: i1.PrepareService }, { token: i2.Router }, { token: i3.PendingChangesService }, { token: i1.TranslateService }, { token: i1.NotificationsService }, { token: i1.SystemService }, { token: i4.SelectionService }, { token: i1.BackendService }, { token: i1.CapabilitiesService }], target: i0.ɵɵFactoryTarget.Component }); }
531
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: PrepareDetailsComponent, selector: "eo-prepare-details", inputs: { preparedItem: "preparedItem", emptyState: "emptyState", applySelection: "applySelection" }, outputs: { onItemChanged: "onItemChanged", onCommit: "onCommit", onItemRemove: "onItemRemove" }, host: { properties: { "attr.data-type": "this.dataType" } }, viewQueries: [{ propertyName: "file", first: true, predicate: ["file"], descendants: true }, { propertyName: "objectForm", first: true, predicate: ["form"], descendants: true }, { propertyName: "confirmDeleteButton", first: true, predicate: ["confirmDelete"], descendants: true }, { propertyName: "confirmContentDeleteButton", first: true, predicate: ["confirmContentDelete"], descendants: true }], ngImport: i0, template: "<div class=\"prepareDetails__wrapper\" *ngIf=\"!loading; else mainSpinner\">\n <section class=\"prepareDetails\" *ngIf=\"preparedItem && preparePhase; else noItem\"\n [ngClass]=\"{multifile: preparedItem.contentcount > 1, committing: committing}\">\n <div class=\"eo-head\">\n\n <div class=\"header-info\">\n <div class=\"header-title\">{{header.title}}</div>\n <div class=\"header-sub-title h-location\" *ngIf=\"!header.location.link; else linked\">{{header.location.label}}\n </div>\n <div class=\"header-sub-title h-subtitle\">{{header.subtitle}}</div>\n\n <ng-template #linked>\n <div class=\"header-sub-title h-subtitle-detailed\">\n <span translate>eo.prepare.location.title.prefix</span>\n <a [routerLink]=\"header.location.link\">{{header.location.label}}</a>\n </div>\n </ng-template>\n </div>\n\n <div class=\"actions\">\n <eo-icon class=\"btn btn-download\"\n *ngIf=\"preparePhase.name === 'content' ? selectedTemplateFile : preparePhase.data.previewFile\"\n [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" (click)=\"download()\"></eo-icon>\n <eo-icon class=\"btn btn-delete\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showDeleteDialog = true;\"></eo-icon>\n <!-- buttons while choosing a template -->\n <ng-container *ngIf=\"chooseTemplate\">\n <button class=\"btn-tpl-abort\" (click)=\"showTemplateSelector(false)\"\n translate>eo.cta.button.cancel</button>\n <button class=\"primary btn-tpl-apply\" (click)=\"addTemplate(selectedTemplate)\" [disabled]=\"!selectedTemplate\"\n translate>eo.prepare.template.select</button>\n </ng-container>\n\n <ng-container *ngIf=\"preparePhase.name === 'indexdata'\">\n <button (click)=\"resetObjectType()\" translate>eo.prepare.resetObject</button>\n <button (click)=\"commit()\" class=\"btn-idx-save\"\n [ngClass]=\"{primary: preparedItem.state.parentisroot && preparedItem.contentcount > 1}\"\n [disabled]=\"formState?.invalid || committing\" translate>eo.prepare.save</button>\n\n <button (click)=\"commit(true)\" [disabled]=\"formState?.invalid || committing\" class=\"primary btn-idx-saveopen\"\n [hidden]=\"preparedItem?.state.parentisroot && preparedItem?.contentcount > 1\"\n translate>eo.prepare.saveopen</button>\n\n </ng-container>\n </div>\n\n </div>\n\n <div class=\"eo-body\" [ngSwitch]=\"preparePhase.name\" *ngIf=\"!committing; else spinner\">\n\n <!-- PHASE TYPE -->\n <div class=\"phase type\" *ngSwitchCase=\"'type'\">\n\n <!-- with preview -->\n <yvc-split-view *ngIf=\"preparePhase.data.previewFile; else nopreview\"\n [layoutSettingsID]=\"'prepare.details.phase.type'\">\n <ng-template yvcSplitArea [size]=\"30\">\n <div class=\"form-files\">\n <div class=\"object-type-select empty\" *ngIf=\"preparedItem.types.length == 0\" translate>\n eo.prepare.details.type.empty</div>\n <div class=\"object-type-select empty\"\n *ngIf=\"!preparedItem.state.typeselectedallowed && preparedItem.state.typeselected\"\n [translateParams]=\"{type: preparedItem.selectedtype.label, filename: getFileNames(preparedItem)}\"\n translate>eo.prepare.details.type.notallowed</div>\n\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n\n\n <div class=\"content-select\">\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx;\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex == idx}\" (click)=\"setPreviewUri(idx)\">\n <span>{{content.path}}</span>\n <eo-icon class=\"btn btn-delete-content\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showContentDeleteDialog = true; deletedContentIndex = idx;\"></eo-icon>\n <div *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template yvcSplitArea [size]=\"70\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- without preview -->\n <ng-template #nopreview>\n <div class=\"form-files\">\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n </div>\n\n <!-- PHASE CONTENT -->\n <div class=\"phase content\" *ngSwitchCase=\"'content'\">\n\n <!-- panel for selecting a template to be used as items content -->\n <yvc-split-view *ngIf=\"chooseTemplate; else attach\" [layoutSettingsID]=\"'prepare.details.phase.content'\">\n <ng-template yvcSplitArea [size]=\"40\">\n <!-- list of available templates -->\n <eo-list-container #eoList [loading]=\"false\" class=\"templates\">\n <div class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_template.svg'\"></eo-icon>\n <div class=\"eo-header-info\">\n <div class=\"eo-header-title\" translate>eo.prepare.template.list.title</div>\n </div>\n <div class=\"eo-header-actions\">\n\n <eo-overlay #oFilter [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\" [iconClass]=\"'primary'\"\n class=\"overlay-filter\" [title]=\"'eo.list.filter' | translate\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGridSubject, $event)\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-text-filter [title]=\"'eo.prepare.template.filter.text.title' | translate\"\n [matchFields]=\"['title', 'description', 'tags']\"\n [placeholder]=\"'eo.prepare.template.filter.text.title'\"></eo-text-filter>\n <eo-set-filter [operator]=\"'OR'\" [title]=\"'eo.prepare.template.filter.set.title' | translate\"\n *ngIf=\"tagFilterOptions?.length\" [options]=\"tagFilterOptions\"></eo-set-filter>\n </eo-custom-filter>\n </eo-overlay>\n\n </div>\n </div>\n <div class=\"eo-body\">\n <eo-grid #eoGrid *ngIf=\"gridOptions?.rowData\" [gridOptions]=\"gridOptions\" [fullWidth]=\"true\"\n [showHeader]=\"true\" [showFooter]=\"false\" [selectionLimit]=\"1\"\n (eoGridSelectionChanged)=\"selectTemplate($event[0])\">\n </eo-grid>\n </div>\n </eo-list-container>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"60\">\n <!-- preview of selected template -->\n <eo-media [previewFile]=\"selectedTemplateFile\"></eo-media>\n </ng-template>\n </yvc-split-view>\n\n <!-- add content general overview (upload, template, none) -->\n <ng-template #attach>\n\n <div class=\"info\" *ngIf=\"!uploadInProgress\" translate>eo.prepare.attachment.info</div>\n <input type=\"file\" #file (change)=\"fileChangeListener($event.target.files)\">\n\n <div class=\"attachments\" *ngIf=\"!uploadInProgress; else uploadspinner\">\n\n <!-- upload a file -->\n <div class=\"attachment att-file\" *ngIf=\"preparePhase.data.file\" (click)=\"upload()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_file_upload.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.upload.title</h3>\n <p translate>eo.prepare.attachment.upload.desc</p>\n </div>\n\n <!-- select a template -->\n <div class=\"attachment att-tmpl\" *ngIf=\"preparePhase.data.templates.length > 0 && hasTemplateCapability()\"\n (click)=\"showTemplateSelector(true)\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_prepare_add.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.template.title</h3>\n <p translate>eo.prepare.attachment.template.desc</p>\n </div>\n\n <!-- no file -->\n <div class=\"attachment att-none\" *ngIf=\"preparePhase.data.withoutFile\" (click)=\"noFile()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.nofile.title</h3>\n <p translate>eo.prepare.attachment.nofile.desc</p>\n </div>\n\n </div>\n\n </ng-template>\n\n <!-- upload progress indicator -->\n <ng-template #uploadspinner>\n <div class=\"upload-indicator\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- PHASE INDEXDATA -->\n <div class=\"phase indexdata\" *ngSwitchCase=\"'indexdata'\">\n\n <!-- form and preview -->\n <yvc-split-view *ngIf=\"preparedItem.contents; else justform\" [layoutSettingsID]=\"'prepare.state'\">\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"form-files\">\n\n <!-- indexdata form -->\n <ng-container *ngTemplateOutlet=\"justform\"></ng-container>\n\n <!-- list of contents (in case of bulk upload) that can be previewed -->\n <div class=\"content-select\">\n\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex === idx}\" (click)=\"setPreviewUri(idx)\">\n {{content.path}} <span *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</span>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- just the form -->\n <ng-template #justform>\n <div class=\"form-container situation-create\" *ngIf=\"formOptions\">\n <eo-object-form #form [formOptions]=\"formOptions\" (statusChanged)=\"onFormStatusChanged($event)\">\n </eo-object-form>\n </div>\n </ng-template>\n </div>\n </div>\n </section>\n\n <ng-template #spinner>\n <div class=\"eo-body\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n </ng-template>\n\n</div>\n\n<ng-template #mainSpinner>\n <div class=\"prepareDetails__main-spinner\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n</ng-template>\n\n\n<ng-template #noItem>\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\n <ng-content select=\".error\"></ng-content>\n </eo-error-message>\n</ng-template>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.dialog.title' | translate\" [(visible)]=\"showDeleteDialog\"\n [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.dialog.message' | translate}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.cta.button.cancel</button>\n <button type=\"button\" #confirmDelete (click)=\"removeItem(preparedItem)\" class=\"button primary\"\n translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.content.dialog.title' | translate\" [(visible)]=\"showContentDeleteDialog\"\n [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.content.dialog.message' | translate: ({contentPath: preparedItem?.contents ?\n preparedItem?.contents[deletedContentIndex]?.path : ''})}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showContentDeleteDialog = false\"\n translate>eo.cta.button.cancel</button>\n <button type=\"button\" #confirmContentDelete (click)=\"removeItemContent(preparedItem, deletedContentIndex)\"\n class=\"button primary\" translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n", styles: [":host{height:100%;--split-gutter-background-color: var(--panel-background)}:host yvc-split-view{height:100%}:host .prepareDetails{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .prepareDetails .eo-media-wrap{height:100%;display:flex;flex-flow:column}:host .prepareDetails .eo-media-wrap eo-media{flex:1;position:relative}:host .prepareDetails__wrapper{height:100%}:host .prepareDetails__main-spinner{height:100%;display:flex;justify-content:center;align-items:center}:host .prepareDetails .content-select{display:none}:host .prepareDetails .eo-head{background-color:var(--color-white);display:flex;flex-flow:row nowrap}:host .prepareDetails .eo-head .header-info{font-size:var(--font-caption);color:var(--text-color-caption);flex:1 1 auto}:host .prepareDetails .eo-head .header-info .header-title{font-size:var(--font-title);color:var(--text-color-body);padding-bottom:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .header-info a{color:var(--color-accent);cursor:pointer;text-decoration:none}:host .prepareDetails .eo-head .actions{display:flex;align-items:center;align-self:flex-start}[dir=ltr] :host .prepareDetails .eo-head .actions button{margin-left:calc(var(--app-pane-padding) / 2)}[dir=rtl] :host .prepareDetails .eo-head .actions button{margin-right:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .actions eo-icon{padding:calc(var(--app-pane-padding) / 4);cursor:pointer}:host .prepareDetails .eo-body{overflow-y:hidden}:host .prepareDetails .phase{height:100%;overflow-y:auto}:host .prepareDetails .phase.content{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates{background:linear-gradient(to right,#fff 70%,var(--panel-background-lightgrey) 100%)}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates eo-grid ag-grid-angular.ag-theme-balham .chip:last-of-type:after{background:transparent!important}:host .prepareDetails .phase.content ::ng-deep yvc-split-view{width:100%;height:100%}:host .prepareDetails .phase.content input[type=file]{display:none}:host .prepareDetails .phase.content .info{flex:0 0 auto;color:var(--text-color-caption);margin-bottom:var(--app-pane-padding)}:host .prepareDetails .phase.content .attachments{flex:0 0 auto;display:flex;flex-flow:row}:host .prepareDetails .phase.content .attachments .attachment:hover .img eo-icon{opacity:1}:host .prepareDetails .phase.content .attachments .attachment{background:var(--color-white);cursor:pointer;margin:calc(var(--app-pane-padding) / 2);max-width:200px;border-bottom:1px solid rgba(var(--color-black-rgb),.1)}:host .prepareDetails .phase.content .attachments .attachment .img{display:flex;flex-flow:column;align-items:center;justify-content:center;padding:calc(var(--app-pane-padding) * 2) 0;background:var(--color-accent)}:host .prepareDetails .phase.content .attachments .attachment .img eo-icon{color:var(--color-white);width:48px;height:48px;opacity:.5;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.content .attachments .attachment h3{font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding);font-size:var(--font-subhead)}:host .prepareDetails .phase.content .attachments .attachment p{margin:0;padding:0 var(--app-pane-padding) var(--app-pane-padding) var(--app-pane-padding);color:var(--text-color-caption)}:host .prepareDetails .phase div[eosplitgutter]{background-color:var(--color-light-blue)!important}:host .prepareDetails .phase.type .form-files .object-type-select{flex:1 1 auto;overflow-y:auto;padding:var(--app-pane-padding)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type{display:flex;flex-flow:row nowrap;align-items:center;background:var(--color-white);padding:calc(var(--app-pane-padding) / 2);margin-bottom:1px;cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .type-icon{color:var(--text-color-hint)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content{padding-left:calc(var(--app-pane-padding) / 2);overflow:hidden}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .title{font-weight:var(--font-weight-bold);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .description{color:var(--text-color-caption);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase .form-container eo-object-form{display:block;margin:var(--app-pane-padding)}:host .prepareDetails.committing .eo-head .actions .btn,:host .prepareDetails.committing .eo-head .actions button{display:none}:host .prepareDetails.committing .eo-body{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails.multifile .form-files{height:100%;display:flex;flex-flow:column}:host .prepareDetails.multifile .form-files .form-container{flex:1 1 auto;overflow-y:auto}:host .prepareDetails.multifile .content-select{border-top:1px solid var(--main-background);overflow-y:auto;box-sizing:border-box;display:block;padding:calc(var(--app-pane-padding) / 2);flex:0 0 30%}:host .prepareDetails.multifile .content-select h2{margin:0;padding:calc(var(--app-pane-padding) / 2);padding-bottom:var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content{overflow:hidden;text-overflow:ellipsis;padding:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;background:var(--color-white);justify-content:space-between;gap:8px}:host .prepareDetails.multifile .content-select .content>span{text-overflow:ellipsis;overflow:hidden;flex:1}:host .prepareDetails.multifile .content-select .content .btn-delete-content{width:16px;flex:0 0 16px;height:16px;color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content .btn-delete-content:hover{background-color:var(--text-color-hint)}:host .prepareDetails.multifile .content-select .content div.attention{display:block;flex:0 0 auto;right:4px;top:8px;border-radius:2px;padding:0 4px;color:var(--color-warning);line-height:1em;border:1px solid var(--color-warning)}:host .prepareDetails.multifile .content-select .content.selected{color:var(--color-accent)}:host .prepareDetails.multifile .content-select .content:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row .ag-cell{border-bottom-color:var(--panel-header-border-bottom-color)}:host ::ng-deep eo-list-container .eo-head{height:48px}:host ::ng-deep eo-list-container .eo-head,:host ::ng-deep eo-list-container .eo-grid-header,:host ::ng-deep eo-list-container .eo-grid-footer{background:transparent;border-color:var(--panel-header-border-bottom-color)}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon{color:var(--text-color-hint)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon:hover{color:var(--text-color-caption)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon.active{color:var(--color-accent)!important}:host ::ng-deep .eo-header-title{color:var(--text-color-caption)}:host ::ng-deep .eo-header-icon{color:var(--text-color-caption)}:host ::ng-deep .template{margin-bottom:1px;cursor:pointer;color:var(--text-color-caption)}:host ::ng-deep .template .title{font-size:var(--font-body);font-weight:var(--font-weight-bold)}:host ::ng-deep .template .description{color:var(--text-color-caption)}:host ::ng-deep .template .chip{display:initial!important}::ng-deep .prepare-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .prepare-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:#fff!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i6.ObjectFormComponent, selector: "eo-object-form", inputs: ["isInnerTableForm", "formOptions"], outputs: ["statusChanged", "onFormReady"] }, { kind: "directive", type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i8.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", type: i9.RouterLinkDirective, selector: "a[routerLink]" }, { kind: "component", type: i10.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i11.OverlayComponent, selector: "eo-overlay", inputs: ["iconSrc", "badge", "iconClass", "active", "iconTitle", "userAvatar"], outputs: ["onToggle"] }, { kind: "component", type: i12.ErrorMessageComponent, selector: "eo-error-message", inputs: ["emptyState"] }, { kind: "component", type: i13.EoDialogComponent, selector: "eo-dialog", inputs: ["hasPreviewFile", "title", "subtitle", "styleClass", "dirtyCheck", "minWidth", "minHeight", "height", "width", "focusOnShow", "align", "isFormTable", "showPreview", "visible"], outputs: ["onTogglePreview", "visibleChange", "hide", "show"] }, { kind: "component", type: i14.MediaComponent, selector: "eo-media", inputs: ["undockDisabled", "enableCloseBtn", "useVersion", "attachments", "searchTerm", "previewUri", "previewFile", "dmsObject"], outputs: ["hasContentLoaded"] }, { kind: "component", type: i15.GridComponent, selector: "eo-grid", inputs: ["selectFirst", "selectionLimit", "sizeToFit", "fullWidth", "showHeader", "showFooter", "loaderContent", "options", "gridOptions"], outputs: ["eoGridCountChanged", "eoGridSelectionChanged", "eoGridFocusChanged", "eoGridCellClick", "eoGridDoubleClick", "eoGridContextMenuClick", "eoGridColumnResized"] }, { kind: "component", type: i16.CustomFilterComponent, selector: "eo-custom-filter", inputs: ["overlay", "eoGrid", "activeFilter", "isFilterActive", "filterForm"], outputs: ["change", "active", "onResetFilters"] }, { kind: "component", type: i17.TextFilterComponent, selector: "eo-text-filter", inputs: ["title", "placeholder", "enableSave", "filterParams", "matchFields"] }, { kind: "component", type: i18.SetFilterComponent, selector: "eo-set-filter", inputs: ["title", "searchLimit", "operator", "options", "filterParams"] }, { kind: "component", type: i19.ListContainerComponent, selector: "eo-list-container", inputs: ["applySelection", "applyVersion", "loading", "tabs", "parseDmsParams"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i20.SplitViewComponent, selector: "yvc-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "gutterDblClickDuration", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "directive", type: i20.SplitAreaDirective, selector: "[yvcSplitArea]", inputs: ["size", "order", "minSize", "maxSize", "panelClass", "visible"] }, { kind: "component", type: i21.PrepareContentExistsInfoComponent, selector: "eo-prepare-content-exists-info", inputs: ["content"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] }); }
531
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.0", type: PrepareDetailsComponent, selector: "eo-prepare-details", inputs: { preparedItem: "preparedItem", emptyState: "emptyState", applySelection: "applySelection" }, outputs: { onItemChanged: "onItemChanged", onCommit: "onCommit", onItemRemove: "onItemRemove" }, host: { properties: { "attr.data-type": "this.dataType" } }, viewQueries: [{ propertyName: "file", first: true, predicate: ["file"], descendants: true }, { propertyName: "objectForm", first: true, predicate: ["form"], descendants: true }, { propertyName: "confirmDeleteButton", first: true, predicate: ["confirmDelete"], descendants: true }, { propertyName: "confirmContentDeleteButton", first: true, predicate: ["confirmContentDelete"], descendants: true }], ngImport: i0, template: "<div class=\"prepareDetails__wrapper\" *ngIf=\"!loading; else mainSpinner\">\n <section class=\"prepareDetails\" *ngIf=\"preparedItem && preparePhase; else noItem\"\n [ngClass]=\"{multifile: preparedItem.contentcount > 1, committing: committing}\">\n <div class=\"eo-head\">\n\n <div class=\"header-info\">\n <div class=\"header-title\">{{header.title}}</div>\n <div class=\"header-sub-title h-location\" *ngIf=\"!header.location.link; else linked\">{{header.location.label}}\n </div>\n <div class=\"header-sub-title h-subtitle\">{{header.subtitle}}</div>\n\n <ng-template #linked>\n <div class=\"header-sub-title h-subtitle-detailed\">\n <span translate>eo.prepare.location.title.prefix</span>\n <a [routerLink]=\"header.location.link\">{{header.location.label}}</a>\n </div>\n </ng-template>\n </div>\n\n <div class=\"actions\">\n <eo-icon class=\"btn btn-download\"\n *ngIf=\"preparePhase.name === 'content' ? selectedTemplateFile : preparePhase.data.previewFile\"\n [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" (click)=\"download()\"></eo-icon>\n <eo-icon class=\"btn btn-delete\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showDeleteDialog = true;\"></eo-icon>\n <!-- buttons while choosing a template -->\n <ng-container *ngIf=\"chooseTemplate\">\n <button class=\"btn-tpl-abort\" (click)=\"showTemplateSelector(false)\"\n translate>eo.cta.button.cancel</button>\n <button class=\"primary btn-tpl-apply\" (click)=\"addTemplate(selectedTemplate)\" [disabled]=\"!selectedTemplate\"\n translate>eo.prepare.template.select</button>\n </ng-container>\n\n <ng-container *ngIf=\"preparePhase.name === 'indexdata'\">\n <button (click)=\"resetObjectType()\" translate>eo.prepare.resetObject</button>\n <button (click)=\"commit()\" class=\"btn-idx-save\"\n [ngClass]=\"{primary: preparedItem.state.parentisroot && preparedItem.contentcount > 1}\"\n [disabled]=\"formState?.invalid || committing\" translate>eo.prepare.save</button>\n\n <button (click)=\"commit(true)\" [disabled]=\"formState?.invalid || committing\" class=\"primary btn-idx-saveopen\"\n [hidden]=\"preparedItem?.state.parentisroot && preparedItem?.contentcount > 1\"\n translate>eo.prepare.saveopen</button>\n\n </ng-container>\n </div>\n\n </div>\n\n <div class=\"eo-body\" [ngSwitch]=\"preparePhase.name\" *ngIf=\"!committing; else spinner\">\n\n <!-- PHASE TYPE -->\n <div class=\"phase type\" *ngSwitchCase=\"'type'\">\n\n <!-- with preview -->\n <yvc-split-view *ngIf=\"preparePhase.data.previewFile; else nopreview\"\n [layoutSettingsID]=\"'prepare.details.phase.type'\">\n <ng-template yvcSplitArea [size]=\"30\">\n <div class=\"form-files\">\n <div class=\"object-type-select empty\" *ngIf=\"preparedItem.types.length == 0\" translate>\n eo.prepare.details.type.empty</div>\n <div class=\"object-type-select empty\"\n *ngIf=\"!preparedItem.state.typeselectedallowed && preparedItem.state.typeselected\"\n [translateParams]=\"{type: preparedItem.selectedtype.label, filename: getFileNames(preparedItem)}\"\n translate>eo.prepare.details.type.notallowed</div>\n\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n\n\n <div class=\"content-select\">\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx;\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex == idx}\" (click)=\"setPreviewUri(idx)\">\n <span>{{content.path}}</span>\n <eo-icon class=\"btn btn-delete-content\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showContentDeleteDialog = true; deletedContentIndex = idx;\"></eo-icon>\n <div *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template yvcSplitArea [size]=\"70\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- without preview -->\n <ng-template #nopreview>\n <div class=\"form-files\">\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n </div>\n\n <!-- PHASE CONTENT -->\n <div class=\"phase content\" *ngSwitchCase=\"'content'\">\n\n <!-- panel for selecting a template to be used as items content -->\n <yvc-split-view *ngIf=\"chooseTemplate; else attach\" [layoutSettingsID]=\"'prepare.details.phase.content'\">\n <ng-template yvcSplitArea [size]=\"40\">\n <!-- list of available templates -->\n <eo-list-container #eoList [loading]=\"false\" class=\"templates\">\n <div class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_template.svg'\"></eo-icon>\n <div class=\"eo-header-info\">\n <div class=\"eo-header-title\" translate>eo.prepare.template.list.title</div>\n </div>\n <div class=\"eo-header-actions\">\n\n <eo-overlay #oFilter [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\" [iconClass]=\"'primary'\"\n class=\"overlay-filter\" [title]=\"'eo.list.filter' | translate\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGridSubject, $event)\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-text-filter [title]=\"'eo.prepare.template.filter.text.title' | translate\"\n [matchFields]=\"['title', 'description', 'tags']\"\n [placeholder]=\"'eo.prepare.template.filter.text.title'\"></eo-text-filter>\n <eo-set-filter [operator]=\"'OR'\" [title]=\"'eo.prepare.template.filter.set.title' | translate\"\n *ngIf=\"tagFilterOptions?.length\" [options]=\"tagFilterOptions\"></eo-set-filter>\n </eo-custom-filter>\n </eo-overlay>\n\n </div>\n </div>\n <div class=\"eo-body\">\n <eo-grid #eoGrid *ngIf=\"gridOptions?.rowData\" [gridOptions]=\"gridOptions\" [fullWidth]=\"true\"\n [showHeader]=\"true\" [showFooter]=\"false\" [selectionLimit]=\"1\"\n (eoGridSelectionChanged)=\"selectTemplate($event[0])\">\n </eo-grid>\n </div>\n </eo-list-container>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"60\">\n <!-- preview of selected template -->\n <eo-media [previewFile]=\"selectedTemplateFile\"></eo-media>\n </ng-template>\n </yvc-split-view>\n\n <!-- add content general overview (upload, template, none) -->\n <ng-template #attach>\n\n <div class=\"info\" *ngIf=\"!uploadInProgress\" translate>eo.prepare.attachment.info</div>\n <input type=\"file\" #file (change)=\"fileChangeListener($event.target.files)\">\n\n <div class=\"attachments\" *ngIf=\"!uploadInProgress; else uploadspinner\">\n\n <!-- upload a file -->\n <div class=\"attachment att-file\" *ngIf=\"preparePhase.data.file\" (click)=\"upload()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_file_upload.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.upload.title</h3>\n <p translate>eo.prepare.attachment.upload.desc</p>\n </div>\n\n <!-- select a template -->\n <div class=\"attachment att-tmpl\" *ngIf=\"preparePhase.data.templates.length > 0 && hasTemplateCapability()\"\n (click)=\"showTemplateSelector(true)\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_prepare_add.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.template.title</h3>\n <p translate>eo.prepare.attachment.template.desc</p>\n </div>\n\n <!-- no file -->\n <div class=\"attachment att-none\" *ngIf=\"preparePhase.data.withoutFile\" (click)=\"noFile()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.nofile.title</h3>\n <p translate>eo.prepare.attachment.nofile.desc</p>\n </div>\n\n </div>\n\n </ng-template>\n\n <!-- upload progress indicator -->\n <ng-template #uploadspinner>\n <div class=\"upload-indicator\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- PHASE INDEXDATA -->\n <div class=\"phase indexdata\" *ngSwitchCase=\"'indexdata'\">\n\n <!-- form and preview -->\n <yvc-split-view *ngIf=\"preparedItem.contents; else justform\" [layoutSettingsID]=\"'prepare.state.details'\">\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"form-files\">\n\n <!-- indexdata form -->\n <ng-container *ngTemplateOutlet=\"justform\"></ng-container>\n\n <!-- list of contents (in case of bulk upload) that can be previewed -->\n <div class=\"content-select\">\n\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex === idx}\" (click)=\"setPreviewUri(idx)\">\n {{content.path}} <span *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</span>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- just the form -->\n <ng-template #justform>\n <div class=\"form-container situation-create\" *ngIf=\"formOptions\">\n <eo-object-form #form [formOptions]=\"formOptions\" (statusChanged)=\"onFormStatusChanged($event)\">\n </eo-object-form>\n </div>\n </ng-template>\n </div>\n </div>\n </section>\n\n <ng-template #spinner>\n <div class=\"eo-body\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n </ng-template>\n\n</div>\n\n<ng-template #mainSpinner>\n <div class=\"prepareDetails__main-spinner\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n</ng-template>\n\n\n<ng-template #noItem>\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\n <ng-content select=\".error\"></ng-content>\n </eo-error-message>\n</ng-template>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.dialog.title' | translate\" [(visible)]=\"showDeleteDialog\"\n [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.dialog.message' | translate}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.cta.button.cancel</button>\n <button type=\"button\" #confirmDelete (click)=\"removeItem(preparedItem)\" class=\"button primary\"\n translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.content.dialog.title' | translate\" [(visible)]=\"showContentDeleteDialog\"\n [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.content.dialog.message' | translate: ({contentPath: preparedItem?.contents ?\n preparedItem?.contents[deletedContentIndex]?.path : ''})}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showContentDeleteDialog = false\"\n translate>eo.cta.button.cancel</button>\n <button type=\"button\" #confirmContentDelete (click)=\"removeItemContent(preparedItem, deletedContentIndex)\"\n class=\"button primary\" translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n", styles: [":host{height:100%;--split-gutter-background-color: var(--panel-background)}:host yvc-split-view{height:100%}:host .prepareDetails{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .prepareDetails .eo-media-wrap{height:100%;display:flex;flex-flow:column}:host .prepareDetails .eo-media-wrap eo-media{flex:1;position:relative}:host .prepareDetails__wrapper{height:100%}:host .prepareDetails__main-spinner{height:100%;display:flex;justify-content:center;align-items:center}:host .prepareDetails .content-select{display:none}:host .prepareDetails .eo-head{background-color:var(--color-white);display:flex;flex-flow:row nowrap}:host .prepareDetails .eo-head .header-info{font-size:var(--font-caption);color:var(--text-color-caption);flex:1 1 auto}:host .prepareDetails .eo-head .header-info .header-title{font-size:var(--font-title);color:var(--text-color-body);padding-bottom:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .header-info a{color:var(--color-accent);cursor:pointer;text-decoration:none}:host .prepareDetails .eo-head .actions{display:flex;align-items:center;align-self:flex-start}[dir=ltr] :host .prepareDetails .eo-head .actions button{margin-left:calc(var(--app-pane-padding) / 2)}[dir=rtl] :host .prepareDetails .eo-head .actions button{margin-right:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .actions eo-icon{padding:calc(var(--app-pane-padding) / 4);cursor:pointer}:host .prepareDetails .eo-body{overflow-y:hidden}:host .prepareDetails .phase{height:100%;overflow-y:auto}:host .prepareDetails .phase.content{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates{background:linear-gradient(to right,#fff 70%,var(--panel-background-lightgrey) 100%)}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates eo-grid ag-grid-angular.ag-theme-balham .chip:last-of-type:after{background:transparent!important}:host .prepareDetails .phase.content ::ng-deep yvc-split-view{width:100%;height:100%}:host .prepareDetails .phase.content input[type=file]{display:none}:host .prepareDetails .phase.content .info{flex:0 0 auto;color:var(--text-color-caption);margin-bottom:var(--app-pane-padding)}:host .prepareDetails .phase.content .attachments{flex:0 0 auto;display:flex;flex-flow:row}:host .prepareDetails .phase.content .attachments .attachment:hover .img eo-icon{opacity:1}:host .prepareDetails .phase.content .attachments .attachment{background:var(--color-white);cursor:pointer;margin:calc(var(--app-pane-padding) / 2);max-width:200px;border-bottom:1px solid rgba(var(--color-black-rgb),.1)}:host .prepareDetails .phase.content .attachments .attachment .img{display:flex;flex-flow:column;align-items:center;justify-content:center;padding:calc(var(--app-pane-padding) * 2) 0;background:var(--color-accent)}:host .prepareDetails .phase.content .attachments .attachment .img eo-icon{color:var(--color-white);width:48px;height:48px;opacity:.5;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.content .attachments .attachment h3{font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding);font-size:var(--font-subhead)}:host .prepareDetails .phase.content .attachments .attachment p{margin:0;padding:0 var(--app-pane-padding) var(--app-pane-padding) var(--app-pane-padding);color:var(--text-color-caption)}:host .prepareDetails .phase div[eosplitgutter]{background-color:var(--color-light-blue)!important}:host .prepareDetails .phase.type .form-files .object-type-select{flex:1 1 auto;overflow-y:auto;padding:var(--app-pane-padding)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type{display:flex;flex-flow:row nowrap;align-items:center;background:var(--color-white);padding:calc(var(--app-pane-padding) / 2);margin-bottom:1px;cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .type-icon{color:var(--text-color-hint)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content{padding-left:calc(var(--app-pane-padding) / 2);overflow:hidden}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .title{font-weight:var(--font-weight-bold);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .description{color:var(--text-color-caption);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase .form-container eo-object-form{display:block;margin:var(--app-pane-padding)}:host .prepareDetails.committing .eo-head .actions .btn,:host .prepareDetails.committing .eo-head .actions button{display:none}:host .prepareDetails.committing .eo-body{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails.multifile .form-files{height:100%;display:flex;flex-flow:column}:host .prepareDetails.multifile .form-files .form-container{flex:1 1 auto;overflow-y:auto}:host .prepareDetails.multifile .content-select{border-top:1px solid var(--main-background);overflow-y:auto;box-sizing:border-box;display:block;padding:calc(var(--app-pane-padding) / 2);flex:0 0 30%}:host .prepareDetails.multifile .content-select h2{margin:0;padding:calc(var(--app-pane-padding) / 2);padding-bottom:var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content{overflow:hidden;text-overflow:ellipsis;padding:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;background:var(--color-white);justify-content:space-between;gap:8px}:host .prepareDetails.multifile .content-select .content>span{text-overflow:ellipsis;overflow:hidden;flex:1}:host .prepareDetails.multifile .content-select .content .btn-delete-content{width:16px;flex:0 0 16px;height:16px;color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content .btn-delete-content:hover{background-color:var(--text-color-hint)}:host .prepareDetails.multifile .content-select .content div.attention{display:block;flex:0 0 auto;right:4px;top:8px;border-radius:2px;padding:0 4px;color:var(--color-warning);line-height:1em;border:1px solid var(--color-warning)}:host .prepareDetails.multifile .content-select .content.selected{color:var(--color-accent)}:host .prepareDetails.multifile .content-select .content:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row .ag-cell{border-bottom-color:var(--panel-header-border-bottom-color)}:host ::ng-deep eo-list-container .eo-head{height:48px}:host ::ng-deep eo-list-container .eo-head,:host ::ng-deep eo-list-container .eo-grid-header,:host ::ng-deep eo-list-container .eo-grid-footer{background:transparent;border-color:var(--panel-header-border-bottom-color)}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon{color:var(--text-color-hint)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon:hover{color:var(--text-color-caption)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon.active{color:var(--color-accent)!important}:host ::ng-deep .eo-header-title{color:var(--text-color-caption)}:host ::ng-deep .eo-header-icon{color:var(--text-color-caption)}:host ::ng-deep .template{margin-bottom:1px;cursor:pointer;color:var(--text-color-caption)}:host ::ng-deep .template .title{font-size:var(--font-body);font-weight:var(--font-weight-bold)}:host ::ng-deep .template .description{color:var(--text-color-caption)}:host ::ng-deep .template .chip{display:initial!important}::ng-deep .prepare-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .prepare-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:#fff!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i6.ObjectFormComponent, selector: "eo-object-form", inputs: ["isInnerTableForm", "formOptions"], outputs: ["statusChanged", "onFormReady"] }, { kind: "directive", type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i8.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", type: i9.RouterLinkDirective, selector: "a[routerLink]" }, { kind: "component", type: i10.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "component", type: i11.OverlayComponent, selector: "eo-overlay", inputs: ["iconSrc", "badge", "iconClass", "active", "iconTitle", "userAvatar"], outputs: ["onToggle"] }, { kind: "component", type: i12.ErrorMessageComponent, selector: "eo-error-message", inputs: ["emptyState"] }, { kind: "component", type: i13.EoDialogComponent, selector: "eo-dialog", inputs: ["hasPreviewFile", "title", "subtitle", "styleClass", "dirtyCheck", "minWidth", "minHeight", "height", "width", "focusOnShow", "align", "isFormTable", "showPreview", "visible"], outputs: ["onTogglePreview", "visibleChange", "hide", "show"] }, { kind: "component", type: i14.MediaComponent, selector: "eo-media", inputs: ["undockDisabled", "enableCloseBtn", "useVersion", "attachments", "searchTerm", "previewUri", "previewFile", "dmsObject"], outputs: ["hasContentLoaded"] }, { kind: "component", type: i15.GridComponent, selector: "eo-grid", inputs: ["selectFirst", "selectionLimit", "sizeToFit", "fullWidth", "showHeader", "showFooter", "loaderContent", "options", "gridOptions"], outputs: ["eoGridCountChanged", "eoGridSelectionChanged", "eoGridFocusChanged", "eoGridCellClick", "eoGridDoubleClick", "eoGridContextMenuClick", "eoGridColumnResized"] }, { kind: "component", type: i16.CustomFilterComponent, selector: "eo-custom-filter", inputs: ["overlay", "eoGrid", "activeFilter", "isFilterActive", "filterForm"], outputs: ["change", "active", "onResetFilters"] }, { kind: "component", type: i17.TextFilterComponent, selector: "eo-text-filter", inputs: ["title", "placeholder", "enableSave", "filterParams", "matchFields"] }, { kind: "component", type: i18.SetFilterComponent, selector: "eo-set-filter", inputs: ["title", "searchLimit", "operator", "options", "filterParams"] }, { kind: "component", type: i19.ListContainerComponent, selector: "eo-list-container", inputs: ["applySelection", "applyVersion", "loading", "tabs", "parseDmsParams"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i20.SplitViewComponent, selector: "yvc-split-view", inputs: ["direction", "gutterSize", "restrictMove", "disabled", "gutterDblClickDuration", "layoutSettingsID"], outputs: ["layoutSettingsChange", "dragStart", "dragEnd", "gutterClick", "gutterDblClick"] }, { kind: "directive", type: i20.SplitAreaDirective, selector: "[yvcSplitArea]", inputs: ["size", "order", "minSize", "maxSize", "panelClass", "visible"] }, { kind: "component", type: i21.PrepareContentExistsInfoComponent, selector: "eo-prepare-content-exists-info", inputs: ["content"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] }); }
532
532
  };
533
533
  PrepareDetailsComponent = __decorate([
534
534
  UntilDestroy()
@@ -536,7 +536,7 @@ PrepareDetailsComponent = __decorate([
536
536
  export { PrepareDetailsComponent };
537
537
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: PrepareDetailsComponent, decorators: [{
538
538
  type: Component,
539
- args: [{ selector: 'eo-prepare-details', template: "<div class=\"prepareDetails__wrapper\" *ngIf=\"!loading; else mainSpinner\">\n <section class=\"prepareDetails\" *ngIf=\"preparedItem && preparePhase; else noItem\"\n [ngClass]=\"{multifile: preparedItem.contentcount > 1, committing: committing}\">\n <div class=\"eo-head\">\n\n <div class=\"header-info\">\n <div class=\"header-title\">{{header.title}}</div>\n <div class=\"header-sub-title h-location\" *ngIf=\"!header.location.link; else linked\">{{header.location.label}}\n </div>\n <div class=\"header-sub-title h-subtitle\">{{header.subtitle}}</div>\n\n <ng-template #linked>\n <div class=\"header-sub-title h-subtitle-detailed\">\n <span translate>eo.prepare.location.title.prefix</span>\n <a [routerLink]=\"header.location.link\">{{header.location.label}}</a>\n </div>\n </ng-template>\n </div>\n\n <div class=\"actions\">\n <eo-icon class=\"btn btn-download\"\n *ngIf=\"preparePhase.name === 'content' ? selectedTemplateFile : preparePhase.data.previewFile\"\n [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" (click)=\"download()\"></eo-icon>\n <eo-icon class=\"btn btn-delete\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showDeleteDialog = true;\"></eo-icon>\n <!-- buttons while choosing a template -->\n <ng-container *ngIf=\"chooseTemplate\">\n <button class=\"btn-tpl-abort\" (click)=\"showTemplateSelector(false)\"\n translate>eo.cta.button.cancel</button>\n <button class=\"primary btn-tpl-apply\" (click)=\"addTemplate(selectedTemplate)\" [disabled]=\"!selectedTemplate\"\n translate>eo.prepare.template.select</button>\n </ng-container>\n\n <ng-container *ngIf=\"preparePhase.name === 'indexdata'\">\n <button (click)=\"resetObjectType()\" translate>eo.prepare.resetObject</button>\n <button (click)=\"commit()\" class=\"btn-idx-save\"\n [ngClass]=\"{primary: preparedItem.state.parentisroot && preparedItem.contentcount > 1}\"\n [disabled]=\"formState?.invalid || committing\" translate>eo.prepare.save</button>\n\n <button (click)=\"commit(true)\" [disabled]=\"formState?.invalid || committing\" class=\"primary btn-idx-saveopen\"\n [hidden]=\"preparedItem?.state.parentisroot && preparedItem?.contentcount > 1\"\n translate>eo.prepare.saveopen</button>\n\n </ng-container>\n </div>\n\n </div>\n\n <div class=\"eo-body\" [ngSwitch]=\"preparePhase.name\" *ngIf=\"!committing; else spinner\">\n\n <!-- PHASE TYPE -->\n <div class=\"phase type\" *ngSwitchCase=\"'type'\">\n\n <!-- with preview -->\n <yvc-split-view *ngIf=\"preparePhase.data.previewFile; else nopreview\"\n [layoutSettingsID]=\"'prepare.details.phase.type'\">\n <ng-template yvcSplitArea [size]=\"30\">\n <div class=\"form-files\">\n <div class=\"object-type-select empty\" *ngIf=\"preparedItem.types.length == 0\" translate>\n eo.prepare.details.type.empty</div>\n <div class=\"object-type-select empty\"\n *ngIf=\"!preparedItem.state.typeselectedallowed && preparedItem.state.typeselected\"\n [translateParams]=\"{type: preparedItem.selectedtype.label, filename: getFileNames(preparedItem)}\"\n translate>eo.prepare.details.type.notallowed</div>\n\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n\n\n <div class=\"content-select\">\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx;\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex == idx}\" (click)=\"setPreviewUri(idx)\">\n <span>{{content.path}}</span>\n <eo-icon class=\"btn btn-delete-content\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showContentDeleteDialog = true; deletedContentIndex = idx;\"></eo-icon>\n <div *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template yvcSplitArea [size]=\"70\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- without preview -->\n <ng-template #nopreview>\n <div class=\"form-files\">\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n </div>\n\n <!-- PHASE CONTENT -->\n <div class=\"phase content\" *ngSwitchCase=\"'content'\">\n\n <!-- panel for selecting a template to be used as items content -->\n <yvc-split-view *ngIf=\"chooseTemplate; else attach\" [layoutSettingsID]=\"'prepare.details.phase.content'\">\n <ng-template yvcSplitArea [size]=\"40\">\n <!-- list of available templates -->\n <eo-list-container #eoList [loading]=\"false\" class=\"templates\">\n <div class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_template.svg'\"></eo-icon>\n <div class=\"eo-header-info\">\n <div class=\"eo-header-title\" translate>eo.prepare.template.list.title</div>\n </div>\n <div class=\"eo-header-actions\">\n\n <eo-overlay #oFilter [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\" [iconClass]=\"'primary'\"\n class=\"overlay-filter\" [title]=\"'eo.list.filter' | translate\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGridSubject, $event)\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-text-filter [title]=\"'eo.prepare.template.filter.text.title' | translate\"\n [matchFields]=\"['title', 'description', 'tags']\"\n [placeholder]=\"'eo.prepare.template.filter.text.title'\"></eo-text-filter>\n <eo-set-filter [operator]=\"'OR'\" [title]=\"'eo.prepare.template.filter.set.title' | translate\"\n *ngIf=\"tagFilterOptions?.length\" [options]=\"tagFilterOptions\"></eo-set-filter>\n </eo-custom-filter>\n </eo-overlay>\n\n </div>\n </div>\n <div class=\"eo-body\">\n <eo-grid #eoGrid *ngIf=\"gridOptions?.rowData\" [gridOptions]=\"gridOptions\" [fullWidth]=\"true\"\n [showHeader]=\"true\" [showFooter]=\"false\" [selectionLimit]=\"1\"\n (eoGridSelectionChanged)=\"selectTemplate($event[0])\">\n </eo-grid>\n </div>\n </eo-list-container>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"60\">\n <!-- preview of selected template -->\n <eo-media [previewFile]=\"selectedTemplateFile\"></eo-media>\n </ng-template>\n </yvc-split-view>\n\n <!-- add content general overview (upload, template, none) -->\n <ng-template #attach>\n\n <div class=\"info\" *ngIf=\"!uploadInProgress\" translate>eo.prepare.attachment.info</div>\n <input type=\"file\" #file (change)=\"fileChangeListener($event.target.files)\">\n\n <div class=\"attachments\" *ngIf=\"!uploadInProgress; else uploadspinner\">\n\n <!-- upload a file -->\n <div class=\"attachment att-file\" *ngIf=\"preparePhase.data.file\" (click)=\"upload()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_file_upload.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.upload.title</h3>\n <p translate>eo.prepare.attachment.upload.desc</p>\n </div>\n\n <!-- select a template -->\n <div class=\"attachment att-tmpl\" *ngIf=\"preparePhase.data.templates.length > 0 && hasTemplateCapability()\"\n (click)=\"showTemplateSelector(true)\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_prepare_add.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.template.title</h3>\n <p translate>eo.prepare.attachment.template.desc</p>\n </div>\n\n <!-- no file -->\n <div class=\"attachment att-none\" *ngIf=\"preparePhase.data.withoutFile\" (click)=\"noFile()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.nofile.title</h3>\n <p translate>eo.prepare.attachment.nofile.desc</p>\n </div>\n\n </div>\n\n </ng-template>\n\n <!-- upload progress indicator -->\n <ng-template #uploadspinner>\n <div class=\"upload-indicator\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- PHASE INDEXDATA -->\n <div class=\"phase indexdata\" *ngSwitchCase=\"'indexdata'\">\n\n <!-- form and preview -->\n <yvc-split-view *ngIf=\"preparedItem.contents; else justform\" [layoutSettingsID]=\"'prepare.state'\">\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"form-files\">\n\n <!-- indexdata form -->\n <ng-container *ngTemplateOutlet=\"justform\"></ng-container>\n\n <!-- list of contents (in case of bulk upload) that can be previewed -->\n <div class=\"content-select\">\n\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex === idx}\" (click)=\"setPreviewUri(idx)\">\n {{content.path}} <span *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</span>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- just the form -->\n <ng-template #justform>\n <div class=\"form-container situation-create\" *ngIf=\"formOptions\">\n <eo-object-form #form [formOptions]=\"formOptions\" (statusChanged)=\"onFormStatusChanged($event)\">\n </eo-object-form>\n </div>\n </ng-template>\n </div>\n </div>\n </section>\n\n <ng-template #spinner>\n <div class=\"eo-body\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n </ng-template>\n\n</div>\n\n<ng-template #mainSpinner>\n <div class=\"prepareDetails__main-spinner\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n</ng-template>\n\n\n<ng-template #noItem>\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\n <ng-content select=\".error\"></ng-content>\n </eo-error-message>\n</ng-template>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.dialog.title' | translate\" [(visible)]=\"showDeleteDialog\"\n [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.dialog.message' | translate}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.cta.button.cancel</button>\n <button type=\"button\" #confirmDelete (click)=\"removeItem(preparedItem)\" class=\"button primary\"\n translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.content.dialog.title' | translate\" [(visible)]=\"showContentDeleteDialog\"\n [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.content.dialog.message' | translate: ({contentPath: preparedItem?.contents ?\n preparedItem?.contents[deletedContentIndex]?.path : ''})}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showContentDeleteDialog = false\"\n translate>eo.cta.button.cancel</button>\n <button type=\"button\" #confirmContentDelete (click)=\"removeItemContent(preparedItem, deletedContentIndex)\"\n class=\"button primary\" translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n", styles: [":host{height:100%;--split-gutter-background-color: var(--panel-background)}:host yvc-split-view{height:100%}:host .prepareDetails{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .prepareDetails .eo-media-wrap{height:100%;display:flex;flex-flow:column}:host .prepareDetails .eo-media-wrap eo-media{flex:1;position:relative}:host .prepareDetails__wrapper{height:100%}:host .prepareDetails__main-spinner{height:100%;display:flex;justify-content:center;align-items:center}:host .prepareDetails .content-select{display:none}:host .prepareDetails .eo-head{background-color:var(--color-white);display:flex;flex-flow:row nowrap}:host .prepareDetails .eo-head .header-info{font-size:var(--font-caption);color:var(--text-color-caption);flex:1 1 auto}:host .prepareDetails .eo-head .header-info .header-title{font-size:var(--font-title);color:var(--text-color-body);padding-bottom:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .header-info a{color:var(--color-accent);cursor:pointer;text-decoration:none}:host .prepareDetails .eo-head .actions{display:flex;align-items:center;align-self:flex-start}[dir=ltr] :host .prepareDetails .eo-head .actions button{margin-left:calc(var(--app-pane-padding) / 2)}[dir=rtl] :host .prepareDetails .eo-head .actions button{margin-right:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .actions eo-icon{padding:calc(var(--app-pane-padding) / 4);cursor:pointer}:host .prepareDetails .eo-body{overflow-y:hidden}:host .prepareDetails .phase{height:100%;overflow-y:auto}:host .prepareDetails .phase.content{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates{background:linear-gradient(to right,#fff 70%,var(--panel-background-lightgrey) 100%)}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates eo-grid ag-grid-angular.ag-theme-balham .chip:last-of-type:after{background:transparent!important}:host .prepareDetails .phase.content ::ng-deep yvc-split-view{width:100%;height:100%}:host .prepareDetails .phase.content input[type=file]{display:none}:host .prepareDetails .phase.content .info{flex:0 0 auto;color:var(--text-color-caption);margin-bottom:var(--app-pane-padding)}:host .prepareDetails .phase.content .attachments{flex:0 0 auto;display:flex;flex-flow:row}:host .prepareDetails .phase.content .attachments .attachment:hover .img eo-icon{opacity:1}:host .prepareDetails .phase.content .attachments .attachment{background:var(--color-white);cursor:pointer;margin:calc(var(--app-pane-padding) / 2);max-width:200px;border-bottom:1px solid rgba(var(--color-black-rgb),.1)}:host .prepareDetails .phase.content .attachments .attachment .img{display:flex;flex-flow:column;align-items:center;justify-content:center;padding:calc(var(--app-pane-padding) * 2) 0;background:var(--color-accent)}:host .prepareDetails .phase.content .attachments .attachment .img eo-icon{color:var(--color-white);width:48px;height:48px;opacity:.5;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.content .attachments .attachment h3{font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding);font-size:var(--font-subhead)}:host .prepareDetails .phase.content .attachments .attachment p{margin:0;padding:0 var(--app-pane-padding) var(--app-pane-padding) var(--app-pane-padding);color:var(--text-color-caption)}:host .prepareDetails .phase div[eosplitgutter]{background-color:var(--color-light-blue)!important}:host .prepareDetails .phase.type .form-files .object-type-select{flex:1 1 auto;overflow-y:auto;padding:var(--app-pane-padding)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type{display:flex;flex-flow:row nowrap;align-items:center;background:var(--color-white);padding:calc(var(--app-pane-padding) / 2);margin-bottom:1px;cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .type-icon{color:var(--text-color-hint)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content{padding-left:calc(var(--app-pane-padding) / 2);overflow:hidden}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .title{font-weight:var(--font-weight-bold);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .description{color:var(--text-color-caption);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase .form-container eo-object-form{display:block;margin:var(--app-pane-padding)}:host .prepareDetails.committing .eo-head .actions .btn,:host .prepareDetails.committing .eo-head .actions button{display:none}:host .prepareDetails.committing .eo-body{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails.multifile .form-files{height:100%;display:flex;flex-flow:column}:host .prepareDetails.multifile .form-files .form-container{flex:1 1 auto;overflow-y:auto}:host .prepareDetails.multifile .content-select{border-top:1px solid var(--main-background);overflow-y:auto;box-sizing:border-box;display:block;padding:calc(var(--app-pane-padding) / 2);flex:0 0 30%}:host .prepareDetails.multifile .content-select h2{margin:0;padding:calc(var(--app-pane-padding) / 2);padding-bottom:var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content{overflow:hidden;text-overflow:ellipsis;padding:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;background:var(--color-white);justify-content:space-between;gap:8px}:host .prepareDetails.multifile .content-select .content>span{text-overflow:ellipsis;overflow:hidden;flex:1}:host .prepareDetails.multifile .content-select .content .btn-delete-content{width:16px;flex:0 0 16px;height:16px;color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content .btn-delete-content:hover{background-color:var(--text-color-hint)}:host .prepareDetails.multifile .content-select .content div.attention{display:block;flex:0 0 auto;right:4px;top:8px;border-radius:2px;padding:0 4px;color:var(--color-warning);line-height:1em;border:1px solid var(--color-warning)}:host .prepareDetails.multifile .content-select .content.selected{color:var(--color-accent)}:host .prepareDetails.multifile .content-select .content:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row .ag-cell{border-bottom-color:var(--panel-header-border-bottom-color)}:host ::ng-deep eo-list-container .eo-head{height:48px}:host ::ng-deep eo-list-container .eo-head,:host ::ng-deep eo-list-container .eo-grid-header,:host ::ng-deep eo-list-container .eo-grid-footer{background:transparent;border-color:var(--panel-header-border-bottom-color)}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon{color:var(--text-color-hint)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon:hover{color:var(--text-color-caption)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon.active{color:var(--color-accent)!important}:host ::ng-deep .eo-header-title{color:var(--text-color-caption)}:host ::ng-deep .eo-header-icon{color:var(--text-color-caption)}:host ::ng-deep .template{margin-bottom:1px;cursor:pointer;color:var(--text-color-caption)}:host ::ng-deep .template .title{font-size:var(--font-body);font-weight:var(--font-weight-bold)}:host ::ng-deep .template .description{color:var(--text-color-caption)}:host ::ng-deep .template .chip{display:initial!important}::ng-deep .prepare-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .prepare-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:#fff!important}\n"] }]
539
+ args: [{ selector: 'eo-prepare-details', template: "<div class=\"prepareDetails__wrapper\" *ngIf=\"!loading; else mainSpinner\">\n <section class=\"prepareDetails\" *ngIf=\"preparedItem && preparePhase; else noItem\"\n [ngClass]=\"{multifile: preparedItem.contentcount > 1, committing: committing}\">\n <div class=\"eo-head\">\n\n <div class=\"header-info\">\n <div class=\"header-title\">{{header.title}}</div>\n <div class=\"header-sub-title h-location\" *ngIf=\"!header.location.link; else linked\">{{header.location.label}}\n </div>\n <div class=\"header-sub-title h-subtitle\">{{header.subtitle}}</div>\n\n <ng-template #linked>\n <div class=\"header-sub-title h-subtitle-detailed\">\n <span translate>eo.prepare.location.title.prefix</span>\n <a [routerLink]=\"header.location.link\">{{header.location.label}}</a>\n </div>\n </ng-template>\n </div>\n\n <div class=\"actions\">\n <eo-icon class=\"btn btn-download\"\n *ngIf=\"preparePhase.name === 'content' ? selectedTemplateFile : preparePhase.data.previewFile\"\n [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\"\n [iconTitle]=\"('eo.action.download.dms.object.content.label' | translate)\" (click)=\"download()\"></eo-icon>\n <eo-icon class=\"btn btn-delete\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showDeleteDialog = true;\"></eo-icon>\n <!-- buttons while choosing a template -->\n <ng-container *ngIf=\"chooseTemplate\">\n <button class=\"btn-tpl-abort\" (click)=\"showTemplateSelector(false)\"\n translate>eo.cta.button.cancel</button>\n <button class=\"primary btn-tpl-apply\" (click)=\"addTemplate(selectedTemplate)\" [disabled]=\"!selectedTemplate\"\n translate>eo.prepare.template.select</button>\n </ng-container>\n\n <ng-container *ngIf=\"preparePhase.name === 'indexdata'\">\n <button (click)=\"resetObjectType()\" translate>eo.prepare.resetObject</button>\n <button (click)=\"commit()\" class=\"btn-idx-save\"\n [ngClass]=\"{primary: preparedItem.state.parentisroot && preparedItem.contentcount > 1}\"\n [disabled]=\"formState?.invalid || committing\" translate>eo.prepare.save</button>\n\n <button (click)=\"commit(true)\" [disabled]=\"formState?.invalid || committing\" class=\"primary btn-idx-saveopen\"\n [hidden]=\"preparedItem?.state.parentisroot && preparedItem?.contentcount > 1\"\n translate>eo.prepare.saveopen</button>\n\n </ng-container>\n </div>\n\n </div>\n\n <div class=\"eo-body\" [ngSwitch]=\"preparePhase.name\" *ngIf=\"!committing; else spinner\">\n\n <!-- PHASE TYPE -->\n <div class=\"phase type\" *ngSwitchCase=\"'type'\">\n\n <!-- with preview -->\n <yvc-split-view *ngIf=\"preparePhase.data.previewFile; else nopreview\"\n [layoutSettingsID]=\"'prepare.details.phase.type'\">\n <ng-template yvcSplitArea [size]=\"30\">\n <div class=\"form-files\">\n <div class=\"object-type-select empty\" *ngIf=\"preparedItem.types.length == 0\" translate>\n eo.prepare.details.type.empty</div>\n <div class=\"object-type-select empty\"\n *ngIf=\"!preparedItem.state.typeselectedallowed && preparedItem.state.typeselected\"\n [translateParams]=\"{type: preparedItem.selectedtype.label, filename: getFileNames(preparedItem)}\"\n translate>eo.prepare.details.type.notallowed</div>\n\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n\n\n <div class=\"content-select\">\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx;\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex == idx}\" (click)=\"setPreviewUri(idx)\">\n <span>{{content.path}}</span>\n <eo-icon class=\"btn btn-delete-content\" [iconSrc]=\"'assets/_default/svg/ic_trash.svg'\"\n (click)=\"showContentDeleteDialog = true; deletedContentIndex = idx;\"></eo-icon>\n <div *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template yvcSplitArea [size]=\"70\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- without preview -->\n <ng-template #nopreview>\n <div class=\"form-files\">\n <div class=\"object-type-select\">\n <div class=\"object-type\" *ngFor=\"let type of preparedItem.types; trackBy: trackByIdFn\"\n (click)=\"selectObjectType(type)\">\n <div class=\"type-icon\">\n <eo-icon [iconId]=\"type.icon.id\"></eo-icon>\n </div>\n <div class=\"content\">\n <div class=\"title\">{{type.label}}</div>\n <div class=\"description\">{{type.description}}</div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n\n </div>\n\n <!-- PHASE CONTENT -->\n <div class=\"phase content\" *ngSwitchCase=\"'content'\">\n\n <!-- panel for selecting a template to be used as items content -->\n <yvc-split-view *ngIf=\"chooseTemplate; else attach\" [layoutSettingsID]=\"'prepare.details.phase.content'\">\n <ng-template yvcSplitArea [size]=\"40\">\n <!-- list of available templates -->\n <eo-list-container #eoList [loading]=\"false\" class=\"templates\">\n <div class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" [iconSrc]=\"'assets/_default/svg/ic_template.svg'\"></eo-icon>\n <div class=\"eo-header-info\">\n <div class=\"eo-header-title\" translate>eo.prepare.template.list.title</div>\n </div>\n <div class=\"eo-header-actions\">\n\n <eo-overlay #oFilter [iconSrc]=\"'assets/_default/svg/ic_filter.svg'\" [iconClass]=\"'primary'\"\n class=\"overlay-filter\" [title]=\"'eo.list.filter' | translate\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-custom-filter #cFilter (change)=\"cFilter.updateGrid(eoList.eoGridSubject, $event)\"\n (active)=\"oFilter.onActiveChanged($event)\">\n <eo-text-filter [title]=\"'eo.prepare.template.filter.text.title' | translate\"\n [matchFields]=\"['title', 'description', 'tags']\"\n [placeholder]=\"'eo.prepare.template.filter.text.title'\"></eo-text-filter>\n <eo-set-filter [operator]=\"'OR'\" [title]=\"'eo.prepare.template.filter.set.title' | translate\"\n *ngIf=\"tagFilterOptions?.length\" [options]=\"tagFilterOptions\"></eo-set-filter>\n </eo-custom-filter>\n </eo-overlay>\n\n </div>\n </div>\n <div class=\"eo-body\">\n <eo-grid #eoGrid *ngIf=\"gridOptions?.rowData\" [gridOptions]=\"gridOptions\" [fullWidth]=\"true\"\n [showHeader]=\"true\" [showFooter]=\"false\" [selectionLimit]=\"1\"\n (eoGridSelectionChanged)=\"selectTemplate($event[0])\">\n </eo-grid>\n </div>\n </eo-list-container>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"60\">\n <!-- preview of selected template -->\n <eo-media [previewFile]=\"selectedTemplateFile\"></eo-media>\n </ng-template>\n </yvc-split-view>\n\n <!-- add content general overview (upload, template, none) -->\n <ng-template #attach>\n\n <div class=\"info\" *ngIf=\"!uploadInProgress\" translate>eo.prepare.attachment.info</div>\n <input type=\"file\" #file (change)=\"fileChangeListener($event.target.files)\">\n\n <div class=\"attachments\" *ngIf=\"!uploadInProgress; else uploadspinner\">\n\n <!-- upload a file -->\n <div class=\"attachment att-file\" *ngIf=\"preparePhase.data.file\" (click)=\"upload()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_file_upload.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.upload.title</h3>\n <p translate>eo.prepare.attachment.upload.desc</p>\n </div>\n\n <!-- select a template -->\n <div class=\"attachment att-tmpl\" *ngIf=\"preparePhase.data.templates.length > 0 && hasTemplateCapability()\"\n (click)=\"showTemplateSelector(true)\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_prepare_add.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.template.title</h3>\n <p translate>eo.prepare.attachment.template.desc</p>\n </div>\n\n <!-- no file -->\n <div class=\"attachment att-none\" *ngIf=\"preparePhase.data.withoutFile\" (click)=\"noFile()\">\n <div class=\"img\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_no-file.svg'\"></eo-icon>\n </div>\n <h3 translate>eo.prepare.attachment.nofile.title</h3>\n <p translate>eo.prepare.attachment.nofile.desc</p>\n </div>\n\n </div>\n\n </ng-template>\n\n <!-- upload progress indicator -->\n <ng-template #uploadspinner>\n <div class=\"upload-indicator\">\n <eo-loading-spinner [size]=\"'large'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- PHASE INDEXDATA -->\n <div class=\"phase indexdata\" *ngSwitchCase=\"'indexdata'\">\n\n <!-- form and preview -->\n <yvc-split-view *ngIf=\"preparedItem.contents; else justform\" [layoutSettingsID]=\"'prepare.state.details'\">\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"form-files\">\n\n <!-- indexdata form -->\n <ng-container *ngTemplateOutlet=\"justform\"></ng-container>\n\n <!-- list of contents (in case of bulk upload) that can be previewed -->\n <div class=\"content-select\">\n\n <h2 translate>eo.prepare.details.contents.title</h2>\n <div class=\"content\"\n *ngFor=\"let content of preparedItem.contents; trackBy: trackByIndexFn; index as idx\"\n [ngClass]=\"{selected: preparePhase.data.previewIndex === idx}\" (click)=\"setPreviewUri(idx)\">\n {{content.path}} <span *ngIf=\"content.existscount > 0\" class=\"attention\"\n title=\"{{'eo.prepare.content.existscount.message'|translate: ({count: content.existscount})}}\">!</span>\n </div>\n </div>\n </div>\n </ng-template>\n\n <ng-template yvcSplitArea [size]=\"50\">\n <div class=\"eo-media-wrap\">\n <eo-prepare-content-exists-info [content]=\"preparedItem.contents[preparePhase.data.previewIndex]\">\n </eo-prepare-content-exists-info>\n <eo-media [dmsObject]=\"pseudoDmsObject\" [previewFile]=\"preparePhase.data.previewFile\"></eo-media>\n </div>\n </ng-template>\n </yvc-split-view>\n\n <!-- just the form -->\n <ng-template #justform>\n <div class=\"form-container situation-create\" *ngIf=\"formOptions\">\n <eo-object-form #form [formOptions]=\"formOptions\" (statusChanged)=\"onFormStatusChanged($event)\">\n </eo-object-form>\n </div>\n </ng-template>\n </div>\n </div>\n </section>\n\n <ng-template #spinner>\n <div class=\"eo-body\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n </ng-template>\n\n</div>\n\n<ng-template #mainSpinner>\n <div class=\"prepareDetails__main-spinner\">\n <eo-loading-spinner size=\"medium\"></eo-loading-spinner>\n </div>\n</ng-template>\n\n\n<ng-template #noItem>\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\n <ng-content select=\".error\"></ng-content>\n </eo-error-message>\n</ng-template>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.dialog.title' | translate\" [(visible)]=\"showDeleteDialog\"\n [focusOnShow]=\"false\" [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.dialog.message' | translate}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showDeleteDialog = false\"\n translate>eo.cta.button.cancel</button>\n <button type=\"button\" #confirmDelete (click)=\"removeItem(preparedItem)\" class=\"button primary\"\n translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n\n<eo-dialog [title]=\"'eo.prepare.details.delete.content.dialog.title' | translate\" [(visible)]=\"showContentDeleteDialog\"\n [minWidth]=\"400\" [styleClass]=\"'prepare-delete__dialog'\">\n\n <div>{{'eo.prepare.details.delete.content.dialog.message' | translate: ({contentPath: preparedItem?.contents ?\n preparedItem?.contents[deletedContentIndex]?.path : ''})}}</div>\n\n <div class=\"action-buttons prepare-delete--action-buttons flex-row\">\n <button type=\"button\" class=\"button cancel\" (click)=\"showContentDeleteDialog = false\"\n translate>eo.cta.button.cancel</button>\n <button type=\"button\" #confirmContentDelete (click)=\"removeItemContent(preparedItem, deletedContentIndex)\"\n class=\"button primary\" translate>eo.prepare.details.delete.dialog.ok</button>\n </div>\n</eo-dialog>\n", styles: [":host{height:100%;--split-gutter-background-color: var(--panel-background)}:host yvc-split-view{height:100%}:host .prepareDetails{display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;background:var(--panel-background-grey);height:100%;overflow-y:auto}:host .prepareDetails .eo-media-wrap{height:100%;display:flex;flex-flow:column}:host .prepareDetails .eo-media-wrap eo-media{flex:1;position:relative}:host .prepareDetails__wrapper{height:100%}:host .prepareDetails__main-spinner{height:100%;display:flex;justify-content:center;align-items:center}:host .prepareDetails .content-select{display:none}:host .prepareDetails .eo-head{background-color:var(--color-white);display:flex;flex-flow:row nowrap}:host .prepareDetails .eo-head .header-info{font-size:var(--font-caption);color:var(--text-color-caption);flex:1 1 auto}:host .prepareDetails .eo-head .header-info .header-title{font-size:var(--font-title);color:var(--text-color-body);padding-bottom:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .header-info a{color:var(--color-accent);cursor:pointer;text-decoration:none}:host .prepareDetails .eo-head .actions{display:flex;align-items:center;align-self:flex-start}[dir=ltr] :host .prepareDetails .eo-head .actions button{margin-left:calc(var(--app-pane-padding) / 2)}[dir=rtl] :host .prepareDetails .eo-head .actions button{margin-right:calc(var(--app-pane-padding) / 2)}:host .prepareDetails .eo-head .actions eo-icon{padding:calc(var(--app-pane-padding) / 4);cursor:pointer}:host .prepareDetails .eo-body{overflow-y:hidden}:host .prepareDetails .phase{height:100%;overflow-y:auto}:host .prepareDetails .phase.content{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates{background:linear-gradient(to right,#fff 70%,var(--panel-background-lightgrey) 100%)}:host .prepareDetails .phase.content ::ng-deep eo-list-container.templates eo-grid ag-grid-angular.ag-theme-balham .chip:last-of-type:after{background:transparent!important}:host .prepareDetails .phase.content ::ng-deep yvc-split-view{width:100%;height:100%}:host .prepareDetails .phase.content input[type=file]{display:none}:host .prepareDetails .phase.content .info{flex:0 0 auto;color:var(--text-color-caption);margin-bottom:var(--app-pane-padding)}:host .prepareDetails .phase.content .attachments{flex:0 0 auto;display:flex;flex-flow:row}:host .prepareDetails .phase.content .attachments .attachment:hover .img eo-icon{opacity:1}:host .prepareDetails .phase.content .attachments .attachment{background:var(--color-white);cursor:pointer;margin:calc(var(--app-pane-padding) / 2);max-width:200px;border-bottom:1px solid rgba(var(--color-black-rgb),.1)}:host .prepareDetails .phase.content .attachments .attachment .img{display:flex;flex-flow:column;align-items:center;justify-content:center;padding:calc(var(--app-pane-padding) * 2) 0;background:var(--color-accent)}:host .prepareDetails .phase.content .attachments .attachment .img eo-icon{color:var(--color-white);width:48px;height:48px;opacity:.5;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.content .attachments .attachment h3{font-weight:var(--font-weight-normal);margin:0;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding);font-size:var(--font-subhead)}:host .prepareDetails .phase.content .attachments .attachment p{margin:0;padding:0 var(--app-pane-padding) var(--app-pane-padding) var(--app-pane-padding);color:var(--text-color-caption)}:host .prepareDetails .phase div[eosplitgutter]{background-color:var(--color-light-blue)!important}:host .prepareDetails .phase.type .form-files .object-type-select{flex:1 1 auto;overflow-y:auto;padding:var(--app-pane-padding)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type{display:flex;flex-flow:row nowrap;align-items:center;background:var(--color-white);padding:calc(var(--app-pane-padding) / 2);margin-bottom:1px;cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .type-icon{color:var(--text-color-hint)}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content{padding-left:calc(var(--app-pane-padding) / 2);overflow:hidden}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .title{font-weight:var(--font-weight-bold);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase.type .form-files .object-type-select .object-type .content .description{color:var(--text-color-caption);overflow:hidden;text-overflow:ellipsis}:host .prepareDetails .phase .form-container eo-object-form{display:block;margin:var(--app-pane-padding)}:host .prepareDetails.committing .eo-head .actions .btn,:host .prepareDetails.committing .eo-head .actions button{display:none}:host .prepareDetails.committing .eo-body{display:flex;flex-flow:column;align-items:center;justify-content:center}:host .prepareDetails.multifile .form-files{height:100%;display:flex;flex-flow:column}:host .prepareDetails.multifile .form-files .form-container{flex:1 1 auto;overflow-y:auto}:host .prepareDetails.multifile .content-select{border-top:1px solid var(--main-background);overflow-y:auto;box-sizing:border-box;display:block;padding:calc(var(--app-pane-padding) / 2);flex:0 0 30%}:host .prepareDetails.multifile .content-select h2{margin:0;padding:calc(var(--app-pane-padding) / 2);padding-bottom:var(--app-pane-padding);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content{overflow:hidden;text-overflow:ellipsis;padding:calc(var(--app-pane-padding) / 2);margin-bottom:calc(var(--app-pane-padding) / 2);color:var(--text-color-caption);cursor:pointer;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;display:flex;background:var(--color-white);justify-content:space-between;gap:8px}:host .prepareDetails.multifile .content-select .content>span{text-overflow:ellipsis;overflow:hidden;flex:1}:host .prepareDetails.multifile .content-select .content .btn-delete-content{width:16px;flex:0 0 16px;height:16px;color:var(--text-color-caption)}:host .prepareDetails.multifile .content-select .content .btn-delete-content:hover{background-color:var(--text-color-hint)}:host .prepareDetails.multifile .content-select .content div.attention{display:block;flex:0 0 auto;right:4px;top:8px;border-radius:2px;padding:0 4px;color:var(--color-warning);line-height:1em;border:1px solid var(--color-warning)}:host .prepareDetails.multifile .content-select .content.selected{color:var(--color-accent)}:host .prepareDetails.multifile .content-select .content:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row{background:transparent}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row:hover{background:var(--panel-background-lightgrey)}:host ::ng-deep eo-grid ag-grid-angular.ag-theme-balham .ag-row .ag-cell{border-bottom-color:var(--panel-header-border-bottom-color)}:host ::ng-deep eo-list-container .eo-head{height:48px}:host ::ng-deep eo-list-container .eo-head,:host ::ng-deep eo-list-container .eo-grid-header,:host ::ng-deep eo-list-container .eo-grid-footer{background:transparent;border-color:var(--panel-header-border-bottom-color)}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon{color:var(--text-color-hint)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon:hover{color:var(--text-color-caption)!important}:host ::ng-deep .eo-head .eo-header .eo-header-actions eo-icon.active{color:var(--color-accent)!important}:host ::ng-deep .eo-header-title{color:var(--text-color-caption)}:host ::ng-deep .eo-header-icon{color:var(--text-color-caption)}:host ::ng-deep .template{margin-bottom:1px;cursor:pointer;color:var(--text-color-caption)}:host ::ng-deep .template .title{font-size:var(--font-body);font-weight:var(--font-weight-bold)}:host ::ng-deep .template .description{color:var(--text-color-caption)}:host ::ng-deep .template .chip{display:initial!important}::ng-deep .prepare-delete__dialog{padding:8px;min-height:unset!important}::ng-deep .prepare-delete__dialog--header{font-size:1.17em!important;font-weight:400!important;color:rgba(var(--color-black-rgb),.54)!important;padding:0 0 1em!important;margin:0;background:#fff!important}\n"] }]
540
540
  }], ctorParameters: () => [{ type: i1.PrepareService }, { type: i2.Router }, { type: i3.PendingChangesService }, { type: i1.TranslateService }, { type: i1.NotificationsService }, { type: i1.SystemService }, { type: i4.SelectionService }, { type: i1.BackendService }, { type: i1.CapabilitiesService }], propDecorators: { file: [{
541
541
  type: ViewChild,
542
542
  args: ['file']
@@ -566,4 +566,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
566
566
  type: HostBinding,
567
567
  args: ['attr.data-type']
568
568
  }] } });
569
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL3ByZXBhcmUtZGV0YWlscy9wcmVwYXJlLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvcHJlcGFyZS1kZXRhaWxzL3ByZXBhcmUtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLFNBQVMsRUFBYyxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpILE9BQU8sRUFLTCxZQUFZLEVBS1osS0FBSyxFQUNMLFNBQVMsRUFDVixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUMsWUFBWSxFQUFFLGNBQWMsRUFBQyxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCNUQsSUFBTSx1QkFBdUIsR0FBN0IsTUFBTSx1QkFBdUI7SUF5QmxDLElBQ0ksWUFBWSxDQUFDLElBQWtCO1FBQ2pDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsSCxNQUFNLG1CQUFtQixHQUFHLDZCQUE2QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0SCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7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NnNCQ3hDcEMsaTJkQXFUQTs7QUQ3UWEsdUJBQXVCO0lBTm5DLFlBQVksRUFBRTtHQU1GLHVCQUF1QixDQWlsQm5DOzsyRkFqbEJZLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxvQkFBb0I7d1VBYVgsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNO2dCQUNFLFVBQVU7c0JBQTVCLFNBQVM7dUJBQUMsTUFBTTtnQkFDVyxtQkFBbUI7c0JBQTlDLFNBQVM7dUJBQUMsZUFBZTtnQkFDUywwQkFBMEI7c0JBQTVELFNBQVM7dUJBQUMsc0JBQXNCO2dCQWM3QixZQUFZO3NCQURmLEtBQUs7dUJBQUMsY0FBYztnQkFvQlosVUFBVTtzQkFBbEIsS0FBSztnQkFpQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFHSCxRQUFRO3NCQURYLFdBQVc7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb2xEZWYsIEdyaWRPcHRpb25zfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvY29yZSc7XG5pbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBCYWNrZW5kU2VydmljZSwgQ2FwYWJpbGl0aWVzU2VydmljZSxcbiAgTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gIE9iamVjdFR5cGUsXG4gIFByZXBhcmVTZXJ2aWNlLFxuICBQcmVwYXJlZEl0ZW0sXG4gIFByZXBhcmVkSXRlbVRlbXBsYXRlLFxuICBQcmVwYXJlZEl0ZW1UeXBlLFxuICBTeXN0ZW1TZXJ2aWNlLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICBVdGlscyxcbiAgRG1zT2JqZWN0XG59IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge1VudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWR9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQge1BlbmRpbmdDaGFuZ2VzU2VydmljZX0gZnJvbSAnLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvcGVuZGluZy1jaGFuZ2VzL3BlbmRpbmctY2hhbmdlcy5zZXJ2aWNlJztcbmltcG9ydCB7U2VsZWN0aW9uQ29uZmlnLCBTZWxlY3Rpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9lby1mcmFtZXdvcmstY29yZS9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtQcmV2aWV3RmlsZX0gZnJvbSAnLi4vbWVkaWEvbWVkaWEuY29tcG9uZW50JztcbmltcG9ydCB7Rm9ybVN0YXR1c0NoYW5nZWRFdmVudH0gZnJvbSAnLi4vb2JqZWN0LWZvcm0vZm9ybS1zdGF0dXMtY2hhbmdlZC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtPYmplY3RGb3JtT3B0aW9uc30gZnJvbSAnLi4vb2JqZWN0LWZvcm0vaW5kZXgnO1xuaW1wb3J0IHtPYmplY3RGb3JtQ29tcG9uZW50fSBmcm9tICcuLi9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByZXBhcmVQaGFzZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGF0YToge1xuICAgIHByZXZpZXdJbmRleD86IG51bWJlcixcbiAgICBwcmV2aWV3RmlsZT86IFByZXZpZXdGaWxlLFxuICAgIGZpbGU/OiBib29sZWFuLFxuICAgIHdpdGhvdXRGaWxlPzogYm9vbGVhbixcbiAgICB0ZW1wbGF0ZXM/OiBhbnlbXVxuICB9O1xufVxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby1wcmVwYXJlLWRldGFpbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJlcGFyZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJlcGFyZS1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUHJlcGFyZURldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBncmlkT3B0aW9uczogR3JpZE9wdGlvbnM7XG5cbiAgLy8gSUQgc2V0IGJ5IHBlbmRpbmdDaGFuZ2VzIHNlcnZpY2Ugd2hlbiBlZGl0aW5nIGluZGV4ZGF0YVxuICAvLyBVc2VkIHRvIGZpbmlzaCB0aGUgcGVuZGluZyB0YXNrIHdoZW4gZWRpdGluZyBpcyBkb25lXG4gIHByaXZhdGUgcGVuZGluZ1Rhc2tJZDogc3RyaW5nO1xuICBwcml2YXRlIHNlbGVjdGVkVHlwZU9iamVjdDtcblxuICAvLyBoaWRkZW4gZmlsZSBpbnB1dCB0byB0cmlnZ2VyIGZpbGUgdXBsb2Fkc1xuICBAVmlld0NoaWxkKCdmaWxlJykgZmlsZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZm9ybScpIG9iamVjdEZvcm06IE9iamVjdEZvcm1Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2NvbmZpcm1EZWxldGUnKSBjb25maXJtRGVsZXRlQnV0dG9uOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjb25maXJtQ29udGVudERlbGV0ZScpIGNvbmZpcm1Db250ZW50RGVsZXRlQnV0dG9uOiBFbGVtZW50UmVmO1xuXG4gIC8vIHByZXBhcmF0aW9uIGlzIGRpdmlkZWQgaW50byBzZXZlcmFsIHBoYXNlc1xuICAvLyBzZWxlY3QgYW4gb2JqZWN0IHR5cGVcbiAgUEhBU0VfVFlQRSA9ICd0eXBlJztcbiAgLy8gYWRkIGNvbnRlbnRcbiAgUEhBU0VfQ09OVEVOVCA9ICdjb250ZW50JztcbiAgLy8gc2V0IGluZGV4ZGF0YVxuICBQSEFTRV9JTkRFWERBVEEgPSAnaW5kZXhkYXRhJztcblxuICBfcHJlcGFyZWRJdGVtOiBQcmVwYXJlZEl0ZW07XG4gIHBzZXVkb0Rtc09iamVjdDogRG1zT2JqZWN0O1xuXG4gIEBJbnB1dCgncHJlcGFyZWRJdGVtJylcbiAgc2V0IHByZXBhcmVkSXRlbShpdGVtOiBQcmVwYXJlZEl0ZW0pIHtcbiAgICBjb25zdCBvYmplY3RUb1N0cmluZ2lmaWVkVmFsdWVBcnJheSA9IChvYmopID0+IEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKG9iaiB8fCB7fSkuc29ydCgpLm1hcChrZXkgPT4gb2JqW2tleV0pKTtcbiAgICBjb25zdCBpc1Byb2Nlc3NpbmdBbGxvd2VkID0gb2JqZWN0VG9TdHJpbmdpZmllZFZhbHVlQXJyYXkodGhpcy5fcHJlcGFyZWRJdGVtKSAhPT0gb2JqZWN0VG9TdHJpbmdpZmllZFZhbHVlQXJyYXkoaXRlbSk7XG4gICAgaWYgKGl0ZW0gJiYgaXRlbS50eXBlcykge1xuICAgICAgaXRlbS50eXBlcyA9IGl0ZW0udHlwZXMuc29ydChVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpKTtcbiAgICB9XG4gICAgdGhpcy5fcHJlcGFyZWRJdGVtID0gaXRlbTtcbiAgICBpZiAodGhpcy5wcmVwYXJlZEl0ZW0gJiYgdGhpcy5wcmVwYXJlZEl0ZW0uaWQgJiYgaXNQcm9jZXNzaW5nQWxsb3dlZCkge1xuICAgICAgdGhpcy5wcm9jZXNzKCk7XG4gICAgICAvLyB3ZSBuZWVkIHRoaXMgZm9yIHRoZSBPMzY1IGludGVncmF0aW9uIFRVSy0zNTc2XG4gICAgICB0aGlzLnBzZXVkb0Rtc09iamVjdCA9IG5ldyBEbXNPYmplY3Qoe2lkOiB0aGlzLnByZXBhcmVkSXRlbS5pZCwgdmVyc2lvbjogMH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwcmVwYXJlZEl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZXBhcmVkSXRlbTtcbiAgfVxuXG5cbiAgQElucHV0KCkgZW1wdHlTdGF0ZSA9IHtpY29uOiAnYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19lcnJvci5zdmcnLCB0ZXh0OiAnJywgY2xhc3NOYW1lOiAnZGV0YWlscy1lcnJvcid9O1xuXG4gIHByZXBhcmVQaGFzZTogUHJlcGFyZVBoYXNlO1xuICBzZWxlY3RlZFRlbXBsYXRlOiBQcmVwYXJlZEl0ZW1UZW1wbGF0ZTtcbiAgc2VsZWN0ZWRUZW1wbGF0ZUZpbGU6IFByZXZpZXdGaWxlO1xuICBmb3JtT3B0aW9uczogT2JqZWN0Rm9ybU9wdGlvbnM7XG4gIGZvcm1TdGF0ZTogRm9ybVN0YXR1c0NoYW5nZWRFdmVudDtcbiAgY2hvb3NlVGVtcGxhdGU6IGJvb2xlYW47XG4gIHVwbG9hZEluUHJvZ3Jlc3M6IGJvb2xlYW47XG4gIGNvbW1pdHRpbmc6IGJvb2xlYW47XG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgdGFnRmlsdGVyT3B0aW9uczogYW55O1xuICBfc2hvd0RlbGV0ZURpYWxvZyA9IGZhbHNlO1xuICBfc2hvd0NvbnRlbnREZWxldGVEaWFsb2cgPSBmYWxzZTtcbiAgZGVsZXRlZENvbnRlbnRJbmRleDogbnVtYmVyO1xuXG4gIC8vIHRpdGxlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZGV0YWlscyBoZWFkZXJcbiAgaGVhZGVyID0ge1xuICAgIHRpdGxlOiBudWxsLFxuICAgIGxvY2F0aW9uOiB7XG4gICAgICBsYWJlbDogbnVsbCxcbiAgICAgIGxpbms6IG51bGxcbiAgICB9LFxuICAgIHN1YnRpdGxlOiBudWxsXG4gIH07XG5cbiAgY29sRGVmczogQ29sRGVmW10gPSBbe1xuICAgIGhlYWRlck5hbWU6ICcnLFxuICAgIGZpZWxkOiAndGl0bGUnLFxuICAgIGNlbGxSZW5kZXJlcjogdGhpcy5jZWxsUmVuZGVyZXIsXG4gICAgZmlsdGVyOiBmYWxzZVxuICB9XTtcblxuICBASW5wdXQoKSBhcHBseVNlbGVjdGlvbjogU2VsZWN0aW9uQ29uZmlnO1xuXG4gIEBPdXRwdXQoKSBvbkl0ZW1DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxQcmVwYXJlZEl0ZW0+KCk7XG4gIEBPdXRwdXQoKSBvbkNvbW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgb25JdGVtUmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxQcmVwYXJlZEl0ZW0+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdHlwZScpXG4gIGdldCBkYXRhVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlZEl0ZW0gJiYgdGhpcy5wcmVwYXJlZEl0ZW0uc2VsZWN0ZWR0eXBlID8gdGhpcy5wcmVwYXJlZEl0ZW0uc2VsZWN0ZWR0eXBlLm5hbWUgOiAnbm9uZSc7XG4gIH1cblxuICBzZXQgc2hvd0RlbGV0ZURpYWxvZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93RGVsZXRlRGlhbG9nID0gdmFsO1xuXG4gICAgaWYgKHRoaXMuX3Nob3dEZWxldGVEaWFsb2cpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb25maXJtRGVsZXRlQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNob3dEZWxldGVEaWFsb2coKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dEZWxldGVEaWFsb2c7XG4gIH1cblxuICBzZXQgc2hvd0NvbnRlbnREZWxldGVEaWFsb2codmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0NvbnRlbnREZWxldGVEaWFsb2cgPSB2YWw7XG5cbiAgICBpZiAodGhpcy5fc2hvd0NvbnRlbnREZWxldGVEaWFsb2cpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb25maXJtQ29udGVudERlbGV0ZUJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCksIDApO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaG93Q29udGVudERlbGV0ZURpYWxvZygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd0NvbnRlbnREZWxldGVEaWFsb2c7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHByZXBhcmVTZXJ2aWNlOiBQcmVwYXJlU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcGVuZGluZ0NoYW5nZXM6IFBlbmRpbmdDaGFuZ2VzU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VsZWN0aW9uOiBTZWxlY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYmFja2VuZDogQmFja2VuZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYXBhYmlsaXRlczogQ2FwYWJpbGl0aWVzU2VydmljZSkge1xuICB9XG5cbiAgY2VsbFJlbmRlcmVyKHBhcmFtcykge1xuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cInRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7cGFyYW1zLmRhdGEudGl0bGUgfHwgJyd9JHtwYXJhbXMuZGF0YS5jb250ZW50ID8gJzxzcGFuIGNsYXNzPVwidGl0bGVcIj4nICsgJyAoJyArIHBhcmFtcy5kYXRhLmNvbnRlbnQubWltZWdyb3VwICsgJyknICsgJzwvc3Bhbj4nIDogJyd9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPiR7cGFyYW1zLmRhdGEuZGVzY3JpcHRpb24gfHwgJyd9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWdzXCI+XG4gICAgICAgICAgICAgICAgJHtwYXJhbXMuZGF0YS50YWdzLm1hcCh0YWcgPT4gYDxzcGFuIGNsYXNzPVwiY2hpcFwiPiR7dGFnfTwvc3Bhbj5gKS5qb2luKCcnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFBlbmRpbmcoKSB7XG4gICAgLy8gYmVjYXVzZSB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBmb3JtIHN0YXR1cyBjaGFuZ2VzLFxuICAgIC8vIHBlbmRpbmcgdGFzayB3aWxsIG9ubHkgYmUgc3RhcnRlZCBvbmNlIHVudGlsIGl0IHdhcyBmaW5pc2hlZFxuICAgIGlmICghdGhpcy5wZW5kaW5nQ2hhbmdlcy5oYXNQZW5kaW5nVGFzayh0aGlzLnBlbmRpbmdUYXNrSWQgfHwgJyAnKSkge1xuICAgICAgdGhpcy5wZW5kaW5nVGFza0lkID0gdGhpcy5wZW5kaW5nQ2hhbmdlcy5zdGFydFRhc2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmlzaFBlbmRpbmcoKSB7XG4gICAgdGhpcy5wZW5kaW5nQ2hhbmdlcy5maW5pc2hUYXNrKHRoaXMucGVuZGluZ1Rhc2tJZCk7XG4gIH1cblxuICBwcmVwYXJlRm9ybUNvbnRlbnQoZm9ybURhdGE/KSB7XG4gICAgY29uc3QgZGF0YSA9IGZvcm1EYXRhIHx8IHRoaXMuc2VsZWN0ZWRUeXBlT2JqZWN0LmRhdGE7XG4gICAgdGhpcy5mb3JtT3B0aW9ucyA9IHtcbiAgICAgIGZvcm1Nb2RlbDogdGhpcy5zZWxlY3RlZFR5cGVPYmplY3QuZm9ybSxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9O1xuICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQpIHtcbiAgICAgIHRoaXMuZm9ybU9wdGlvbnMuY29udGV4dCA9IHtcbiAgICAgICAgaWQ6IHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC5pZCxcbiAgICAgICAgdGl0bGU6IHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC50aXRsZSxcbiAgICAgICAgdHlwZU5hbWU6IHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC50eXBlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0T2JqZWN0VHlwZSgpIHtcbiAgICB0aGlzLnByZXBhcmVTZXJ2aWNlLnVwZGF0ZUNoaWxkVHlwZSgnZG1zOnN5c29iamVjdCcsIHRoaXMucHJlcGFyZWRJdGVtLmlkKS5zdWJzY3JpYmUodXBkYXRlZFByZXBhcmVJdGVtID0+IHtcbiAgICAgIHRoaXMucHJlcGFyZWRJdGVtID0gdXBkYXRlZFByZXBhcmVJdGVtO1xuICAgICAgdGhpcy5vbkl0ZW1DaGFuZ2VkLmVtaXQodXBkYXRlZFByZXBhcmVJdGVtKTtcbiAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX1RZUEUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbW1pdHMgYSBwcmVwYXJlZCBpdGVtLiBUaGlzIHdpbGwgY2F1c2UgdGhlIHRlbXBvcmFyeSBwcmVwYXJlZCBvYmplY3QgdG8gYmUgY29udmVydGVkIHRvIGEgcmVhbCBETVMtT2JqZWN0LlxuICAgKiBAcGFyYW0gb3BlbkxvY2F0aW9uQWZ0ZXJDb21taXQgLSB3aGVuIHNldCB0byB0cnVlLCBhcHBsaWNhdGlvbiB3aWxsIG5hdmlnYXRlIHRvIHRoZSBvYmplY3RzIGxvY2F0aW9uXG4gICAqL1xuICBjb21taXQob3BlbkxvY2F0aW9uQWZ0ZXJDb21taXQ/OiBib29sZWFuKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5mb3JtU3RhdGUgJiYgIXRoaXMuZm9ybVN0YXRlLmludmFsaWQpIHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLm9iamVjdEZvcm0uZ2V0Rm9ybURhdGEoKTtcbiAgICAgICAgdGhpcy5jb21taXR0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmVwYXJlU2VydmljZVxuICAgICAgICAgIC5jb21taXRQcmVwYXJlZEl0ZW0odGhpcy5wcmVwYXJlZEl0ZW0uaWQsIHRoaXMucHJlcGFyZWRJdGVtLmdldFNlbGVjdGVkVHlwZU9iamVjdCgpLm5hbWUsIGZvcm1EYXRhKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNvbW1pdC5lbWl0KHJlcyk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICAgICAgICAgIGlmIChvcGVuTG9jYXRpb25BZnRlckNvbW1pdCkge1xuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9vYmplY3QnLCByZXNdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB7a2V5LCBjYXVzZSwgdW5pcXVlZmllbGRzLCBjcmVhdGVkfSA9IGVycm9yLmVycm9yO1xuICAgICAgICAgICAgaWYgKGtleSAmJiBrZXkgPT09ICdETVNfTUVUQURBVEFfVU5JUVVFX1ZJT0xBVElPTl9FUlJPUicpIHtcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8udW5pcXVlLnZhbGlkYXRpb24uZXJyb3IuaGludCcsIHtmaWVsZDogdW5pcXVlZmllbGRzLnRvU3RyaW5nKCl9KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtleSAmJiBrZXkgPT09ICdETVNfU1lOQ0hST05PVVNfSU5ERVhJTkdfRkFJTEVEJykge1xuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi53YXJuaW5nKG51bGwsIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnByZXBhcmUuY29tbWl0LmVycm9yLmluZGV4RmFpbGVkJykpO1xuICAgICAgICAgICAgICB0aGlzLm9uQ29tbWl0LmVtaXQoY3JlYXRlZC5pZCk7XG4gICAgICAgICAgICAgIHRoaXMuZmluaXNoUGVuZGluZygpO1xuICAgICAgICAgICAgICBpZiAob3BlbkxvY2F0aW9uQWZ0ZXJDb21taXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9vYmplY3QnLCBjcmVhdGVkLmlkXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F1c2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IobnVsbCwgY2F1c2UubWVzc2FnZXNbMF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IoXG4gICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLmNyZWF0ZWQuZXJyb3IudGl0bGUnKSxcbiAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnByZXBhcmUuY3JlYXRlZC5lcnJvci5tZXNzYWdlJylcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29tbWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5maW5pc2hQZW5kaW5nKCk7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVGb3JtQ29udGVudChmb3JtRGF0YSk7XG4gICAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgcmVtb3ZlSXRlbShpdGVtOiBQcmVwYXJlZEl0ZW0pIHtcbiAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICB0aGlzLm9uSXRlbVJlbW92ZS5lbWl0KGl0ZW0pO1xuICAgIHRoaXMuX3Nob3dEZWxldGVEaWFsb2cgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW1Db250ZW50KGl0ZW06IFByZXBhcmVkSXRlbSwgZGVsZXRlZENvbnRlbnRJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5wcmVwYXJlU2VydmljZS5kZWxldGVQcmVwYXJlZEl0ZW1Db250ZW50KGl0ZW0uaWQsIGRlbGV0ZWRDb250ZW50SW5kZXgpXG4gICAgICAuc3Vic2NyaWJlKCh1cGRhdGVkSXRlbTogUHJlcGFyZWRJdGVtKSA9PiB7XG4gICAgICAgIHRoaXMucHJlcGFyZWRJdGVtID0gdXBkYXRlZEl0ZW07XG4gICAgICAgIHRoaXMuc2hvd0NvbnRlbnREZWxldGVEaWFsb2cgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0RmlsZU5hbWVzKGl0ZW06IFByZXBhcmVkSXRlbSkge1xuICAgIHJldHVybiAoaXRlbS5jb250ZW50cyB8fCBbXSkubWFwKGMgPT4gYy5wYXRoKS5qb2luKCcsICcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhIHRhcmdldCBvYmplY3QgdHlwZSBmb3IgdGhlIGN1cnJlbnQgcHJlcGFyZWQgaXRlbS5cbiAgICogQHBhcmFtIHR5cGUgLSB0aGUgb2JqZWN0IHR5cGVzIG5hbWUgdG8gYmUgc2V0IGFzIHRhcmdldFxuICAgKi9cbiAgc2VsZWN0T2JqZWN0VHlwZSh0eXBlOiBQcmVwYXJlZEl0ZW1UeXBlKSB7XG4gICAgdGhpcy5wcmVwYXJlZEl0ZW0udHlwZXNcbiAgICAgIC5mb3JFYWNoKCh0KSA9PiB0LnNlbGVjdGVkID0gKHQubmFtZSA9PT0gdHlwZS5uYW1lKSk7XG5cbiAgICB0aGlzLnByZXBhcmVTZXJ2aWNlXG4gICAgICAudXBkYXRlQ2hpbGRUeXBlKHR5cGUubmFtZSwgdGhpcy5wcmVwYXJlZEl0ZW0uaWQpXG4gICAgICAuc3Vic2NyaWJlKHVwZGF0ZWRQcmVwYXJlZEl0ZW0gPT4ge1xuICAgICAgICB0aGlzLnByZXBhcmVkSXRlbSA9IHVwZGF0ZWRQcmVwYXJlZEl0ZW07XG4gICAgICAgIHRoaXMub25JdGVtQ2hhbmdlZC5lbWl0KHVwZGF0ZWRQcmVwYXJlZEl0ZW0pO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdGVtcGxhdGUgdG8gdGhlIGN1cnJlbnQgcHJlcGFyZWQgaXRlbS5cbiAgICogQHBhcmFtIHRlbXBsYXRlIC0gdGhlIHRlbXBsYXRlIHRvIGJlIGFkZGVkXG4gICAqL1xuICBhZGRUZW1wbGF0ZSh0ZW1wbGF0ZTogUHJlcGFyZWRJdGVtVGVtcGxhdGUpIHtcblxuICAgIHRoaXMucHJlcGFyZVNlcnZpY2VcbiAgICAgIC5hZGRUZW1wbGF0ZSh0aGlzLnByZXBhcmVkSXRlbS5pZCwgdGVtcGxhdGUuaWQpXG4gICAgICAuc3Vic2NyaWJlKCh1cGRhdGVkUHJlcGFyZWRJdGVtKSA9PiB7XG4gICAgICAgIHRoaXMucHJlcGFyZWRJdGVtID0gdXBkYXRlZFByZXBhcmVkSXRlbTtcbiAgICAgICAgdGhpcy5vbkl0ZW1DaGFuZ2VkLmVtaXQodXBkYXRlZFByZXBhcmVkSXRlbSk7XG4gICAgICB9LCBVdGlscy50aHJvdyhudWxsLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLnRlbXBsYXRlLmVycm9yLnRpdGxlJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnByZXBhcmUudGVtcGxhdGUuZXJyb3IubWVzc2FnZScpKSk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGEgdGVtcGxhdGUuIFdpbGwgc2hvdyBwcmV2aWV3IGZvciB0aGUgc2VsZWN0ZWQgdGVtcGxhdGUuXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSAtIHRoZSB0ZW1wbGF0ZSB0byBiZSBzZWxlY3RlZFxuICAgKi9cbiAgc2VsZWN0VGVtcGxhdGUodGVtcGxhdGU6IFByZXBhcmVkSXRlbVRlbXBsYXRlKSB7XG4gICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlRmlsZSA9ICEodGVtcGxhdGUgJiYgdGVtcGxhdGUuY29udGVudCkgPyBudWxsIDoge1xuICAgICAgdXJpOiB0aGlzLnByZXBhcmVTZXJ2aWNlLmdldFRlbXBsYXRlUHJldmlld1VyaSh0aGlzLnNlbGVjdGVkVGVtcGxhdGUuaWQpLFxuICAgICAgdXJpUGRmOiB0aGlzLnByZXBhcmVTZXJ2aWNlLmdldFRlbXBsYXRlUHJldmlld1VyaSh0aGlzLnNlbGVjdGVkVGVtcGxhdGUuaWQsICdQREYnKSxcbiAgICAgIG1pbWV0eXBlOiB0ZW1wbGF0ZS5jb250ZW50Lm1pbWV0eXBlLFxuICAgICAgbWltZWdyb3VwOiB0ZW1wbGF0ZS5jb250ZW50Lm1pbWVncm91cCxcbiAgICAgIHNpemU6IHRlbXBsYXRlLmNvbnRlbnQuc2l6ZVxuICAgIH07XG4gIH1cblxuICBzZXRQcmV2aWV3VXJpKGluZGV4OiBudW1iZXIpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMucHJlcGFyZVBoYXNlLmRhdGEsIHRoaXMuZ2V0UHJldmlld0RhdGEoaW5kZXgpKTtcbiAgfVxuXG4gIC8vIHNraXAgY29udGVudCBzZWxlY3Rpb24gZm9yIHRoZSBjdXJyZW50IHByZXBhcmVkIGl0ZW1cbiAgLy8gYW5kIGNvbnRpbnVlIHNldHRpbmcgaW5kZXhkYXRhXG4gIG5vRmlsZSgpIHtcbiAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9JTkRFWERBVEEpO1xuICB9XG5cbiAgLy8gdHJpZ2dlciBmaWxlIHVwbG9hZFxuICB1cGxvYWQoKSB7XG4gICAgLy8gYWZ0ZXIgdGhlIHVzZXIgc2VsZWN0ZWQgYSBmaWxlIGZpbGVDaGFuZ2VMaXN0ZW5lcigpIHdpbGwgY29udGludWVcbiAgICB0aGlzLmZpbGUubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgLy8gb25DaGFuZ2UgbGlzdGVuZXIgb24gaGlkZGVuIGZpbGUgaW5wdXRcbiAgZmlsZUNoYW5nZUxpc3RlbmVyKGV2ZW50KSB7XG4gICAgY29uc3QgZmlsZTogRmlsZSA9IGV2ZW50WzBdO1xuICAgIHRoaXMudXBsb2FkSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgdGhpcy5wcmVwYXJlU2VydmljZVxuICAgICAgLnVwbG9hZENvbnRlbnQodGhpcy5wcmVwYXJlZEl0ZW0uaWQsIGZpbGUpXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIC8vIHVwbG9hZCBzdWNjZWVkZWQgc28gd2UgY2FuIGdvIG9uIHRvIHRoZSBuZXh0IHByZXBhcmUgcGhhc2VcbiAgICAgICAgdGhpcy5wcmVwYXJlZEl0ZW0gPSBuZXcgUHJlcGFyZWRJdGVtKHJlcyk7XG4gICAgICAgIHRoaXMub25JdGVtQ2hhbmdlZC5lbWl0KHRoaXMucHJlcGFyZWRJdGVtKTtcbiAgICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfSU5ERVhEQVRBKTtcbiAgICAgICAgdGhpcy51cGxvYWRJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB9LCBVdGlscy50aHJvdyhlcnJvciA9PiB7XG4gICAgICAgIGlmIChlcnJvci5lcnJvciAmJiBlcnJvci5lcnJvci5jYXVzZSkge1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKG51bGwsIGVycm9yLmVycm9yLmNhdXNlLm1lc3NhZ2VzWzBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvci5lcnJvcikge1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKG51bGwsIGVycm9yLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnByZXBhcmUuY3JlYXRlZC5lcnJvci50aXRsZScpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbGUubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuY29tbWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnVwbG9hZC5nbG9iYWwuZXJyb3IudGl0bGUnKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8udXBsb2FkLmdsb2JhbC5lcnJvci5kZXNjcmlwdGlvbicpXG4gICAgICApKTtcbiAgfVxuXG4gIG9uRm9ybVN0YXR1c0NoYW5nZWQoZXZ0KSB7XG4gICAgdGhpcy5mb3JtU3RhdGUgPSBldnQ7XG5cbiAgICBpZiAodGhpcy5mb3JtU3RhdGUuZGlydHkpIHtcbiAgICAgIHRoaXMuc3RhcnRQZW5kaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmluaXNoUGVuZGluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2VzcygpIHtcbiAgICAvLyB0b2RvOiByZXNldCBzdHVmZlxuICAgIHRoaXMuZm9ybVN0YXRlID0gbnVsbDtcbiAgICB0aGlzLmZvcm1PcHRpb25zID0gbnVsbDtcbiAgICB0aGlzLmdldFByZXBhcmVQaGFzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgcHJlcGFyZSBwaGFzZSB0byBiZSBpbml0aWFsaXplZCBiYXNlZCBvbiB0aGUgY29uZGl0aW9uc1xuICAgKiBvZiB0aGUgY3VycmVudCBwcmVwYXJlZCBpdGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQcmVwYXJlUGhhc2UoKSB7XG4gICAgaWYgKCF0aGlzLnByZXBhcmVkSXRlbS5nZXRTZWxlY3RlZFR5cGVPYmplY3QoKSkge1xuICAgICAgLy8gU3RlcCAjMSBzZWxlY3QgYW4gb2JqZWN0IHR5cGUgaWYgbm90IHlldCBzZXRcbiAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX1RZUEUpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMucHJlcGFyZWRJdGVtLmhhc0NvbnRlbnQoKSkge1xuICAgICAgLy8gU3RlcCAjMiBhZGQgY29udGVudCBpZiBub3QgeWV0IGNvbnRhaW5lZFxuICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfQ09OVEVOVCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgIzMgZWRpdCBpbmRleGRhdGEgYW5kIHNhdmVcbiAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX0lOREVYREFUQSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUZW1wbGF0ZShzZWxlY3RlZFR5cGVPYmplY3QpIHtcbiAgICBjb25zdCB0eXBlOiBPYmplY3RUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoc2VsZWN0ZWRUeXBlT2JqZWN0Lm5hbWUpO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5wcmVwYXJlU2VydmljZVxuICAgICAgLmdldFRlbXBsYXRlcyhzZWxlY3RlZFR5cGVPYmplY3QubmFtZSlcbiAgICAgIC5zdWJzY3JpYmUoKHRlbXBsYXRlczogUHJlcGFyZWRJdGVtVGVtcGxhdGVbXSkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlUmVxdWlyZWQgPSB0aGlzLnByZXBhcmVkSXRlbS5zdGF0ZS5jb250ZW50c3RhdGUgPT09ICdSRVFVSVJFRCc7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgZmlsZTogdHlwZS5tYXhGaWxlcyA+IDAsXG4gICAgICAgICAgd2l0aG91dEZpbGU6ICEodHlwZS5taW5GaWxlcyA+IDApICYmICFmaWxlUmVxdWlyZWQsXG4gICAgICAgICAgdGVtcGxhdGVzOiB0ZW1wbGF0ZXMgfHwgW11cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBpZiB0aGUgY3VycmVudCBvYmplY3QgdHlwZSBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgdXBsb2FkIG9yIHRlbXBsYXRlIGNvbnRlbnRzXG4gICAgICAgIC8vIHdlIHNraXAgY29udGVudCBwaGFzZSBhbmQgbW92ZSBvbiB0byBpbmRleGRhdGEgcGhhc2VcbiAgICAgICAgaWYgKCFkYXRhLmZpbGUpIHtcbiAgICAgICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9JTkRFWERBVEEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJlcGFyZVBoYXNlID0ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5QSEFTRV9DT05URU5ULFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5zZXR1cFRpdGxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWdGaWx0ZXJPcHRpb25zID0gdGhpcy5jcmVhdGVUYWdGaWx0ZXJPcHRpb25zKHRlbXBsYXRlcyk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMgPSB7XG4gICAgICAgICAgY29udGV4dDoge2NvdW50OiB0aGlzLnByZXBhcmVQaGFzZS5kYXRhLnRlbXBsYXRlcy5sZW5ndGh9LFxuICAgICAgICAgIHJvd0RhdGE6IHRoaXMucHJlcGFyZVBoYXNlLmRhdGEudGVtcGxhdGVzLnNvcnQoVXRpbHMuc29ydFZhbHVlcygndGl0bGUnKSksXG4gICAgICAgICAgY29sdW1uRGVmczogdGhpcy5jb2xEZWZzLFxuICAgICAgICAgIHJvd0hlaWdodDogODBcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZVRhZ0ZpbHRlck9wdGlvbnModGVtcGxhdGVzOiBQcmVwYXJlZEl0ZW1UZW1wbGF0ZVtdKSB7XG4gICAgbGV0IHRhZ0ZpbHRlck9wdGlvbnMgPSBbXTtcbiAgICB0ZW1wbGF0ZXMuZm9yRWFjaCh0ZW1wbGF0ZSA9PiB7XG4gICAgICB0ZW1wbGF0ZS50YWdzLmZvckVhY2godGFnID0+IHtcbiAgICAgICAgdGFnRmlsdGVyT3B0aW9ucy5wdXNoKHtsYWJlbDogdGFnLCBmaWx0ZXI6IChub2RlKSA9PiBub2RlLmRhdGEudGFncy5pbmNsdWRlcyh0YWcpLCB2YWx1ZTogdHJ1ZX0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFV0aWxzLnVuaXFCeSh0YWdGaWx0ZXJPcHRpb25zLCAnbGFiZWwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgc3BlY2lmaWMgcHJlcGFyZSBwaGFzZS5cbiAgICogQHBhcmFtIHBoYXNlIC0gcGhhc2UgdG8gaW5pdCAoUEhBU0VfVFlQRSwgUEhBU0VfQ09OVEVOVCwgUEhBU0VfSU5ERVhEQVRBKVxuICAgKi9cbiAgcHJpdmF0ZSBpbml0UHJlcGFyZVBoYXNlKHBoYXNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByZXBhcmVQaGFzZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZFR5cGVPYmplY3QgPSB0aGlzLnByZXBhcmVkSXRlbS5nZXRTZWxlY3RlZFR5cGVPYmplY3QoKTtcblxuICAgIHN3aXRjaCAocGhhc2UpIHtcbiAgICAgIC8vIGluaXQgcHJlcGFyZSBwaGFzZSBmb3Igc2VsZWN0aW5nIHRoZSB0YXJnZXQgb2JqZWN0IHR5cGVcbiAgICAgIGNhc2UgdGhpcy5QSEFTRV9UWVBFOiB7XG5cbiAgICAgICAgdGhpcy5wcmVwYXJlUGhhc2UgPSB7XG4gICAgICAgICAgbmFtZTogdGhpcy5QSEFTRV9UWVBFLFxuICAgICAgICAgIGRhdGE6IHRoaXMuZ2V0UHJldmlld0RhdGEoKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNldHVwVGl0bGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIGluaXQgcHJlcGFyZSBwaGFzZSBmb3Igc2V0dGluZyB1cCBjb250ZW50XG4gICAgICBjYXNlIHRoaXMuUEhBU0VfQ09OVEVOVDoge1xuXG4gICAgICAgIHRoaXMuY2hvb3NlVGVtcGxhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlID0gbnVsbDtcblxuICAgICAgICAvLyBjaGVjayB3aGV0aGVyIG9yIG5vdCB0aGUgcHJlcGFyZWRJdGVtIGFscmVhZHkgY29udGFpbnMgYSBmaWxlIG9yIHRlbXBsYXRlXG4gICAgICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbS5oYXNDb250ZW50KCkpIHtcbiAgICAgICAgICBpZiAoIXRoaXMucHJlcGFyZWRJdGVtLnN0YXRlLnR5cGVzZWxlY3RlZGFsbG93ZWQpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzZWxlY3RlZCB0eXBlIGlzIG5vdCBhbGxvd2VkLCB3ZSdsbCBnbyBiYWNrIHRvIHRoZSB0eXBlIHNlbGVjdCBzdGF0ZSAuLi5cbiAgICAgICAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX1RZUEUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAuLi4gb3RoZXJ3aXNlIHdlIGdvIG9uIHNldHRpbmcgaW5kZXhkYXRhXG4gICAgICAgICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9JTkRFWERBVEEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbS5zdGF0ZS5jb250ZW50c3RhdGUgPT09ICdOT0NPTlRFTlRBTExPV0VEJykge1xuICAgICAgICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfSU5ERVhEQVRBKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW1wbGF0ZSh0aGlzLnNlbGVjdGVkVHlwZU9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8gaW5pdCBwcmVwYXJlIHBoYXNlIGZvciBhZGRpbmcgaW5kZXhkYXRhXG4gICAgICBjYXNlIHRoaXMuUEhBU0VfSU5ERVhEQVRBOiB7XG5cbiAgICAgICAgdGhpcy5jaG9vc2VUZW1wbGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghdGhpcy5wcmVwYXJlZEl0ZW0uc3RhdGUudHlwZXNlbGVjdGVkYWxsb3dlZCkge1xuICAgICAgICAgIC8vIGlmIHRoZSBzZWxlY3RlZCB0eXBlIGlzIG5vdCBhbGxvd2VkLCB3ZSdsbCBnbyBiYWNrIHRvIHRoZSB0eXBlIHNlbGVjdCBzdGF0ZSAuLi5cbiAgICAgICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9UWVBFKTtcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgIHRoaXMucHJlcGFyZUZvcm1Db250ZW50KCk7XG5cbiAgICAgICAgICB0aGlzLnByZXBhcmVQaGFzZSA9IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuUEhBU0VfSU5ERVhEQVRBLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5nZXRQcmV2aWV3RGF0YSgpXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLnNldHVwVGl0bGUoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFByZXZpZXdEYXRhKGluZGV4PzogbnVtYmVyKTogYW55IHtcbiAgICBpZiAodGhpcy5wcmVwYXJlZEl0ZW0gJiYgdGhpcy5wcmVwYXJlZEl0ZW0uY29udGVudHMgJiYgdGhpcy5wcmVwYXJlZEl0ZW0uY29udGVudHMubGVuZ3RoKSB7XG4gICAgICBpbmRleCA9IGluZGV4IHx8IDA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmV2aWV3SW5kZXg6IGluZGV4LFxuICAgICAgICBwcmV2aWV3RmlsZToge1xuICAgICAgICAgIHVyaTogdGhpcy5wcmVwYXJlU2VydmljZS5nZXRQcmV2aWV3VXJpKHRoaXMucHJlcGFyZWRJdGVtLmlkLCBpbmRleCksXG4gICAgICAgICAgdXJpUGRmOiB0aGlzLnByZXBhcmVTZXJ2aWNlLmdldFByZXZpZXdVcmkodGhpcy5wcmVwYXJlZEl0ZW0uaWQsIGluZGV4LCAnUERGJyksXG4gICAgICAgICAgbWltZXR5cGU6IHRoaXMucHJlcGFyZWRJdGVtLmNvbnRlbnRzW2luZGV4XS5taW1ldHlwZSxcbiAgICAgICAgICBtaW1lZ3JvdXA6IHRoaXMucHJlcGFyZWRJdGVtLmNvbnRlbnRzW2luZGV4XS5taW1lZ3JvdXAsXG4gICAgICAgICAgcGF0aDogdGhpcy5wcmVwYXJlZEl0ZW0uY29udGVudHNbaW5kZXhdLnBhdGgsXG4gICAgICAgICAgc2l6ZTogdGhpcy5wcmVwYXJlZEl0ZW0uY29udGVudHNbaW5kZXhdLnNpemVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge3ByZXZpZXdGaWxlOiBudWxsfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR1cCB0aXRsZSBmb3IgdGhlIGN1cnJlbnQgcHJlcGFyZWQgaXRlbSBiYXNlZCBvbiB0aGVcbiAgICogY3VycmVudCBwcmVwYXJlIHBoYXNlLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIHByZXBhcmUgcGhhc2UgaXMgaWRlbnRpZmllZC5cbiAgICovXG4gIHByaXZhdGUgc2V0dXBUaXRsZSgpIHtcblxuICAgIHRoaXMudHJhbnNsYXRlLmdldChbXG4gICAgICAnZW8ucHJlcGFyZS5sb2NhdGlvbi50aXRsZS5zeXNyb290JyxcbiAgICAgICdlby5wcmVwYXJlLmxvY2F0aW9uLnRpdGxlLnByZWZpeCcsXG4gICAgICAnZW8ucHJlcGFyZS5kZXRhaWxzLnR5cGUudGl0bGUnLFxuICAgICAgJ2VvLnByZXBhcmUuZGV0YWlscy50eXBlLnN1YnRpdGxlJyxcbiAgICAgICdlby5wcmVwYXJlLmRldGFpbHMuY29udGVudC5zdWJ0aXRsZScsXG4gICAgICAnZW8ucHJlcGFyZS5kZXRhaWxzLmluZGV4ZGF0YS5zdWJ0aXRsZSdcbiAgICBdKS5zdWJzY3JpYmUodCA9PiB7XG5cbiAgICAgIGxldCBoZWFkZXIgPSB7XG4gICAgICAgIHRpdGxlOiBudWxsLFxuICAgICAgICBsb2NhdGlvbjoge1xuICAgICAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgICAgIGxpbms6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgc3VidGl0bGU6IG51bGxcbiAgICAgIH07XG4gICAgICBzd2l0Y2ggKHRoaXMucHJlcGFyZVBoYXNlLm5hbWUpIHtcbiAgICAgICAgY2FzZSB0aGlzLlBIQVNFX1RZUEU6IHtcbiAgICAgICAgICBoZWFkZXIudGl0bGUgPSB0Wydlby5wcmVwYXJlLmRldGFpbHMudHlwZS50aXRsZSddO1xuICAgICAgICAgIGhlYWRlci5zdWJ0aXRsZSA9IHRbJ2VvLnByZXBhcmUuZGV0YWlscy50eXBlLnN1YnRpdGxlJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB0aGlzLlBIQVNFX0NPTlRFTlQ6IHtcbiAgICAgICAgICBjb25zdCB0eXBlT2JqZWN0ID0gdGhpcy5wcmVwYXJlZEl0ZW0uZ2V0U2VsZWN0ZWRUeXBlT2JqZWN0KCk7XG4gICAgICAgICAgaGVhZGVyLnRpdGxlID0gdHlwZU9iamVjdCA/IHR5cGVPYmplY3QubGFiZWwgOiAnJztcbiAgICAgICAgICBoZWFkZXIuc3VidGl0bGUgPSB0Wydlby5wcmVwYXJlLmRldGFpbHMuY29udGVudC5zdWJ0aXRsZSddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgdGhpcy5QSEFTRV9JTkRFWERBVEE6IHtcbiAgICAgICAgICBjb25zdCB0eXBlT2JqZWN0ID0gdGhpcy5wcmVwYXJlZEl0ZW0uZ2V0U2VsZWN0ZWRUeXBlT2JqZWN0KCk7XG4gICAgICAgICAgaGVhZGVyLnRpdGxlID0gdHlwZU9iamVjdCA/IHR5cGVPYmplY3QubGFiZWwgOiAnJztcbiAgICAgICAgICBoZWFkZXIuc3VidGl0bGUgPSB0Wydlby5wcmVwYXJlLmRldGFpbHMuaW5kZXhkYXRhLnN1YnRpdGxlJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gc2V0IHVwIGxvY2F0aW9uIGluZm9cbiAgICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQudHlwZSA9PT0gJ3N5c3Jvb3QnKSB7XG4gICAgICAgIGhlYWRlci5sb2NhdGlvbiA9IHtcbiAgICAgICAgICBsYWJlbDogdFsnZW8ucHJlcGFyZS5sb2NhdGlvbi50aXRsZS5zeXNyb290J10sXG4gICAgICAgICAgbGluazogbnVsbFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGFyZW50VHlwZSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC50eXBlKTtcbiAgICAgICAgaGVhZGVyLmxvY2F0aW9uID0ge1xuICAgICAgICAgIGxhYmVsOiBgICR7cGFyZW50VHlwZS5sYWJlbH06ICR7dGhpcy5wcmVwYXJlZEl0ZW0ucGFyZW50LnRpdGxlfWAsXG4gICAgICAgICAgbGluazogYC9vYmplY3QvJHt0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQuaWR9YFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5oZWFkZXIgPSBoZWFkZXI7XG4gICAgfSk7XG4gIH1cblxuICBzaG93VGVtcGxhdGVTZWxlY3RvcihzaG93OiBib29sZWFuKSB7XG4gICAgdGhpcy5jaG9vc2VUZW1wbGF0ZSA9IHNob3c7XG4gICAgdGhpcy5zZWxlY3RUZW1wbGF0ZSh0aGlzLnByZXBhcmVQaGFzZS5kYXRhLnRlbXBsYXRlc1swXSk7XG4gIH1cblxuICBkb3dubG9hZCgpIHtcbiAgICBpZiAodGhpcy5wcmVwYXJlUGhhc2UpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLnByZXBhcmVQaGFzZS5uYW1lID09PSAnY29udGVudCcgPyB0aGlzLnNlbGVjdGVkVGVtcGxhdGVGaWxlIDogdGhpcy5wcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3RmlsZTtcbiAgICAgIGZpbGUudXJpID0gZmlsZS51cmkucmVwbGFjZSh0aGlzLmJhY2tlbmQuZ2V0U2VydmljZUJhc2UoKSwgJycpO1xuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgdGhpcy5iYWNrZW5kLmRvd25sb2FkKGZpbGUudXJpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXNUZW1wbGF0ZUNhcGFiaWxpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FwYWJpbGl0ZXMuaGFzQ2FwYWJpbGl0eSgndGVtcGxhdGUnKTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5SWRGbihpbmRleCwgaXRlbSkge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG5cbiAgcHVibGljIHRyYWNrQnlJbmRleEZuKGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuYXBwbHlTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLnNlbGVjdGlvblxuICAgICAgICAuZmluZCh0aGlzLmFwcGx5U2VsZWN0aW9uLmluKS5mb2N1cyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXM6IFByZXBhcmVkSXRlbSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY29tbWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucHJlcGFyZWRJdGVtID0gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cInByZXBhcmVEZXRhaWxzX193cmFwcGVyXCIgKm5nSWY9XCIhbG9hZGluZzsgZWxzZSBtYWluU3Bpbm5lclwiPlxuICA8c2VjdGlvbiBjbGFzcz1cInByZXBhcmVEZXRhaWxzXCIgKm5nSWY9XCJwcmVwYXJlZEl0ZW0gJiYgcHJlcGFyZVBoYXNlOyBlbHNlIG5vSXRlbVwiXG4gICAgW25nQ2xhc3NdPVwie211bHRpZmlsZTogcHJlcGFyZWRJdGVtLmNvbnRlbnRjb3VudCA+IDEsIGNvbW1pdHRpbmc6IGNvbW1pdHRpbmd9XCI+XG4gICAgPGRpdiBjbGFzcz1cImVvLWhlYWRcIj5cblxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1pbmZvXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGVcIj57e2hlYWRlci50aXRsZX19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItc3ViLXRpdGxlIGgtbG9jYXRpb25cIiAqbmdJZj1cIiFoZWFkZXIubG9jYXRpb24ubGluazsgZWxzZSBsaW5rZWRcIj57e2hlYWRlci5sb2NhdGlvbi5sYWJlbH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXN1Yi10aXRsZSBoLXN1YnRpdGxlXCI+e3toZWFkZXIuc3VidGl0bGV9fTwvZGl2PlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbGlua2VkPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItc3ViLXRpdGxlIGgtc3VidGl0bGUtZGV0YWlsZWRcIj5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmxvY2F0aW9uLnRpdGxlLnByZWZpeDwvc3Bhbj5cbiAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cImhlYWRlci5sb2NhdGlvbi5saW5rXCI+e3toZWFkZXIubG9jYXRpb24ubGFiZWx9fTwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImJ0biBidG4tZG93bmxvYWRcIlxuICAgICAgICAgICpuZ0lmPVwicHJlcGFyZVBoYXNlLm5hbWUgPT09ICdjb250ZW50JyA/IHNlbGVjdGVkVGVtcGxhdGVGaWxlIDogcHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0ZpbGVcIlxuICAgICAgICAgIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NvbnRlbnQtZG93bmxvYWQuc3ZnJ1wiXG4gICAgICAgICAgW2ljb25UaXRsZV09XCIoJ2VvLmFjdGlvbi5kb3dubG9hZC5kbXMub2JqZWN0LmNvbnRlbnQubGFiZWwnIHwgdHJhbnNsYXRlKVwiIChjbGljayk9XCJkb3dubG9hZCgpXCI+PC9lby1pY29uPlxuICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImJ0biBidG4tZGVsZXRlXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfdHJhc2guc3ZnJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dEZWxldGVEaWFsb2cgPSB0cnVlO1wiPjwvZW8taWNvbj5cbiAgICAgICAgPCEtLSBidXR0b25zIHdoaWxlIGNob29zaW5nIGEgdGVtcGxhdGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaG9vc2VUZW1wbGF0ZVwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tdHBsLWFib3J0XCIgKGNsaWNrKT1cInNob3dUZW1wbGF0ZVNlbGVjdG9yKGZhbHNlKVwiXG4gICAgICAgICAgICB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5jYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tdHBsLWFwcGx5XCIgKGNsaWNrKT1cImFkZFRlbXBsYXRlKHNlbGVjdGVkVGVtcGxhdGUpXCIgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZFRlbXBsYXRlXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLnRlbXBsYXRlLnNlbGVjdDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJlcGFyZVBoYXNlLm5hbWUgPT09ICdpbmRleGRhdGEnXCI+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmVzZXRPYmplY3RUeXBlKClcIiB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5yZXNldE9iamVjdDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNvbW1pdCgpXCIgY2xhc3M9XCJidG4taWR4LXNhdmVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie3ByaW1hcnk6IHByZXBhcmVkSXRlbS5zdGF0ZS5wYXJlbnRpc3Jvb3QgJiYgcHJlcGFyZWRJdGVtLmNvbnRlbnRjb3VudCA+IDF9XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtU3RhdGU/LmludmFsaWQgfHwgY29tbWl0dGluZ1wiIHRyYW5zbGF0ZT5lby5wcmVwYXJlLnNhdmU8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNvbW1pdCh0cnVlKVwiIFtkaXNhYmxlZF09XCJmb3JtU3RhdGU/LmludmFsaWQgfHwgY29tbWl0dGluZ1wiIGNsYXNzPVwicHJpbWFyeSBidG4taWR4LXNhdmVvcGVuXCJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwicHJlcGFyZWRJdGVtPy5zdGF0ZS5wYXJlbnRpc3Jvb3QgJiYgcHJlcGFyZWRJdGVtPy5jb250ZW50Y291bnQgPiAxXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLnNhdmVvcGVuPC9idXR0b24+XG5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImVvLWJvZHlcIiBbbmdTd2l0Y2hdPVwicHJlcGFyZVBoYXNlLm5hbWVcIiAqbmdJZj1cIiFjb21taXR0aW5nOyBlbHNlIHNwaW5uZXJcIj5cblxuICAgICAgPCEtLSBQSEFTRSBUWVBFIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInBoYXNlIHR5cGVcIiAqbmdTd2l0Y2hDYXNlPVwiJ3R5cGUnXCI+XG5cbiAgICAgICAgPCEtLSB3aXRoIHByZXZpZXcgLS0+XG4gICAgICAgIDx5dmMtc3BsaXQtdmlldyAqbmdJZj1cInByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdGaWxlOyBlbHNlIG5vcHJldmlld1wiXG4gICAgICAgICAgW2xheW91dFNldHRpbmdzSURdPVwiJ3ByZXBhcmUuZGV0YWlscy5waGFzZS50eXBlJ1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSB5dmNTcGxpdEFyZWEgW3NpemVdPVwiMzBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpbGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZS1zZWxlY3QgZW1wdHlcIiAqbmdJZj1cInByZXBhcmVkSXRlbS50eXBlcy5sZW5ndGggPT0gMFwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICBlby5wcmVwYXJlLmRldGFpbHMudHlwZS5lbXB0eTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGUtc2VsZWN0IGVtcHR5XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFwcmVwYXJlZEl0ZW0uc3RhdGUudHlwZXNlbGVjdGVkYWxsb3dlZCAmJiBwcmVwYXJlZEl0ZW0uc3RhdGUudHlwZXNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInt0eXBlOiBwcmVwYXJlZEl0ZW0uc2VsZWN0ZWR0eXBlLmxhYmVsLCBmaWxlbmFtZTogZ2V0RmlsZU5hbWVzKHByZXBhcmVkSXRlbSl9XCJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5kZXRhaWxzLnR5cGUubm90YWxsb3dlZDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZS1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGVcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBwcmVwYXJlZEl0ZW0udHlwZXM7IHRyYWNrQnk6IHRyYWNrQnlJZEZuXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPYmplY3RUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHlwZS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uSWRdPVwidHlwZS5pY29uLmlkXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e3R5cGUubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj57e3R5cGUuZGVzY3JpcHRpb259fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPGgyIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmRldGFpbHMuY29udGVudHMudGl0bGU8L2gyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb250ZW50IG9mIHByZXBhcmVkSXRlbS5jb250ZW50czsgdHJhY2tCeTogdHJhY2tCeUluZGV4Rm47IGluZGV4IGFzIGlkeDtcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3SW5kZXggPT0gaWR4fVwiIChjbGljayk9XCJzZXRQcmV2aWV3VXJpKGlkeClcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7Y29udGVudC5wYXRofX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImJ0biBidG4tZGVsZXRlLWNvbnRlbnRcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY190cmFzaC5zdmcnXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dDb250ZW50RGVsZXRlRGlhbG9nID0gdHJ1ZTsgZGVsZXRlZENvbnRlbnRJbmRleCA9IGlkeDtcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29udGVudC5leGlzdHNjb3VudCA+IDBcIiBjbGFzcz1cImF0dGVudGlvblwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3snZW8ucHJlcGFyZS5jb250ZW50LmV4aXN0c2NvdW50Lm1lc3NhZ2UnfHRyYW5zbGF0ZTogKHtjb3VudDogY29udGVudC5leGlzdHNjb3VudH0pfX1cIj4hXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSB5dmNTcGxpdEFyZWEgW3NpemVdPVwiNzBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1tZWRpYS13cmFwXCI+XG4gICAgICAgICAgICAgIDxlby1wcmVwYXJlLWNvbnRlbnQtZXhpc3RzLWluZm8gW2NvbnRlbnRdPVwicHJlcGFyZWRJdGVtLmNvbnRlbnRzW3ByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdJbmRleF1cIj5cbiAgICAgICAgICAgICAgPC9lby1wcmVwYXJlLWNvbnRlbnQtZXhpc3RzLWluZm8+XG4gICAgICAgICAgICAgIDxlby1tZWRpYSBbZG1zT2JqZWN0XT1cInBzZXVkb0Rtc09iamVjdFwiIFtwcmV2aWV3RmlsZV09XCJwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3RmlsZVwiPjwvZW8tbWVkaWE+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3l2Yy1zcGxpdC12aWV3PlxuXG4gICAgICAgIDwhLS0gd2l0aG91dCBwcmV2aWV3IC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vcHJldmlldz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWxlc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9iamVjdC10eXBlLXNlbGVjdFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGVcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBwcmVwYXJlZEl0ZW0udHlwZXM7IHRyYWNrQnk6IHRyYWNrQnlJZEZuXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T2JqZWN0VHlwZSh0eXBlKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0eXBlLWljb25cIj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uSWRdPVwidHlwZS5pY29uLmlkXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e3R5cGUubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3t0eXBlLmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUEhBU0UgQ09OVEVOVCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwaGFzZSBjb250ZW50XCIgKm5nU3dpdGNoQ2FzZT1cIidjb250ZW50J1wiPlxuXG4gICAgICAgIDwhLS0gcGFuZWwgZm9yIHNlbGVjdGluZyBhIHRlbXBsYXRlIHRvIGJlIHVzZWQgYXMgaXRlbXMgY29udGVudCAtLT5cbiAgICAgICAgPHl2Yy1zcGxpdC12aWV3ICpuZ0lmPVwiY2hvb3NlVGVtcGxhdGU7IGVsc2UgYXR0YWNoXCIgW2xheW91dFNldHRpbmdzSURdPVwiJ3ByZXBhcmUuZGV0YWlscy5waGFzZS5jb250ZW50J1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSB5dmNTcGxpdEFyZWEgW3NpemVdPVwiNDBcIj5cbiAgICAgICAgICAgIDwhLS0gbGlzdCBvZiBhdmFpbGFibGUgdGVtcGxhdGVzIC0tPlxuICAgICAgICAgICAgPGVvLWxpc3QtY29udGFpbmVyICNlb0xpc3QgW2xvYWRpbmddPVwiZmFsc2VcIiBjbGFzcz1cInRlbXBsYXRlc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGVvLWljb24gY2xhc3M9XCJlby1oZWFkZXItaWNvblwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3RlbXBsYXRlLnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVvLWhlYWRlci1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8taGVhZGVyLXRpdGxlXCIgdHJhbnNsYXRlPmVvLnByZXBhcmUudGVtcGxhdGUubGlzdC50aXRsZTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1oZWFkZXItYWN0aW9uc1wiPlxuXG4gICAgICAgICAgICAgICAgICA8ZW8tb3ZlcmxheSAjb0ZpbHRlciBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19maWx0ZXIuc3ZnJ1wiIFtpY29uQ2xhc3NdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvdmVybGF5LWZpbHRlclwiIFt0aXRsZV09XCInZW8ubGlzdC5maWx0ZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGFjdGl2ZSk9XCJvRmlsdGVyLm9uQWN0aXZlQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxlby1jdXN0b20tZmlsdGVyICNjRmlsdGVyIChjaGFuZ2UpPVwiY0ZpbHRlci51cGRhdGVHcmlkKGVvTGlzdC5lb0dyaWRTdWJqZWN0LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoYWN0aXZlKT1cIm9GaWx0ZXIub25BY3RpdmVDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZW8tdGV4dC1maWx0ZXIgW3RpdGxlXT1cIidlby5wcmVwYXJlLnRlbXBsYXRlLmZpbHRlci50ZXh0LnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0Y2hGaWVsZHNdPVwiWyd0aXRsZScsICdkZXNjcmlwdGlvbicsICd0YWdzJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlby5wcmVwYXJlLnRlbXBsYXRlLmZpbHRlci50ZXh0LnRpdGxlJ1wiPjwvZW8tdGV4dC1maWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPGVvLXNldC1maWx0ZXIgW29wZXJhdG9yXT1cIidPUidcIiBbdGl0bGVdPVwiJ2VvLnByZXBhcmUudGVtcGxhdGUuZmlsdGVyLnNldC50aXRsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWdGaWx0ZXJPcHRpb25zPy5sZW5ndGhcIiBbb3B0aW9uc109XCJ0YWdGaWx0ZXJPcHRpb25zXCI+PC9lby1zZXQtZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICA8L2VvLWN1c3RvbS1maWx0ZXI+XG4gICAgICAgICAgICAgICAgICA8L2VvLW92ZXJsYXk+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPGVvLWdyaWQgI2VvR3JpZCAqbmdJZj1cImdyaWRPcHRpb25zPy5yb3dEYXRhXCIgW2dyaWRPcHRpb25zXT1cImdyaWRPcHRpb25zXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93SGVhZGVyXT1cInRydWVcIiBbc2hvd0Zvb3Rlcl09XCJmYWxzZVwiIFtzZWxlY3Rpb25MaW1pdF09XCIxXCJcbiAgICAgICAgICAgICAgICAgIChlb0dyaWRTZWxlY3Rpb25DaGFuZ2VkKT1cInNlbGVjdFRlbXBsYXRlKCRldmVudFswXSlcIj5cbiAgICAgICAgICAgICAgICA8L2VvLWdyaWQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9lby1saXN0LWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbc2l6ZV09XCI2MFwiPlxuICAgICAgICAgICAgPCEtLSBwcmV2aWV3IG9mIHNlbGVjdGVkIHRlbXBsYXRlIC0tPlxuICAgICAgICAgICAgPGVvLW1lZGlhIFtwcmV2aWV3RmlsZV09XCJzZWxlY3RlZFRlbXBsYXRlRmlsZVwiPjwvZW8tbWVkaWE+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC95dmMtc3BsaXQtdmlldz5cblxuICAgICAgICA8IS0tIGFkZCBjb250ZW50IGdlbmVyYWwgb3ZlcnZpZXcgKHVwbG9hZCwgdGVtcGxhdGUsIG5vbmUpIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2F0dGFjaD5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvXCIgKm5nSWY9XCIhdXBsb2FkSW5Qcm9ncmVzc1wiIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmF0dGFjaG1lbnQuaW5mbzwvZGl2PlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiICNmaWxlIChjaGFuZ2UpPVwiZmlsZUNoYW5nZUxpc3RlbmVyKCRldmVudC50YXJnZXQuZmlsZXMpXCI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0YWNobWVudHNcIiAqbmdJZj1cIiF1cGxvYWRJblByb2dyZXNzOyBlbHNlIHVwbG9hZHNwaW5uZXJcIj5cblxuICAgICAgICAgICAgPCEtLSB1cGxvYWQgYSBmaWxlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnQgYXR0LWZpbGVcIiAqbmdJZj1cInByZXBhcmVQaGFzZS5kYXRhLmZpbGVcIiAoY2xpY2spPVwidXBsb2FkKClcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZ1wiPlxuICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2ZpbGVfdXBsb2FkLnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnByZXBhcmUuYXR0YWNobWVudC51cGxvYWQudGl0bGU8L2gzPlxuICAgICAgICAgICAgICA8cCB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5hdHRhY2htZW50LnVwbG9hZC5kZXNjPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gc2VsZWN0IGEgdGVtcGxhdGUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0YWNobWVudCBhdHQtdG1wbFwiICpuZ0lmPVwicHJlcGFyZVBoYXNlLmRhdGEudGVtcGxhdGVzLmxlbmd0aCA+IDAgJiYgaGFzVGVtcGxhdGVDYXBhYmlsaXR5KClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1RlbXBsYXRlU2VsZWN0b3IodHJ1ZSlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZ1wiPlxuICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3ByZXBhcmVfYWRkLnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnByZXBhcmUuYXR0YWNobWVudC50ZW1wbGF0ZS50aXRsZTwvaDM+XG4gICAgICAgICAgICAgIDxwIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmF0dGFjaG1lbnQudGVtcGxhdGUuZGVzYzwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIG5vIGZpbGUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0YWNobWVudCBhdHQtbm9uZVwiICpuZ0lmPVwicHJlcGFyZVBoYXNlLmRhdGEud2l0aG91dEZpbGVcIiAoY2xpY2spPVwibm9GaWxlKClcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZ1wiPlxuICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX25vLWZpbGUuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5hdHRhY2htZW50Lm5vZmlsZS50aXRsZTwvaDM+XG4gICAgICAgICAgICAgIDxwIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmF0dGFjaG1lbnQubm9maWxlLmRlc2M8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSB1cGxvYWQgcHJvZ3Jlc3MgaW5kaWNhdG9yIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3VwbG9hZHNwaW5uZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1pbmRpY2F0b3JcIj5cbiAgICAgICAgICAgIDxlby1sb2FkaW5nLXNwaW5uZXIgW3NpemVdPVwiJ2xhcmdlJ1wiPjwvZW8tbG9hZGluZy1zcGlubmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUEhBU0UgSU5ERVhEQVRBIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInBoYXNlIGluZGV4ZGF0YVwiICpuZ1N3aXRjaENhc2U9XCInaW5kZXhkYXRhJ1wiPlxuXG4gICAgICAgIDwhLS0gZm9ybSBhbmQgcHJldmlldyAtLT5cbiAgICAgICAgPHl2Yy1zcGxpdC12aWV3ICpuZ0lmPVwicHJlcGFyZWRJdGVtLmNvbnRlbnRzOyBlbHNlIGp1c3Rmb3JtXCIgW2xheW91dFNldHRpbmdzSURdPVwiJ3ByZXBhcmUuc3RhdGUnXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbc2l6ZV09XCI1MFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmlsZXNcIj5cblxuICAgICAgICAgICAgICA8IS0tIGluZGV4ZGF0YSBmb3JtIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwianVzdGZvcm1cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8IS0tIGxpc3Qgb2YgY29udGVudHMgKGluIGNhc2Ugb2YgYnVsayB1cGxvYWQpIHRoYXQgY2FuIGJlIHByZXZpZXdlZCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtc2VsZWN0XCI+XG5cbiAgICAgICAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnByZXBhcmUuZGV0YWlscy5jb250ZW50cy50aXRsZTwvaDI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbnRlbnQgb2YgcHJlcGFyZWRJdGVtLmNvbnRlbnRzOyB0cmFja0J5OiB0cmFja0J5SW5kZXhGbjsgaW5kZXggYXMgaWR4XCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogcHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0luZGV4ID09PSBpZHh9XCIgKGNsaWNrKT1cInNldFByZXZpZXdVcmkoaWR4KVwiPlxuICAgICAgICAgICAgICAgICAge3tjb250ZW50LnBhdGh9fSA8c3BhbiAqbmdJZj1cImNvbnRlbnQuZXhpc3RzY291bnQgPiAwXCIgY2xhc3M9XCJhdHRlbnRpb25cIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7J2VvLnByZXBhcmUuY29udGVudC5leGlzdHNjb3VudC5tZXNzYWdlJ3x0cmFuc2xhdGU6ICh7Y291bnQ6IGNvbnRlbnQuZXhpc3RzY291bnR9KX19XCI+ITwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbc2l6ZV09XCI1MFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVvLW1lZGlhLXdyYXBcIj5cbiAgICAgICAgICAgICAgPGVvLXByZXBhcmUtY29udGVudC1leGlzdHMtaW5mbyBbY29udGVudF09XCJwcmVwYXJlZEl0ZW0uY29udGVudHNbcHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0luZGV4XVwiPlxuICAgICAgICAgICAgICA8L2VvLXByZXBhcmUtY29udGVudC1leGlzdHMtaW5mbz5cbiAgICAgICAgICAgICAgPGVvLW1lZGlhIFtkbXNPYmplY3RdPVwicHNldWRvRG1zT2JqZWN0XCIgW3ByZXZpZXdGaWxlXT1cInByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdGaWxlXCI+PC9lby1tZWRpYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwveXZjLXNwbGl0LXZpZXc+XG5cbiAgICAgICAgPCEtLSBqdXN0IHRoZSBmb3JtIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2p1c3Rmb3JtPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRhaW5lciBzaXR1YXRpb24tY3JlYXRlXCIgKm5nSWY9XCJmb3JtT3B0aW9uc1wiPlxuICAgICAgICAgICAgPGVvLW9iamVjdC1mb3JtICNmb3JtIFtmb3JtT3B0aW9uc109XCJmb3JtT3B0aW9uc1wiIChzdGF0dXNDaGFuZ2VkKT1cIm9uRm9ybVN0YXR1c0NoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9lby1vYmplY3QtZm9ybT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3NlY3Rpb24+XG5cbiAgPG5nLXRlbXBsYXRlICNzcGlubmVyPlxuICAgIDxkaXYgY2xhc3M9XCJlby1ib2R5XCI+XG4gICAgICA8ZW8tbG9hZGluZy1zcGlubmVyIHNpemU9XCJtZWRpdW1cIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbWFpblNwaW5uZXI+XG4gIDxkaXYgY2xhc3M9XCJwcmVwYXJlRGV0YWlsc19fbWFpbi1zcGlubmVyXCI+XG4gICAgPGVvLWxvYWRpbmctc3Bpbm5lciBzaXplPVwibWVkaXVtXCI+PC9lby1sb2FkaW5nLXNwaW5uZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48bmctdGVtcGxhdGUgI25vSXRlbT5cbiAgPGVvLWVycm9yLW1lc3NhZ2UgW2VtcHR5U3RhdGVdPVwie2ljb246IGVtcHR5U3RhdGUuaWNvbiwgdGV4dDogZW1wdHlTdGF0ZS50ZXh0LCBjbGFzc05hbWU6IGVtcHR5U3RhdGUuY2xhc3NOYW1lfVwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi5lcnJvclwiPjwvbmctY29udGVudD5cbiAgPC9lby1lcnJvci1tZXNzYWdlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGVvLWRpYWxvZyBbdGl0bGVdPVwiJ2VvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuZGlhbG9nLnRpdGxlJyB8IHRyYW5zbGF0ZVwiIFsodmlzaWJsZSldPVwic2hvd0RlbGV0ZURpYWxvZ1wiXG4gIFtmb2N1c09uU2hvd109XCJmYWxzZVwiIFttaW5XaWR0aF09XCI0MDBcIiBbc3R5bGVDbGFzc109XCIncHJlcGFyZS1kZWxldGVfX2RpYWxvZydcIj5cblxuICA8ZGl2Pnt7J2VvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuZGlhbG9nLm1lc3NhZ2UnIHwgdHJhbnNsYXRlfX08L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbnMgcHJlcGFyZS1kZWxldGUtLWFjdGlvbi1idXR0b25zIGZsZXgtcm93XCI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gY2FuY2VsXCIgKGNsaWNrKT1cInNob3dEZWxldGVEaWFsb2cgPSBmYWxzZVwiXG4gICAgICB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5jYW5jZWw8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjY29uZmlybURlbGV0ZSAoY2xpY2spPVwicmVtb3ZlSXRlbShwcmVwYXJlZEl0ZW0pXCIgY2xhc3M9XCJidXR0b24gcHJpbWFyeVwiXG4gICAgICB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5kaWFsb2cub2s8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2VvLWRpYWxvZz5cblxuPGVvLWRpYWxvZyBbdGl0bGVdPVwiJ2VvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuY29udGVudC5kaWFsb2cudGl0bGUnIHwgdHJhbnNsYXRlXCIgWyh2aXNpYmxlKV09XCJzaG93Q29udGVudERlbGV0ZURpYWxvZ1wiXG4gIFttaW5XaWR0aF09XCI0MDBcIiBbc3R5bGVDbGFzc109XCIncHJlcGFyZS1kZWxldGVfX2RpYWxvZydcIj5cblxuICA8ZGl2Pnt7J2VvLnByZXBhcmUuZGV0YWlscy5kZWxldGUuY29udGVudC5kaWFsb2cubWVzc2FnZScgfCB0cmFuc2xhdGU6ICh7Y29udGVudFBhdGg6IHByZXBhcmVkSXRlbT8uY29udGVudHMgP1xuICAgIHByZXBhcmVkSXRlbT8uY29udGVudHNbZGVsZXRlZENvbnRlbnRJbmRleF0/LnBhdGggOiAnJ30pfX08L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbnMgcHJlcGFyZS1kZWxldGUtLWFjdGlvbi1idXR0b25zIGZsZXgtcm93XCI+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidXR0b24gY2FuY2VsXCIgKGNsaWNrKT1cInNob3dDb250ZW50RGVsZXRlRGlhbG9nID0gZmFsc2VcIlxuICAgICAgdHJhbnNsYXRlPmVvLmN0YS5idXR0b24uY2FuY2VsPC9idXR0b24+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI2NvbmZpcm1Db250ZW50RGVsZXRlIChjbGljayk9XCJyZW1vdmVJdGVtQ29udGVudChwcmVwYXJlZEl0ZW0sIGRlbGV0ZWRDb250ZW50SW5kZXgpXCJcbiAgICAgIGNsYXNzPVwiYnV0dG9uIHByaW1hcnlcIiB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5kaWFsb2cub2s8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2VvLWRpYWxvZz5cbiJdfQ==
569
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL3ByZXBhcmUtZGV0YWlscy9wcmVwYXJlLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvcHJlcGFyZS1kZXRhaWxzL3ByZXBhcmUtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLFNBQVMsRUFBYyxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpILE9BQU8sRUFLTCxZQUFZLEVBS1osS0FBSyxFQUNMLFNBQVMsRUFDVixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUMsWUFBWSxFQUFFLGNBQWMsRUFBQyxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCNUQsSUFBTSx1QkFBdUIsR0FBN0IsTUFBTSx1QkFBdUI7SUF5QmxDLElBQ0ksWUFBWSxDQUFDLElBQWtCO1FBQ2pDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsSCxNQUFNLG1CQUFtQixHQUFHLDZCQUE2QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0SCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7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NnNCQ3hDcEMseTJkQXFUQTs7QUQ3UWEsdUJBQXVCO0lBTm5DLFlBQVksRUFBRTtHQU1GLHVCQUF1QixDQWlsQm5DOzsyRkFqbEJZLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxvQkFBb0I7d1VBYVgsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNO2dCQUNFLFVBQVU7c0JBQTVCLFNBQVM7dUJBQUMsTUFBTTtnQkFDVyxtQkFBbUI7c0JBQTlDLFNBQVM7dUJBQUMsZUFBZTtnQkFDUywwQkFBMEI7c0JBQTVELFNBQVM7dUJBQUMsc0JBQXNCO2dCQWM3QixZQUFZO3NCQURmLEtBQUs7dUJBQUMsY0FBYztnQkFvQlosVUFBVTtzQkFBbEIsS0FBSztnQkFpQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFHSCxRQUFRO3NCQURYLFdBQVc7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb2xEZWYsIEdyaWRPcHRpb25zfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvY29yZSc7XG5pbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBCYWNrZW5kU2VydmljZSwgQ2FwYWJpbGl0aWVzU2VydmljZSxcbiAgTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gIE9iamVjdFR5cGUsXG4gIFByZXBhcmVTZXJ2aWNlLFxuICBQcmVwYXJlZEl0ZW0sXG4gIFByZXBhcmVkSXRlbVRlbXBsYXRlLFxuICBQcmVwYXJlZEl0ZW1UeXBlLFxuICBTeXN0ZW1TZXJ2aWNlLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICBVdGlscyxcbiAgRG1zT2JqZWN0XG59IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge1VudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWR9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQge1BlbmRpbmdDaGFuZ2VzU2VydmljZX0gZnJvbSAnLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvcGVuZGluZy1jaGFuZ2VzL3BlbmRpbmctY2hhbmdlcy5zZXJ2aWNlJztcbmltcG9ydCB7U2VsZWN0aW9uQ29uZmlnLCBTZWxlY3Rpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9lby1mcmFtZXdvcmstY29yZS9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtQcmV2aWV3RmlsZX0gZnJvbSAnLi4vbWVkaWEvbWVkaWEuY29tcG9uZW50JztcbmltcG9ydCB7Rm9ybVN0YXR1c0NoYW5nZWRFdmVudH0gZnJvbSAnLi4vb2JqZWN0LWZvcm0vZm9ybS1zdGF0dXMtY2hhbmdlZC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtPYmplY3RGb3JtT3B0aW9uc30gZnJvbSAnLi4vb2JqZWN0LWZvcm0vaW5kZXgnO1xuaW1wb3J0IHtPYmplY3RGb3JtQ29tcG9uZW50fSBmcm9tICcuLi9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByZXBhcmVQaGFzZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGF0YToge1xuICAgIHByZXZpZXdJbmRleD86IG51bWJlcixcbiAgICBwcmV2aWV3RmlsZT86IFByZXZpZXdGaWxlLFxuICAgIGZpbGU/OiBib29sZWFuLFxuICAgIHdpdGhvdXRGaWxlPzogYm9vbGVhbixcbiAgICB0ZW1wbGF0ZXM/OiBhbnlbXVxuICB9O1xufVxuQFVudGlsRGVzdHJveSgpXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby1wcmVwYXJlLWRldGFpbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJlcGFyZS1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJlcGFyZS1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUHJlcGFyZURldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBncmlkT3B0aW9uczogR3JpZE9wdGlvbnM7XG5cbiAgLy8gSUQgc2V0IGJ5IHBlbmRpbmdDaGFuZ2VzIHNlcnZpY2Ugd2hlbiBlZGl0aW5nIGluZGV4ZGF0YVxuICAvLyBVc2VkIHRvIGZpbmlzaCB0aGUgcGVuZGluZyB0YXNrIHdoZW4gZWRpdGluZyBpcyBkb25lXG4gIHByaXZhdGUgcGVuZGluZ1Rhc2tJZDogc3RyaW5nO1xuICBwcml2YXRlIHNlbGVjdGVkVHlwZU9iamVjdDtcblxuICAvLyBoaWRkZW4gZmlsZSBpbnB1dCB0byB0cmlnZ2VyIGZpbGUgdXBsb2Fkc1xuICBAVmlld0NoaWxkKCdmaWxlJykgZmlsZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZm9ybScpIG9iamVjdEZvcm06IE9iamVjdEZvcm1Db21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2NvbmZpcm1EZWxldGUnKSBjb25maXJtRGVsZXRlQnV0dG9uOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdjb25maXJtQ29udGVudERlbGV0ZScpIGNvbmZpcm1Db250ZW50RGVsZXRlQnV0dG9uOiBFbGVtZW50UmVmO1xuXG4gIC8vIHByZXBhcmF0aW9uIGlzIGRpdmlkZWQgaW50byBzZXZlcmFsIHBoYXNlc1xuICAvLyBzZWxlY3QgYW4gb2JqZWN0IHR5cGVcbiAgUEhBU0VfVFlQRSA9ICd0eXBlJztcbiAgLy8gYWRkIGNvbnRlbnRcbiAgUEhBU0VfQ09OVEVOVCA9ICdjb250ZW50JztcbiAgLy8gc2V0IGluZGV4ZGF0YVxuICBQSEFTRV9JTkRFWERBVEEgPSAnaW5kZXhkYXRhJztcblxuICBfcHJlcGFyZWRJdGVtOiBQcmVwYXJlZEl0ZW07XG4gIHBzZXVkb0Rtc09iamVjdDogRG1zT2JqZWN0O1xuXG4gIEBJbnB1dCgncHJlcGFyZWRJdGVtJylcbiAgc2V0IHByZXBhcmVkSXRlbShpdGVtOiBQcmVwYXJlZEl0ZW0pIHtcbiAgICBjb25zdCBvYmplY3RUb1N0cmluZ2lmaWVkVmFsdWVBcnJheSA9IChvYmopID0+IEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKG9iaiB8fCB7fSkuc29ydCgpLm1hcChrZXkgPT4gb2JqW2tleV0pKTtcbiAgICBjb25zdCBpc1Byb2Nlc3NpbmdBbGxvd2VkID0gb2JqZWN0VG9TdHJpbmdpZmllZFZhbHVlQXJyYXkodGhpcy5fcHJlcGFyZWRJdGVtKSAhPT0gb2JqZWN0VG9TdHJpbmdpZmllZFZhbHVlQXJyYXkoaXRlbSk7XG4gICAgaWYgKGl0ZW0gJiYgaXRlbS50eXBlcykge1xuICAgICAgaXRlbS50eXBlcyA9IGl0ZW0udHlwZXMuc29ydChVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpKTtcbiAgICB9XG4gICAgdGhpcy5fcHJlcGFyZWRJdGVtID0gaXRlbTtcbiAgICBpZiAodGhpcy5wcmVwYXJlZEl0ZW0gJiYgdGhpcy5wcmVwYXJlZEl0ZW0uaWQgJiYgaXNQcm9jZXNzaW5nQWxsb3dlZCkge1xuICAgICAgdGhpcy5wcm9jZXNzKCk7XG4gICAgICAvLyB3ZSBuZWVkIHRoaXMgZm9yIHRoZSBPMzY1IGludGVncmF0aW9uIFRVSy0zNTc2XG4gICAgICB0aGlzLnBzZXVkb0Rtc09iamVjdCA9IG5ldyBEbXNPYmplY3Qoe2lkOiB0aGlzLnByZXBhcmVkSXRlbS5pZCwgdmVyc2lvbjogMH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwcmVwYXJlZEl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZXBhcmVkSXRlbTtcbiAgfVxuXG5cbiAgQElucHV0KCkgZW1wdHlTdGF0ZSA9IHtpY29uOiAnYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19lcnJvci5zdmcnLCB0ZXh0OiAnJywgY2xhc3NOYW1lOiAnZGV0YWlscy1lcnJvcid9O1xuXG4gIHByZXBhcmVQaGFzZTogUHJlcGFyZVBoYXNlO1xuICBzZWxlY3RlZFRlbXBsYXRlOiBQcmVwYXJlZEl0ZW1UZW1wbGF0ZTtcbiAgc2VsZWN0ZWRUZW1wbGF0ZUZpbGU6IFByZXZpZXdGaWxlO1xuICBmb3JtT3B0aW9uczogT2JqZWN0Rm9ybU9wdGlvbnM7XG4gIGZvcm1TdGF0ZTogRm9ybVN0YXR1c0NoYW5nZWRFdmVudDtcbiAgY2hvb3NlVGVtcGxhdGU6IGJvb2xlYW47XG4gIHVwbG9hZEluUHJvZ3Jlc3M6IGJvb2xlYW47XG4gIGNvbW1pdHRpbmc6IGJvb2xlYW47XG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgdGFnRmlsdGVyT3B0aW9uczogYW55O1xuICBfc2hvd0RlbGV0ZURpYWxvZyA9IGZhbHNlO1xuICBfc2hvd0NvbnRlbnREZWxldGVEaWFsb2cgPSBmYWxzZTtcbiAgZGVsZXRlZENvbnRlbnRJbmRleDogbnVtYmVyO1xuXG4gIC8vIHRpdGxlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZGV0YWlscyBoZWFkZXJcbiAgaGVhZGVyID0ge1xuICAgIHRpdGxlOiBudWxsLFxuICAgIGxvY2F0aW9uOiB7XG4gICAgICBsYWJlbDogbnVsbCxcbiAgICAgIGxpbms6IG51bGxcbiAgICB9LFxuICAgIHN1YnRpdGxlOiBudWxsXG4gIH07XG5cbiAgY29sRGVmczogQ29sRGVmW10gPSBbe1xuICAgIGhlYWRlck5hbWU6ICcnLFxuICAgIGZpZWxkOiAndGl0bGUnLFxuICAgIGNlbGxSZW5kZXJlcjogdGhpcy5jZWxsUmVuZGVyZXIsXG4gICAgZmlsdGVyOiBmYWxzZVxuICB9XTtcblxuICBASW5wdXQoKSBhcHBseVNlbGVjdGlvbjogU2VsZWN0aW9uQ29uZmlnO1xuXG4gIEBPdXRwdXQoKSBvbkl0ZW1DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxQcmVwYXJlZEl0ZW0+KCk7XG4gIEBPdXRwdXQoKSBvbkNvbW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgb25JdGVtUmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxQcmVwYXJlZEl0ZW0+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdHlwZScpXG4gIGdldCBkYXRhVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlZEl0ZW0gJiYgdGhpcy5wcmVwYXJlZEl0ZW0uc2VsZWN0ZWR0eXBlID8gdGhpcy5wcmVwYXJlZEl0ZW0uc2VsZWN0ZWR0eXBlLm5hbWUgOiAnbm9uZSc7XG4gIH1cblxuICBzZXQgc2hvd0RlbGV0ZURpYWxvZyh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93RGVsZXRlRGlhbG9nID0gdmFsO1xuXG4gICAgaWYgKHRoaXMuX3Nob3dEZWxldGVEaWFsb2cpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb25maXJtRGVsZXRlQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNob3dEZWxldGVEaWFsb2coKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dEZWxldGVEaWFsb2c7XG4gIH1cblxuICBzZXQgc2hvd0NvbnRlbnREZWxldGVEaWFsb2codmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0NvbnRlbnREZWxldGVEaWFsb2cgPSB2YWw7XG5cbiAgICBpZiAodGhpcy5fc2hvd0NvbnRlbnREZWxldGVEaWFsb2cpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb25maXJtQ29udGVudERlbGV0ZUJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCksIDApO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaG93Q29udGVudERlbGV0ZURpYWxvZygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd0NvbnRlbnREZWxldGVEaWFsb2c7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHByZXBhcmVTZXJ2aWNlOiBQcmVwYXJlU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcGVuZGluZ0NoYW5nZXM6IFBlbmRpbmdDaGFuZ2VzU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VsZWN0aW9uOiBTZWxlY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYmFja2VuZDogQmFja2VuZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYXBhYmlsaXRlczogQ2FwYWJpbGl0aWVzU2VydmljZSkge1xuICB9XG5cbiAgY2VsbFJlbmRlcmVyKHBhcmFtcykge1xuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cInRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPiR7cGFyYW1zLmRhdGEudGl0bGUgfHwgJyd9JHtwYXJhbXMuZGF0YS5jb250ZW50ID8gJzxzcGFuIGNsYXNzPVwidGl0bGVcIj4nICsgJyAoJyArIHBhcmFtcy5kYXRhLmNvbnRlbnQubWltZWdyb3VwICsgJyknICsgJzwvc3Bhbj4nIDogJyd9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiPiR7cGFyYW1zLmRhdGEuZGVzY3JpcHRpb24gfHwgJyd9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWdzXCI+XG4gICAgICAgICAgICAgICAgJHtwYXJhbXMuZGF0YS50YWdzLm1hcCh0YWcgPT4gYDxzcGFuIGNsYXNzPVwiY2hpcFwiPiR7dGFnfTwvc3Bhbj5gKS5qb2luKCcnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFBlbmRpbmcoKSB7XG4gICAgLy8gYmVjYXVzZSB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBmb3JtIHN0YXR1cyBjaGFuZ2VzLFxuICAgIC8vIHBlbmRpbmcgdGFzayB3aWxsIG9ubHkgYmUgc3RhcnRlZCBvbmNlIHVudGlsIGl0IHdhcyBmaW5pc2hlZFxuICAgIGlmICghdGhpcy5wZW5kaW5nQ2hhbmdlcy5oYXNQZW5kaW5nVGFzayh0aGlzLnBlbmRpbmdUYXNrSWQgfHwgJyAnKSkge1xuICAgICAgdGhpcy5wZW5kaW5nVGFza0lkID0gdGhpcy5wZW5kaW5nQ2hhbmdlcy5zdGFydFRhc2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmlzaFBlbmRpbmcoKSB7XG4gICAgdGhpcy5wZW5kaW5nQ2hhbmdlcy5maW5pc2hUYXNrKHRoaXMucGVuZGluZ1Rhc2tJZCk7XG4gIH1cblxuICBwcmVwYXJlRm9ybUNvbnRlbnQoZm9ybURhdGE/KSB7XG4gICAgY29uc3QgZGF0YSA9IGZvcm1EYXRhIHx8IHRoaXMuc2VsZWN0ZWRUeXBlT2JqZWN0LmRhdGE7XG4gICAgdGhpcy5mb3JtT3B0aW9ucyA9IHtcbiAgICAgIGZvcm1Nb2RlbDogdGhpcy5zZWxlY3RlZFR5cGVPYmplY3QuZm9ybSxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9O1xuICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQpIHtcbiAgICAgIHRoaXMuZm9ybU9wdGlvbnMuY29udGV4dCA9IHtcbiAgICAgICAgaWQ6IHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC5pZCxcbiAgICAgICAgdGl0bGU6IHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC50aXRsZSxcbiAgICAgICAgdHlwZU5hbWU6IHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC50eXBlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0T2JqZWN0VHlwZSgpIHtcbiAgICB0aGlzLnByZXBhcmVTZXJ2aWNlLnVwZGF0ZUNoaWxkVHlwZSgnZG1zOnN5c29iamVjdCcsIHRoaXMucHJlcGFyZWRJdGVtLmlkKS5zdWJzY3JpYmUodXBkYXRlZFByZXBhcmVJdGVtID0+IHtcbiAgICAgIHRoaXMucHJlcGFyZWRJdGVtID0gdXBkYXRlZFByZXBhcmVJdGVtO1xuICAgICAgdGhpcy5vbkl0ZW1DaGFuZ2VkLmVtaXQodXBkYXRlZFByZXBhcmVJdGVtKTtcbiAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX1RZUEUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbW1pdHMgYSBwcmVwYXJlZCBpdGVtLiBUaGlzIHdpbGwgY2F1c2UgdGhlIHRlbXBvcmFyeSBwcmVwYXJlZCBvYmplY3QgdG8gYmUgY29udmVydGVkIHRvIGEgcmVhbCBETVMtT2JqZWN0LlxuICAgKiBAcGFyYW0gb3BlbkxvY2F0aW9uQWZ0ZXJDb21taXQgLSB3aGVuIHNldCB0byB0cnVlLCBhcHBsaWNhdGlvbiB3aWxsIG5hdmlnYXRlIHRvIHRoZSBvYmplY3RzIGxvY2F0aW9uXG4gICAqL1xuICBjb21taXQob3BlbkxvY2F0aW9uQWZ0ZXJDb21taXQ/OiBib29sZWFuKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5mb3JtU3RhdGUgJiYgIXRoaXMuZm9ybVN0YXRlLmludmFsaWQpIHtcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLm9iamVjdEZvcm0uZ2V0Rm9ybURhdGEoKTtcbiAgICAgICAgdGhpcy5jb21taXR0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmVwYXJlU2VydmljZVxuICAgICAgICAgIC5jb21taXRQcmVwYXJlZEl0ZW0odGhpcy5wcmVwYXJlZEl0ZW0uaWQsIHRoaXMucHJlcGFyZWRJdGVtLmdldFNlbGVjdGVkVHlwZU9iamVjdCgpLm5hbWUsIGZvcm1EYXRhKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNvbW1pdC5lbWl0KHJlcyk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICAgICAgICAgIGlmIChvcGVuTG9jYXRpb25BZnRlckNvbW1pdCkge1xuICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9vYmplY3QnLCByZXNdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB7a2V5LCBjYXVzZSwgdW5pcXVlZmllbGRzLCBjcmVhdGVkfSA9IGVycm9yLmVycm9yO1xuICAgICAgICAgICAgaWYgKGtleSAmJiBrZXkgPT09ICdETVNfTUVUQURBVEFfVU5JUVVFX1ZJT0xBVElPTl9FUlJPUicpIHtcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8udW5pcXVlLnZhbGlkYXRpb24uZXJyb3IuaGludCcsIHtmaWVsZDogdW5pcXVlZmllbGRzLnRvU3RyaW5nKCl9KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGtleSAmJiBrZXkgPT09ICdETVNfU1lOQ0hST05PVVNfSU5ERVhJTkdfRkFJTEVEJykge1xuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbi53YXJuaW5nKG51bGwsIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnByZXBhcmUuY29tbWl0LmVycm9yLmluZGV4RmFpbGVkJykpO1xuICAgICAgICAgICAgICB0aGlzLm9uQ29tbWl0LmVtaXQoY3JlYXRlZC5pZCk7XG4gICAgICAgICAgICAgIHRoaXMuZmluaXNoUGVuZGluZygpO1xuICAgICAgICAgICAgICBpZiAob3BlbkxvY2F0aW9uQWZ0ZXJDb21taXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9vYmplY3QnLCBjcmVhdGVkLmlkXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2F1c2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IobnVsbCwgY2F1c2UubWVzc2FnZXNbMF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uZXJyb3IoXG4gICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLmNyZWF0ZWQuZXJyb3IudGl0bGUnKSxcbiAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnByZXBhcmUuY3JlYXRlZC5lcnJvci5tZXNzYWdlJylcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29tbWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5maW5pc2hQZW5kaW5nKCk7XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVGb3JtQ29udGVudChmb3JtRGF0YSk7XG4gICAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgcmVtb3ZlSXRlbShpdGVtOiBQcmVwYXJlZEl0ZW0pIHtcbiAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICB0aGlzLm9uSXRlbVJlbW92ZS5lbWl0KGl0ZW0pO1xuICAgIHRoaXMuX3Nob3dEZWxldGVEaWFsb2cgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbW92ZUl0ZW1Db250ZW50KGl0ZW06IFByZXBhcmVkSXRlbSwgZGVsZXRlZENvbnRlbnRJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5wcmVwYXJlU2VydmljZS5kZWxldGVQcmVwYXJlZEl0ZW1Db250ZW50KGl0ZW0uaWQsIGRlbGV0ZWRDb250ZW50SW5kZXgpXG4gICAgICAuc3Vic2NyaWJlKCh1cGRhdGVkSXRlbTogUHJlcGFyZWRJdGVtKSA9PiB7XG4gICAgICAgIHRoaXMucHJlcGFyZWRJdGVtID0gdXBkYXRlZEl0ZW07XG4gICAgICAgIHRoaXMuc2hvd0NvbnRlbnREZWxldGVEaWFsb2cgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0RmlsZU5hbWVzKGl0ZW06IFByZXBhcmVkSXRlbSkge1xuICAgIHJldHVybiAoaXRlbS5jb250ZW50cyB8fCBbXSkubWFwKGMgPT4gYy5wYXRoKS5qb2luKCcsICcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhIHRhcmdldCBvYmplY3QgdHlwZSBmb3IgdGhlIGN1cnJlbnQgcHJlcGFyZWQgaXRlbS5cbiAgICogQHBhcmFtIHR5cGUgLSB0aGUgb2JqZWN0IHR5cGVzIG5hbWUgdG8gYmUgc2V0IGFzIHRhcmdldFxuICAgKi9cbiAgc2VsZWN0T2JqZWN0VHlwZSh0eXBlOiBQcmVwYXJlZEl0ZW1UeXBlKSB7XG4gICAgdGhpcy5wcmVwYXJlZEl0ZW0udHlwZXNcbiAgICAgIC5mb3JFYWNoKCh0KSA9PiB0LnNlbGVjdGVkID0gKHQubmFtZSA9PT0gdHlwZS5uYW1lKSk7XG5cbiAgICB0aGlzLnByZXBhcmVTZXJ2aWNlXG4gICAgICAudXBkYXRlQ2hpbGRUeXBlKHR5cGUubmFtZSwgdGhpcy5wcmVwYXJlZEl0ZW0uaWQpXG4gICAgICAuc3Vic2NyaWJlKHVwZGF0ZWRQcmVwYXJlZEl0ZW0gPT4ge1xuICAgICAgICB0aGlzLnByZXBhcmVkSXRlbSA9IHVwZGF0ZWRQcmVwYXJlZEl0ZW07XG4gICAgICAgIHRoaXMub25JdGVtQ2hhbmdlZC5lbWl0KHVwZGF0ZWRQcmVwYXJlZEl0ZW0pO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdGVtcGxhdGUgdG8gdGhlIGN1cnJlbnQgcHJlcGFyZWQgaXRlbS5cbiAgICogQHBhcmFtIHRlbXBsYXRlIC0gdGhlIHRlbXBsYXRlIHRvIGJlIGFkZGVkXG4gICAqL1xuICBhZGRUZW1wbGF0ZSh0ZW1wbGF0ZTogUHJlcGFyZWRJdGVtVGVtcGxhdGUpIHtcblxuICAgIHRoaXMucHJlcGFyZVNlcnZpY2VcbiAgICAgIC5hZGRUZW1wbGF0ZSh0aGlzLnByZXBhcmVkSXRlbS5pZCwgdGVtcGxhdGUuaWQpXG4gICAgICAuc3Vic2NyaWJlKCh1cGRhdGVkUHJlcGFyZWRJdGVtKSA9PiB7XG4gICAgICAgIHRoaXMucHJlcGFyZWRJdGVtID0gdXBkYXRlZFByZXBhcmVkSXRlbTtcbiAgICAgICAgdGhpcy5vbkl0ZW1DaGFuZ2VkLmVtaXQodXBkYXRlZFByZXBhcmVkSXRlbSk7XG4gICAgICB9LCBVdGlscy50aHJvdyhudWxsLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcmVwYXJlLnRlbXBsYXRlLmVycm9yLnRpdGxlJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnByZXBhcmUudGVtcGxhdGUuZXJyb3IubWVzc2FnZScpKSk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGEgdGVtcGxhdGUuIFdpbGwgc2hvdyBwcmV2aWV3IGZvciB0aGUgc2VsZWN0ZWQgdGVtcGxhdGUuXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSAtIHRoZSB0ZW1wbGF0ZSB0byBiZSBzZWxlY3RlZFxuICAgKi9cbiAgc2VsZWN0VGVtcGxhdGUodGVtcGxhdGU6IFByZXBhcmVkSXRlbVRlbXBsYXRlKSB7XG4gICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlRmlsZSA9ICEodGVtcGxhdGUgJiYgdGVtcGxhdGUuY29udGVudCkgPyBudWxsIDoge1xuICAgICAgdXJpOiB0aGlzLnByZXBhcmVTZXJ2aWNlLmdldFRlbXBsYXRlUHJldmlld1VyaSh0aGlzLnNlbGVjdGVkVGVtcGxhdGUuaWQpLFxuICAgICAgdXJpUGRmOiB0aGlzLnByZXBhcmVTZXJ2aWNlLmdldFRlbXBsYXRlUHJldmlld1VyaSh0aGlzLnNlbGVjdGVkVGVtcGxhdGUuaWQsICdQREYnKSxcbiAgICAgIG1pbWV0eXBlOiB0ZW1wbGF0ZS5jb250ZW50Lm1pbWV0eXBlLFxuICAgICAgbWltZWdyb3VwOiB0ZW1wbGF0ZS5jb250ZW50Lm1pbWVncm91cCxcbiAgICAgIHNpemU6IHRlbXBsYXRlLmNvbnRlbnQuc2l6ZVxuICAgIH07XG4gIH1cblxuICBzZXRQcmV2aWV3VXJpKGluZGV4OiBudW1iZXIpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMucHJlcGFyZVBoYXNlLmRhdGEsIHRoaXMuZ2V0UHJldmlld0RhdGEoaW5kZXgpKTtcbiAgfVxuXG4gIC8vIHNraXAgY29udGVudCBzZWxlY3Rpb24gZm9yIHRoZSBjdXJyZW50IHByZXBhcmVkIGl0ZW1cbiAgLy8gYW5kIGNvbnRpbnVlIHNldHRpbmcgaW5kZXhkYXRhXG4gIG5vRmlsZSgpIHtcbiAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9JTkRFWERBVEEpO1xuICB9XG5cbiAgLy8gdHJpZ2dlciBmaWxlIHVwbG9hZFxuICB1cGxvYWQoKSB7XG4gICAgLy8gYWZ0ZXIgdGhlIHVzZXIgc2VsZWN0ZWQgYSBmaWxlIGZpbGVDaGFuZ2VMaXN0ZW5lcigpIHdpbGwgY29udGludWVcbiAgICB0aGlzLmZpbGUubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgLy8gb25DaGFuZ2UgbGlzdGVuZXIgb24gaGlkZGVuIGZpbGUgaW5wdXRcbiAgZmlsZUNoYW5nZUxpc3RlbmVyKGV2ZW50KSB7XG4gICAgY29uc3QgZmlsZTogRmlsZSA9IGV2ZW50WzBdO1xuICAgIHRoaXMudXBsb2FkSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgdGhpcy5wcmVwYXJlU2VydmljZVxuICAgICAgLnVwbG9hZENvbnRlbnQodGhpcy5wcmVwYXJlZEl0ZW0uaWQsIGZpbGUpXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIC8vIHVwbG9hZCBzdWNjZWVkZWQgc28gd2UgY2FuIGdvIG9uIHRvIHRoZSBuZXh0IHByZXBhcmUgcGhhc2VcbiAgICAgICAgdGhpcy5wcmVwYXJlZEl0ZW0gPSBuZXcgUHJlcGFyZWRJdGVtKHJlcyk7XG4gICAgICAgIHRoaXMub25JdGVtQ2hhbmdlZC5lbWl0KHRoaXMucHJlcGFyZWRJdGVtKTtcbiAgICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfSU5ERVhEQVRBKTtcbiAgICAgICAgdGhpcy51cGxvYWRJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB9LCBVdGlscy50aHJvdyhlcnJvciA9PiB7XG4gICAgICAgIGlmIChlcnJvci5lcnJvciAmJiBlcnJvci5lcnJvci5jYXVzZSkge1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKG51bGwsIGVycm9yLmVycm9yLmNhdXNlLm1lc3NhZ2VzWzBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvci5lcnJvcikge1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKG51bGwsIGVycm9yLmVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uLmVycm9yKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnByZXBhcmUuY3JlYXRlZC5lcnJvci50aXRsZScpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbGUubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuY29tbWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnVwbG9hZC5nbG9iYWwuZXJyb3IudGl0bGUnKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8udXBsb2FkLmdsb2JhbC5lcnJvci5kZXNjcmlwdGlvbicpXG4gICAgICApKTtcbiAgfVxuXG4gIG9uRm9ybVN0YXR1c0NoYW5nZWQoZXZ0KSB7XG4gICAgdGhpcy5mb3JtU3RhdGUgPSBldnQ7XG5cbiAgICBpZiAodGhpcy5mb3JtU3RhdGUuZGlydHkpIHtcbiAgICAgIHRoaXMuc3RhcnRQZW5kaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmluaXNoUGVuZGluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2VzcygpIHtcbiAgICAvLyB0b2RvOiByZXNldCBzdHVmZlxuICAgIHRoaXMuZm9ybVN0YXRlID0gbnVsbDtcbiAgICB0aGlzLmZvcm1PcHRpb25zID0gbnVsbDtcbiAgICB0aGlzLmdldFByZXBhcmVQaGFzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgcHJlcGFyZSBwaGFzZSB0byBiZSBpbml0aWFsaXplZCBiYXNlZCBvbiB0aGUgY29uZGl0aW9uc1xuICAgKiBvZiB0aGUgY3VycmVudCBwcmVwYXJlZCBpdGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQcmVwYXJlUGhhc2UoKSB7XG4gICAgaWYgKCF0aGlzLnByZXBhcmVkSXRlbS5nZXRTZWxlY3RlZFR5cGVPYmplY3QoKSkge1xuICAgICAgLy8gU3RlcCAjMSBzZWxlY3QgYW4gb2JqZWN0IHR5cGUgaWYgbm90IHlldCBzZXRcbiAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX1RZUEUpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMucHJlcGFyZWRJdGVtLmhhc0NvbnRlbnQoKSkge1xuICAgICAgLy8gU3RlcCAjMiBhZGQgY29udGVudCBpZiBub3QgeWV0IGNvbnRhaW5lZFxuICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfQ09OVEVOVCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgIzMgZWRpdCBpbmRleGRhdGEgYW5kIHNhdmVcbiAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX0lOREVYREFUQSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUZW1wbGF0ZShzZWxlY3RlZFR5cGVPYmplY3QpIHtcbiAgICBjb25zdCB0eXBlOiBPYmplY3RUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoc2VsZWN0ZWRUeXBlT2JqZWN0Lm5hbWUpO1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5wcmVwYXJlU2VydmljZVxuICAgICAgLmdldFRlbXBsYXRlcyhzZWxlY3RlZFR5cGVPYmplY3QubmFtZSlcbiAgICAgIC5zdWJzY3JpYmUoKHRlbXBsYXRlczogUHJlcGFyZWRJdGVtVGVtcGxhdGVbXSkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlUmVxdWlyZWQgPSB0aGlzLnByZXBhcmVkSXRlbS5zdGF0ZS5jb250ZW50c3RhdGUgPT09ICdSRVFVSVJFRCc7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgZmlsZTogdHlwZS5tYXhGaWxlcyA+IDAsXG4gICAgICAgICAgd2l0aG91dEZpbGU6ICEodHlwZS5taW5GaWxlcyA+IDApICYmICFmaWxlUmVxdWlyZWQsXG4gICAgICAgICAgdGVtcGxhdGVzOiB0ZW1wbGF0ZXMgfHwgW11cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBpZiB0aGUgY3VycmVudCBvYmplY3QgdHlwZSBkb2VzIG5vdCBzdXBwb3J0IGZpbGUgdXBsb2FkIG9yIHRlbXBsYXRlIGNvbnRlbnRzXG4gICAgICAgIC8vIHdlIHNraXAgY29udGVudCBwaGFzZSBhbmQgbW92ZSBvbiB0byBpbmRleGRhdGEgcGhhc2VcbiAgICAgICAgaWYgKCFkYXRhLmZpbGUpIHtcbiAgICAgICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9JTkRFWERBVEEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJlcGFyZVBoYXNlID0ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5QSEFTRV9DT05URU5ULFxuICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5zZXR1cFRpdGxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWdGaWx0ZXJPcHRpb25zID0gdGhpcy5jcmVhdGVUYWdGaWx0ZXJPcHRpb25zKHRlbXBsYXRlcyk7XG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMgPSB7XG4gICAgICAgICAgY29udGV4dDoge2NvdW50OiB0aGlzLnByZXBhcmVQaGFzZS5kYXRhLnRlbXBsYXRlcy5sZW5ndGh9LFxuICAgICAgICAgIHJvd0RhdGE6IHRoaXMucHJlcGFyZVBoYXNlLmRhdGEudGVtcGxhdGVzLnNvcnQoVXRpbHMuc29ydFZhbHVlcygndGl0bGUnKSksXG4gICAgICAgICAgY29sdW1uRGVmczogdGhpcy5jb2xEZWZzLFxuICAgICAgICAgIHJvd0hlaWdodDogODBcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZVRhZ0ZpbHRlck9wdGlvbnModGVtcGxhdGVzOiBQcmVwYXJlZEl0ZW1UZW1wbGF0ZVtdKSB7XG4gICAgbGV0IHRhZ0ZpbHRlck9wdGlvbnMgPSBbXTtcbiAgICB0ZW1wbGF0ZXMuZm9yRWFjaCh0ZW1wbGF0ZSA9PiB7XG4gICAgICB0ZW1wbGF0ZS50YWdzLmZvckVhY2godGFnID0+IHtcbiAgICAgICAgdGFnRmlsdGVyT3B0aW9ucy5wdXNoKHtsYWJlbDogdGFnLCBmaWx0ZXI6IChub2RlKSA9PiBub2RlLmRhdGEudGFncy5pbmNsdWRlcyh0YWcpLCB2YWx1ZTogdHJ1ZX0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFV0aWxzLnVuaXFCeSh0YWdGaWx0ZXJPcHRpb25zLCAnbGFiZWwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgc3BlY2lmaWMgcHJlcGFyZSBwaGFzZS5cbiAgICogQHBhcmFtIHBoYXNlIC0gcGhhc2UgdG8gaW5pdCAoUEhBU0VfVFlQRSwgUEhBU0VfQ09OVEVOVCwgUEhBU0VfSU5ERVhEQVRBKVxuICAgKi9cbiAgcHJpdmF0ZSBpbml0UHJlcGFyZVBoYXNlKHBoYXNlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByZXBhcmVQaGFzZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZFR5cGVPYmplY3QgPSB0aGlzLnByZXBhcmVkSXRlbS5nZXRTZWxlY3RlZFR5cGVPYmplY3QoKTtcblxuICAgIHN3aXRjaCAocGhhc2UpIHtcbiAgICAgIC8vIGluaXQgcHJlcGFyZSBwaGFzZSBmb3Igc2VsZWN0aW5nIHRoZSB0YXJnZXQgb2JqZWN0IHR5cGVcbiAgICAgIGNhc2UgdGhpcy5QSEFTRV9UWVBFOiB7XG5cbiAgICAgICAgdGhpcy5wcmVwYXJlUGhhc2UgPSB7XG4gICAgICAgICAgbmFtZTogdGhpcy5QSEFTRV9UWVBFLFxuICAgICAgICAgIGRhdGE6IHRoaXMuZ2V0UHJldmlld0RhdGEoKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnNldHVwVGl0bGUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIGluaXQgcHJlcGFyZSBwaGFzZSBmb3Igc2V0dGluZyB1cCBjb250ZW50XG4gICAgICBjYXNlIHRoaXMuUEhBU0VfQ09OVEVOVDoge1xuXG4gICAgICAgIHRoaXMuY2hvb3NlVGVtcGxhdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlID0gbnVsbDtcblxuICAgICAgICAvLyBjaGVjayB3aGV0aGVyIG9yIG5vdCB0aGUgcHJlcGFyZWRJdGVtIGFscmVhZHkgY29udGFpbnMgYSBmaWxlIG9yIHRlbXBsYXRlXG4gICAgICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbS5oYXNDb250ZW50KCkpIHtcbiAgICAgICAgICBpZiAoIXRoaXMucHJlcGFyZWRJdGVtLnN0YXRlLnR5cGVzZWxlY3RlZGFsbG93ZWQpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzZWxlY3RlZCB0eXBlIGlzIG5vdCBhbGxvd2VkLCB3ZSdsbCBnbyBiYWNrIHRvIHRoZSB0eXBlIHNlbGVjdCBzdGF0ZSAuLi5cbiAgICAgICAgICAgIHRoaXMuaW5pdFByZXBhcmVQaGFzZSh0aGlzLlBIQVNFX1RZUEUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAuLi4gb3RoZXJ3aXNlIHdlIGdvIG9uIHNldHRpbmcgaW5kZXhkYXRhXG4gICAgICAgICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9JTkRFWERBVEEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbS5zdGF0ZS5jb250ZW50c3RhdGUgPT09ICdOT0NPTlRFTlRBTExPV0VEJykge1xuICAgICAgICAgICAgdGhpcy5pbml0UHJlcGFyZVBoYXNlKHRoaXMuUEhBU0VfSU5ERVhEQVRBKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVUZW1wbGF0ZSh0aGlzLnNlbGVjdGVkVHlwZU9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8gaW5pdCBwcmVwYXJlIHBoYXNlIGZvciBhZGRpbmcgaW5kZXhkYXRhXG4gICAgICBjYXNlIHRoaXMuUEhBU0VfSU5ERVhEQVRBOiB7XG5cbiAgICAgICAgdGhpcy5jaG9vc2VUZW1wbGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghdGhpcy5wcmVwYXJlZEl0ZW0uc3RhdGUudHlwZXNlbGVjdGVkYWxsb3dlZCkge1xuICAgICAgICAgIC8vIGlmIHRoZSBzZWxlY3RlZCB0eXBlIGlzIG5vdCBhbGxvd2VkLCB3ZSdsbCBnbyBiYWNrIHRvIHRoZSB0eXBlIHNlbGVjdCBzdGF0ZSAuLi5cbiAgICAgICAgICB0aGlzLmluaXRQcmVwYXJlUGhhc2UodGhpcy5QSEFTRV9UWVBFKTtcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgIHRoaXMucHJlcGFyZUZvcm1Db250ZW50KCk7XG5cbiAgICAgICAgICB0aGlzLnByZXBhcmVQaGFzZSA9IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuUEhBU0VfSU5ERVhEQVRBLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5nZXRQcmV2aWV3RGF0YSgpXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLnNldHVwVGl0bGUoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFByZXZpZXdEYXRhKGluZGV4PzogbnVtYmVyKTogYW55IHtcbiAgICBpZiAodGhpcy5wcmVwYXJlZEl0ZW0gJiYgdGhpcy5wcmVwYXJlZEl0ZW0uY29udGVudHMgJiYgdGhpcy5wcmVwYXJlZEl0ZW0uY29udGVudHMubGVuZ3RoKSB7XG4gICAgICBpbmRleCA9IGluZGV4IHx8IDA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmV2aWV3SW5kZXg6IGluZGV4LFxuICAgICAgICBwcmV2aWV3RmlsZToge1xuICAgICAgICAgIHVyaTogdGhpcy5wcmVwYXJlU2VydmljZS5nZXRQcmV2aWV3VXJpKHRoaXMucHJlcGFyZWRJdGVtLmlkLCBpbmRleCksXG4gICAgICAgICAgdXJpUGRmOiB0aGlzLnByZXBhcmVTZXJ2aWNlLmdldFByZXZpZXdVcmkodGhpcy5wcmVwYXJlZEl0ZW0uaWQsIGluZGV4LCAnUERGJyksXG4gICAgICAgICAgbWltZXR5cGU6IHRoaXMucHJlcGFyZWRJdGVtLmNvbnRlbnRzW2luZGV4XS5taW1ldHlwZSxcbiAgICAgICAgICBtaW1lZ3JvdXA6IHRoaXMucHJlcGFyZWRJdGVtLmNvbnRlbnRzW2luZGV4XS5taW1lZ3JvdXAsXG4gICAgICAgICAgcGF0aDogdGhpcy5wcmVwYXJlZEl0ZW0uY29udGVudHNbaW5kZXhdLnBhdGgsXG4gICAgICAgICAgc2l6ZTogdGhpcy5wcmVwYXJlZEl0ZW0uY29udGVudHNbaW5kZXhdLnNpemVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge3ByZXZpZXdGaWxlOiBudWxsfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR1cCB0aXRsZSBmb3IgdGhlIGN1cnJlbnQgcHJlcGFyZWQgaXRlbSBiYXNlZCBvbiB0aGVcbiAgICogY3VycmVudCBwcmVwYXJlIHBoYXNlLiBTaG91bGQgYmUgY2FsbGVkIGFmdGVyIHByZXBhcmUgcGhhc2UgaXMgaWRlbnRpZmllZC5cbiAgICovXG4gIHByaXZhdGUgc2V0dXBUaXRsZSgpIHtcblxuICAgIHRoaXMudHJhbnNsYXRlLmdldChbXG4gICAgICAnZW8ucHJlcGFyZS5sb2NhdGlvbi50aXRsZS5zeXNyb290JyxcbiAgICAgICdlby5wcmVwYXJlLmxvY2F0aW9uLnRpdGxlLnByZWZpeCcsXG4gICAgICAnZW8ucHJlcGFyZS5kZXRhaWxzLnR5cGUudGl0bGUnLFxuICAgICAgJ2VvLnByZXBhcmUuZGV0YWlscy50eXBlLnN1YnRpdGxlJyxcbiAgICAgICdlby5wcmVwYXJlLmRldGFpbHMuY29udGVudC5zdWJ0aXRsZScsXG4gICAgICAnZW8ucHJlcGFyZS5kZXRhaWxzLmluZGV4ZGF0YS5zdWJ0aXRsZSdcbiAgICBdKS5zdWJzY3JpYmUodCA9PiB7XG5cbiAgICAgIGxldCBoZWFkZXIgPSB7XG4gICAgICAgIHRpdGxlOiBudWxsLFxuICAgICAgICBsb2NhdGlvbjoge1xuICAgICAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgICAgIGxpbms6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgc3VidGl0bGU6IG51bGxcbiAgICAgIH07XG4gICAgICBzd2l0Y2ggKHRoaXMucHJlcGFyZVBoYXNlLm5hbWUpIHtcbiAgICAgICAgY2FzZSB0aGlzLlBIQVNFX1RZUEU6IHtcbiAgICAgICAgICBoZWFkZXIudGl0bGUgPSB0Wydlby5wcmVwYXJlLmRldGFpbHMudHlwZS50aXRsZSddO1xuICAgICAgICAgIGhlYWRlci5zdWJ0aXRsZSA9IHRbJ2VvLnByZXBhcmUuZGV0YWlscy50eXBlLnN1YnRpdGxlJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB0aGlzLlBIQVNFX0NPTlRFTlQ6IHtcbiAgICAgICAgICBjb25zdCB0eXBlT2JqZWN0ID0gdGhpcy5wcmVwYXJlZEl0ZW0uZ2V0U2VsZWN0ZWRUeXBlT2JqZWN0KCk7XG4gICAgICAgICAgaGVhZGVyLnRpdGxlID0gdHlwZU9iamVjdCA/IHR5cGVPYmplY3QubGFiZWwgOiAnJztcbiAgICAgICAgICBoZWFkZXIuc3VidGl0bGUgPSB0Wydlby5wcmVwYXJlLmRldGFpbHMuY29udGVudC5zdWJ0aXRsZSddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgdGhpcy5QSEFTRV9JTkRFWERBVEE6IHtcbiAgICAgICAgICBjb25zdCB0eXBlT2JqZWN0ID0gdGhpcy5wcmVwYXJlZEl0ZW0uZ2V0U2VsZWN0ZWRUeXBlT2JqZWN0KCk7XG4gICAgICAgICAgaGVhZGVyLnRpdGxlID0gdHlwZU9iamVjdCA/IHR5cGVPYmplY3QubGFiZWwgOiAnJztcbiAgICAgICAgICBoZWFkZXIuc3VidGl0bGUgPSB0Wydlby5wcmVwYXJlLmRldGFpbHMuaW5kZXhkYXRhLnN1YnRpdGxlJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gc2V0IHVwIGxvY2F0aW9uIGluZm9cbiAgICAgIGlmICh0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQudHlwZSA9PT0gJ3N5c3Jvb3QnKSB7XG4gICAgICAgIGhlYWRlci5sb2NhdGlvbiA9IHtcbiAgICAgICAgICBsYWJlbDogdFsnZW8ucHJlcGFyZS5sb2NhdGlvbi50aXRsZS5zeXNyb290J10sXG4gICAgICAgICAgbGluazogbnVsbFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGFyZW50VHlwZSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKHRoaXMucHJlcGFyZWRJdGVtLnBhcmVudC50eXBlKTtcbiAgICAgICAgaGVhZGVyLmxvY2F0aW9uID0ge1xuICAgICAgICAgIGxhYmVsOiBgICR7cGFyZW50VHlwZS5sYWJlbH06ICR7dGhpcy5wcmVwYXJlZEl0ZW0ucGFyZW50LnRpdGxlfWAsXG4gICAgICAgICAgbGluazogYC9vYmplY3QvJHt0aGlzLnByZXBhcmVkSXRlbS5wYXJlbnQuaWR9YFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5oZWFkZXIgPSBoZWFkZXI7XG4gICAgfSk7XG4gIH1cblxuICBzaG93VGVtcGxhdGVTZWxlY3RvcihzaG93OiBib29sZWFuKSB7XG4gICAgdGhpcy5jaG9vc2VUZW1wbGF0ZSA9IHNob3c7XG4gICAgdGhpcy5zZWxlY3RUZW1wbGF0ZSh0aGlzLnByZXBhcmVQaGFzZS5kYXRhLnRlbXBsYXRlc1swXSk7XG4gIH1cblxuICBkb3dubG9hZCgpIHtcbiAgICBpZiAodGhpcy5wcmVwYXJlUGhhc2UpIHtcbiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLnByZXBhcmVQaGFzZS5uYW1lID09PSAnY29udGVudCcgPyB0aGlzLnNlbGVjdGVkVGVtcGxhdGVGaWxlIDogdGhpcy5wcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3RmlsZTtcbiAgICAgIGZpbGUudXJpID0gZmlsZS51cmkucmVwbGFjZSh0aGlzLmJhY2tlbmQuZ2V0U2VydmljZUJhc2UoKSwgJycpO1xuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgdGhpcy5iYWNrZW5kLmRvd25sb2FkKGZpbGUudXJpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXNUZW1wbGF0ZUNhcGFiaWxpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FwYWJpbGl0ZXMuaGFzQ2FwYWJpbGl0eSgndGVtcGxhdGUnKTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5SWRGbihpbmRleCwgaXRlbSkge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG5cbiAgcHVibGljIHRyYWNrQnlJbmRleEZuKGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuYXBwbHlTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLnNlbGVjdGlvblxuICAgICAgICAuZmluZCh0aGlzLmFwcGx5U2VsZWN0aW9uLmluKS5mb2N1cyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdW50aWxEZXN0cm95ZWQodGhpcylcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXM6IFByZXBhcmVkSXRlbSkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY29tbWl0dGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucHJlcGFyZWRJdGVtID0gcmVzO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cInByZXBhcmVEZXRhaWxzX193cmFwcGVyXCIgKm5nSWY9XCIhbG9hZGluZzsgZWxzZSBtYWluU3Bpbm5lclwiPlxuICA8c2VjdGlvbiBjbGFzcz1cInByZXBhcmVEZXRhaWxzXCIgKm5nSWY9XCJwcmVwYXJlZEl0ZW0gJiYgcHJlcGFyZVBoYXNlOyBlbHNlIG5vSXRlbVwiXG4gICAgW25nQ2xhc3NdPVwie211bHRpZmlsZTogcHJlcGFyZWRJdGVtLmNvbnRlbnRjb3VudCA+IDEsIGNvbW1pdHRpbmc6IGNvbW1pdHRpbmd9XCI+XG4gICAgPGRpdiBjbGFzcz1cImVvLWhlYWRcIj5cblxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1pbmZvXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGVcIj57e2hlYWRlci50aXRsZX19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItc3ViLXRpdGxlIGgtbG9jYXRpb25cIiAqbmdJZj1cIiFoZWFkZXIubG9jYXRpb24ubGluazsgZWxzZSBsaW5rZWRcIj57e2hlYWRlci5sb2NhdGlvbi5sYWJlbH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXN1Yi10aXRsZSBoLXN1YnRpdGxlXCI+e3toZWFkZXIuc3VidGl0bGV9fTwvZGl2PlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbGlua2VkPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItc3ViLXRpdGxlIGgtc3VidGl0bGUtZGV0YWlsZWRcIj5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmxvY2F0aW9uLnRpdGxlLnByZWZpeDwvc3Bhbj5cbiAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cImhlYWRlci5sb2NhdGlvbi5saW5rXCI+e3toZWFkZXIubG9jYXRpb24ubGFiZWx9fTwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImJ0biBidG4tZG93bmxvYWRcIlxuICAgICAgICAgICpuZ0lmPVwicHJlcGFyZVBoYXNlLm5hbWUgPT09ICdjb250ZW50JyA/IHNlbGVjdGVkVGVtcGxhdGVGaWxlIDogcHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0ZpbGVcIlxuICAgICAgICAgIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NvbnRlbnQtZG93bmxvYWQuc3ZnJ1wiXG4gICAgICAgICAgW2ljb25UaXRsZV09XCIoJ2VvLmFjdGlvbi5kb3dubG9hZC5kbXMub2JqZWN0LmNvbnRlbnQubGFiZWwnIHwgdHJhbnNsYXRlKVwiIChjbGljayk9XCJkb3dubG9hZCgpXCI+PC9lby1pY29uPlxuICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImJ0biBidG4tZGVsZXRlXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfdHJhc2guc3ZnJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dEZWxldGVEaWFsb2cgPSB0cnVlO1wiPjwvZW8taWNvbj5cbiAgICAgICAgPCEtLSBidXR0b25zIHdoaWxlIGNob29zaW5nIGEgdGVtcGxhdGUgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaG9vc2VUZW1wbGF0ZVwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tdHBsLWFib3J0XCIgKGNsaWNrKT1cInNob3dUZW1wbGF0ZVNlbGVjdG9yKGZhbHNlKVwiXG4gICAgICAgICAgICB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5jYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tdHBsLWFwcGx5XCIgKGNsaWNrKT1cImFkZFRlbXBsYXRlKHNlbGVjdGVkVGVtcGxhdGUpXCIgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZFRlbXBsYXRlXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLnRlbXBsYXRlLnNlbGVjdDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJlcGFyZVBoYXNlLm5hbWUgPT09ICdpbmRleGRhdGEnXCI+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmVzZXRPYmplY3RUeXBlKClcIiB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5yZXNldE9iamVjdDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNvbW1pdCgpXCIgY2xhc3M9XCJidG4taWR4LXNhdmVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie3ByaW1hcnk6IHByZXBhcmVkSXRlbS5zdGF0ZS5wYXJlbnRpc3Jvb3QgJiYgcHJlcGFyZWRJdGVtLmNvbnRlbnRjb3VudCA+IDF9XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtU3RhdGU/LmludmFsaWQgfHwgY29tbWl0dGluZ1wiIHRyYW5zbGF0ZT5lby5wcmVwYXJlLnNhdmU8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNvbW1pdCh0cnVlKVwiIFtkaXNhYmxlZF09XCJmb3JtU3RhdGU/LmludmFsaWQgfHwgY29tbWl0dGluZ1wiIGNsYXNzPVwicHJpbWFyeSBidG4taWR4LXNhdmVvcGVuXCJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwicHJlcGFyZWRJdGVtPy5zdGF0ZS5wYXJlbnRpc3Jvb3QgJiYgcHJlcGFyZWRJdGVtPy5jb250ZW50Y291bnQgPiAxXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLnNhdmVvcGVuPC9idXR0b24+XG5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImVvLWJvZHlcIiBbbmdTd2l0Y2hdPVwicHJlcGFyZVBoYXNlLm5hbWVcIiAqbmdJZj1cIiFjb21taXR0aW5nOyBlbHNlIHNwaW5uZXJcIj5cblxuICAgICAgPCEtLSBQSEFTRSBUWVBFIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInBoYXNlIHR5cGVcIiAqbmdTd2l0Y2hDYXNlPVwiJ3R5cGUnXCI+XG5cbiAgICAgICAgPCEtLSB3aXRoIHByZXZpZXcgLS0+XG4gICAgICAgIDx5dmMtc3BsaXQtdmlldyAqbmdJZj1cInByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdGaWxlOyBlbHNlIG5vcHJldmlld1wiXG4gICAgICAgICAgW2xheW91dFNldHRpbmdzSURdPVwiJ3ByZXBhcmUuZGV0YWlscy5waGFzZS50eXBlJ1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSB5dmNTcGxpdEFyZWEgW3NpemVdPVwiMzBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpbGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZS1zZWxlY3QgZW1wdHlcIiAqbmdJZj1cInByZXBhcmVkSXRlbS50eXBlcy5sZW5ndGggPT0gMFwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICBlby5wcmVwYXJlLmRldGFpbHMudHlwZS5lbXB0eTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGUtc2VsZWN0IGVtcHR5XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFwcmVwYXJlZEl0ZW0uc3RhdGUudHlwZXNlbGVjdGVkYWxsb3dlZCAmJiBwcmVwYXJlZEl0ZW0uc3RhdGUudHlwZXNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInt0eXBlOiBwcmVwYXJlZEl0ZW0uc2VsZWN0ZWR0eXBlLmxhYmVsLCBmaWxlbmFtZTogZ2V0RmlsZU5hbWVzKHByZXBhcmVkSXRlbSl9XCJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5kZXRhaWxzLnR5cGUubm90YWxsb3dlZDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvYmplY3QtdHlwZS1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGVcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBwcmVwYXJlZEl0ZW0udHlwZXM7IHRyYWNrQnk6IHRyYWNrQnlJZEZuXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPYmplY3RUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHlwZS1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uSWRdPVwidHlwZS5pY29uLmlkXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e3R5cGUubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIj57e3R5cGUuZGVzY3JpcHRpb259fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnQtc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPGgyIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmRldGFpbHMuY29udGVudHMudGl0bGU8L2gyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb250ZW50IG9mIHByZXBhcmVkSXRlbS5jb250ZW50czsgdHJhY2tCeTogdHJhY2tCeUluZGV4Rm47IGluZGV4IGFzIGlkeDtcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3SW5kZXggPT0gaWR4fVwiIChjbGljayk9XCJzZXRQcmV2aWV3VXJpKGlkeClcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7Y29udGVudC5wYXRofX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImJ0biBidG4tZGVsZXRlLWNvbnRlbnRcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY190cmFzaC5zdmcnXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dDb250ZW50RGVsZXRlRGlhbG9nID0gdHJ1ZTsgZGVsZXRlZENvbnRlbnRJbmRleCA9IGlkeDtcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29udGVudC5leGlzdHNjb3VudCA+IDBcIiBjbGFzcz1cImF0dGVudGlvblwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3snZW8ucHJlcGFyZS5jb250ZW50LmV4aXN0c2NvdW50Lm1lc3NhZ2UnfHRyYW5zbGF0ZTogKHtjb3VudDogY29udGVudC5leGlzdHNjb3VudH0pfX1cIj4hXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSB5dmNTcGxpdEFyZWEgW3NpemVdPVwiNzBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1tZWRpYS13cmFwXCI+XG4gICAgICAgICAgICAgIDxlby1wcmVwYXJlLWNvbnRlbnQtZXhpc3RzLWluZm8gW2NvbnRlbnRdPVwicHJlcGFyZWRJdGVtLmNvbnRlbnRzW3ByZXBhcmVQaGFzZS5kYXRhLnByZXZpZXdJbmRleF1cIj5cbiAgICAgICAgICAgICAgPC9lby1wcmVwYXJlLWNvbnRlbnQtZXhpc3RzLWluZm8+XG4gICAgICAgICAgICAgIDxlby1tZWRpYSBbZG1zT2JqZWN0XT1cInBzZXVkb0Rtc09iamVjdFwiIFtwcmV2aWV3RmlsZV09XCJwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3RmlsZVwiPjwvZW8tbWVkaWE+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3l2Yy1zcGxpdC12aWV3PlxuXG4gICAgICAgIDwhLS0gd2l0aG91dCBwcmV2aWV3IC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vcHJldmlldz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWxlc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9iamVjdC10eXBlLXNlbGVjdFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGVcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBwcmVwYXJlZEl0ZW0udHlwZXM7IHRyYWNrQnk6IHRyYWNrQnlJZEZuXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T2JqZWN0VHlwZSh0eXBlKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0eXBlLWljb25cIj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uSWRdPVwidHlwZS5pY29uLmlkXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e3R5cGUubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3t0eXBlLmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUEhBU0UgQ09OVEVOVCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJwaGFzZSBjb250ZW50XCIgKm5nU3dpdGNoQ2FzZT1cIidjb250ZW50J1wiPlxuXG4gICAgICAgIDwhLS0gcGFuZWwgZm9yIHNlbGVjdGluZyBhIHRlbXBsYXRlIHRvIGJlIHVzZWQgYXMgaXRlbXMgY29udGVudCAtLT5cbiAgICAgICAgPHl2Yy1zcGxpdC12aWV3ICpuZ0lmPVwiY2hvb3NlVGVtcGxhdGU7IGVsc2UgYXR0YWNoXCIgW2xheW91dFNldHRpbmdzSURdPVwiJ3ByZXBhcmUuZGV0YWlscy5waGFzZS5jb250ZW50J1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSB5dmNTcGxpdEFyZWEgW3NpemVdPVwiNDBcIj5cbiAgICAgICAgICAgIDwhLS0gbGlzdCBvZiBhdmFpbGFibGUgdGVtcGxhdGVzIC0tPlxuICAgICAgICAgICAgPGVvLWxpc3QtY29udGFpbmVyICNlb0xpc3QgW2xvYWRpbmddPVwiZmFsc2VcIiBjbGFzcz1cInRlbXBsYXRlc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGVvLWljb24gY2xhc3M9XCJlby1oZWFkZXItaWNvblwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3RlbXBsYXRlLnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVvLWhlYWRlci1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8taGVhZGVyLXRpdGxlXCIgdHJhbnNsYXRlPmVvLnByZXBhcmUudGVtcGxhdGUubGlzdC50aXRsZTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1oZWFkZXItYWN0aW9uc1wiPlxuXG4gICAgICAgICAgICAgICAgICA8ZW8tb3ZlcmxheSAjb0ZpbHRlciBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19maWx0ZXIuc3ZnJ1wiIFtpY29uQ2xhc3NdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvdmVybGF5LWZpbHRlclwiIFt0aXRsZV09XCInZW8ubGlzdC5maWx0ZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGFjdGl2ZSk9XCJvRmlsdGVyLm9uQWN0aXZlQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxlby1jdXN0b20tZmlsdGVyICNjRmlsdGVyIChjaGFuZ2UpPVwiY0ZpbHRlci51cGRhdGVHcmlkKGVvTGlzdC5lb0dyaWRTdWJqZWN0LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoYWN0aXZlKT1cIm9GaWx0ZXIub25BY3RpdmVDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZW8tdGV4dC1maWx0ZXIgW3RpdGxlXT1cIidlby5wcmVwYXJlLnRlbXBsYXRlLmZpbHRlci50ZXh0LnRpdGxlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0Y2hGaWVsZHNdPVwiWyd0aXRsZScsICdkZXNjcmlwdGlvbicsICd0YWdzJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlby5wcmVwYXJlLnRlbXBsYXRlLmZpbHRlci50ZXh0LnRpdGxlJ1wiPjwvZW8tdGV4dC1maWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPGVvLXNldC1maWx0ZXIgW29wZXJhdG9yXT1cIidPUidcIiBbdGl0bGVdPVwiJ2VvLnByZXBhcmUudGVtcGxhdGUuZmlsdGVyLnNldC50aXRsZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWdGaWx0ZXJPcHRpb25zPy5sZW5ndGhcIiBbb3B0aW9uc109XCJ0YWdGaWx0ZXJPcHRpb25zXCI+PC9lby1zZXQtZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICA8L2VvLWN1c3RvbS1maWx0ZXI+XG4gICAgICAgICAgICAgICAgICA8L2VvLW92ZXJsYXk+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlby1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPGVvLWdyaWQgI2VvR3JpZCAqbmdJZj1cImdyaWRPcHRpb25zPy5yb3dEYXRhXCIgW2dyaWRPcHRpb25zXT1cImdyaWRPcHRpb25zXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93SGVhZGVyXT1cInRydWVcIiBbc2hvd0Zvb3Rlcl09XCJmYWxzZVwiIFtzZWxlY3Rpb25MaW1pdF09XCIxXCJcbiAgICAgICAgICAgICAgICAgIChlb0dyaWRTZWxlY3Rpb25DaGFuZ2VkKT1cInNlbGVjdFRlbXBsYXRlKCRldmVudFswXSlcIj5cbiAgICAgICAgICAgICAgICA8L2VvLWdyaWQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9lby1saXN0LWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHl2Y1NwbGl0QXJlYSBbc2l6ZV09XCI2MFwiPlxuICAgICAgICAgICAgPCEtLSBwcmV2aWV3IG9mIHNlbGVjdGVkIHRlbXBsYXRlIC0tPlxuICAgICAgICAgICAgPGVvLW1lZGlhIFtwcmV2aWV3RmlsZV09XCJzZWxlY3RlZFRlbXBsYXRlRmlsZVwiPjwvZW8tbWVkaWE+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC95dmMtc3BsaXQtdmlldz5cblxuICAgICAgICA8IS0tIGFkZCBjb250ZW50IGdlbmVyYWwgb3ZlcnZpZXcgKHVwbG9hZCwgdGVtcGxhdGUsIG5vbmUpIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2F0dGFjaD5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvXCIgKm5nSWY9XCIhdXBsb2FkSW5Qcm9ncmVzc1wiIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmF0dGFjaG1lbnQuaW5mbzwvZGl2PlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiICNmaWxlIChjaGFuZ2UpPVwiZmlsZUNoYW5nZUxpc3RlbmVyKCRldmVudC50YXJnZXQuZmlsZXMpXCI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0YWNobWVudHNcIiAqbmdJZj1cIiF1cGxvYWRJblByb2dyZXNzOyBlbHNlIHVwbG9hZHNwaW5uZXJcIj5cblxuICAgICAgICAgICAgPCEtLSB1cGxvYWQgYSBmaWxlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnQgYXR0LWZpbGVcIiAqbmdJZj1cInByZXBhcmVQaGFzZS5kYXRhLmZpbGVcIiAoY2xpY2spPVwidXBsb2FkKClcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZ1wiPlxuICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2ZpbGVfdXBsb2FkLnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnByZXBhcmUuYXR0YWNobWVudC51cGxvYWQudGl0bGU8L2gzPlxuICAgICAgICAgICAgICA8cCB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5hdHRhY2htZW50LnVwbG9hZC5kZXNjPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gc2VsZWN0IGEgdGVtcGxhdGUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0YWNobWVudCBhdHQtdG1wbFwiICpuZ0lmPVwicHJlcGFyZVBoYXNlLmRhdGEudGVtcGxhdGVzLmxlbmd0aCA+IDAgJiYgaGFzVGVtcGxhdGVDYXBhYmlsaXR5KClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1RlbXBsYXRlU2VsZWN0b3IodHJ1ZSlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZ1wiPlxuICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX3ByZXBhcmVfYWRkLnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnByZXBhcmUuYXR0YWNobWVudC50ZW1wbGF0ZS50aXRsZTwvaDM+XG4gICAgICAgICAgICAgIDxwIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmF0dGFjaG1lbnQudGVtcGxhdGUuZGVzYzwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIG5vIGZpbGUgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0YWNobWVudCBhdHQtbm9uZVwiICpuZ0lmPVwicHJlcGFyZVBoYXNlLmRhdGEud2l0aG91dEZpbGVcIiAoY2xpY2spPVwibm9GaWxlKClcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZ1wiPlxuICAgICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX25vLWZpbGUuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5hdHRhY2htZW50Lm5vZmlsZS50aXRsZTwvaDM+XG4gICAgICAgICAgICAgIDxwIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmF0dGFjaG1lbnQubm9maWxlLmRlc2M8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSB1cGxvYWQgcHJvZ3Jlc3MgaW5kaWNhdG9yIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3VwbG9hZHNwaW5uZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1pbmRpY2F0b3JcIj5cbiAgICAgICAgICAgIDxlby1sb2FkaW5nLXNwaW5uZXIgW3NpemVdPVwiJ2xhcmdlJ1wiPjwvZW8tbG9hZGluZy1zcGlubmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gUEhBU0UgSU5ERVhEQVRBIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInBoYXNlIGluZGV4ZGF0YVwiICpuZ1N3aXRjaENhc2U9XCInaW5kZXhkYXRhJ1wiPlxuXG4gICAgICAgIDwhLS0gZm9ybSBhbmQgcHJldmlldyAtLT5cbiAgICAgICAgPHl2Yy1zcGxpdC12aWV3ICpuZ0lmPVwicHJlcGFyZWRJdGVtLmNvbnRlbnRzOyBlbHNlIGp1c3Rmb3JtXCIgW2xheW91dFNldHRpbmdzSURdPVwiJ3ByZXBhcmUuc3RhdGUuZGV0YWlscydcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgeXZjU3BsaXRBcmVhIFtzaXplXT1cIjUwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWxlc1wiPlxuXG4gICAgICAgICAgICAgIDwhLS0gaW5kZXhkYXRhIGZvcm0gLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJqdXN0Zm9ybVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gbGlzdCBvZiBjb250ZW50cyAoaW4gY2FzZSBvZiBidWxrIHVwbG9hZCkgdGhhdCBjYW4gYmUgcHJldmlld2VkIC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1zZWxlY3RcIj5cblxuICAgICAgICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8ucHJlcGFyZS5kZXRhaWxzLmNvbnRlbnRzLnRpdGxlPC9oMj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29udGVudCBvZiBwcmVwYXJlZEl0ZW0uY29udGVudHM7IHRyYWNrQnk6IHRyYWNrQnlJbmRleEZuOyBpbmRleCBhcyBpZHhcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBwcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3SW5kZXggPT09IGlkeH1cIiAoY2xpY2spPVwic2V0UHJldmlld1VyaShpZHgpXCI+XG4gICAgICAgICAgICAgICAgICB7e2NvbnRlbnQucGF0aH19IDxzcGFuICpuZ0lmPVwiY29udGVudC5leGlzdHNjb3VudCA+IDBcIiBjbGFzcz1cImF0dGVudGlvblwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwie3snZW8ucHJlcGFyZS5jb250ZW50LmV4aXN0c2NvdW50Lm1lc3NhZ2UnfHRyYW5zbGF0ZTogKHtjb3VudDogY29udGVudC5leGlzdHNjb3VudH0pfX1cIj4hPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgeXZjU3BsaXRBcmVhIFtzaXplXT1cIjUwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW8tbWVkaWEtd3JhcFwiPlxuICAgICAgICAgICAgICA8ZW8tcHJlcGFyZS1jb250ZW50LWV4aXN0cy1pbmZvIFtjb250ZW50XT1cInByZXBhcmVkSXRlbS5jb250ZW50c1twcmVwYXJlUGhhc2UuZGF0YS5wcmV2aWV3SW5kZXhdXCI+XG4gICAgICAgICAgICAgIDwvZW8tcHJlcGFyZS1jb250ZW50LWV4aXN0cy1pbmZvPlxuICAgICAgICAgICAgICA8ZW8tbWVkaWEgW2Rtc09iamVjdF09XCJwc2V1ZG9EbXNPYmplY3RcIiBbcHJldmlld0ZpbGVdPVwicHJlcGFyZVBoYXNlLmRhdGEucHJldmlld0ZpbGVcIj48L2VvLW1lZGlhPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC95dmMtc3BsaXQtdmlldz5cblxuICAgICAgICA8IS0tIGp1c3QgdGhlIGZvcm0gLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjanVzdGZvcm0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udGFpbmVyIHNpdHVhdGlvbi1jcmVhdGVcIiAqbmdJZj1cImZvcm1PcHRpb25zXCI+XG4gICAgICAgICAgICA8ZW8tb2JqZWN0LWZvcm0gI2Zvcm0gW2Zvcm1PcHRpb25zXT1cImZvcm1PcHRpb25zXCIgKHN0YXR1c0NoYW5nZWQpPVwib25Gb3JtU3RhdHVzQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L2VvLW9iamVjdC1mb3JtPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvc2VjdGlvbj5cblxuICA8bmctdGVtcGxhdGUgI3NwaW5uZXI+XG4gICAgPGRpdiBjbGFzcz1cImVvLWJvZHlcIj5cbiAgICAgIDxlby1sb2FkaW5nLXNwaW5uZXIgc2l6ZT1cIm1lZGl1bVwiPjwvZW8tbG9hZGluZy1zcGlubmVyPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNtYWluU3Bpbm5lcj5cbiAgPGRpdiBjbGFzcz1cInByZXBhcmVEZXRhaWxzX19tYWluLXNwaW5uZXJcIj5cbiAgICA8ZW8tbG9hZGluZy1zcGlubmVyIHNpemU9XCJtZWRpdW1cIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG5cbjxuZy10ZW1wbGF0ZSAjbm9JdGVtPlxuICA8ZW8tZXJyb3ItbWVzc2FnZSBbZW1wdHlTdGF0ZV09XCJ7aWNvbjogZW1wdHlTdGF0ZS5pY29uLCB0ZXh0OiBlbXB0eVN0YXRlLnRleHQsIGNsYXNzTmFtZTogZW1wdHlTdGF0ZS5jbGFzc05hbWV9XCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLmVycm9yXCI+PC9uZy1jb250ZW50PlxuICA8L2VvLWVycm9yLW1lc3NhZ2U+XG48L25nLXRlbXBsYXRlPlxuXG48ZW8tZGlhbG9nIFt0aXRsZV09XCInZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5kaWFsb2cudGl0bGUnIHwgdHJhbnNsYXRlXCIgWyh2aXNpYmxlKV09XCJzaG93RGVsZXRlRGlhbG9nXCJcbiAgW2ZvY3VzT25TaG93XT1cImZhbHNlXCIgW21pbldpZHRoXT1cIjQwMFwiIFtzdHlsZUNsYXNzXT1cIidwcmVwYXJlLWRlbGV0ZV9fZGlhbG9nJ1wiPlxuXG4gIDxkaXY+e3snZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5kaWFsb2cubWVzc2FnZScgfCB0cmFuc2xhdGV9fTwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9ucyBwcmVwYXJlLWRlbGV0ZS0tYWN0aW9uLWJ1dHRvbnMgZmxleC1yb3dcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1dHRvbiBjYW5jZWxcIiAoY2xpY2spPVwic2hvd0RlbGV0ZURpYWxvZyA9IGZhbHNlXCJcbiAgICAgIHRyYW5zbGF0ZT5lby5jdGEuYnV0dG9uLmNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNjb25maXJtRGVsZXRlIChjbGljayk9XCJyZW1vdmVJdGVtKHByZXBhcmVkSXRlbSlcIiBjbGFzcz1cImJ1dHRvbiBwcmltYXJ5XCJcbiAgICAgIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmRldGFpbHMuZGVsZXRlLmRpYWxvZy5vazwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZW8tZGlhbG9nPlxuXG48ZW8tZGlhbG9nIFt0aXRsZV09XCInZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5jb250ZW50LmRpYWxvZy50aXRsZScgfCB0cmFuc2xhdGVcIiBbKHZpc2libGUpXT1cInNob3dDb250ZW50RGVsZXRlRGlhbG9nXCJcbiAgW21pbldpZHRoXT1cIjQwMFwiIFtzdHlsZUNsYXNzXT1cIidwcmVwYXJlLWRlbGV0ZV9fZGlhbG9nJ1wiPlxuXG4gIDxkaXY+e3snZW8ucHJlcGFyZS5kZXRhaWxzLmRlbGV0ZS5jb250ZW50LmRpYWxvZy5tZXNzYWdlJyB8IHRyYW5zbGF0ZTogKHtjb250ZW50UGF0aDogcHJlcGFyZWRJdGVtPy5jb250ZW50cyA/XG4gICAgcHJlcGFyZWRJdGVtPy5jb250ZW50c1tkZWxldGVkQ29udGVudEluZGV4XT8ucGF0aCA6ICcnfSl9fTwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9ucyBwcmVwYXJlLWRlbGV0ZS0tYWN0aW9uLWJ1dHRvbnMgZmxleC1yb3dcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ1dHRvbiBjYW5jZWxcIiAoY2xpY2spPVwic2hvd0NvbnRlbnREZWxldGVEaWFsb2cgPSBmYWxzZVwiXG4gICAgICB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5jYW5jZWw8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjY29uZmlybUNvbnRlbnREZWxldGUgKGNsaWNrKT1cInJlbW92ZUl0ZW1Db250ZW50KHByZXBhcmVkSXRlbSwgZGVsZXRlZENvbnRlbnRJbmRleClcIlxuICAgICAgY2xhc3M9XCJidXR0b24gcHJpbWFyeVwiIHRyYW5zbGF0ZT5lby5wcmVwYXJlLmRldGFpbHMuZGVsZXRlLmRpYWxvZy5vazwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZW8tZGlhbG9nPlxuIl19