@sunbird-cb/tree-hierarchy 0.0.12-cbrelease-4.8.26 → 0.0.13-cbrelease-4.8.26

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.
@@ -317,11 +317,11 @@ export class TermCardComponent {
317
317
  this.dialog.closeAll();
318
318
  }
319
319
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TermCardComponent, deps: [{ token: i1.FrameworkService }, { token: i2.LocalConnectionService }, { token: i3.ApprovalService }, { token: i4.MatLegacyDialog }], target: i0.ɵɵFactoryTarget.Component }); }
320
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TermCardComponent, selector: "lib-term-card", inputs: { data: "data" }, outputs: { isSelected: "isSelected", selectedCard: "selectedCard", cardAction: "cardAction" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content w-full\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"flex flex-between\">\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableInfoIcon\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"info items\" class=\"action-btn\" (click)=\"openDialog()\">\n <mat-icon>info</mat-icon>\n </button>\n </ng-container>\n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"flex flex-between\">\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{(data.children.children) ? data.children.children?.length : 0}} Child Org</span>\n </div>\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{getuserCount(data)}} Users</span>\n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n <!-- (click)=\"$event.stopPropagation();\" -->\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}} \n </div>\n <div>\n {{data.children.description}} s\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <button *ngIf=\"data.columnInfo.config.enableUpdateHierarchy\" (click)=\"menuAction('update-hierarchy', data)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"action-btn\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon> <span>Update Hierarchy</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleRemoveConnection\" (click)=\"menuAction('remove-term', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>close</mat-icon>\n <span>Remove Connection</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableManageOrganization\" (click)=\"menuAction('manage-org', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>settings</mat-icon>\n <span>Manage Organisation</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<!-- Add this template to your component -->\n<ng-template #dialogTemplate>\n <div class=\"flex flex-col flex-middle\">\n <mat-icon class=\"large-icon color-secondary\">error_outline</mat-icon>\n <p class=\"color-primary modal-text margin-top-s\">Select a organisation to add or see further connections.</p>\n <button mat-button type=\"button\" (click)=\"closeModal()\" class=\"btn-common btn-primary modal-btn\">Close</button>\n </div>\n</ng-template>\n\n", styles: [".term-card{border:1px solid rgba(0,0,0,.08);padding:.9rem;margin:0 5px 1em;background-color:#fff;border-radius:8px;overflow:hidden;position:relative;z-index:45;display:flex;align-items:center;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;word-break:break-word}.term-card .termSelection{position:absolute;right:10px;top:10px}.term-card .term-card-parent{display:flex;flex:1 1 0%}.term-card .term-card-parent .term-card-content{white-space:initial}.term-card .term-card-parent .term-card-content .card-title{margin-bottom:.5em;font-family:Lato;font-size:14px;font-weight:400}.term-card .term-card-parent .term-card-content .card-description{color:#000;font-size:12px!important;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.term-card .term-card-parent .term-card-content .card-description mat-icon{width:16px;height:16px;color:#1b4ca1}.term-card .term-card-checkbox{width:10%}.term-card.selected{color:#000;border-style:none}.term-card.selected .card-description{color:#000!important}.term-card.selected .card-description mat-icon{color:#000!important}.term-card.clickable{cursor:pointer}.approve-flag{position:absolute;right:5px;top:35px;font-size:24px}::ng-deep .menu-sec{min-height:0px!important;background:#fff!important}::ng-deep .mat-mdc-menu-panel{background-color:#fff!important}::ng-deep .mat-mdc-menu-content,::ng-deep .mat-mdc-menu-item{background-color:#fff!important}.menu-sec{background:#fff!important}.refIdCard{border-radius:12px;width:fit-content;border:1px solid #bbb;padding:0 8px;font-size:8px!important;display:flex;align-items:center}.comp-area{font-family:Inter;font-size:12px;font-weight:600;line-height:16px;text-align:left;padding:8px;border-radius:12px}.comp-area.functional{background:#e24577;color:#fff}.comp-area.domain{background:#7b47a4;color:#fff}.comp-area.behavioural{background:#f9bf71}.ribbon{font-size:8px;font-weight:700;color:#fff}.ribbon{--f: .5em;--r: .8em;position:absolute;top:8px;right:calc(-1 * var(--f));padding-inline:.25em;padding-right:8px;line-height:1.8;background:#fa6900;border-bottom:var(--f) solid rgba(0,0,0,.3333333333);border-left:var(--r) solid rgba(0,0,0,0);clip-path:polygon(var(--r) 0,100% 0,100% calc(100% - var(--f)),calc(100% - var(--f)) 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--r) calc(100% - var(--f)),0 calc(50% - var(--f) / 2))}.refId-card{font-size:10px}.action-btn{color:#0009}.modal-text{font-size:16px}.large-icon{font-size:46px;width:46px;height:46px}.color-secondary{color:#f3962f}.color-primary{color:#1b4ca1}.modal-btn{width:87px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] }); }
320
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TermCardComponent, selector: "lib-term-card", inputs: { data: "data" }, outputs: { isSelected: "isSelected", selectedCard: "selectedCard", cardAction: "cardAction" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content w-full\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"flex flex-between\">\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableInfoIcon\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"info items\" class=\"action-btn\" (click)=\"openDialog()\">\n <mat-icon>info</mat-icon>\n </button>\n </ng-container>\n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"flex flex-between\">\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{(data.children.children) ? data.children.children?.length : 0}} Child Org</span>\n </div>\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{getuserCount(data)}} Users</span>\n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n <!-- (click)=\"$event.stopPropagation();\" -->\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}} \n </div>\n <div>\n {{data.children.description}} s\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <button *ngIf=\"data.columnInfo.config.enableUpdateHierarchy && data.index > 1\" (click)=\"menuAction('update-hierarchy', data)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"action-btn\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon> <span>Update Hierarchy</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleRemoveConnection\" (click)=\"menuAction('remove-term', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>close</mat-icon>\n <span>Remove Connection</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableManageOrganization\" (click)=\"menuAction('manage-org', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>settings</mat-icon>\n <span>Manage Organisation</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<!-- Add this template to your component -->\n<ng-template #dialogTemplate>\n <div class=\"flex flex-col flex-middle\">\n <mat-icon class=\"large-icon color-secondary\">error_outline</mat-icon>\n <p class=\"color-primary modal-text margin-top-s\">Select a organisation to add or see further connections.</p>\n <button mat-button type=\"button\" (click)=\"closeModal()\" class=\"btn-common btn-primary modal-btn\">Close</button>\n </div>\n</ng-template>\n\n", styles: [".term-card{border:1px solid rgba(0,0,0,.08);padding:.9rem;margin:0 5px 1em;background-color:#fff;border-radius:8px;overflow:hidden;position:relative;z-index:45;display:flex;align-items:center;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;word-break:break-word}.term-card .termSelection{position:absolute;right:10px;top:10px}.term-card .term-card-parent{display:flex;flex:1 1 0%}.term-card .term-card-parent .term-card-content{white-space:initial}.term-card .term-card-parent .term-card-content .card-title{margin-bottom:.5em;font-family:Lato;font-size:14px;font-weight:400}.term-card .term-card-parent .term-card-content .card-description{color:#000;font-size:12px!important;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.term-card .term-card-parent .term-card-content .card-description mat-icon{width:16px;height:16px;color:#1b4ca1}.term-card .term-card-checkbox{width:10%}.term-card.selected{color:#000;border-style:none}.term-card.selected .card-description{color:#000!important}.term-card.selected .card-description mat-icon{color:#000!important}.term-card.clickable{cursor:pointer}.approve-flag{position:absolute;right:5px;top:35px;font-size:24px}::ng-deep .menu-sec{min-height:0px!important;background:#fff!important}::ng-deep .mat-mdc-menu-panel{background-color:#fff!important}::ng-deep .mat-mdc-menu-content,::ng-deep .mat-mdc-menu-item{background-color:#fff!important}.menu-sec{background:#fff!important}.refIdCard{border-radius:12px;width:fit-content;border:1px solid #bbb;padding:0 8px;font-size:8px!important;display:flex;align-items:center}.comp-area{font-family:Inter;font-size:12px;font-weight:600;line-height:16px;text-align:left;padding:8px;border-radius:12px}.comp-area.functional{background:#e24577;color:#fff}.comp-area.domain{background:#7b47a4;color:#fff}.comp-area.behavioural{background:#f9bf71}.ribbon{font-size:8px;font-weight:700;color:#fff}.ribbon{--f: .5em;--r: .8em;position:absolute;top:8px;right:calc(-1 * var(--f));padding-inline:.25em;padding-right:8px;line-height:1.8;background:#fa6900;border-bottom:var(--f) solid rgba(0,0,0,.3333333333);border-left:var(--r) solid rgba(0,0,0,0);clip-path:polygon(var(--r) 0,100% 0,100% calc(100% - var(--f)),calc(100% - var(--f)) 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--r) calc(100% - var(--f)),0 calc(50% - var(--f) / 2))}.refId-card{font-size:10px}.action-btn{color:#0009}.modal-text{font-size:16px}.large-icon{font-size:46px;width:46px;height:46px}.color-secondary{color:#f3962f}.color-primary{color:#1b4ca1}.modal-btn{width:87px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i6.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] }); }
321
321
  }
322
322
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TermCardComponent, decorators: [{
323
323
  type: Component,
324
- args: [{ selector: 'lib-term-card', template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content w-full\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"flex flex-between\">\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableInfoIcon\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"info items\" class=\"action-btn\" (click)=\"openDialog()\">\n <mat-icon>info</mat-icon>\n </button>\n </ng-container>\n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"flex flex-between\">\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{(data.children.children) ? data.children.children?.length : 0}} Child Org</span>\n </div>\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{getuserCount(data)}} Users</span>\n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n <!-- (click)=\"$event.stopPropagation();\" -->\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}} \n </div>\n <div>\n {{data.children.description}} s\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <button *ngIf=\"data.columnInfo.config.enableUpdateHierarchy\" (click)=\"menuAction('update-hierarchy', data)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"action-btn\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon> <span>Update Hierarchy</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleRemoveConnection\" (click)=\"menuAction('remove-term', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>close</mat-icon>\n <span>Remove Connection</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableManageOrganization\" (click)=\"menuAction('manage-org', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>settings</mat-icon>\n <span>Manage Organisation</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<!-- Add this template to your component -->\n<ng-template #dialogTemplate>\n <div class=\"flex flex-col flex-middle\">\n <mat-icon class=\"large-icon color-secondary\">error_outline</mat-icon>\n <p class=\"color-primary modal-text margin-top-s\">Select a organisation to add or see further connections.</p>\n <button mat-button type=\"button\" (click)=\"closeModal()\" class=\"btn-common btn-primary modal-btn\">Close</button>\n </div>\n</ng-template>\n\n", styles: [".term-card{border:1px solid rgba(0,0,0,.08);padding:.9rem;margin:0 5px 1em;background-color:#fff;border-radius:8px;overflow:hidden;position:relative;z-index:45;display:flex;align-items:center;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;word-break:break-word}.term-card .termSelection{position:absolute;right:10px;top:10px}.term-card .term-card-parent{display:flex;flex:1 1 0%}.term-card .term-card-parent .term-card-content{white-space:initial}.term-card .term-card-parent .term-card-content .card-title{margin-bottom:.5em;font-family:Lato;font-size:14px;font-weight:400}.term-card .term-card-parent .term-card-content .card-description{color:#000;font-size:12px!important;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.term-card .term-card-parent .term-card-content .card-description mat-icon{width:16px;height:16px;color:#1b4ca1}.term-card .term-card-checkbox{width:10%}.term-card.selected{color:#000;border-style:none}.term-card.selected .card-description{color:#000!important}.term-card.selected .card-description mat-icon{color:#000!important}.term-card.clickable{cursor:pointer}.approve-flag{position:absolute;right:5px;top:35px;font-size:24px}::ng-deep .menu-sec{min-height:0px!important;background:#fff!important}::ng-deep .mat-mdc-menu-panel{background-color:#fff!important}::ng-deep .mat-mdc-menu-content,::ng-deep .mat-mdc-menu-item{background-color:#fff!important}.menu-sec{background:#fff!important}.refIdCard{border-radius:12px;width:fit-content;border:1px solid #bbb;padding:0 8px;font-size:8px!important;display:flex;align-items:center}.comp-area{font-family:Inter;font-size:12px;font-weight:600;line-height:16px;text-align:left;padding:8px;border-radius:12px}.comp-area.functional{background:#e24577;color:#fff}.comp-area.domain{background:#7b47a4;color:#fff}.comp-area.behavioural{background:#f9bf71}.ribbon{font-size:8px;font-weight:700;color:#fff}.ribbon{--f: .5em;--r: .8em;position:absolute;top:8px;right:calc(-1 * var(--f));padding-inline:.25em;padding-right:8px;line-height:1.8;background:#fa6900;border-bottom:var(--f) solid rgba(0,0,0,.3333333333);border-left:var(--r) solid rgba(0,0,0,0);clip-path:polygon(var(--r) 0,100% 0,100% calc(100% - var(--f)),calc(100% - var(--f)) 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--r) calc(100% - var(--f)),0 calc(50% - var(--f) / 2))}.refId-card{font-size:10px}.action-btn{color:#0009}.modal-text{font-size:16px}.large-icon{font-size:46px;width:46px;height:46px}.color-secondary{color:#f3962f}.color-primary{color:#1b4ca1}.modal-btn{width:87px}\n"] }]
324
+ args: [{ selector: 'lib-term-card', template: "<ng-container [ngSwitch]=\"( (data && data?.cardSubType) || 'cardMinimal')\">\n <ng-container *ngSwitchCase=\"'standard'\" [ngTemplateOutlet]=\"cardStandard\"></ng-container>\n <ng-container *ngSwitchCase=\"'space-saving'\" [ngTemplateOutlet]=\"cardSpaceSaving\"></ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"cardMinimal\"></ng-container>\n</ng-container>\n\n<ng-template #cardMinimal>\n <div #cardRef class=\"term-card clickable {{data.index}}\" (click)=\"cardClicked(data, cardRef)\"\n [ngClass]=\"[data.children.selected?'selected':'', data.children.approvalStatus === 'Draft'? 'inDraft':'',\n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || data.children.highlight && isApprovalRequired ? 'inAssociationDraft':'']\"\n id=\"{{data.children.name}}\"\n [ngStyle]=\"{'background-color':getColor(data.index,cardRef,'bgColor',data)}\">\n <!-- (click)=\"data.selected=!data.selected\" --> \n <div class=\"term-card-parent\">\n <!-- <Below element is to show id on top left of the card> -->\n <!-- <div class=\"id\" [hidden]=\"true\">{{data.children.code}}</div> -->\n \n <div class=\"term-card-content w-full\">\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"ribbon\">{{data?.children?.refId}}</div>\n </ng-container> -->\n\n <ng-container *ngIf=\"data?.children?.additionalProperties?.competencyArea?.name\">\n <div class=\"mb-2\">\n <span class=\"comp-area {{data?.children?.additionalProperties?.competencyArea?.name?.toLowerCase()}}\">{{data?.children?.additionalProperties?.competencyArea?.name}}</span>\n </div>\n </ng-container>\n <div class=\"flex flex-between\">\n <div class=\"card-title\">{{data.children.name}}\n <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard mt-2\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> \n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableInfoIcon\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"info items\" class=\"action-btn\" (click)=\"openDialog()\">\n <mat-icon>info</mat-icon>\n </button>\n </ng-container>\n </div>\n <!-- <ng-container *ngIf=\"data?.children?.refId\">\n <div class=\"refIdCard px-4\">\n <span>{{data?.children?.refId}} </span>\n </div>\n </ng-container> -->\n <!-- <span>++{{data.children.selected}}+++</span>\n <span>=={{data.children.status}}==</span> -->\n <div class=\"flex flex-between\">\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{(data.children.children) ? data.children.children?.length : 0}} Child Org</span>\n </div>\n <div class=\"card-description flex flex-middle gap-1\">\n <mat-icon svgIcon=\"frac\"></mat-icon> \n <span>{{getuserCount(data)}} Users</span>\n </div>\n <ng-container *ngIf=\"data?.columnInfo?.config?.enableThreeDot\" >\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"orgMenu\" [matMenuTriggerData]=\"{'data':data, 'cardRef': cardRef}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n <!-- <p>{{data.children.approvalStatus}}, {{data.children.associationProperties?.approvalStatus}}</p> -->\n <!-- *ngIf=\"!data.isViewOnly && data.children.approvalStatus === 'Draft' && isApprovalRequired\" -->\n <!-- (click)=\"$event.stopPropagation();\" -->\n <!-- <div class=\"term-card-checkbox\">\n <mat-checkbox color=\"primary\" *ngIf=\"data.children.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length || \n data.children.associationProperties?.approvalStatus === 'Draft' && isApprovalRequired && !approvalList.length ||\n data.children.highlight && isApprovalRequired\" [checked]=\"data.children.highlight\" class=\"termSelection\"\n (change)=\"handleProductClick(data.children, $event)\" (click)=\"$event.stopPropagation()\"></mat-checkbox>\n <mat-icon color=\"primary\" class=\"approve-flag\"\n *ngIf=\"data.children.highlight && isApprovalRequired\">{{app_strings.flag}}</mat-icon>\n </div> -->\n </div>\n</ng-template>\n\n<ng-template #cardStandard>\n <div>\n {{data.children.name}} \n </div>\n <div>\n {{data.children.description}} s\n </div>\n</ng-template>\n\n<ng-template #cardSpaceSaving>\n <div>\n {{data.children.name}}\n </div>\n</ng-template>\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <!-- <div > -->\n <button *ngIf=\"data.columnInfo.config.enableView\" (click)=\"view(data, data.children, data.index)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"ws-mat-primary-text\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>visibility</mat-icon> <span>View</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleEdit\" (click)=\"edit(data, data.children,data.index, cardRef)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon>\n <span>Edit</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableAdd\" (click)=\"create(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>add</mat-icon>\n <span>Add</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableDelete\" (click)=\"delete(data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<mat-menu #orgMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <button *ngIf=\"data.columnInfo.config.enableUpdateHierarchy && data.index > 1\" (click)=\"menuAction('update-hierarchy', data)\" mat-menu-item name=\"channel-analytics-button\"\n class=\"action-btn\" i18n-aria-label aria-label=\"Analytics\">\n <mat-icon>edit</mat-icon> <span>Update Hierarchy</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enabaleRemoveConnection\" (click)=\"menuAction('remove-term', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>close</mat-icon>\n <span>Remove Connection</span>\n </button>\n <button *ngIf=\"data.columnInfo.config.enableManageOrganization\" (click)=\"menuAction('manage-org', data)\"\n mat-menu-item name=\"channel-analytics-button\" class=\"action-btn\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>settings</mat-icon>\n <span>Manage Organisation</span>\n </button>\n </ng-template>\n</mat-menu>\n\n<!-- Add this template to your component -->\n<ng-template #dialogTemplate>\n <div class=\"flex flex-col flex-middle\">\n <mat-icon class=\"large-icon color-secondary\">error_outline</mat-icon>\n <p class=\"color-primary modal-text margin-top-s\">Select a organisation to add or see further connections.</p>\n <button mat-button type=\"button\" (click)=\"closeModal()\" class=\"btn-common btn-primary modal-btn\">Close</button>\n </div>\n</ng-template>\n\n", styles: [".term-card{border:1px solid rgba(0,0,0,.08);padding:.9rem;margin:0 5px 1em;background-color:#fff;border-radius:8px;overflow:hidden;position:relative;z-index:45;display:flex;align-items:center;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;word-break:break-word}.term-card .termSelection{position:absolute;right:10px;top:10px}.term-card .term-card-parent{display:flex;flex:1 1 0%}.term-card .term-card-parent .term-card-content{white-space:initial}.term-card .term-card-parent .term-card-content .card-title{margin-bottom:.5em;font-family:Lato;font-size:14px;font-weight:400}.term-card .term-card-parent .term-card-content .card-description{color:#000;font-size:12px!important;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.term-card .term-card-parent .term-card-content .card-description mat-icon{width:16px;height:16px;color:#1b4ca1}.term-card .term-card-checkbox{width:10%}.term-card.selected{color:#000;border-style:none}.term-card.selected .card-description{color:#000!important}.term-card.selected .card-description mat-icon{color:#000!important}.term-card.clickable{cursor:pointer}.approve-flag{position:absolute;right:5px;top:35px;font-size:24px}::ng-deep .menu-sec{min-height:0px!important;background:#fff!important}::ng-deep .mat-mdc-menu-panel{background-color:#fff!important}::ng-deep .mat-mdc-menu-content,::ng-deep .mat-mdc-menu-item{background-color:#fff!important}.menu-sec{background:#fff!important}.refIdCard{border-radius:12px;width:fit-content;border:1px solid #bbb;padding:0 8px;font-size:8px!important;display:flex;align-items:center}.comp-area{font-family:Inter;font-size:12px;font-weight:600;line-height:16px;text-align:left;padding:8px;border-radius:12px}.comp-area.functional{background:#e24577;color:#fff}.comp-area.domain{background:#7b47a4;color:#fff}.comp-area.behavioural{background:#f9bf71}.ribbon{font-size:8px;font-weight:700;color:#fff}.ribbon{--f: .5em;--r: .8em;position:absolute;top:8px;right:calc(-1 * var(--f));padding-inline:.25em;padding-right:8px;line-height:1.8;background:#fa6900;border-bottom:var(--f) solid rgba(0,0,0,.3333333333);border-left:var(--r) solid rgba(0,0,0,0);clip-path:polygon(var(--r) 0,100% 0,100% calc(100% - var(--f)),calc(100% - var(--f)) 100%,calc(100% - var(--f)) calc(100% - var(--f)),var(--r) calc(100% - var(--f)),0 calc(50% - var(--f) / 2))}.refId-card{font-size:10px}.action-btn{color:#0009}.modal-text{font-size:16px}.large-icon{font-size:46px;width:46px;height:46px}.color-secondary{color:#f3962f}.color-primary{color:#1b4ca1}.modal-btn{width:87px}\n"] }]
325
325
  }], ctorParameters: function () { return [{ type: i1.FrameworkService }, { type: i2.LocalConnectionService }, { type: i3.ApprovalService }, { type: i4.MatLegacyDialog }]; }, propDecorators: { dialogTemplate: [{
326
326
  type: ViewChild,
327
327
  args: ['dialogTemplate']
@@ -334,4 +334,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
334
334
  }], cardAction: [{
335
335
  type: Output
336
336
  }] } });
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90cmVlLWhpZXJhcmNoeS9zcmMvbGliL2NvbXBvbmVudHMvdGVybS1jYXJkL3Rlcm0tY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3Rlcm0tY2FyZC90ZXJtLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBS2pILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUN4SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7OztBQU9oRyxNQUFNLE9BQU8saUJBQWlCO0lBYzVCLElBQ0ksSUFBSSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFHbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFDLEtBQUssQ0FBQTtJQUNyQyxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFNRCxZQUNVLGdCQUFrQyxFQUNsQyxzQkFBOEMsRUFDOUMsZUFBZ0MsRUFDakMsTUFBaUI7UUFIaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQywyQkFBc0IsR0FBdEIsc0JB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akIsaUJBQWlCLGdTQ2pCOUIsMGhSQXlKQTs7NEZEeElhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlO3dNQU1JLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQWF2QixJQUFJO3NCQURQLEtBQUs7Z0JBV0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTlNGcmFtZXdvcmsgfSBmcm9tICcuLi8uLi9tb2RlbHMvZnJhbWV3b3JrLm1vZGVsJ1xuaW1wb3J0IHsgQXBwcm92YWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwcm92YWwuc2VydmljZSc7XG5pbXBvcnQgeyBGcmFtZXdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZnJhbWV3b3JrLnNlcnZpY2UnXG5pbXBvcnQgeyBMb2NhbENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWwtY29ubmVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGxhYmVscyB9IGZyb20gJy4uLy4uL2xhYmVscy9zdHJpbmdzJztcbmltcG9ydCB7IENhcmRTZWxlY3Rpb24sIENhcmRDaGVja2VkLCBDYXJkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZhcmlhYmxlLXR5cGUubW9kZWwnO1xuaW1wb3J0IHsgTWF0TGVnYWN5RGlhbG9nIGFzIE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnO1xuaW1wb3J0IHsgQ3JlYXRlVGVybUNvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS10ZXJtL2NyZWF0ZS10ZXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcmVhdGVUZXJtRnJvbUZyYW1ld29ya0NvbXBvbmVudCB9IGZyb20gJy4vLi4vY3JlYXRlLXRlcm0tZnJvbS1mcmFtZXdvcmsvY3JlYXRlLXRlcm0tZnJvbS1mcmFtZXdvcmsuY29tcG9uZW50JztcbmltcG9ydCB7IENvbmZvcmFtdGlvblBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZm9yYW10aW9uLXBvcHVwL2NvbmZvcmFtdGlvbi1wb3B1cC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdGVybS1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rlcm0tY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Rlcm0tY2FyZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRlcm1DYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyBASW5wdXQoKSBkYXRhITogTlNGcmFtZXdvcmsuSVRlcm1DYXJkXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ1RlbXBsYXRlJykgZGlhbG9nVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cbiAgcHJpdmF0ZSBfZGF0YSE6IE5TRnJhbWV3b3JrLklUZXJtQ2FyZDtcbiAgaXNBcHByb3ZhbFJlcXVpcmVkOiBib29sZWFuID0gZmFsc2VcbiAgYXBwcm92YWxMaXN0OiBBcnJheTxDYXJkPiA9IFtdXG4gIGhlaWdodExpZ2h0ZWQgPSBbXVxuICBhcHBfc3RyaW5nczogYW55ID0gbGFiZWxzO1xuICBsb2FkZWQ6IGFueSA9IHt9XG4gIGlzQ29tcGV0ZW5jeUFyZWE6YW55O1xuICBlbnZpcm9ubWVudDogYW55XG4gIHN1YnNjcmlwdGlvbiA6YW55XG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9kYXRhID0gdmFsdWU7XG4gICAgLy8gIGlmKHRoaXMuX2RhdGEpXG4gICAgLy8gICAgdGhpcy5jcmVhdGVUaW1lbGluZSh0aGlzLl9kYXRhWzBdLmlkKVxuICAgIHRoaXMuX2RhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0PWZhbHNlXG4gIH1cbiAgZ2V0IGRhdGEoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBpc1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJkU2VsZWN0aW9uPigpXG4gIEBPdXRwdXQoKSBzZWxlY3RlZENhcmQgPSBuZXcgRXZlbnRFbWl0dGVyPENhcmRDaGVja2VkPigpXG4gIEBPdXRwdXQoKSBjYXJkQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGFjdGlvbjogc3RyaW5nLCBkYXRhOiBhbnkgfT4oKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZnJhbWV3b3JrU2VydmljZTogRnJhbWV3b3JrU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsQ29ubmVjdGlvblNlcnZpY2U6IExvY2FsQ29ubmVjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHByb3ZhbFNlcnZpY2U6IEFwcHJvdmFsU2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csIFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaXNBcHByb3ZhbFJlcXVpcmVkID0gdGhpcy5sb2NhbENvbm5lY3Rpb25TZXJ2aWNlLmdldENvbmZpZ0luZm8oKS5pc0FwcHJvdmFsUmVxdWlyZWRcbiAgICBcbiAgICB0aGlzLnVwZGF0ZUFwcHJvdmFsU3RhdHVzKClcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5pbnNlcnRVcGRhdGVEZWxldGVOb3RpZmllci5zdWJzY3JpYmUoKGUpPT57XG4gICAgICBpZihlKXtcbiAgICAgICB0aGlzLmlzQ29tcGV0ZW5jeUFyZWEgPSBlLmFjdGlvblxuICAgICAgfVxuICAgIH0pXG5cblxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RW52aXJvbWVudCgpXG4gICAgXG4gIH1cblxuICBjYXJkQ2xpY2tlZChkYXRhOiBhbnksIGNhcmRSZWY6IGFueSkge1xuICAgIGlmKGRhdGEuY2F0ZWdvcnkhPSdzdWJ0aGVtZScpe1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhcmRDbGtEYXRhID0gZGF0YTtcbiAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5DdXJyZW50Q2FyZENsay5uZXh0KGRhdGEuY2F0ZWdvcnkpXG4gICAgICBcbiAgICB9XG4gICAgLy8gdGhpcy5kYXRhLnNlbGVjdGVkID0gdHJ1ZVxuICAgIGlmKHRoaXMuZnJhbWV3b3JrU2VydmljZS5pc0xhc3RDb2x1bW4odGhpcy5kYXRhLmNhdGVnb3J5KSl7XG4gICAgICByZXR1cm4gXG4gICAgfVxuICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiB0aGlzLmRhdGEuY2F0ZWdvcnksIGRhdGE6IGRhdGEuY2hpbGRyZW4sIGNhcmRSZWYgfSlcbiAgICB0aGlzLmlzU2VsZWN0ZWQuZW1pdCh7IGVsZW1lbnQ6IHRoaXMuZGF0YS5jaGlsZHJlbiwgaXNTZWxlY3RlZDogIWRhdGEuc2VsZWN0ZWQgfSlcbiAgfVxuXG4gIGhhbmRsZVByb2R1Y3RDbGljayh0ZXJtOiBhbnksIGV2ZW50OiBhbnkpe1xuICAgIHRoaXMuc2VsZWN0ZWRDYXJkLmVtaXQoe3Rlcm06dGVybSwgY2hlY2tlZDpldmVudC5jaGVja2VkfSlcbiAgfVxuXG4gIHVwZGF0ZUFwcHJvdmFsU3RhdHVzKCl7XG4gICAgIGNvbnN0IGlkID0gdGhpcy5fZGF0YS5jaGlsZHJlbi5pZGVudGlmaWVyO1xuICAgIHRoaXMuYXBwcm92YWxTZXJ2aWNlLmdldFVwZGF0ZUxpc3QoKS5zdWJzY3JpYmUoKGxpc3Q6YW55KSA9PiB7XG4gICAgICB0aGlzLmFwcHJvdmFsTGlzdCA9IGxpc3QubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uaWRlbnRpZmllcik7XG4gICAgICBpZih0aGlzLmFwcHJvdmFsTGlzdCl7XG4gICAgICAgICAgIGlmKHRoaXMuYXBwcm92YWxMaXN0LmluY2x1ZGVzKGlkKSl7XG4gICAgICAgICAgICAgIHRoaXMuX2RhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0ID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgfSAgICAgXG4gICAgfSlcbiAgfVxuXG4gIGdldENvbG9yKGluZGV4Q2xhc3M6bnVtYmVyLCBjYXJkUmVmOiBhbnkscHJvcGVydHk6IHN0cmluZywgZGF0YTphbnkpIHtcbiAgICBsZXQgY29uZmlnID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldENvbmZpZyhkYXRhLmNhdGVnb3J5KTtcbiAgICBpZihjYXJkUmVmLmNsYXNzTGlzdC5jb250YWlucygnc2VsZWN0ZWQnKSAmJiBwcm9wZXJ0eSA9PT0gJ2JnQ29sb3InKXtcbiAgICAgICByZXR1cm4gY29uZmlnLmNvbG9yO1xuICAgIH1cbiAgICBpZihwcm9wZXJ0eSA9PT0gJ2JvcmRlcicpe1xuICAgICAgbGV0IGJvcmRlckNvbG9yO1xuICAgICAgaWYoY2FyZFJlZi5jbGFzc0xpc3QuY29udGFpbnMoKGluZGV4Q2xhc3MpLnRvU3RyaW5nKCkpKXtcbiAgICAgICAgYm9yZGVyQ29sb3IgPSBcIjhweCBzb2xpZFwiICsgY29uZmlnLmNvbG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJvcmRlckNvbG9yO1xuICAgIH1cbiAgfVxuXG5cbiAgdmlldyhkYXRhOiBhbnksIGNoaWxkcmVuRGF0YTogYW55LCBpbmRleDogYW55KXtcbiAgICBsZXQgZGlhbG9nOiBhbnlcbiAgICBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhkYXRhLmNvbHVtbkluZm8uY29kZSlcbiAgICBjb25zdCBuZXhDb2xJbmZvID0gdGhpcy5nZXROZXh0Q2F0KGRhdGEpXG4gICAgY29uc3QgbmV4dENhdCA9IG5leENvbEluZm8gfHwgZGF0YS5jb2x1bW5JbmZvXG4gICAgaWYobmV4dENhdCAmJiB0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpIHtcbiAgICAgIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgICBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhuZXh0Q2F0LmNvZGUpXG4gICAgICBjb25zdCBjb2xJbmZvID0gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSkuZmlsdGVyKGwgPT4gbC5jb2RlID09PSBuZXh0Q2F0LmNvZGUgKVxuICAgICAgbGV0IG5leHRDb2xJbmZvIDogYW55ID0gW11cbiAgICAgIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgfVxuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAgICAgICBvcGVuTW9kZTogJ3ZpZXcnLFxuICAgICAgICAgICAgY2FyZENvbEluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgIG5leHRDb2xJbmZvOiBuZXh0Q29sSW5mbyAmJiBuZXh0Q29sSW5mby5sZW5ndGggPyBuZXh0Q29sSW5mb1swXSA6IFtdLFxuICAgICAgICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgICBjb2xJbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgICAgICAgIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgICAgfSlcbiAgICAgIFxuICAgICBcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Db21wb25lbnQsIHtcbiAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICBtb2RlOid2aWV3JyxcbiAgICAgICAgICBjb2x1bW5JbmZvOiB0aGlzLmRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgY29sSW5kZXg6IGluZGV4LFxuICAgICAgICAgIGNoaWxkcmVuRGF0YTogY2hpbGRyZW5EYXRhLFxuICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgIH0pXG4gICAgfVxuICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmKCFyZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gaWYgKHJlcyAmJiByZXMuY3JlYXRlZCkge1xuICAgICAgLy8gICB0aGlzLnNob3dQdWJsaXNoID0gdHJ1ZVxuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5sb2FkZWRbcmVzLnRlcm0uY2F0ZWdvcnldID0gZmFsc2VcbiAgICAgIC8vIC8vIHdhaXRcbiAgICAgIC8vIGNvbnN0IHBhcmVudENvbHVtbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KHJlcy50ZXJtLmNhdGVnb3J5KVxuICAgICAgLy8gcmVzLnBhcmVudCA9IG51bGxcbiAgICAgIC8vIGlmIChwYXJlbnRDb2x1bW4pIHtcbiAgICAgIC8vICAgcmVzLnBhcmVudCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChwYXJlbnRDb2x1bW4uY29kZSlcbiAgICAgIC8vICAgcmVzLnBhcmVudC5jaGlsZHJlbj8gcmVzLnBhcmVudC5jaGlsZHJlbi5wdXNoKHJlcy50ZXJtKSA6cmVzLnBhcmVudFsnY2hpbGRyZW4nXSA9IFtyZXMudGVybV1cbiAgICAgIC8vIH1cbiAgICAgIC8vIHRoaXMudXBkYXRlRmluYWxMaXN0KHsgc2VsZWN0ZWRUZXJtOiByZXMudGVybSwgaXNTZWxlY3RlZDogZmFsc2UsIHBhcmVudERhdGE6IHJlcy5wYXJlbnQsIGNvbEluZGV4OmNvbEluZGV4IH0pXG4gICAgfSlcbiAgfVxuICBlZGl0KGRhdGE6IGFueSwgY2hpbGRyZW5EYXRhOiBhbnksIGluZGV4OiBhbnksIGNhcmRSZWY6IGFueSl7XG4gICAgbGV0IGRpYWxvZzogYW55XG4gICAgY29uc3Qgc2VsZWN0ZWRUZXJtcyA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMoZGF0YS5jb2x1bW5JbmZvLmNvZGUpXG4gICAgY29uc3QgbmV4Q29sSW5mbyA9IHRoaXMuZ2V0TmV4dENhdChkYXRhKVxuICAgIGNvbnN0IG5leHRDYXQgPSBuZXhDb2xJbmZvIHx8IGRhdGEuY29sdW1uSW5mb1xuICAgXG4gICAgaWYobmV4dENhdCAmJiB0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpIHtcbiAgICAgIC8vIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgICAvLyBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhuZXh0Q2F0LmNvZGUpXG4gICAgICAvLyBjb25zdCBjb2xJbmZvID0gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSkuZmlsdGVyKGwgPT4gbC5jb2RlID09PSBuZXh0Q2F0LmNvZGUgKVxuICAgICAgLy8gbGV0IG5leHRDb2xJbmZvID0gW11cbiAgICAgIC8vIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgIC8vICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgLy8gfVxuICAgICAgLy8gICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAvLyAgICAgZGF0YTogeyBcbiAgICAgIC8vICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAvLyAgICAgICBvcGVuTW9kZTogJ2VkaXQnLFxuICAgICAgLy8gICAgICAgY2FyZENvbEluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgLy8gICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgIC8vICAgICAgIG5leHRDb2xJbmZvOiBuZXh0Q29sSW5mbyAmJiBuZXh0Q29sSW5mby5sZW5ndGggPyBuZXh0Q29sSW5mb1swXSA6IFtdLFxuICAgICAgLy8gICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgLy8gICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAvLyAgICAgICBjb2xJbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgIC8vICAgICAgIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgIC8vICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgLy8gICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgIC8vICAgfSlcbiAgICAgIFxuICAgICAgdGhpcy5jcmVhdGUoZGF0YSwgJ2VkaXQnKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ3JlYXRlVGVybUNvbXBvbmVudCwge1xuICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgIG1vZGU6J2VkaXQnLFxuICAgICAgICAgIGNvbHVtbkluZm86IGRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgY29sSW5kZXg6IGluZGV4LFxuICAgICAgICAgIGNoaWxkcmVuRGF0YTogY2hpbGRyZW5EYXRhLFxuICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXMsXG4gICAgICAgICAgY2FyZFJlZjogY2FyZFJlZlxuICAgICAgICB9LFxuICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgfSlcbiAgICB9XG4gICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYoIXJlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBjb25zdCByZXNwb25zZURhdGEgPSB7XG4gICAgICAvLyAgIHJlcyxcbiAgICAgIC8vICAgaW5kZXg6IGluZGV4LmluZGV4LFxuICAgICAgLy8gICBkYXRhLFxuICAgICAgLy8gICB0eXBlOiAndXBkYXRlJyxcbiAgICAgIC8vICAgY2FyZFJlZjogY2FyZFJlZlxuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnVwZGF0ZUFmdGVyQWRkT3JFZGl0U3ViamVjdChyZXNwb25zZURhdGEpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSlcbiAgICAgIH0sIDEwMClcbiAgICB9KVxuICB9XG4gIGNyZWF0ZShkYXRhOiBhbnksIG1vZGU/OnN0cmluZyl7XG4gICAgY29uc3QgbmV4Q29sSW5mbyA9IHRoaXMuZ2V0TmV4dENhdChkYXRhKVxuICAgIGNvbnN0IG5leHRDYXQgPSBuZXhDb2xJbmZvIHx8IGRhdGEuY29sdW1uSW5mb1xuICAgIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgaWYobmV4dENhdCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRUZXJtcyA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMobmV4dENhdC5jb2RlKVxuICAgICAgY29uc3QgY29sSW5mbyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpLmZpbHRlcihsID0+IGwuY29kZSA9PT0gbmV4dENhdC5jb2RlIClcbiAgICAgIGxldCBuZXh0Q29sSW5mbzogYW55ID0gW11cbiAgICAgIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgfVxuICAgICAgbGV0IGRpYWxvZzogYW55XG4gICAgICBpZih0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpe1xuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAgICAgICBvcGVuTW9kZTogbW9kZSB8fCAnYWRkJyxcbiAgICAgICAgICAgIGNhcmRDb2xJbmZvOiB0aGlzLmRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICBuZXh0Q29sSW5mbzogbmV4dENvbEluZm8gJiYgbmV4dENvbEluZm8ubGVuZ3RoID8gbmV4dENvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICAgIHNlbGVjdGVkcGFyZW50czogdGhpcy5oZWlnaHRMaWdodGVkLFxuICAgICAgICAgICAgY29sSW5kZXg6IG5leHRDYXQuaW5kZXgsXG4gICAgICAgICAgICBjaGlsZHJlbkRhdGE6IGRhdGEuY2hpbGRyZW4sXG4gICAgICAgICAgICBzZWxlY3RlZFBhcmVudFRlcm1zOiBzZWxlY3RlZFRlcm1zXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Db21wb25lbnQsIHtcbiAgICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgICAgbW9kZTonbXVsdGktY3JlYXRlJyxcbiAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICAgIGNvbEluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgICAgY2hpbGRyZW5EYXRhOiBkYXRhLmNoaWxkcmVuLFxuICAgICAgICAgICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZighcmVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSB7XG4gICAgICAgICAgcmVzLFxuICAgICAgICAgIGluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdHlwZTogJ211bHRpLWNyZWF0ZSdcbiAgICAgICAgfVxuICAgICAgICBpZighKHJlcyAmJiByZXMuc3RvcFVwZGF0ZSkpe1xuICAgICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS51cGRhdGVBZnRlckFkZE9yRWRpdFN1YmplY3QocmVzcG9uc2VEYXRhKVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpXG4gICAgICAgIH0sIDEwMClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0TmV4dENhdE5hbWUoZGF0YTogYW55KSB7XG4gICAgaWYoZGF0YSAmJiBkYXRhLmNvbHVtbkluZm8gJiYgZGF0YS5jb2x1bW5JbmZvLmNvZGUpe1xuICAgICAgY29uc3QgbmV4dENhdCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoZGF0YS5jb2x1bW5JbmZvLmNvZGUpXG4gICAgICBpZihuZXh0Q2F0ICYmIG5leHRDYXQuY29kZSl7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gbmV4dENhdC5jb2RlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBnZXROZXh0Q2F0KGRhdGE6IGFueSkge1xuICAgIGlmKGRhdGEgJiYgZGF0YS5jb2x1bW5JbmZvICYmIGRhdGEuY29sdW1uSW5mby5jb2RlKXtcbiAgICAgIGNvbnN0IG5leHRDYXQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KGRhdGEuY29sdW1uSW5mby5jb2RlKVxuICAgICAgcmV0dXJuIG5leHRDYXRcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmKHRoaXMuc3Vic2NyaXB0aW9uKXtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICB9XG4gIH1cbiAgZGVsZXRlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSB7XG4gICAgICBkaWFsb2dUeXBlOiAnd2FybmluZycsXG4gICAgICBkaWFsb2dBY3Rpb246ICdyZXRpcmUnLFxuICAgICAgZGVzY3JpcHRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXI6IGBDb21wZXRlbmN5ICR7ZGF0YS5jYXRlZ29yeSA9PT1cInN1YnRoZW1lXCI/ICdzdWItdGhlbWUnOiAndGhlbWUnfSB3aWxsIGJlIGRlbGV0ZWRgLFxuICAgICAgICAgIGhlYWRlckNsYXNzOiAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibHVlIHRleHRCb2xkJyxcbiAgICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtc2dDbGFzczogJ21iLTIgbXQtMicsXG4gICAgICAgICAgICAgIG1zZzogYERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBmb290ZXJDbGFzczogJ2l0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlcicsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBidG5UZXh0OiAnTm8nLFxuICAgICAgICAgIGJ0bkNsYXNzOiAnYnRuLW91dGxpbmUnLFxuICAgICAgICAgIHJlc3BvbnNlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJ0blRleHQ6ICdZZXMnLFxuICAgICAgICAgIGJ0bkNsYXNzOiAnYnRuLWZ1bGwtc3VjY2VzcycsXG4gICAgICAgICAgcmVzcG9uc2U6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2FyZEluZm86IGRhdGFcbiAgICB9XG4gICAgbGV0IGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZm9yYW10aW9uUG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICAgIG1heFdpZHRoOiAnODB2dycsXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnLFxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgIH0pXG4gICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoX3JlcyA9PiB7XG4gICAgICAgIFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpXG4gICAgICB9LCAxMDApXG4gICAgfSlcbiAgICBcbiAgfVxuXG4gIG1lbnVBY3Rpb24odHlwZTpzdHJpbmcsIF9pdGVtOiBhbnkpIHtcbiAgICB0aGlzLmNhcmRBY3Rpb24uZW1pdCh7IGFjdGlvbjogdHlwZSwgZGF0YTogX2l0ZW0gfSk7XG4gIH0gXG5cbiAgZ2V0dXNlckNvdW50KGl0ZW06IGFueSkge1xuICAgIGlmKGl0ZW0uY2hpbGRyZW4uY29kZSkge1xuICAgICAgY29uc3QgdGVtcERhdGEgPSBpdGVtLmNvbHVtbkluZm8uY2hpbGRyZW4uZmluZCgoaTogYW55KSA9PiBpLmNvZGUgPT09IGl0ZW0uY2hpbGRyZW4uY29kZSlcbiAgICAgIHJldHVybiB0ZW1wRGF0YT8udXNlckNvdW50IHx8IDBcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIG9wZW5EaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ1RlbXBsYXRlLCB7XG4gICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgIC8vIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIGRhdGE6IHsgLyogQW55IGRhdGEgeW91IHdhbnQgdG8gcGFzcyB0byB0aGUgZGlhbG9nICovIH1cbiAgICB9KTtcbiAgfVxuICBcbiAgY2xvc2VNb2RhbCgpIHtcbiAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xuICB9XG59XG4gIFxuXG4iLCI8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCIoIChkYXRhICYmIGRhdGE/LmNhcmRTdWJUeXBlKSB8fCAnY2FyZE1pbmltYWwnKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdGFuZGFyZCdcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXJkU3RhbmRhcmRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3BhY2Utc2F2aW5nJ1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNhcmRTcGFjZVNhdmluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdCBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXJkTWluaW1hbFwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjY2FyZE1pbmltYWw+XG4gICAgPGRpdiAjY2FyZFJlZiBjbGFzcz1cInRlcm0tY2FyZCBjbGlja2FibGUge3tkYXRhLmluZGV4fX1cIiAoY2xpY2spPVwiY2FyZENsaWNrZWQoZGF0YSwgY2FyZFJlZilcIlxuICAgICAgICBbbmdDbGFzc109XCJbZGF0YS5jaGlsZHJlbi5zZWxlY3RlZD8nc2VsZWN0ZWQnOicnLCBkYXRhLmNoaWxkcmVuLmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnPyAnaW5EcmFmdCc6JycsXG4gICAgZGF0YS5jaGlsZHJlbi5hc3NvY2lhdGlvblByb3BlcnRpZXM/LmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnICYmIGlzQXBwcm92YWxSZXF1aXJlZCAmJiAhYXBwcm92YWxMaXN0Lmxlbmd0aCB8fCBkYXRhLmNoaWxkcmVuLmhpZ2hsaWdodCAmJiBpc0FwcHJvdmFsUmVxdWlyZWQgPyAnaW5Bc3NvY2lhdGlvbkRyYWZ0JzonJ11cIlxuICAgICAgICBpZD1cInt7ZGF0YS5jaGlsZHJlbi5uYW1lfX1cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtY29sb3InOmdldENvbG9yKGRhdGEuaW5kZXgsY2FyZFJlZiwnYmdDb2xvcicsZGF0YSl9XCI+XG4gICAgICAgIDwhLS0gKGNsaWNrKT1cImRhdGEuc2VsZWN0ZWQ9IWRhdGEuc2VsZWN0ZWRcIiAtLT4gICBcbiAgICAgICAgPGRpdiBjbGFzcz1cInRlcm0tY2FyZC1wYXJlbnRcIj5cbiAgICAgICAgICAgIDwhLS0gPEJlbG93IGVsZW1lbnQgaXMgdG8gc2hvdyBpZCBvbiB0b3AgbGVmdCBvZiB0aGUgY2FyZD4gLS0+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJpZFwiIFtoaWRkZW5dPVwidHJ1ZVwiPnt7ZGF0YS5jaGlsZHJlbi5jb2RlfX08L2Rpdj4gLS0+XG4gICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVybS1jYXJkLWNvbnRlbnQgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICAqbmdJZj1cImRhdGE/LmNoaWxkcmVuPy5yZWZJZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmliYm9uXCI+e3tkYXRhPy5jaGlsZHJlbj8ucmVmSWR9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5jaGlsZHJlbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmNvbXBldGVuY3lBcmVhPy5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgIGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWFyZWEge3tkYXRhPy5jaGlsZHJlbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmNvbXBldGVuY3lBcmVhPy5uYW1lPy50b0xvd2VyQ2FzZSgpfX1cIj57e2RhdGE/LmNoaWxkcmVuPy5hZGRpdGlvbmFsUHJvcGVydGllcz8uY29tcGV0ZW5jeUFyZWE/Lm5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIj57e2RhdGEuY2hpbGRyZW4ubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8uY2hpbGRyZW4/LnJlZklkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZklkQ2FyZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZGF0YT8uY2hpbGRyZW4/LnJlZklkfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmNvbHVtbkluZm8/LmNvbmZpZz8uZW5hYmxlSW5mb0ljb25cIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gaTE4bi1hcmlhLWxhYmVsIGFyaWEtbGFiZWw9XCJpbmZvIGl0ZW1zXCIgY2xhc3M9XCJhY3Rpb24tYnRuXCIgKGNsaWNrKT1cIm9wZW5EaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmluZm88L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmNoaWxkcmVuPy5yZWZJZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVmSWRDYXJkIHB4LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZGF0YT8uY2hpbGRyZW4/LnJlZklkfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSA8c3Bhbj4rK3t7ZGF0YS5jaGlsZHJlbi5zZWxlY3RlZH19KysrPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPj09e3tkYXRhLmNoaWxkcmVuLnN0YXR1c319PT08L3NwYW4+ICAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb24gZmxleCBmbGV4LW1pZGRsZSBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJmcmFjXCI+PC9tYXQtaWNvbj4gXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7KGRhdGEuY2hpbGRyZW4uY2hpbGRyZW4pID8gZGF0YS5jaGlsZHJlbi5jaGlsZHJlbj8ubGVuZ3RoIDogMH19IENoaWxkIE9yZzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWRlc2NyaXB0aW9uIGZsZXggZmxleC1taWRkbGUgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZnJhY1wiPjwvbWF0LWljb24+IFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tnZXR1c2VyQ291bnQoZGF0YSl9fSBVc2Vyczwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5jb2x1bW5JbmZvPy5jb25maWc/LmVuYWJsZVRocmVlRG90XCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGkxOG4tYXJpYS1sYWJlbCBhcmlhLWxhYmVsPVwiYWN0aW9uIGl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJvcmdNZW51XCIgW21hdE1lbnVUcmlnZ2VyRGF0YV09XCJ7J2RhdGEnOmRhdGEsICdjYXJkUmVmJzogY2FyZFJlZn1cIiBjbGFzcz1cImFjdGlvbi1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIDxwPnt7ZGF0YS5jaGlsZHJlbi5hcHByb3ZhbFN0YXR1c319LCB7e2RhdGEuY2hpbGRyZW4uYXNzb2NpYXRpb25Qcm9wZXJ0aWVzPy5hcHByb3ZhbFN0YXR1c319PC9wPiAtLT5cbiAgICAgICAgPCEtLSAqbmdJZj1cIiFkYXRhLmlzVmlld09ubHkgJiYgZGF0YS5jaGlsZHJlbi5hcHByb3ZhbFN0YXR1cyA9PT0gJ0RyYWZ0JyAmJiBpc0FwcHJvdmFsUmVxdWlyZWRcIiAtLT5cbiAgICAgICAgPCEtLSAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiIC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0ZXJtLWNhcmQtY2hlY2tib3hcIj5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJkYXRhLmNoaWxkcmVuLmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnICYmIGlzQXBwcm92YWxSZXF1aXJlZCAmJiAhYXBwcm92YWxMaXN0Lmxlbmd0aCB8fCBcbiAgICAgICAgICAgIGRhdGEuY2hpbGRyZW4uYXNzb2NpYXRpb25Qcm9wZXJ0aWVzPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ0RyYWZ0JyAmJiBpc0FwcHJvdmFsUmVxdWlyZWQgJiYgIWFwcHJvdmFsTGlzdC5sZW5ndGggfHxcbiAgICAgICAgICAgIGRhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0ICYmIGlzQXBwcm92YWxSZXF1aXJlZFwiIFtjaGVja2VkXT1cImRhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0XCIgY2xhc3M9XCJ0ZXJtU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVByb2R1Y3RDbGljayhkYXRhLmNoaWxkcmVuLCAkZXZlbnQpXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYXBwcm92ZS1mbGFnXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0ICYmIGlzQXBwcm92YWxSZXF1aXJlZFwiPnt7YXBwX3N0cmluZ3MuZmxhZ319PC9tYXQtaWNvbj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjYXJkU3RhbmRhcmQ+XG4gICAgPGRpdj5cbiAgICAgICAge3tkYXRhLmNoaWxkcmVuLm5hbWV9fSBcbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgICB7e2RhdGEuY2hpbGRyZW4uZGVzY3JpcHRpb259fSBzXG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NhcmRTcGFjZVNhdmluZz5cbiAgICA8ZGl2PlxuICAgICAgICB7e2RhdGEuY2hpbGRyZW4ubmFtZX19XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bWF0LW1lbnUgI2NhcmRNZW51PVwibWF0TWVudVwiIGNsYXNzPVwibWVudS1zZWNcIj5cbiAgICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LXJvd0RhdGE9XCJkYXRhXCIgbGV0LWNhcmRSZWY9XCJjYXJkUmVmXCI+XG4gICAgICAgIDwhLS0gPGRpdiA+IC0tPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YS5jb2x1bW5JbmZvLmNvbmZpZy5lbmFibGVWaWV3XCIgIChjbGljayk9XCJ2aWV3KGRhdGEsIGRhdGEuY2hpbGRyZW4sIGRhdGEuaW5kZXgpXCIgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIGkxOG4tYXJpYS1sYWJlbCBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+dmlzaWJpbGl0eTwvbWF0LWljb24+IDxzcGFuPlZpZXc8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YS5jb2x1bW5JbmZvLmNvbmZpZy5lbmFiYWxlRWRpdFwiIChjbGljayk9XCJlZGl0KGRhdGEsICBkYXRhLmNoaWxkcmVuLGRhdGEuaW5kZXgsIGNhcmRSZWYpXCJcbiAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0gbmFtZT1cImNoYW5uZWwtYW5hbHl0aWNzLWJ1dHRvblwiIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIGkxOG4tYXJpYS1sYWJlbFxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFuYWx5dGljc1wiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+RWRpdDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJsZUFkZFwiIChjbGljayk9XCJjcmVhdGUoZGF0YSlcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCIgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPkFkZDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJsZURlbGV0ZVwiIChjbGljayk9XCJkZWxldGUoZGF0YSlcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCIgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPkRlbGV0ZTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG5cbjxtYXQtbWVudSAjb3JnTWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cIm1lbnUtc2VjXCI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1yb3dEYXRhPVwiZGF0YVwiIGxldC1jYXJkUmVmPVwiY2FyZFJlZlwiPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YS5jb2x1bW5JbmZvLmNvbmZpZy5lbmFibGVVcGRhdGVIaWVyYXJjaHlcIiAgKGNsaWNrKT1cIm1lbnVBY3Rpb24oJ3VwZGF0ZS1oaWVyYXJjaHknLCBkYXRhKVwiIG1hdC1tZW51LWl0ZW0gbmFtZT1cImNoYW5uZWwtYW5hbHl0aWNzLWJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1idG5cIiBpMThuLWFyaWEtbGFiZWwgYXJpYS1sYWJlbD1cIkFuYWx5dGljc1wiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPiA8c3Bhbj5VcGRhdGUgSGllcmFyY2h5PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhdGEuY29sdW1uSW5mby5jb25maWcuZW5hYmFsZVJlbW92ZUNvbm5lY3Rpb25cIiAoY2xpY2spPVwibWVudUFjdGlvbigncmVtb3ZlLXRlcm0nLCBkYXRhKVwiXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIiBjbGFzcz1cImFjdGlvbi1idG5cIiBpMThuLWFyaWEtbGFiZWxcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3Bhbj5SZW1vdmUgQ29ubmVjdGlvbjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJsZU1hbmFnZU9yZ2FuaXphdGlvblwiIChjbGljayk9XCJtZW51QWN0aW9uKCdtYW5hZ2Utb3JnJywgZGF0YSlcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCIgY2xhc3M9XCJhY3Rpb24tYnRuXCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+c2V0dGluZ3M8L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+TWFuYWdlIE9yZ2FuaXNhdGlvbjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gQWRkIHRoaXMgdGVtcGxhdGUgdG8geW91ciBjb21wb25lbnQgLS0+XG48bmctdGVtcGxhdGUgI2RpYWxvZ1RlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LW1pZGRsZVwiPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImxhcmdlLWljb24gY29sb3Itc2Vjb25kYXJ5XCI+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgPHAgY2xhc3M9XCJjb2xvci1wcmltYXJ5IG1vZGFsLXRleHQgbWFyZ2luLXRvcC1zXCI+U2VsZWN0IGEgb3JnYW5pc2F0aW9uIHRvIGFkZCBvciBzZWUgZnVydGhlciBjb25uZWN0aW9ucy48L3A+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCIgY2xhc3M9XCJidG4tY29tbW9uIGJ0bi1wcmltYXJ5IG1vZGFsLWJ0blwiPkNsb3NlPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuIl19
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90cmVlLWhpZXJhcmNoeS9zcmMvbGliL2NvbXBvbmVudHMvdGVybS1jYXJkL3Rlcm0tY2FyZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL3Rlcm0tY2FyZC90ZXJtLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBS2pILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUN4SCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7OztBQU9oRyxNQUFNLE9BQU8saUJBQWlCO0lBYzVCLElBQ0ksSUFBSSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFHbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFDLEtBQUssQ0FBQTtJQUNyQyxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFNRCxZQUNVLGdCQUFrQyxFQUNsQyxzQkFBOEMsRUFDOUMsZUFBZ0MsRUFDakMsTUFBaUI7UUFIaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBM0IxQix1QkFBa0IsR0FBWSxLQUFLLENBQUE7UUFDbkMsaUJBQVksR0FBZ0IsRUFBRSxDQUFBO1FBQzlCLGtCQUFhLEdBQUcsRUFBRSxDQUFBO1FBQ2xCLGdCQUFXLEdBQVEsTUFBTSxDQUFDO1FBQzFCLFdBQU0sR0FBUSxFQUFFLENBQUE7UUFlTixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUE7UUFDOUMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFBO1FBQzlDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBaUMsQ0FBQTtJQU9wRSxDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxFQUFFLENBQUMsa0JBQWtCLENBQUE7UUFFeEYsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUU7WUFDbEYsSUFBRyxDQUFDLEVBQUM7Z0JBQ0osSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUE7YUFDaEM7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUdGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFBO0lBRTFELENBQUM7SUFFRCxXQUFXLENBQUMsSUFBUyxFQUFFLE9BQVk7UUFDakMsSUFBRyxJQUFJLENBQUMsUUFBUSxJQUFFLFVBQVUsRUFBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7U0FFekQ7UUFFRCxJQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQztZQUN4RCxPQUFNO1NBQ1A7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDdkcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDbkYsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVMsRUFBRSxLQUFVO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsS0FBSyxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUE7SUFDNUQsQ0FBQztJQUVELG9CQUFvQjtRQUNqQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFRLEVBQUUsRUFBRTtZQUMxRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM3RCxJQUFHLElBQUksQ0FBQyxZQUFZLEVBQUM7Z0JBQ2hCLElBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUM7b0JBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7aUJBQ3JDO2FBQ047UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsVUFBaUIsRUFBRSxPQUFZLEVBQUMsUUFBZ0IsRUFBRSxJQUFRO1FBQ2pFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVELElBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBQztZQUNqRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDdEI7UUFDRCxJQUFHLFFBQVEsS0FBSyxRQUFRLEVBQUM7WUFDdkIsSUFBSSxXQUFXLENBQUM7WUFDaEIsSUFBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUM7Z0JBQ3JELFdBQVcsR0FBRyxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUMxQztZQUNELE9BQU8sV0FBVyxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQztJQUdELElBQUksQ0FBQyxJQUFTLEVBQUUsWUFBaUIsRUFBRSxLQUFVO1FBQzNDLElBQUksTUFBVyxDQUFBO1FBQ2YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4QyxNQUFNLE9BQU8sR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQTtRQUM3QyxJQUFHLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxLQUFLLGlCQUFpQixFQUFFO1lBQ3RGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3ZFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbEYsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFFLENBQUE7WUFDckcsSUFBSSxXQUFXLEdBQVMsRUFBRSxDQUFBO1lBQzFCLElBQUcsV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2xDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxJQUFJLENBQUUsQ0FBQTthQUN4RztZQUNDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRTtnQkFDMUQsSUFBSSxFQUFFO29CQUNKLElBQUksRUFBQyxjQUFjO29CQUNuQixRQUFRLEVBQUUsTUFBTTtvQkFDaEIsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtvQkFDakMsVUFBVSxFQUFFLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3ZELFdBQVcsRUFBRSxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNwRSxXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRTtvQkFDbkQsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhO29CQUNuQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUs7b0JBQ3ZCLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDM0IsbUJBQW1CLEVBQUUsYUFBYTtpQkFDbkM7Z0JBQ0QsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsVUFBVSxFQUFFLHlCQUF5QjthQUN0QyxDQUFDLENBQUE7U0FHTDthQUNJO1lBQ0gsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUM3QyxJQUFJLEVBQUU7b0JBQ0osSUFBSSxFQUFDLE1BQU07b0JBQ1gsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtvQkFDaEMsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUU7b0JBQ25ELGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYTtvQkFDbkMsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsWUFBWSxFQUFFLFlBQVk7b0JBQzFCLG1CQUFtQixFQUFFLGFBQWE7aUJBQ25DO2dCQUNELEtBQUssRUFBRSxPQUFPO2dCQUNkLFVBQVUsRUFBRSx5QkFBeUI7YUFDdEMsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDMUMsSUFBRyxDQUFDLEdBQUcsRUFBRTtnQkFDUCxPQUFPO2FBQ1I7UUFhSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxJQUFJLENBQUMsSUFBUyxFQUFFLFlBQWlCLEVBQUUsS0FBVSxFQUFFLE9BQVk7UUFDekQsSUFBSSxNQUFXLENBQUE7UUFDZixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFBO1FBRTdDLElBQUcsT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEtBQUssaUJBQWlCLEVBQUU7WUF5QnRGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1NBQzFCO2FBQ0k7WUFDSCxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQzdDLElBQUksRUFBRTtvQkFDSixJQUFJLEVBQUMsTUFBTTtvQkFDWCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQzNCLFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFO29CQUNuRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWE7b0JBQ25DLFFBQVEsRUFBRSxLQUFLO29CQUNmLFlBQVksRUFBRSxZQUFZO29CQUMxQixtQkFBbUIsRUFBRSxhQUFhO29CQUNsQyxPQUFPLEVBQUUsT0FBTztpQkFDakI7Z0JBQ0QsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsVUFBVSxFQUFFLHlCQUF5QjthQUN0QyxDQUFDLENBQUE7U0FDSDtRQUNELE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUMxQyxJQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNQLE9BQU87YUFDUjtZQVNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO1lBQzNDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUNULENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFTLEVBQUUsSUFBWTtRQUM1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFBO1FBQzdDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3ZFLElBQUcsT0FBTyxFQUFFO1lBQ1YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNsRixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUUsQ0FBQTtZQUNyRyxJQUFJLFdBQVcsR0FBUSxFQUFFLENBQUE7WUFDekIsSUFBRyxXQUFXLElBQUksV0FBVyxDQUFDLElBQUksRUFBRTtnQkFDbEMsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLElBQUksQ0FBRSxDQUFBO2FBQ3hHO1lBQ0QsSUFBSSxNQUFXLENBQUE7WUFDZixJQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEtBQUssaUJBQWlCLEVBQUM7Z0JBQzFFLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRTtvQkFDMUQsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBQyxjQUFjO3dCQUNuQixRQUFRLEVBQUUsSUFBSSxJQUFJLEtBQUs7d0JBQ3ZCLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7d0JBQ2pDLFVBQVUsRUFBRSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUN2RCxXQUFXLEVBQUUsV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDcEUsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUU7d0JBQ25ELGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYTt3QkFDbkMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLO3dCQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVE7d0JBQzNCLG1CQUFtQixFQUFFLGFBQWE7cUJBQ25DO29CQUNELEtBQUssRUFBRSxPQUFPO29CQUNkLFVBQVUsRUFBRSx5QkFBeUI7aUJBQ3RDLENBQUMsQ0FBQTthQUNIO2lCQUFNO2dCQUNMLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtvQkFDN0MsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBQyxjQUFjO3dCQUNuQixVQUFVLEVBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDdkQsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUU7d0JBQ25ELGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYTt3QkFDbkMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLO3dCQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVE7d0JBQzNCLG1CQUFtQixFQUFFLGFBQWE7cUJBQ25DO29CQUNELEtBQUssRUFBRSxPQUFPO29CQUNkLFVBQVUsRUFBRSx5QkFBeUI7aUJBQ3RDLENBQUMsQ0FBQTthQUNIO1lBQ0QsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUMxQyxJQUFHLENBQUMsR0FBRyxFQUFFO29CQUNQLE9BQU87aUJBQ1I7Z0JBRUQsTUFBTSxZQUFZLEdBQUc7b0JBQ25CLEdBQUc7b0JBQ0gsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO29CQUNwQixJQUFJO29CQUNKLElBQUksRUFBRSxjQUFjO2lCQUNyQixDQUFBO2dCQUNELElBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUM7b0JBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQywyQkFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQTtpQkFDaEU7Z0JBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7Z0JBQzNDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUNULENBQUMsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVM7UUFDdEIsSUFBRyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBQztZQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDM0UsSUFBRyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksRUFBQztnQkFFekIsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFBO2FBQ3BCO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBUztRQUNsQixJQUFHLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFDO1lBQ2pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUMzRSxPQUFPLE9BQU8sQ0FBQTtTQUNmO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsV0FBVztRQUNULElBQUcsSUFBSSxDQUFDLFlBQVksRUFBQztZQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQ2hDO0lBQ0gsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFTO1FBQ2QsTUFBTSxVQUFVLEdBQUc7WUFDakIsVUFBVSxFQUFFLFNBQVM7WUFDckIsWUFBWSxFQUFFLFFBQVE7WUFDdEIsWUFBWSxFQUFFO2dCQUNaO29CQUNFLE1BQU0sRUFBRSxjQUFjLElBQUksQ0FBQyxRQUFRLEtBQUksVUFBVSxDQUFBLENBQUMsQ0FBQyxXQUFXLENBQUEsQ0FBQyxDQUFDLE9BQU8sa0JBQWtCO29CQUN6RixXQUFXLEVBQUUscURBQXFEO29CQUNsRSxRQUFRLEVBQUU7d0JBQ1I7NEJBQ0UsUUFBUSxFQUFFLFdBQVc7NEJBQ3JCLEdBQUcsRUFBRSx5QkFBeUI7eUJBQy9CO3FCQUNGO2lCQUNGO2FBQ0Y7WUFDRCxXQUFXLEVBQUUsNkJBQTZCO1lBQzFDLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxPQUFPLEVBQUUsSUFBSTtvQkFDYixRQUFRLEVBQUUsYUFBYTtvQkFDdkIsUUFBUSxFQUFFLEtBQUs7aUJBQ2hCO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxLQUFLO29CQUNkLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRSxJQUFJO2lCQUNmO2FBQ0Y7WUFDRCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUE7UUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRTtZQUN0RCxJQUFJLEVBQUUsVUFBVTtZQUNoQixTQUFTLEVBQUUsS0FBSztZQUNoQixLQUFLLEVBQUUsT0FBTztZQUNkLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFFdEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7WUFDM0MsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ1QsQ0FBQyxDQUFDLENBQUE7SUFFSixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVcsRUFBRSxLQUFVO1FBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVM7UUFDcEIsSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtZQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN6RixPQUFPLFFBQVEsRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFBO1NBQ2hDO1FBQ0QsT0FBTyxDQUFDLENBQUE7SUFDVixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDcEMsS0FBSyxFQUFFLE9BQU87WUFFZCxZQUFZLEVBQUUsSUFBSTtZQUNsQixJQUFJLEVBQUUsRUFBaUQ7U0FDeEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7K0dBbllVLGlCQUFpQjttR0FBakIsaUJBQWlCLGdTQ2pCOUIsNGlSQXlKQTs7NEZEeElhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlO3dNQU1JLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQWF2QixJQUFJO3NCQURQLEtBQUs7Z0JBV0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTlNGcmFtZXdvcmsgfSBmcm9tICcuLi8uLi9tb2RlbHMvZnJhbWV3b3JrLm1vZGVsJ1xuaW1wb3J0IHsgQXBwcm92YWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwcm92YWwuc2VydmljZSc7XG5pbXBvcnQgeyBGcmFtZXdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZnJhbWV3b3JrLnNlcnZpY2UnXG5pbXBvcnQgeyBMb2NhbENvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWwtY29ubmVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGxhYmVscyB9IGZyb20gJy4uLy4uL2xhYmVscy9zdHJpbmdzJztcbmltcG9ydCB7IENhcmRTZWxlY3Rpb24sIENhcmRDaGVja2VkLCBDYXJkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZhcmlhYmxlLXR5cGUubW9kZWwnO1xuaW1wb3J0IHsgTWF0TGVnYWN5RGlhbG9nIGFzIE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnO1xuaW1wb3J0IHsgQ3JlYXRlVGVybUNvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS10ZXJtL2NyZWF0ZS10ZXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcmVhdGVUZXJtRnJvbUZyYW1ld29ya0NvbXBvbmVudCB9IGZyb20gJy4vLi4vY3JlYXRlLXRlcm0tZnJvbS1mcmFtZXdvcmsvY3JlYXRlLXRlcm0tZnJvbS1mcmFtZXdvcmsuY29tcG9uZW50JztcbmltcG9ydCB7IENvbmZvcmFtdGlvblBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZm9yYW10aW9uLXBvcHVwL2NvbmZvcmFtdGlvbi1wb3B1cC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdGVybS1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rlcm0tY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Rlcm0tY2FyZC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRlcm1DYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvLyBASW5wdXQoKSBkYXRhITogTlNGcmFtZXdvcmsuSVRlcm1DYXJkXG4gIEBWaWV3Q2hpbGQoJ2RpYWxvZ1RlbXBsYXRlJykgZGlhbG9nVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cbiAgcHJpdmF0ZSBfZGF0YSE6IE5TRnJhbWV3b3JrLklUZXJtQ2FyZDtcbiAgaXNBcHByb3ZhbFJlcXVpcmVkOiBib29sZWFuID0gZmFsc2VcbiAgYXBwcm92YWxMaXN0OiBBcnJheTxDYXJkPiA9IFtdXG4gIGhlaWdodExpZ2h0ZWQgPSBbXVxuICBhcHBfc3RyaW5nczogYW55ID0gbGFiZWxzO1xuICBsb2FkZWQ6IGFueSA9IHt9XG4gIGlzQ29tcGV0ZW5jeUFyZWE6YW55O1xuICBlbnZpcm9ubWVudDogYW55XG4gIHN1YnNjcmlwdGlvbiA6YW55XG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9kYXRhID0gdmFsdWU7XG4gICAgLy8gIGlmKHRoaXMuX2RhdGEpXG4gICAgLy8gICAgdGhpcy5jcmVhdGVUaW1lbGluZSh0aGlzLl9kYXRhWzBdLmlkKVxuICAgIHRoaXMuX2RhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0PWZhbHNlXG4gIH1cbiAgZ2V0IGRhdGEoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBpc1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJkU2VsZWN0aW9uPigpXG4gIEBPdXRwdXQoKSBzZWxlY3RlZENhcmQgPSBuZXcgRXZlbnRFbWl0dGVyPENhcmRDaGVja2VkPigpXG4gIEBPdXRwdXQoKSBjYXJkQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjx7IGFjdGlvbjogc3RyaW5nLCBkYXRhOiBhbnkgfT4oKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZnJhbWV3b3JrU2VydmljZTogRnJhbWV3b3JrU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsQ29ubmVjdGlvblNlcnZpY2U6IExvY2FsQ29ubmVjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHByb3ZhbFNlcnZpY2U6IEFwcHJvdmFsU2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csIFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaXNBcHByb3ZhbFJlcXVpcmVkID0gdGhpcy5sb2NhbENvbm5lY3Rpb25TZXJ2aWNlLmdldENvbmZpZ0luZm8oKS5pc0FwcHJvdmFsUmVxdWlyZWRcbiAgICBcbiAgICB0aGlzLnVwZGF0ZUFwcHJvdmFsU3RhdHVzKClcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5pbnNlcnRVcGRhdGVEZWxldGVOb3RpZmllci5zdWJzY3JpYmUoKGUpPT57XG4gICAgICBpZihlKXtcbiAgICAgICB0aGlzLmlzQ29tcGV0ZW5jeUFyZWEgPSBlLmFjdGlvblxuICAgICAgfVxuICAgIH0pXG5cblxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RW52aXJvbWVudCgpXG4gICAgXG4gIH1cblxuICBjYXJkQ2xpY2tlZChkYXRhOiBhbnksIGNhcmRSZWY6IGFueSkge1xuICAgIGlmKGRhdGEuY2F0ZWdvcnkhPSdzdWJ0aGVtZScpe1xuICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmNhcmRDbGtEYXRhID0gZGF0YTtcbiAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5DdXJyZW50Q2FyZENsay5uZXh0KGRhdGEuY2F0ZWdvcnkpXG4gICAgICBcbiAgICB9XG4gICAgLy8gdGhpcy5kYXRhLnNlbGVjdGVkID0gdHJ1ZVxuICAgIGlmKHRoaXMuZnJhbWV3b3JrU2VydmljZS5pc0xhc3RDb2x1bW4odGhpcy5kYXRhLmNhdGVnb3J5KSl7XG4gICAgICByZXR1cm4gXG4gICAgfVxuICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiB0aGlzLmRhdGEuY2F0ZWdvcnksIGRhdGE6IGRhdGEuY2hpbGRyZW4sIGNhcmRSZWYgfSlcbiAgICB0aGlzLmlzU2VsZWN0ZWQuZW1pdCh7IGVsZW1lbnQ6IHRoaXMuZGF0YS5jaGlsZHJlbiwgaXNTZWxlY3RlZDogIWRhdGEuc2VsZWN0ZWQgfSlcbiAgfVxuXG4gIGhhbmRsZVByb2R1Y3RDbGljayh0ZXJtOiBhbnksIGV2ZW50OiBhbnkpe1xuICAgIHRoaXMuc2VsZWN0ZWRDYXJkLmVtaXQoe3Rlcm06dGVybSwgY2hlY2tlZDpldmVudC5jaGVja2VkfSlcbiAgfVxuXG4gIHVwZGF0ZUFwcHJvdmFsU3RhdHVzKCl7XG4gICAgIGNvbnN0IGlkID0gdGhpcy5fZGF0YS5jaGlsZHJlbi5pZGVudGlmaWVyO1xuICAgIHRoaXMuYXBwcm92YWxTZXJ2aWNlLmdldFVwZGF0ZUxpc3QoKS5zdWJzY3JpYmUoKGxpc3Q6YW55KSA9PiB7XG4gICAgICB0aGlzLmFwcHJvdmFsTGlzdCA9IGxpc3QubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uaWRlbnRpZmllcik7XG4gICAgICBpZih0aGlzLmFwcHJvdmFsTGlzdCl7XG4gICAgICAgICAgIGlmKHRoaXMuYXBwcm92YWxMaXN0LmluY2x1ZGVzKGlkKSl7XG4gICAgICAgICAgICAgIHRoaXMuX2RhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0ID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgfSAgICAgXG4gICAgfSlcbiAgfVxuXG4gIGdldENvbG9yKGluZGV4Q2xhc3M6bnVtYmVyLCBjYXJkUmVmOiBhbnkscHJvcGVydHk6IHN0cmluZywgZGF0YTphbnkpIHtcbiAgICBsZXQgY29uZmlnID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldENvbmZpZyhkYXRhLmNhdGVnb3J5KTtcbiAgICBpZihjYXJkUmVmLmNsYXNzTGlzdC5jb250YWlucygnc2VsZWN0ZWQnKSAmJiBwcm9wZXJ0eSA9PT0gJ2JnQ29sb3InKXtcbiAgICAgICByZXR1cm4gY29uZmlnLmNvbG9yO1xuICAgIH1cbiAgICBpZihwcm9wZXJ0eSA9PT0gJ2JvcmRlcicpe1xuICAgICAgbGV0IGJvcmRlckNvbG9yO1xuICAgICAgaWYoY2FyZFJlZi5jbGFzc0xpc3QuY29udGFpbnMoKGluZGV4Q2xhc3MpLnRvU3RyaW5nKCkpKXtcbiAgICAgICAgYm9yZGVyQ29sb3IgPSBcIjhweCBzb2xpZFwiICsgY29uZmlnLmNvbG9yO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGJvcmRlckNvbG9yO1xuICAgIH1cbiAgfVxuXG5cbiAgdmlldyhkYXRhOiBhbnksIGNoaWxkcmVuRGF0YTogYW55LCBpbmRleDogYW55KXtcbiAgICBsZXQgZGlhbG9nOiBhbnlcbiAgICBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhkYXRhLmNvbHVtbkluZm8uY29kZSlcbiAgICBjb25zdCBuZXhDb2xJbmZvID0gdGhpcy5nZXROZXh0Q2F0KGRhdGEpXG4gICAgY29uc3QgbmV4dENhdCA9IG5leENvbEluZm8gfHwgZGF0YS5jb2x1bW5JbmZvXG4gICAgaWYobmV4dENhdCAmJiB0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpIHtcbiAgICAgIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgICBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhuZXh0Q2F0LmNvZGUpXG4gICAgICBjb25zdCBjb2xJbmZvID0gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSkuZmlsdGVyKGwgPT4gbC5jb2RlID09PSBuZXh0Q2F0LmNvZGUgKVxuICAgICAgbGV0IG5leHRDb2xJbmZvIDogYW55ID0gW11cbiAgICAgIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgfVxuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAgICAgICBvcGVuTW9kZTogJ3ZpZXcnLFxuICAgICAgICAgICAgY2FyZENvbEluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgIG5leHRDb2xJbmZvOiBuZXh0Q29sSW5mbyAmJiBuZXh0Q29sSW5mby5sZW5ndGggPyBuZXh0Q29sSW5mb1swXSA6IFtdLFxuICAgICAgICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgICBjb2xJbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgICAgICAgIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgICAgfSlcbiAgICAgIFxuICAgICBcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Db21wb25lbnQsIHtcbiAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICBtb2RlOid2aWV3JyxcbiAgICAgICAgICBjb2x1bW5JbmZvOiB0aGlzLmRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgY29sSW5kZXg6IGluZGV4LFxuICAgICAgICAgIGNoaWxkcmVuRGF0YTogY2hpbGRyZW5EYXRhLFxuICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgIH0pXG4gICAgfVxuICAgIGRpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmKCFyZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gaWYgKHJlcyAmJiByZXMuY3JlYXRlZCkge1xuICAgICAgLy8gICB0aGlzLnNob3dQdWJsaXNoID0gdHJ1ZVxuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5sb2FkZWRbcmVzLnRlcm0uY2F0ZWdvcnldID0gZmFsc2VcbiAgICAgIC8vIC8vIHdhaXRcbiAgICAgIC8vIGNvbnN0IHBhcmVudENvbHVtbiA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KHJlcy50ZXJtLmNhdGVnb3J5KVxuICAgICAgLy8gcmVzLnBhcmVudCA9IG51bGxcbiAgICAgIC8vIGlmIChwYXJlbnRDb2x1bW4pIHtcbiAgICAgIC8vICAgcmVzLnBhcmVudCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChwYXJlbnRDb2x1bW4uY29kZSlcbiAgICAgIC8vICAgcmVzLnBhcmVudC5jaGlsZHJlbj8gcmVzLnBhcmVudC5jaGlsZHJlbi5wdXNoKHJlcy50ZXJtKSA6cmVzLnBhcmVudFsnY2hpbGRyZW4nXSA9IFtyZXMudGVybV1cbiAgICAgIC8vIH1cbiAgICAgIC8vIHRoaXMudXBkYXRlRmluYWxMaXN0KHsgc2VsZWN0ZWRUZXJtOiByZXMudGVybSwgaXNTZWxlY3RlZDogZmFsc2UsIHBhcmVudERhdGE6IHJlcy5wYXJlbnQsIGNvbEluZGV4OmNvbEluZGV4IH0pXG4gICAgfSlcbiAgfVxuICBlZGl0KGRhdGE6IGFueSwgY2hpbGRyZW5EYXRhOiBhbnksIGluZGV4OiBhbnksIGNhcmRSZWY6IGFueSl7XG4gICAgbGV0IGRpYWxvZzogYW55XG4gICAgY29uc3Qgc2VsZWN0ZWRUZXJtcyA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMoZGF0YS5jb2x1bW5JbmZvLmNvZGUpXG4gICAgY29uc3QgbmV4Q29sSW5mbyA9IHRoaXMuZ2V0TmV4dENhdChkYXRhKVxuICAgIGNvbnN0IG5leHRDYXQgPSBuZXhDb2xJbmZvIHx8IGRhdGEuY29sdW1uSW5mb1xuICAgXG4gICAgaWYobmV4dENhdCAmJiB0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpIHtcbiAgICAgIC8vIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgICAvLyBjb25zdCBzZWxlY3RlZFRlcm1zID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldFByZXZpb3VzU2VsZWN0ZWRUZXJtcyhuZXh0Q2F0LmNvZGUpXG4gICAgICAvLyBjb25zdCBjb2xJbmZvID0gQXJyYXkuZnJvbSh0aGlzLmZyYW1ld29ya1NlcnZpY2UubGlzdC52YWx1ZXMoKSkuZmlsdGVyKGwgPT4gbC5jb2RlID09PSBuZXh0Q2F0LmNvZGUgKVxuICAgICAgLy8gbGV0IG5leHRDb2xJbmZvID0gW11cbiAgICAgIC8vIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgIC8vICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgLy8gfVxuICAgICAgLy8gICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAvLyAgICAgZGF0YTogeyBcbiAgICAgIC8vICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAvLyAgICAgICBvcGVuTW9kZTogJ2VkaXQnLFxuICAgICAgLy8gICAgICAgY2FyZENvbEluZm86IHRoaXMuZGF0YS5jb2x1bW5JbmZvLFxuICAgICAgLy8gICAgICAgY29sdW1uSW5mbzogY29sSW5mbyAmJiBjb2xJbmZvLmxlbmd0aCA/IGNvbEluZm9bMF0gOiBbXSxcbiAgICAgIC8vICAgICAgIG5leHRDb2xJbmZvOiBuZXh0Q29sSW5mbyAmJiBuZXh0Q29sSW5mby5sZW5ndGggPyBuZXh0Q29sSW5mb1swXSA6IFtdLFxuICAgICAgLy8gICAgICAgZnJhbWV3b3JrSWQ6IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRGcmFtZXdvcmtJZCgpLFxuICAgICAgLy8gICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAvLyAgICAgICBjb2xJbmRleDogbmV4dENhdC5pbmRleCxcbiAgICAgIC8vICAgICAgIGNoaWxkcmVuRGF0YTogZGF0YS5jaGlsZHJlbixcbiAgICAgIC8vICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXNcbiAgICAgIC8vICAgICB9LFxuICAgICAgLy8gICAgIHdpZHRoOiAnODAwcHgnLFxuICAgICAgLy8gICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNvbnRhaW5lcidcbiAgICAgIC8vICAgfSlcbiAgICAgIFxuICAgICAgdGhpcy5jcmVhdGUoZGF0YSwgJ2VkaXQnKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ3JlYXRlVGVybUNvbXBvbmVudCwge1xuICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgIG1vZGU6J2VkaXQnLFxuICAgICAgICAgIGNvbHVtbkluZm86IGRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgc2VsZWN0ZWRwYXJlbnRzOiB0aGlzLmhlaWdodExpZ2h0ZWQsXG4gICAgICAgICAgY29sSW5kZXg6IGluZGV4LFxuICAgICAgICAgIGNoaWxkcmVuRGF0YTogY2hpbGRyZW5EYXRhLFxuICAgICAgICAgIHNlbGVjdGVkUGFyZW50VGVybXM6IHNlbGVjdGVkVGVybXMsXG4gICAgICAgICAgY2FyZFJlZjogY2FyZFJlZlxuICAgICAgICB9LFxuICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgfSlcbiAgICB9XG4gICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYoIXJlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBjb25zdCByZXNwb25zZURhdGEgPSB7XG4gICAgICAvLyAgIHJlcyxcbiAgICAgIC8vICAgaW5kZXg6IGluZGV4LmluZGV4LFxuICAgICAgLy8gICBkYXRhLFxuICAgICAgLy8gICB0eXBlOiAndXBkYXRlJyxcbiAgICAgIC8vICAgY2FyZFJlZjogY2FyZFJlZlxuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLnVwZGF0ZUFmdGVyQWRkT3JFZGl0U3ViamVjdChyZXNwb25zZURhdGEpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSlcbiAgICAgIH0sIDEwMClcbiAgICB9KVxuICB9XG4gIGNyZWF0ZShkYXRhOiBhbnksIG1vZGU/OnN0cmluZyl7XG4gICAgY29uc3QgbmV4Q29sSW5mbyA9IHRoaXMuZ2V0TmV4dENhdChkYXRhKVxuICAgIGNvbnN0IG5leHRDYXQgPSBuZXhDb2xJbmZvIHx8IGRhdGEuY29sdW1uSW5mb1xuICAgIGNvbnN0IG5leHROZXh0Q2F0ID0gdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldE5leHRDYXRlZ29yeShuZXh0Q2F0LmNvZGUpXG4gICAgaWYobmV4dENhdCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRUZXJtcyA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXRQcmV2aW91c1NlbGVjdGVkVGVybXMobmV4dENhdC5jb2RlKVxuICAgICAgY29uc3QgY29sSW5mbyA9IEFycmF5LmZyb20odGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmxpc3QudmFsdWVzKCkpLmZpbHRlcihsID0+IGwuY29kZSA9PT0gbmV4dENhdC5jb2RlIClcbiAgICAgIGxldCBuZXh0Q29sSW5mbzogYW55ID0gW11cbiAgICAgIGlmKG5leHROZXh0Q2F0ICYmIG5leHROZXh0Q2F0LmNvZGUpIHtcbiAgICAgICAgbmV4dENvbEluZm8gPSBBcnJheS5mcm9tKHRoaXMuZnJhbWV3b3JrU2VydmljZS5saXN0LnZhbHVlcygpKS5maWx0ZXIobCA9PiBsLmNvZGUgPT09IG5leHROZXh0Q2F0LmNvZGUgKVxuICAgICAgfVxuICAgICAgbGV0IGRpYWxvZzogYW55XG4gICAgICBpZih0aGlzLmVudmlyb25tZW50ICYmIHRoaXMuZW52aXJvbm1lbnQuZnJhbWV3b3JrVHlwZSA9PT0gJ01ET19ERVNJR05BVElPTicpe1xuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50LCB7XG4gICAgICAgICAgZGF0YTogeyBcbiAgICAgICAgICAgIG1vZGU6J211bHRpLWNyZWF0ZScsXG4gICAgICAgICAgICBvcGVuTW9kZTogbW9kZSB8fCAnYWRkJyxcbiAgICAgICAgICAgIGNhcmRDb2xJbmZvOiB0aGlzLmRhdGEuY29sdW1uSW5mbyxcbiAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICBuZXh0Q29sSW5mbzogbmV4dENvbEluZm8gJiYgbmV4dENvbEluZm8ubGVuZ3RoID8gbmV4dENvbEluZm9bMF0gOiBbXSxcbiAgICAgICAgICAgIGZyYW1ld29ya0lkOiB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrSWQoKSxcbiAgICAgICAgICAgIHNlbGVjdGVkcGFyZW50czogdGhpcy5oZWlnaHRMaWdodGVkLFxuICAgICAgICAgICAgY29sSW5kZXg6IG5leHRDYXQuaW5kZXgsXG4gICAgICAgICAgICBjaGlsZHJlbkRhdGE6IGRhdGEuY2hpbGRyZW4sXG4gICAgICAgICAgICBzZWxlY3RlZFBhcmVudFRlcm1zOiBzZWxlY3RlZFRlcm1zXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3aWR0aDogJzgwMHB4JyxcbiAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENyZWF0ZVRlcm1Db21wb25lbnQsIHtcbiAgICAgICAgICBkYXRhOiB7IFxuICAgICAgICAgICAgbW9kZTonbXVsdGktY3JlYXRlJyxcbiAgICAgICAgICAgIGNvbHVtbkluZm86IGNvbEluZm8gJiYgY29sSW5mby5sZW5ndGggPyBjb2xJbmZvWzBdIDogW10sXG4gICAgICAgICAgICBmcmFtZXdvcmtJZDogdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya0lkKCksXG4gICAgICAgICAgICBzZWxlY3RlZHBhcmVudHM6IHRoaXMuaGVpZ2h0TGlnaHRlZCxcbiAgICAgICAgICAgIGNvbEluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgICAgY2hpbGRyZW5EYXRhOiBkYXRhLmNoaWxkcmVuLFxuICAgICAgICAgICAgc2VsZWN0ZWRQYXJlbnRUZXJtczogc2VsZWN0ZWRUZXJtc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgd2lkdGg6ICc4MDBweCcsXG4gICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZighcmVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSB7XG4gICAgICAgICAgcmVzLFxuICAgICAgICAgIGluZGV4OiBuZXh0Q2F0LmluZGV4LFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgdHlwZTogJ211bHRpLWNyZWF0ZSdcbiAgICAgICAgfVxuICAgICAgICBpZighKHJlcyAmJiByZXMuc3RvcFVwZGF0ZSkpe1xuICAgICAgICAgIHRoaXMuZnJhbWV3b3JrU2VydmljZS51cGRhdGVBZnRlckFkZE9yRWRpdFN1YmplY3QocmVzcG9uc2VEYXRhKVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpXG4gICAgICAgIH0sIDEwMClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0TmV4dENhdE5hbWUoZGF0YTogYW55KSB7XG4gICAgaWYoZGF0YSAmJiBkYXRhLmNvbHVtbkluZm8gJiYgZGF0YS5jb2x1bW5JbmZvLmNvZGUpe1xuICAgICAgY29uc3QgbmV4dENhdCA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5nZXROZXh0Q2F0ZWdvcnkoZGF0YS5jb2x1bW5JbmZvLmNvZGUpXG4gICAgICBpZihuZXh0Q2F0ICYmIG5leHRDYXQuY29kZSl7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gbmV4dENhdC5jb2RlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBnZXROZXh0Q2F0KGRhdGE6IGFueSkge1xuICAgIGlmKGRhdGEgJiYgZGF0YS5jb2x1bW5JbmZvICYmIGRhdGEuY29sdW1uSW5mby5jb2RlKXtcbiAgICAgIGNvbnN0IG5leHRDYXQgPSB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZ2V0TmV4dENhdGVnb3J5KGRhdGEuY29sdW1uSW5mby5jb2RlKVxuICAgICAgcmV0dXJuIG5leHRDYXRcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmKHRoaXMuc3Vic2NyaXB0aW9uKXtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICB9XG4gIH1cbiAgZGVsZXRlKGRhdGE6IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSB7XG4gICAgICBkaWFsb2dUeXBlOiAnd2FybmluZycsXG4gICAgICBkaWFsb2dBY3Rpb246ICdyZXRpcmUnLFxuICAgICAgZGVzY3JpcHRpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXI6IGBDb21wZXRlbmN5ICR7ZGF0YS5jYXRlZ29yeSA9PT1cInN1YnRoZW1lXCI/ICdzdWItdGhlbWUnOiAndGhlbWUnfSB3aWxsIGJlIGRlbGV0ZWRgLFxuICAgICAgICAgIGhlYWRlckNsYXNzOiAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ibHVlIHRleHRCb2xkJyxcbiAgICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtc2dDbGFzczogJ21iLTIgbXQtMicsXG4gICAgICAgICAgICAgIG1zZzogYERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBmb290ZXJDbGFzczogJ2l0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlcicsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBidG5UZXh0OiAnTm8nLFxuICAgICAgICAgIGJ0bkNsYXNzOiAnYnRuLW91dGxpbmUnLFxuICAgICAgICAgIHJlc3BvbnNlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGJ0blRleHQ6ICdZZXMnLFxuICAgICAgICAgIGJ0bkNsYXNzOiAnYnRuLWZ1bGwtc3VjY2VzcycsXG4gICAgICAgICAgcmVzcG9uc2U6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2FyZEluZm86IGRhdGFcbiAgICB9XG4gICAgbGV0IGRpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZm9yYW10aW9uUG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgZGF0YTogZGlhbG9nRGF0YSxcbiAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICAgIG1heFdpZHRoOiAnODB2dycsXG4gICAgICAgIG1heEhlaWdodDogJzkwdmgnLFxuICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgIH0pXG4gICAgICBkaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoX3JlcyA9PiB7XG4gICAgICAgIFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykpXG4gICAgICB9LCAxMDApXG4gICAgfSlcbiAgICBcbiAgfVxuXG4gIG1lbnVBY3Rpb24odHlwZTpzdHJpbmcsIF9pdGVtOiBhbnkpIHtcbiAgICB0aGlzLmNhcmRBY3Rpb24uZW1pdCh7IGFjdGlvbjogdHlwZSwgZGF0YTogX2l0ZW0gfSk7XG4gIH0gXG5cbiAgZ2V0dXNlckNvdW50KGl0ZW06IGFueSkge1xuICAgIGlmKGl0ZW0uY2hpbGRyZW4uY29kZSkge1xuICAgICAgY29uc3QgdGVtcERhdGEgPSBpdGVtLmNvbHVtbkluZm8uY2hpbGRyZW4uZmluZCgoaTogYW55KSA9PiBpLmNvZGUgPT09IGl0ZW0uY2hpbGRyZW4uY29kZSlcbiAgICAgIHJldHVybiB0ZW1wRGF0YT8udXNlckNvdW50IHx8IDBcbiAgICB9XG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIG9wZW5EaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2cub3Blbih0aGlzLmRpYWxvZ1RlbXBsYXRlLCB7XG4gICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgIC8vIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIGRhdGE6IHsgLyogQW55IGRhdGEgeW91IHdhbnQgdG8gcGFzcyB0byB0aGUgZGlhbG9nICovIH1cbiAgICB9KTtcbiAgfVxuICBcbiAgY2xvc2VNb2RhbCgpIHtcbiAgICB0aGlzLmRpYWxvZy5jbG9zZUFsbCgpO1xuICB9XG59XG4gIFxuXG4iLCI8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCIoIChkYXRhICYmIGRhdGE/LmNhcmRTdWJUeXBlKSB8fCAnY2FyZE1pbmltYWwnKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdGFuZGFyZCdcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXJkU3RhbmRhcmRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3BhY2Utc2F2aW5nJ1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNhcmRTcGFjZVNhdmluZ1wiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdCBbbmdUZW1wbGF0ZU91dGxldF09XCJjYXJkTWluaW1hbFwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjY2FyZE1pbmltYWw+XG4gICAgPGRpdiAjY2FyZFJlZiBjbGFzcz1cInRlcm0tY2FyZCBjbGlja2FibGUge3tkYXRhLmluZGV4fX1cIiAoY2xpY2spPVwiY2FyZENsaWNrZWQoZGF0YSwgY2FyZFJlZilcIlxuICAgICAgICBbbmdDbGFzc109XCJbZGF0YS5jaGlsZHJlbi5zZWxlY3RlZD8nc2VsZWN0ZWQnOicnLCBkYXRhLmNoaWxkcmVuLmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnPyAnaW5EcmFmdCc6JycsXG4gICAgZGF0YS5jaGlsZHJlbi5hc3NvY2lhdGlvblByb3BlcnRpZXM/LmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnICYmIGlzQXBwcm92YWxSZXF1aXJlZCAmJiAhYXBwcm92YWxMaXN0Lmxlbmd0aCB8fCBkYXRhLmNoaWxkcmVuLmhpZ2hsaWdodCAmJiBpc0FwcHJvdmFsUmVxdWlyZWQgPyAnaW5Bc3NvY2lhdGlvbkRyYWZ0JzonJ11cIlxuICAgICAgICBpZD1cInt7ZGF0YS5jaGlsZHJlbi5uYW1lfX1cIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtY29sb3InOmdldENvbG9yKGRhdGEuaW5kZXgsY2FyZFJlZiwnYmdDb2xvcicsZGF0YSl9XCI+XG4gICAgICAgIDwhLS0gKGNsaWNrKT1cImRhdGEuc2VsZWN0ZWQ9IWRhdGEuc2VsZWN0ZWRcIiAtLT4gICBcbiAgICAgICAgPGRpdiBjbGFzcz1cInRlcm0tY2FyZC1wYXJlbnRcIj5cbiAgICAgICAgICAgIDwhLS0gPEJlbG93IGVsZW1lbnQgaXMgdG8gc2hvdyBpZCBvbiB0b3AgbGVmdCBvZiB0aGUgY2FyZD4gLS0+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJpZFwiIFtoaWRkZW5dPVwidHJ1ZVwiPnt7ZGF0YS5jaGlsZHJlbi5jb2RlfX08L2Rpdj4gLS0+XG4gICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVybS1jYXJkLWNvbnRlbnQgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICAqbmdJZj1cImRhdGE/LmNoaWxkcmVuPy5yZWZJZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmliYm9uXCI+e3tkYXRhPy5jaGlsZHJlbj8ucmVmSWR9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5jaGlsZHJlbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmNvbXBldGVuY3lBcmVhPy5uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgIGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wLWFyZWEge3tkYXRhPy5jaGlsZHJlbj8uYWRkaXRpb25hbFByb3BlcnRpZXM/LmNvbXBldGVuY3lBcmVhPy5uYW1lPy50b0xvd2VyQ2FzZSgpfX1cIj57e2RhdGE/LmNoaWxkcmVuPy5hZGRpdGlvbmFsUHJvcGVydGllcz8uY29tcGV0ZW5jeUFyZWE/Lm5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGVcIj57e2RhdGEuY2hpbGRyZW4ubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8uY2hpbGRyZW4/LnJlZklkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZklkQ2FyZCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZGF0YT8uY2hpbGRyZW4/LnJlZklkfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmNvbHVtbkluZm8/LmNvbmZpZz8uZW5hYmxlSW5mb0ljb25cIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gaTE4bi1hcmlhLWxhYmVsIGFyaWEtbGFiZWw9XCJpbmZvIGl0ZW1zXCIgY2xhc3M9XCJhY3Rpb24tYnRuXCIgKGNsaWNrKT1cIm9wZW5EaWFsb2coKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmluZm88L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmNoaWxkcmVuPy5yZWZJZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVmSWRDYXJkIHB4LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ZGF0YT8uY2hpbGRyZW4/LnJlZklkfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSA8c3Bhbj4rK3t7ZGF0YS5jaGlsZHJlbi5zZWxlY3RlZH19KysrPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPj09e3tkYXRhLmNoaWxkcmVuLnN0YXR1c319PT08L3NwYW4+ICAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb24gZmxleCBmbGV4LW1pZGRsZSBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJmcmFjXCI+PC9tYXQtaWNvbj4gXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7KGRhdGEuY2hpbGRyZW4uY2hpbGRyZW4pID8gZGF0YS5jaGlsZHJlbi5jaGlsZHJlbj8ubGVuZ3RoIDogMH19IENoaWxkIE9yZzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWRlc2NyaXB0aW9uIGZsZXggZmxleC1taWRkbGUgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZnJhY1wiPjwvbWF0LWljb24+IFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tnZXR1c2VyQ291bnQoZGF0YSl9fSBVc2Vyczwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5jb2x1bW5JbmZvPy5jb25maWc/LmVuYWJsZVRocmVlRG90XCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGkxOG4tYXJpYS1sYWJlbCBhcmlhLWxhYmVsPVwiYWN0aW9uIGl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJvcmdNZW51XCIgW21hdE1lbnVUcmlnZ2VyRGF0YV09XCJ7J2RhdGEnOmRhdGEsICdjYXJkUmVmJzogY2FyZFJlZn1cIiBjbGFzcz1cImFjdGlvbi1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIDxwPnt7ZGF0YS5jaGlsZHJlbi5hcHByb3ZhbFN0YXR1c319LCB7e2RhdGEuY2hpbGRyZW4uYXNzb2NpYXRpb25Qcm9wZXJ0aWVzPy5hcHByb3ZhbFN0YXR1c319PC9wPiAtLT5cbiAgICAgICAgPCEtLSAqbmdJZj1cIiFkYXRhLmlzVmlld09ubHkgJiYgZGF0YS5jaGlsZHJlbi5hcHByb3ZhbFN0YXR1cyA9PT0gJ0RyYWZ0JyAmJiBpc0FwcHJvdmFsUmVxdWlyZWRcIiAtLT5cbiAgICAgICAgPCEtLSAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiIC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ0ZXJtLWNhcmQtY2hlY2tib3hcIj5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJkYXRhLmNoaWxkcmVuLmFwcHJvdmFsU3RhdHVzID09PSAnRHJhZnQnICYmIGlzQXBwcm92YWxSZXF1aXJlZCAmJiAhYXBwcm92YWxMaXN0Lmxlbmd0aCB8fCBcbiAgICAgICAgICAgIGRhdGEuY2hpbGRyZW4uYXNzb2NpYXRpb25Qcm9wZXJ0aWVzPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ0RyYWZ0JyAmJiBpc0FwcHJvdmFsUmVxdWlyZWQgJiYgIWFwcHJvdmFsTGlzdC5sZW5ndGggfHxcbiAgICAgICAgICAgIGRhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0ICYmIGlzQXBwcm92YWxSZXF1aXJlZFwiIFtjaGVja2VkXT1cImRhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0XCIgY2xhc3M9XCJ0ZXJtU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVByb2R1Y3RDbGljayhkYXRhLmNoaWxkcmVuLCAkZXZlbnQpXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPjwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiIGNsYXNzPVwiYXBwcm92ZS1mbGFnXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuY2hpbGRyZW4uaGlnaGxpZ2h0ICYmIGlzQXBwcm92YWxSZXF1aXJlZFwiPnt7YXBwX3N0cmluZ3MuZmxhZ319PC9tYXQtaWNvbj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjYXJkU3RhbmRhcmQ+XG4gICAgPGRpdj5cbiAgICAgICAge3tkYXRhLmNoaWxkcmVuLm5hbWV9fSBcbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgICB7e2RhdGEuY2hpbGRyZW4uZGVzY3JpcHRpb259fSBzXG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NhcmRTcGFjZVNhdmluZz5cbiAgICA8ZGl2PlxuICAgICAgICB7e2RhdGEuY2hpbGRyZW4ubmFtZX19XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bWF0LW1lbnUgI2NhcmRNZW51PVwibWF0TWVudVwiIGNsYXNzPVwibWVudS1zZWNcIj5cbiAgICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQgbGV0LXJvd0RhdGE9XCJkYXRhXCIgbGV0LWNhcmRSZWY9XCJjYXJkUmVmXCI+XG4gICAgICAgIDwhLS0gPGRpdiA+IC0tPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YS5jb2x1bW5JbmZvLmNvbmZpZy5lbmFibGVWaWV3XCIgIChjbGljayk9XCJ2aWV3KGRhdGEsIGRhdGEuY2hpbGRyZW4sIGRhdGEuaW5kZXgpXCIgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIGkxOG4tYXJpYS1sYWJlbCBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+dmlzaWJpbGl0eTwvbWF0LWljb24+IDxzcGFuPlZpZXc8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YS5jb2x1bW5JbmZvLmNvbmZpZy5lbmFiYWxlRWRpdFwiIChjbGljayk9XCJlZGl0KGRhdGEsICBkYXRhLmNoaWxkcmVuLGRhdGEuaW5kZXgsIGNhcmRSZWYpXCJcbiAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0gbmFtZT1cImNoYW5uZWwtYW5hbHl0aWNzLWJ1dHRvblwiIGNsYXNzPVwid3MtbWF0LXByaW1hcnktdGV4dFwiIGkxOG4tYXJpYS1sYWJlbFxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkFuYWx5dGljc1wiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+RWRpdDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJsZUFkZFwiIChjbGljayk9XCJjcmVhdGUoZGF0YSlcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCIgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPkFkZDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJsZURlbGV0ZVwiIChjbGljayk9XCJkZWxldGUoZGF0YSlcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCIgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPkRlbGV0ZTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG5cbjxtYXQtbWVudSAjb3JnTWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cIm1lbnUtc2VjXCI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1yb3dEYXRhPVwiZGF0YVwiIGxldC1jYXJkUmVmPVwiY2FyZFJlZlwiPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGF0YS5jb2x1bW5JbmZvLmNvbmZpZy5lbmFibGVVcGRhdGVIaWVyYXJjaHkgJiYgZGF0YS5pbmRleCA+IDFcIiAgKGNsaWNrKT1cIm1lbnVBY3Rpb24oJ3VwZGF0ZS1oaWVyYXJjaHknLCBkYXRhKVwiIG1hdC1tZW51LWl0ZW0gbmFtZT1cImNoYW5uZWwtYW5hbHl0aWNzLWJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImFjdGlvbi1idG5cIiBpMThuLWFyaWEtbGFiZWwgYXJpYS1sYWJlbD1cIkFuYWx5dGljc1wiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmVkaXQ8L21hdC1pY29uPiA8c3Bhbj5VcGRhdGUgSGllcmFyY2h5PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhdGEuY29sdW1uSW5mby5jb25maWcuZW5hYmFsZVJlbW92ZUNvbm5lY3Rpb25cIiAoY2xpY2spPVwibWVudUFjdGlvbigncmVtb3ZlLXRlcm0nLCBkYXRhKVwiXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIiBjbGFzcz1cImFjdGlvbi1idG5cIiBpMThuLWFyaWEtbGFiZWxcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3Bhbj5SZW1vdmUgQ29ubmVjdGlvbjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRhLmNvbHVtbkluZm8uY29uZmlnLmVuYWJsZU1hbmFnZU9yZ2FuaXphdGlvblwiIChjbGljayk9XCJtZW51QWN0aW9uKCdtYW5hZ2Utb3JnJywgZGF0YSlcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCIgY2xhc3M9XCJhY3Rpb24tYnRuXCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+c2V0dGluZ3M8L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+TWFuYWdlIE9yZ2FuaXNhdGlvbjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gQWRkIHRoaXMgdGVtcGxhdGUgdG8geW91ciBjb21wb25lbnQgLS0+XG48bmctdGVtcGxhdGUgI2RpYWxvZ1RlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LW1pZGRsZVwiPlxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImxhcmdlLWljb24gY29sb3Itc2Vjb25kYXJ5XCI+ZXJyb3Jfb3V0bGluZTwvbWF0LWljb24+XG4gICAgPHAgY2xhc3M9XCJjb2xvci1wcmltYXJ5IG1vZGFsLXRleHQgbWFyZ2luLXRvcC1zXCI+U2VsZWN0IGEgb3JnYW5pc2F0aW9uIHRvIGFkZCBvciBzZWUgZnVydGhlciBjb25uZWN0aW9ucy48L3A+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCIgY2xhc3M9XCJidG4tY29tbW9uIGJ0bi1wcmltYXJ5IG1vZGFsLWJ0blwiPkNsb3NlPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuIl19