vc-create-dashboard 3.0.72 → 3.0.73

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.
@@ -413,11 +413,11 @@ export class UserListComponent {
413
413
  });
414
414
  }
415
415
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserListComponent, deps: [{ token: i1.PaginationService }, { token: i2.CreateDashboardService }], target: i0.ɵɵFactoryTarget.Component });
416
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserListComponent, selector: "app-user-list", inputs: { selectionType: "selectionType", listDetails: "listDetails", totalPages: "totalPages", limit: "limit", totalList: "totalList", feature: "feature", totalgroupscount: "totalgroupscount" }, outputs: { closeUserList: "closeUserList", saveSelectedUsers: "saveSelectedUsers" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"user-list\" [class.animate-slideInRight]=\"animation\">\n <div\n class=\"user-list-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\"\n >\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">\n Who can view this dashboard?\n </div>\n </div>\n <div class=\"user-list-body\">\n <div\n class=\"user-list-tab vx-d-flex vx-align-center vx-mb-2\"\n *ngIf=\"groupsEnabled\"\n >\n <button\n (click)=\"switchTab('USER')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'USER'\"\n >\n USERS\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{ totalList }}</span\n >\n </button>\n <button\n id=\"switchtab\"\n (click)=\"switchTab('GROUP')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'GROUP'\"\n >\n USER GROUPS\n <span\n id=\"groupscount\"\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{ totalgroups }}</span\n >\n </button>\n </div>\n\n <div class=\"user-list-search vx-mb-2\">\n <i class=\"icons\">&#xe90b;</i>\n <input\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User(s)' : 'Search User Group(s)'\n }} who can view this dashboard\"\n (keyup.enter)=\"setSearchValue()\"\n (focusout)=\"setSearchValue()\"\n />\n </div>\n\n <ng-container *ngIf=\"currentTab === 'USER'\">\n <div\n class=\"vx-d-flex vx-align-center vx-justify-end\"\n *ngIf=\"totalPages > 1\"\n >\n <div\n class=\"pagination-box\"\n *ngIf=\"totalPages > 1 && searchList.length > 1\"\n >\n <app-pagination\n (paginationFilter)=\"paginationFilter($event)\"\n [limit]=\"limit\"\n [totalPages]=\"totalPages\"\n [totalList]=\"totalList\"\n ></app-pagination>\n </div>\n </div>\n <div class=\"user-list-body-top\" *ngIf=\"searchList.length !== 0\">\n <app-cs-checkbox\n *ngIf=\"!searchValue && searchList.length > 1\"\n [ngValue]=\"selectedList.length == totalList\"\n (ngValueChange)=\"selectAllUsers($event)\"\n >\n <strong>{{\n selectedList.length == totalList ? \"Deselect All\" : \"Select All\"\n }}</strong>\n </app-cs-checkbox>\n <app-cs-checkbox\n *ngIf=\"searchValue && searchList.length > 1\"\n [ngValue]=\"checkSelectAll()\"\n (ngValueChange)=\"selectAll($event)\"\n >\n <strong>{{\n selectedList.length == totalList ? \"Deselect All\" : \"Select All\"\n }}</strong>\n </app-cs-checkbox>\n </div>\n <div class=\"list-of-user\">\n <div\n class=\"selection-list vx-mb-4\"\n [class.with-group]=\"groupsEnabled\"\n [class.with-noData]=\"searchList.length == 0\"\n [class.with-pagination]=\"totalPages > 1 && searchList.length > 1\"\n >\n <ul *ngIf=\"searchList.length !== 0\">\n <li *ngFor=\"let data of searchList; let i = index\">\n <app-cs-checkbox\n [disabled]=\"\n listDetails.nonRemovableUsersList.includes(\n data[listDetails.elementIdKey]\n )\n \"\n [ngValue]=\"\n selectedList.length > 0 &&\n selectedIds.includes(data[listDetails.elementIdKey])\n \"\n (ngValueChange)=\"selectElement(data)\"\n [arTooltip]=\"data[listDetails.tooltipKey]\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >{{ data[listDetails.displayElementKey] }}</app-cs-checkbox\n >\n </li>\n </ul>\n\n <app-no-data\n *ngIf=\"!vLoader && searchList.length == 0\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"'No data to display'\"\n ></app-no-data>\n </div>\n\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"currentTab === 'GROUP' && groupsEnabled\">\n <ng-container *ngIf=\"groupdata as groups\">\n <div class=\"vx-d-flex vx-align-center vx-justify-end\" *ngIf=\"true\">\n <div class=\"pagination-box\" *ngIf=\"total_group_pages > 1\">\n <app-pagination\n (paginationFilter)=\"paginationFilter($event)\"\n [limit]=\"limit\"\n [totalPages]=\"total_group_pages\"\n [totalList]=\"totalgroups\"\n ></app-pagination>\n </div>\n </div>\n <ng-container *ngIf=\"true\">\n <div\n class=\"user-list-mid vx-mb-4\"\n [class.with-pagination]=\"total_group_pages > 1\"\n >\n <ng-container *ngIf=\"groups?.length > 0\">\n <div class=\"user-list-select vx-mb-4\">\n <app-cs-checkbox\n [disabled]=\"false\"\n *ngIf=\"!searchValue && groups.length > 1\"\n [ngValue]=\"selectedgroupList.length == totalgroups\"\n (ngValueChange)=\"selectAllGroups($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{\n selectedgroupList.length == totalgroups\n ? \"Deselect All\"\n : \"Select All\"\n }}\n </div>\n </app-cs-checkbox>\n <app-cs-checkbox\n [disabled]=\"false\"\n *ngIf=\"searchValue && groups.length > 1\"\n [ngValue]=\"checkSelectAllGroups()\"\n (ngValueChange)=\"selectAllsearchgroups($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{\n selectedgroupList.length == totalgroups\n ? \"Deselect All\"\n : \"Select All\"\n }}\n </div>\n </app-cs-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <li\n class=\"vx-mb-4\"\n *ngFor=\"let data of groups; let i = index\"\n >\n <app-cs-checkbox\n (ngValueChange)=\"selectGroupElement(data)\"\n [disabled]=\"false\"\n [ngValue]=\"\n selectedgroupList.length > 0 &&\n selectedGroupIds.includes(data[listDetails.groupIdkey])\n \"\n >\n <div class=\"user-name vx-d-flex vx-align-center\">\n <div\n class=\"group-name\"\n [arTooltip]=\"data[listDetails.displayGroupKey]\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n {{ data[listDetails.displayGroupKey] }}\n </div>\n <span\n id=\"usersofgroup\"\n class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase vx-ml-2\"\n >{{ data[\"associatedUsers\"].length }}\n {{\n data[\"associatedUsers\"].length > 1\n ? \"USERS\"\n : \"USER\"\n }}</span\n >\n </div>\n </app-cs-checkbox>\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-container *ngIf=\"groups?.length == 0 && !vLoaderGroups\">\n <app-no-data\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n searchKey?.length > 0\n ? 'No match found.'\n : 'No data to display.'\n \"\n ></app-no-data>\n </ng-container>\n <app-loader-inline *ngIf=\"vLoaderGroups\"></app-loader-inline>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div class=\"user-floating-bar\" *ngIf=\"groupsEnabled\">\n <div\n class=\"user-floating-bar-container vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"left vx-d-flex vx-align-center\">\n <button\n class=\"counter vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-m-0 vx-pl-1 vx-pr-1\"\n *ngIf=\"selectedList?.length\"\n appPopover\n (click)=\"userCount.popover()\"\n placement=\"left\"\n >\n {{ selectedList?.length }}\n </button>\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\">\n <span *ngIf=\"selectedList?.length === 1\"\n >User\n {{ selectedgroupList?.length > 0 ? \" & \" : \"selected\" }}</span\n >\n <span *ngIf=\"selectedList?.length > 1\"\n >Users\n {{ selectedgroupList?.length > 0 ? \" & \" : \"are selected\" }}</span\n >\n </div>\n <button\n class=\"counter group vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-ml-2 vx-pl-1 vx-pr-1\"\n *ngIf=\"selectedgroupList?.length\"\n appPopover\n (click)=\"groupCount.popover()\"\n placement=\"left\"\n >\n {{ selectedgroupList?.length }}\n </button>\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\">\n <span *ngIf=\"selectedgroupList?.length === 1\"\n >User Group selected</span\n >\n <span *ngIf=\"selectedgroupList?.length > 1\"\n >User Groups selected</span\n >\n </div>\n\n <app-popover #userCount [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedList\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"element.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"selectElement(element)\"\n *ngIf=\"\n !listDetails.nonRemovableUsersList.includes(\n element?.member_id\n )\n \"\n >&#xe90d;</i\n >\n {{ element.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupCount [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedgroupList\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"element?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"selectGroupElement(element)\"\n >&#xe90d;</i\n >\n {{ element?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <div class=\"right vx-d-flex vx-align-center\">\n <button class=\"cancel\" (click)=\"closeUserList.emit()\">Cancel</button>\n <button [disabled]=\"false\" (click)=\"onSubmit()\">\n Next <i class=\"icons\">&#xe91e;</i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"user-list-footer\" *ngIf=\"!groupsEnabled\">\n <app-dashboard-footer\n [footerDetails]=\"footerDetails\"\n (cancelEvent)=\"closeUserList.emit(); paginationService.reset()\"\n (deleteEvent)=\"selectElement($event)\"\n (submitEvent)=\"onSubmit()\"\n [userButtonColor]=\"'greenBg'\"\n ></app-dashboard-footer>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .user-list{background:#fff;border-right:1px solid #F1F1F1;position:fixed;inset:0 500px 0 0}::ng-deep .user-list-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .user-list-body{height:calc(100vh - 2.75rem);padding:2rem;position:relative}::ng-deep .user-list-body-top{display:flex;justify-content:space-between;padding:0 0 16px}::ng-deep .user-list-body-top app-cs-checkbox{display:flex}::ng-deep .user-list-body-top app-cs-checkbox label span.value{margin-left:9px!important}::ng-deep .user-list-body-top app-cs-checkbox label span.value strong{color:#161b2f;font-size:12px;font-weight:600;white-space:nowrap}::ng-deep .user-list-body .selection-list{height:calc(100vh - 16rem);overflow:hidden;overflow-y:auto}::ng-deep .user-list-body .selection-list::-webkit-scrollbar-track{background:transparent}::ng-deep .user-list-body .selection-list.with-pagination{height:calc(100vh - 18rem)}::ng-deep .user-list-body .selection-list.with-group{height:calc(100vh - 18.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-pagination{height:calc(100vh - 20.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-noData{height:calc(100vh - 16.1rem)}::ng-deep .user-list-body .selection-list ul{padding:0;margin:0;display:flex;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-body .selection-list ul li{width:50%;padding:0 20px 4px 0;margin-bottom:12px;list-style:none}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox,::ng-deep .user-list-body .selection-list ul li app-cs-radio{display:flex}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label,::ng-deep .user-list-body .selection-list ul li app-cs-radio label{width:100%}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value{width:auto;justify-content:flex-start;flex-wrap:wrap;margin-left:8px!important;color:#161b2f!important;font-size:12px!important}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.name,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.name{color:#161b2f;font-weight:400;line-height:20px;display:block;width:100%;font-size:13px}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position{border-radius:2px;display:inline-flex;height:12px;align-items:center;padding:0 2px;text-transform:uppercase;font-size:9px;line-height:12px;font-weight:500}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.admin{background:#fff9e6;color:#f2bf19}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.key-admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.key-admin{background:#dff2e1;color:#34aa44}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.manager,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.manager{background:#d4e2fc;color:#4681ef}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.executive,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.executive{color:#747576;background:#f1f1f1}::ng-deep .user-list-body .pagination-box app-pagination .pagination-box{margin-bottom:.5rem!important}::ng-deep .user-list-body .list-of-user app-no-data .no-data-wrapper{height:calc(100vh - 16.125rem)}::ng-deep .user-list-search{position:relative}::ng-deep .user-list-search input{height:2.75rem;line-height:1.5rem;padding:.5rem 1rem .5rem 2.5rem;outline:none;border:1px solid #7475763f;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .user-list-search input:focus{border-color:#1e5dd3}::ng-deep .user-list-search i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-list-tab{border-bottom:1px solid #dbdbdb}::ng-deep .user-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:3px solid transparent;margin-right:1.75rem!important;padding-bottom:6px!important}::ng-deep .user-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-list-tab button.active{pointer-events:none}::ng-deep .user-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.6rem);overflow:auto;padding-right:.75rem}::ng-deep .user-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-list-mid.with-pagination{height:calc(100vh - 17.6rem)}::ng-deep .user-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-list-mid .user-list-select app-cs-checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate{display:flex}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkmark,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value{color:#747576!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value .user-name,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-mid .user-list-item ul li{width:50%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox{width:calc(100% - 4.5rem);display:flex}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 40px)}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-list-mid app-no-data .no-data-wrapper{height:calc(100vh - 15.625rem)}::ng-deep .user-floating-bar-container{height:48px;border-radius:4px;box-shadow:0 6px 12px #4681ef26;border:1px solid #f8f8f8;padding:8px 12px;position:relative;background:#fff;width:100%}::ng-deep .user-floating-bar-container .left .counter{background:#34aa44;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem}::ng-deep .user-floating-bar-container .left .counter.group{background:#1e5dd3}::ng-deep .user-floating-bar-container .right{display:flex;align-items:center}::ng-deep .user-floating-bar-container .right button{border-radius:2px;height:24px;background:#1e5dd3!important;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff!important;text-transform:uppercase;font-size:11px;font-weight:500;border:none!important;padding:0 8px;margin:0 0 0 8px}::ng-deep .user-floating-bar-container .right button i{margin-left:8px;font-size:11px}::ng-deep .user-floating-bar-container .right button:disabled{filter:unset;background:#f1f1f1!important;color:#747576!important;opacity:1;pointer-events:none}::ng-deep .user-floating-bar-container .right button.cancel{background:transparent!important;color:#eb2424!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.CsCheckboxComponent, selector: "app-cs-checkbox", inputs: ["disabled", "ngValue", "value"], outputs: ["ngValueChange"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.ToolTipDirective, selector: "[arTooltip]", inputs: ["arTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i7.DashboardFooterComponent, selector: "app-dashboard-footer", inputs: ["footerDetails", "userButtonColor"], outputs: ["cancelEvent", "submitEvent", "deleteEvent"] }, { kind: "component", type: i8.PaginationComponent, selector: "app-pagination", inputs: ["totalPages", "limit", "totalList"], outputs: ["paginationFilter"] }, { kind: "component", type: i9.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"], outputs: ["closedOnOverlay"] }, { kind: "directive", type: i10.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "component", type: i11.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i12.NoDataComponent, selector: "app-no-data", inputs: ["action", "noDataImage", "noDataText", "noDataButton", "noDataSecButton", "altText", "smallButton", "buttonIcon", "iconClass"], outputs: ["buttonAction"] }] });
416
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserListComponent, selector: "app-user-list", inputs: { selectionType: "selectionType", listDetails: "listDetails", totalPages: "totalPages", limit: "limit", totalList: "totalList", feature: "feature", totalgroupscount: "totalgroupscount" }, outputs: { closeUserList: "closeUserList", saveSelectedUsers: "saveSelectedUsers" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"user-list\" [class.animate-slideInRight]=\"animation\">\n <div\n class=\"user-list-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\"\n >\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">\n Who can view this dashboard?\n </div>\n </div>\n <div class=\"user-list-body\">\n <div\n class=\"user-list-tab vx-d-flex vx-align-center vx-mb-2\"\n *ngIf=\"groupsEnabled\"\n >\n <button\n (click)=\"switchTab('USER')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'USER'\"\n >\n USERS\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{ totalList }}</span\n >\n </button>\n <button\n id=\"switchtab\"\n (click)=\"switchTab('GROUP')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'GROUP'\"\n >\n USER GROUPS\n <span\n id=\"groupscount\"\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{ totalgroups }}</span\n >\n </button>\n </div>\n\n <div class=\"user-list-search vx-mb-2\">\n <i class=\"icons\">&#xe90b;</i>\n <input\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User(s)' : 'Search User Group(s)'\n }} who can view this dashboard\"\n (keyup.enter)=\"setSearchValue()\"\n (focusout)=\"setSearchValue()\"\n />\n </div>\n\n <ng-container *ngIf=\"currentTab === 'USER'\">\n <div\n class=\"vx-d-flex vx-align-center vx-justify-end\"\n *ngIf=\"totalPages > 1\"\n >\n <div\n class=\"pagination-box\"\n *ngIf=\"totalPages > 1 && searchList.length > 1\"\n >\n <app-pagination\n (paginationFilter)=\"paginationFilter($event)\"\n [limit]=\"limit\"\n [totalPages]=\"totalPages\"\n [totalList]=\"totalList\"\n ></app-pagination>\n </div>\n </div>\n <div class=\"user-list-body-top\" *ngIf=\"searchList.length !== 0\">\n <app-cs-checkbox\n *ngIf=\"!searchValue && searchList.length > 1\"\n [ngValue]=\"selectedList.length == totalList\"\n (ngValueChange)=\"selectAllUsers($event)\"\n >\n <strong>{{\n selectedList.length == totalList ? \"Deselect All\" : \"Select All\"\n }}</strong>\n </app-cs-checkbox>\n <app-cs-checkbox\n *ngIf=\"searchValue && searchList.length > 1\"\n [ngValue]=\"checkSelectAll()\"\n (ngValueChange)=\"selectAll($event)\"\n >\n <strong>{{\n selectedList.length == totalList ? \"Deselect All\" : \"Select All\"\n }}</strong>\n </app-cs-checkbox>\n </div>\n <div class=\"list-of-user\">\n <div\n class=\"selection-list vx-mb-4\"\n [class.with-group]=\"groupsEnabled\"\n [class.with-noData]=\"searchList.length == 0\"\n [class.with-pagination]=\"totalPages > 1 && searchList.length > 1\"\n >\n <ul *ngIf=\"searchList.length !== 0\">\n <li *ngFor=\"let data of searchList; let i = index\">\n <app-cs-checkbox\n [disabled]=\"\n listDetails.nonRemovableUsersList.includes(\n data[listDetails.elementIdKey]\n )\n \"\n [ngValue]=\"\n selectedList.length > 0 &&\n selectedIds.includes(data[listDetails.elementIdKey])\n \"\n (ngValueChange)=\"selectElement(data)\"\n [arTooltip]=\"data[listDetails.tooltipKey]\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >{{ data[listDetails.displayElementKey] }}</app-cs-checkbox\n >\n </li>\n </ul>\n\n <app-no-data\n *ngIf=\"!vLoader && searchList.length == 0\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"'No data to display'\"\n ></app-no-data>\n </div>\n\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"currentTab === 'GROUP' && groupsEnabled\">\n <ng-container *ngIf=\"groupdata as groups\">\n <div class=\"vx-d-flex vx-align-center vx-justify-end\" *ngIf=\"true\">\n <div class=\"pagination-box\" *ngIf=\"total_group_pages > 1\">\n <app-pagination\n (paginationFilter)=\"paginationFilter($event)\"\n [limit]=\"limit\"\n [totalPages]=\"total_group_pages\"\n [totalList]=\"totalgroups\"\n ></app-pagination>\n </div>\n </div>\n <ng-container *ngIf=\"true\">\n <div\n class=\"user-list-mid vx-mb-4\"\n [class.with-pagination]=\"total_group_pages > 1\"\n >\n <ng-container *ngIf=\"groups?.length > 0\">\n <div class=\"user-list-select vx-mb-4\">\n <app-cs-checkbox\n [disabled]=\"false\"\n *ngIf=\"!searchValue && groups.length > 1\"\n [ngValue]=\"selectedgroupList.length == totalgroups\"\n (ngValueChange)=\"selectAllGroups($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{\n selectedgroupList.length == totalgroups\n ? \"Deselect All\"\n : \"Select All\"\n }}\n </div>\n </app-cs-checkbox>\n <app-cs-checkbox\n [disabled]=\"false\"\n *ngIf=\"searchValue && groups.length > 1\"\n [ngValue]=\"checkSelectAllGroups()\"\n (ngValueChange)=\"selectAllsearchgroups($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{\n selectedgroupList.length == totalgroups\n ? \"Deselect All\"\n : \"Select All\"\n }}\n </div>\n </app-cs-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <li\n class=\"vx-mb-4\"\n *ngFor=\"let data of groups; let i = index\"\n >\n <app-cs-checkbox\n (ngValueChange)=\"selectGroupElement(data)\"\n [disabled]=\"false\"\n [ngValue]=\"\n selectedgroupList.length > 0 &&\n selectedGroupIds.includes(data[listDetails.groupIdkey])\n \"\n >\n <div class=\"user-name vx-d-flex vx-align-center\">\n <div\n class=\"group-name\"\n [arTooltip]=\"data[listDetails.displayGroupKey]\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n {{ data[listDetails.displayGroupKey] }}\n </div>\n <span\n id=\"usersofgroup\"\n class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase vx-ml-2\"\n >{{ data[\"associatedUsers\"].length }}\n {{\n data[\"associatedUsers\"].length > 1\n ? \"USERS\"\n : \"USER\"\n }}</span\n >\n </div>\n </app-cs-checkbox>\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-container *ngIf=\"groups?.length == 0 && !vLoaderGroups\">\n <app-no-data\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n (searchValue?.length > 0\n ? 'No match found.'\n : 'No data to display.'\n )\n \"\n ></app-no-data>\n </ng-container>\n <app-loader-inline *ngIf=\"vLoaderGroups\"></app-loader-inline>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div class=\"user-floating-bar\" *ngIf=\"groupsEnabled\">\n <div\n class=\"user-floating-bar-container vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"left vx-d-flex vx-align-center\">\n <button\n class=\"counter vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-m-0 vx-pl-1 vx-pr-1\"\n *ngIf=\"selectedList?.length\"\n appPopover\n (click)=\"userCount.popover()\"\n placement=\"left\"\n >\n {{ selectedList?.length }}\n </button>\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\">\n <span *ngIf=\"selectedList?.length === 1\"\n >User\n {{ selectedgroupList?.length > 0 ? \" & \" : \"selected\" }}</span\n >\n <span *ngIf=\"selectedList?.length > 1\"\n >Users\n {{ selectedgroupList?.length > 0 ? \" & \" : \"are selected\" }}</span\n >\n </div>\n <button\n class=\"counter group vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-ml-2 vx-pl-1 vx-pr-1\"\n *ngIf=\"selectedgroupList?.length\"\n appPopover\n (click)=\"groupCount.popover()\"\n placement=\"left\"\n >\n {{ selectedgroupList?.length }}\n </button>\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\">\n <span *ngIf=\"selectedgroupList?.length === 1\"\n >User Group selected</span\n >\n <span *ngIf=\"selectedgroupList?.length > 1\"\n >User Groups selected</span\n >\n </div>\n\n <app-popover #userCount [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedList\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"element.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"selectElement(element)\"\n *ngIf=\"\n !listDetails.nonRemovableUsersList.includes(\n element?.member_id\n )\n \"\n >&#xe90d;</i\n >\n {{ element.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupCount [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedgroupList\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"element?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"selectGroupElement(element)\"\n >&#xe90d;</i\n >\n {{ element?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <div class=\"right vx-d-flex vx-align-center\">\n <button class=\"cancel\" (click)=\"closeUserList.emit()\">Cancel</button>\n <button [disabled]=\"false\" (click)=\"onSubmit()\">\n Next <i class=\"icons\">&#xe91e;</i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"user-list-footer\" *ngIf=\"!groupsEnabled\">\n <app-dashboard-footer\n [footerDetails]=\"footerDetails\"\n (cancelEvent)=\"closeUserList.emit(); paginationService.reset()\"\n (deleteEvent)=\"selectElement($event)\"\n (submitEvent)=\"onSubmit()\"\n [userButtonColor]=\"'greenBg'\"\n ></app-dashboard-footer>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .user-list{background:#fff;border-right:1px solid #F1F1F1;position:fixed;inset:0 500px 0 0}::ng-deep .user-list-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .user-list-body{height:calc(100vh - 2.75rem);padding:2rem;position:relative}::ng-deep .user-list-body-top{display:flex;justify-content:space-between;padding:0 0 16px}::ng-deep .user-list-body-top app-cs-checkbox{display:flex}::ng-deep .user-list-body-top app-cs-checkbox label span.value{margin-left:9px!important}::ng-deep .user-list-body-top app-cs-checkbox label span.value strong{color:#161b2f;font-size:12px;font-weight:600;white-space:nowrap}::ng-deep .user-list-body .selection-list{height:calc(100vh - 16rem);overflow:hidden;overflow-y:auto}::ng-deep .user-list-body .selection-list::-webkit-scrollbar-track{background:transparent}::ng-deep .user-list-body .selection-list.with-pagination{height:calc(100vh - 18rem)}::ng-deep .user-list-body .selection-list.with-group{height:calc(100vh - 18.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-pagination{height:calc(100vh - 20.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-noData{height:calc(100vh - 16.1rem)}::ng-deep .user-list-body .selection-list ul{padding:0;margin:0;display:flex;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-body .selection-list ul li{width:50%;padding:0 20px 4px 0;margin-bottom:12px;list-style:none}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox,::ng-deep .user-list-body .selection-list ul li app-cs-radio{display:flex}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label,::ng-deep .user-list-body .selection-list ul li app-cs-radio label{width:100%}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value{width:auto;justify-content:flex-start;flex-wrap:wrap;margin-left:8px!important;color:#161b2f!important;font-size:12px!important}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.name,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.name{color:#161b2f;font-weight:400;line-height:20px;display:block;width:100%;font-size:13px}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position{border-radius:2px;display:inline-flex;height:12px;align-items:center;padding:0 2px;text-transform:uppercase;font-size:9px;line-height:12px;font-weight:500}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.admin{background:#fff9e6;color:#f2bf19}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.key-admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.key-admin{background:#dff2e1;color:#34aa44}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.manager,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.manager{background:#d4e2fc;color:#4681ef}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.executive,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.executive{color:#747576;background:#f1f1f1}::ng-deep .user-list-body .pagination-box app-pagination .pagination-box{margin-bottom:.5rem!important}::ng-deep .user-list-body .list-of-user app-no-data .no-data-wrapper{height:calc(100vh - 16.125rem)}::ng-deep .user-list-search{position:relative}::ng-deep .user-list-search input{height:2.75rem;line-height:1.5rem;padding:.5rem 1rem .5rem 2.5rem;outline:none;border:1px solid #7475763f;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .user-list-search input:focus{border-color:#1e5dd3}::ng-deep .user-list-search i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-list-tab{border-bottom:1px solid #dbdbdb}::ng-deep .user-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:3px solid transparent;margin-right:1.75rem!important;padding-bottom:6px!important}::ng-deep .user-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-list-tab button.active{pointer-events:none}::ng-deep .user-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.6rem);overflow:auto;padding-right:.75rem}::ng-deep .user-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-list-mid.with-pagination{height:calc(100vh - 17.6rem)}::ng-deep .user-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-list-mid .user-list-select app-cs-checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate{display:flex}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkmark,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value{color:#747576!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value .user-name,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-mid .user-list-item ul li{width:50%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox{width:calc(100% - 4.5rem);display:flex}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 40px)}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-list-mid app-no-data .no-data-wrapper{height:calc(100vh - 15.625rem)}::ng-deep .user-floating-bar-container{height:48px;border-radius:4px;box-shadow:0 6px 12px #4681ef26;border:1px solid #f8f8f8;padding:8px 12px;position:relative;background:#fff;width:100%}::ng-deep .user-floating-bar-container .left .counter{background:#34aa44;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem}::ng-deep .user-floating-bar-container .left .counter.group{background:#1e5dd3}::ng-deep .user-floating-bar-container .right{display:flex;align-items:center}::ng-deep .user-floating-bar-container .right button{border-radius:2px;height:24px;background:#1e5dd3!important;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff!important;text-transform:uppercase;font-size:11px;font-weight:500;border:none!important;padding:0 8px;margin:0 0 0 8px}::ng-deep .user-floating-bar-container .right button i{margin-left:8px;font-size:11px}::ng-deep .user-floating-bar-container .right button:disabled{filter:unset;background:#f1f1f1!important;color:#747576!important;opacity:1;pointer-events:none}::ng-deep .user-floating-bar-container .right button.cancel{background:transparent!important;color:#eb2424!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.CsCheckboxComponent, selector: "app-cs-checkbox", inputs: ["disabled", "ngValue", "value"], outputs: ["ngValueChange"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.ToolTipDirective, selector: "[arTooltip]", inputs: ["arTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i7.DashboardFooterComponent, selector: "app-dashboard-footer", inputs: ["footerDetails", "userButtonColor"], outputs: ["cancelEvent", "submitEvent", "deleteEvent"] }, { kind: "component", type: i8.PaginationComponent, selector: "app-pagination", inputs: ["totalPages", "limit", "totalList"], outputs: ["paginationFilter"] }, { kind: "component", type: i9.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"], outputs: ["closedOnOverlay"] }, { kind: "directive", type: i10.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "component", type: i11.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i12.NoDataComponent, selector: "app-no-data", inputs: ["action", "noDataImage", "noDataText", "noDataButton", "noDataSecButton", "altText", "smallButton", "buttonIcon", "iconClass"], outputs: ["buttonAction"] }] });
417
417
  }
418
418
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserListComponent, decorators: [{
419
419
  type: Component,
420
- args: [{ selector: 'app-user-list', template: "<div class=\"user-list\" [class.animate-slideInRight]=\"animation\">\n <div\n class=\"user-list-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\"\n >\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">\n Who can view this dashboard?\n </div>\n </div>\n <div class=\"user-list-body\">\n <div\n class=\"user-list-tab vx-d-flex vx-align-center vx-mb-2\"\n *ngIf=\"groupsEnabled\"\n >\n <button\n (click)=\"switchTab('USER')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'USER'\"\n >\n USERS\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{ totalList }}</span\n >\n </button>\n <button\n id=\"switchtab\"\n (click)=\"switchTab('GROUP')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'GROUP'\"\n >\n USER GROUPS\n <span\n id=\"groupscount\"\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{ totalgroups }}</span\n >\n </button>\n </div>\n\n <div class=\"user-list-search vx-mb-2\">\n <i class=\"icons\">&#xe90b;</i>\n <input\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User(s)' : 'Search User Group(s)'\n }} who can view this dashboard\"\n (keyup.enter)=\"setSearchValue()\"\n (focusout)=\"setSearchValue()\"\n />\n </div>\n\n <ng-container *ngIf=\"currentTab === 'USER'\">\n <div\n class=\"vx-d-flex vx-align-center vx-justify-end\"\n *ngIf=\"totalPages > 1\"\n >\n <div\n class=\"pagination-box\"\n *ngIf=\"totalPages > 1 && searchList.length > 1\"\n >\n <app-pagination\n (paginationFilter)=\"paginationFilter($event)\"\n [limit]=\"limit\"\n [totalPages]=\"totalPages\"\n [totalList]=\"totalList\"\n ></app-pagination>\n </div>\n </div>\n <div class=\"user-list-body-top\" *ngIf=\"searchList.length !== 0\">\n <app-cs-checkbox\n *ngIf=\"!searchValue && searchList.length > 1\"\n [ngValue]=\"selectedList.length == totalList\"\n (ngValueChange)=\"selectAllUsers($event)\"\n >\n <strong>{{\n selectedList.length == totalList ? \"Deselect All\" : \"Select All\"\n }}</strong>\n </app-cs-checkbox>\n <app-cs-checkbox\n *ngIf=\"searchValue && searchList.length > 1\"\n [ngValue]=\"checkSelectAll()\"\n (ngValueChange)=\"selectAll($event)\"\n >\n <strong>{{\n selectedList.length == totalList ? \"Deselect All\" : \"Select All\"\n }}</strong>\n </app-cs-checkbox>\n </div>\n <div class=\"list-of-user\">\n <div\n class=\"selection-list vx-mb-4\"\n [class.with-group]=\"groupsEnabled\"\n [class.with-noData]=\"searchList.length == 0\"\n [class.with-pagination]=\"totalPages > 1 && searchList.length > 1\"\n >\n <ul *ngIf=\"searchList.length !== 0\">\n <li *ngFor=\"let data of searchList; let i = index\">\n <app-cs-checkbox\n [disabled]=\"\n listDetails.nonRemovableUsersList.includes(\n data[listDetails.elementIdKey]\n )\n \"\n [ngValue]=\"\n selectedList.length > 0 &&\n selectedIds.includes(data[listDetails.elementIdKey])\n \"\n (ngValueChange)=\"selectElement(data)\"\n [arTooltip]=\"data[listDetails.tooltipKey]\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >{{ data[listDetails.displayElementKey] }}</app-cs-checkbox\n >\n </li>\n </ul>\n\n <app-no-data\n *ngIf=\"!vLoader && searchList.length == 0\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"'No data to display'\"\n ></app-no-data>\n </div>\n\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"currentTab === 'GROUP' && groupsEnabled\">\n <ng-container *ngIf=\"groupdata as groups\">\n <div class=\"vx-d-flex vx-align-center vx-justify-end\" *ngIf=\"true\">\n <div class=\"pagination-box\" *ngIf=\"total_group_pages > 1\">\n <app-pagination\n (paginationFilter)=\"paginationFilter($event)\"\n [limit]=\"limit\"\n [totalPages]=\"total_group_pages\"\n [totalList]=\"totalgroups\"\n ></app-pagination>\n </div>\n </div>\n <ng-container *ngIf=\"true\">\n <div\n class=\"user-list-mid vx-mb-4\"\n [class.with-pagination]=\"total_group_pages > 1\"\n >\n <ng-container *ngIf=\"groups?.length > 0\">\n <div class=\"user-list-select vx-mb-4\">\n <app-cs-checkbox\n [disabled]=\"false\"\n *ngIf=\"!searchValue && groups.length > 1\"\n [ngValue]=\"selectedgroupList.length == totalgroups\"\n (ngValueChange)=\"selectAllGroups($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{\n selectedgroupList.length == totalgroups\n ? \"Deselect All\"\n : \"Select All\"\n }}\n </div>\n </app-cs-checkbox>\n <app-cs-checkbox\n [disabled]=\"false\"\n *ngIf=\"searchValue && groups.length > 1\"\n [ngValue]=\"checkSelectAllGroups()\"\n (ngValueChange)=\"selectAllsearchgroups($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{\n selectedgroupList.length == totalgroups\n ? \"Deselect All\"\n : \"Select All\"\n }}\n </div>\n </app-cs-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <li\n class=\"vx-mb-4\"\n *ngFor=\"let data of groups; let i = index\"\n >\n <app-cs-checkbox\n (ngValueChange)=\"selectGroupElement(data)\"\n [disabled]=\"false\"\n [ngValue]=\"\n selectedgroupList.length > 0 &&\n selectedGroupIds.includes(data[listDetails.groupIdkey])\n \"\n >\n <div class=\"user-name vx-d-flex vx-align-center\">\n <div\n class=\"group-name\"\n [arTooltip]=\"data[listDetails.displayGroupKey]\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n {{ data[listDetails.displayGroupKey] }}\n </div>\n <span\n id=\"usersofgroup\"\n class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase vx-ml-2\"\n >{{ data[\"associatedUsers\"].length }}\n {{\n data[\"associatedUsers\"].length > 1\n ? \"USERS\"\n : \"USER\"\n }}</span\n >\n </div>\n </app-cs-checkbox>\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-container *ngIf=\"groups?.length == 0 && !vLoaderGroups\">\n <app-no-data\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n searchKey?.length > 0\n ? 'No match found.'\n : 'No data to display.'\n \"\n ></app-no-data>\n </ng-container>\n <app-loader-inline *ngIf=\"vLoaderGroups\"></app-loader-inline>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div class=\"user-floating-bar\" *ngIf=\"groupsEnabled\">\n <div\n class=\"user-floating-bar-container vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"left vx-d-flex vx-align-center\">\n <button\n class=\"counter vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-m-0 vx-pl-1 vx-pr-1\"\n *ngIf=\"selectedList?.length\"\n appPopover\n (click)=\"userCount.popover()\"\n placement=\"left\"\n >\n {{ selectedList?.length }}\n </button>\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\">\n <span *ngIf=\"selectedList?.length === 1\"\n >User\n {{ selectedgroupList?.length > 0 ? \" & \" : \"selected\" }}</span\n >\n <span *ngIf=\"selectedList?.length > 1\"\n >Users\n {{ selectedgroupList?.length > 0 ? \" & \" : \"are selected\" }}</span\n >\n </div>\n <button\n class=\"counter group vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-ml-2 vx-pl-1 vx-pr-1\"\n *ngIf=\"selectedgroupList?.length\"\n appPopover\n (click)=\"groupCount.popover()\"\n placement=\"left\"\n >\n {{ selectedgroupList?.length }}\n </button>\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\">\n <span *ngIf=\"selectedgroupList?.length === 1\"\n >User Group selected</span\n >\n <span *ngIf=\"selectedgroupList?.length > 1\"\n >User Groups selected</span\n >\n </div>\n\n <app-popover #userCount [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedList\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"element.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"selectElement(element)\"\n *ngIf=\"\n !listDetails.nonRemovableUsersList.includes(\n element?.member_id\n )\n \"\n >&#xe90d;</i\n >\n {{ element.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupCount [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedgroupList\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"element?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"selectGroupElement(element)\"\n >&#xe90d;</i\n >\n {{ element?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <div class=\"right vx-d-flex vx-align-center\">\n <button class=\"cancel\" (click)=\"closeUserList.emit()\">Cancel</button>\n <button [disabled]=\"false\" (click)=\"onSubmit()\">\n Next <i class=\"icons\">&#xe91e;</i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"user-list-footer\" *ngIf=\"!groupsEnabled\">\n <app-dashboard-footer\n [footerDetails]=\"footerDetails\"\n (cancelEvent)=\"closeUserList.emit(); paginationService.reset()\"\n (deleteEvent)=\"selectElement($event)\"\n (submitEvent)=\"onSubmit()\"\n [userButtonColor]=\"'greenBg'\"\n ></app-dashboard-footer>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .user-list{background:#fff;border-right:1px solid #F1F1F1;position:fixed;inset:0 500px 0 0}::ng-deep .user-list-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .user-list-body{height:calc(100vh - 2.75rem);padding:2rem;position:relative}::ng-deep .user-list-body-top{display:flex;justify-content:space-between;padding:0 0 16px}::ng-deep .user-list-body-top app-cs-checkbox{display:flex}::ng-deep .user-list-body-top app-cs-checkbox label span.value{margin-left:9px!important}::ng-deep .user-list-body-top app-cs-checkbox label span.value strong{color:#161b2f;font-size:12px;font-weight:600;white-space:nowrap}::ng-deep .user-list-body .selection-list{height:calc(100vh - 16rem);overflow:hidden;overflow-y:auto}::ng-deep .user-list-body .selection-list::-webkit-scrollbar-track{background:transparent}::ng-deep .user-list-body .selection-list.with-pagination{height:calc(100vh - 18rem)}::ng-deep .user-list-body .selection-list.with-group{height:calc(100vh - 18.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-pagination{height:calc(100vh - 20.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-noData{height:calc(100vh - 16.1rem)}::ng-deep .user-list-body .selection-list ul{padding:0;margin:0;display:flex;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-body .selection-list ul li{width:50%;padding:0 20px 4px 0;margin-bottom:12px;list-style:none}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox,::ng-deep .user-list-body .selection-list ul li app-cs-radio{display:flex}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label,::ng-deep .user-list-body .selection-list ul li app-cs-radio label{width:100%}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value{width:auto;justify-content:flex-start;flex-wrap:wrap;margin-left:8px!important;color:#161b2f!important;font-size:12px!important}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.name,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.name{color:#161b2f;font-weight:400;line-height:20px;display:block;width:100%;font-size:13px}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position{border-radius:2px;display:inline-flex;height:12px;align-items:center;padding:0 2px;text-transform:uppercase;font-size:9px;line-height:12px;font-weight:500}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.admin{background:#fff9e6;color:#f2bf19}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.key-admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.key-admin{background:#dff2e1;color:#34aa44}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.manager,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.manager{background:#d4e2fc;color:#4681ef}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.executive,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.executive{color:#747576;background:#f1f1f1}::ng-deep .user-list-body .pagination-box app-pagination .pagination-box{margin-bottom:.5rem!important}::ng-deep .user-list-body .list-of-user app-no-data .no-data-wrapper{height:calc(100vh - 16.125rem)}::ng-deep .user-list-search{position:relative}::ng-deep .user-list-search input{height:2.75rem;line-height:1.5rem;padding:.5rem 1rem .5rem 2.5rem;outline:none;border:1px solid #7475763f;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .user-list-search input:focus{border-color:#1e5dd3}::ng-deep .user-list-search i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-list-tab{border-bottom:1px solid #dbdbdb}::ng-deep .user-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:3px solid transparent;margin-right:1.75rem!important;padding-bottom:6px!important}::ng-deep .user-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-list-tab button.active{pointer-events:none}::ng-deep .user-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.6rem);overflow:auto;padding-right:.75rem}::ng-deep .user-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-list-mid.with-pagination{height:calc(100vh - 17.6rem)}::ng-deep .user-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-list-mid .user-list-select app-cs-checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate{display:flex}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkmark,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value{color:#747576!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value .user-name,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-mid .user-list-item ul li{width:50%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox{width:calc(100% - 4.5rem);display:flex}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 40px)}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-list-mid app-no-data .no-data-wrapper{height:calc(100vh - 15.625rem)}::ng-deep .user-floating-bar-container{height:48px;border-radius:4px;box-shadow:0 6px 12px #4681ef26;border:1px solid #f8f8f8;padding:8px 12px;position:relative;background:#fff;width:100%}::ng-deep .user-floating-bar-container .left .counter{background:#34aa44;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem}::ng-deep .user-floating-bar-container .left .counter.group{background:#1e5dd3}::ng-deep .user-floating-bar-container .right{display:flex;align-items:center}::ng-deep .user-floating-bar-container .right button{border-radius:2px;height:24px;background:#1e5dd3!important;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff!important;text-transform:uppercase;font-size:11px;font-weight:500;border:none!important;padding:0 8px;margin:0 0 0 8px}::ng-deep .user-floating-bar-container .right button i{margin-left:8px;font-size:11px}::ng-deep .user-floating-bar-container .right button:disabled{filter:unset;background:#f1f1f1!important;color:#747576!important;opacity:1;pointer-events:none}::ng-deep .user-floating-bar-container .right button.cancel{background:transparent!important;color:#eb2424!important}\n"] }]
420
+ args: [{ selector: 'app-user-list', template: "<div class=\"user-list\" [class.animate-slideInRight]=\"animation\">\n <div\n class=\"user-list-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\"\n >\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">\n Who can view this dashboard?\n </div>\n </div>\n <div class=\"user-list-body\">\n <div\n class=\"user-list-tab vx-d-flex vx-align-center vx-mb-2\"\n *ngIf=\"groupsEnabled\"\n >\n <button\n (click)=\"switchTab('USER')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'USER'\"\n >\n USERS\n <span\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{ totalList }}</span\n >\n </button>\n <button\n id=\"switchtab\"\n (click)=\"switchTab('GROUP')\"\n class=\"tab-btn vx-fs-11 vx-fw-600 vx-paragraph-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center vx-lh-4\"\n [class.active]=\"currentTab === 'GROUP'\"\n >\n USER GROUPS\n <span\n id=\"groupscount\"\n class=\"vx-pl-1 vx-pr-1 vx-d-flex vx-align-center vx-justify-center vx-ml-2 vx-lh-4\"\n >{{ totalgroups }}</span\n >\n </button>\n </div>\n\n <div class=\"user-list-search vx-mb-2\">\n <i class=\"icons\">&#xe90b;</i>\n <input\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n placeholder=\"{{\n currentTab === 'USER' ? 'Search User(s)' : 'Search User Group(s)'\n }} who can view this dashboard\"\n (keyup.enter)=\"setSearchValue()\"\n (focusout)=\"setSearchValue()\"\n />\n </div>\n\n <ng-container *ngIf=\"currentTab === 'USER'\">\n <div\n class=\"vx-d-flex vx-align-center vx-justify-end\"\n *ngIf=\"totalPages > 1\"\n >\n <div\n class=\"pagination-box\"\n *ngIf=\"totalPages > 1 && searchList.length > 1\"\n >\n <app-pagination\n (paginationFilter)=\"paginationFilter($event)\"\n [limit]=\"limit\"\n [totalPages]=\"totalPages\"\n [totalList]=\"totalList\"\n ></app-pagination>\n </div>\n </div>\n <div class=\"user-list-body-top\" *ngIf=\"searchList.length !== 0\">\n <app-cs-checkbox\n *ngIf=\"!searchValue && searchList.length > 1\"\n [ngValue]=\"selectedList.length == totalList\"\n (ngValueChange)=\"selectAllUsers($event)\"\n >\n <strong>{{\n selectedList.length == totalList ? \"Deselect All\" : \"Select All\"\n }}</strong>\n </app-cs-checkbox>\n <app-cs-checkbox\n *ngIf=\"searchValue && searchList.length > 1\"\n [ngValue]=\"checkSelectAll()\"\n (ngValueChange)=\"selectAll($event)\"\n >\n <strong>{{\n selectedList.length == totalList ? \"Deselect All\" : \"Select All\"\n }}</strong>\n </app-cs-checkbox>\n </div>\n <div class=\"list-of-user\">\n <div\n class=\"selection-list vx-mb-4\"\n [class.with-group]=\"groupsEnabled\"\n [class.with-noData]=\"searchList.length == 0\"\n [class.with-pagination]=\"totalPages > 1 && searchList.length > 1\"\n >\n <ul *ngIf=\"searchList.length !== 0\">\n <li *ngFor=\"let data of searchList; let i = index\">\n <app-cs-checkbox\n [disabled]=\"\n listDetails.nonRemovableUsersList.includes(\n data[listDetails.elementIdKey]\n )\n \"\n [ngValue]=\"\n selectedList.length > 0 &&\n selectedIds.includes(data[listDetails.elementIdKey])\n \"\n (ngValueChange)=\"selectElement(data)\"\n [arTooltip]=\"data[listDetails.tooltipKey]\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >{{ data[listDetails.displayElementKey] }}</app-cs-checkbox\n >\n </li>\n </ul>\n\n <app-no-data\n *ngIf=\"!vLoader && searchList.length == 0\"\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"'No data to display'\"\n ></app-no-data>\n </div>\n\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"currentTab === 'GROUP' && groupsEnabled\">\n <ng-container *ngIf=\"groupdata as groups\">\n <div class=\"vx-d-flex vx-align-center vx-justify-end\" *ngIf=\"true\">\n <div class=\"pagination-box\" *ngIf=\"total_group_pages > 1\">\n <app-pagination\n (paginationFilter)=\"paginationFilter($event)\"\n [limit]=\"limit\"\n [totalPages]=\"total_group_pages\"\n [totalList]=\"totalgroups\"\n ></app-pagination>\n </div>\n </div>\n <ng-container *ngIf=\"true\">\n <div\n class=\"user-list-mid vx-mb-4\"\n [class.with-pagination]=\"total_group_pages > 1\"\n >\n <ng-container *ngIf=\"groups?.length > 0\">\n <div class=\"user-list-select vx-mb-4\">\n <app-cs-checkbox\n [disabled]=\"false\"\n *ngIf=\"!searchValue && groups.length > 1\"\n [ngValue]=\"selectedgroupList.length == totalgroups\"\n (ngValueChange)=\"selectAllGroups($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{\n selectedgroupList.length == totalgroups\n ? \"Deselect All\"\n : \"Select All\"\n }}\n </div>\n </app-cs-checkbox>\n <app-cs-checkbox\n [disabled]=\"false\"\n *ngIf=\"searchValue && groups.length > 1\"\n [ngValue]=\"checkSelectAllGroups()\"\n (ngValueChange)=\"selectAllsearchgroups($event)\"\n >\n <div\n class=\"user-name vx-fs-12 vx-fw-600 vx-label-txt vx-tt-none\"\n >\n {{\n selectedgroupList.length == totalgroups\n ? \"Deselect All\"\n : \"Select All\"\n }}\n </div>\n </app-cs-checkbox>\n </div>\n <div class=\"user-list-item\">\n <ul class=\"vx-m-0 vx-p-0 vx-d-flex\">\n <li\n class=\"vx-mb-4\"\n *ngFor=\"let data of groups; let i = index\"\n >\n <app-cs-checkbox\n (ngValueChange)=\"selectGroupElement(data)\"\n [disabled]=\"false\"\n [ngValue]=\"\n selectedgroupList.length > 0 &&\n selectedGroupIds.includes(data[listDetails.groupIdkey])\n \"\n >\n <div class=\"user-name vx-d-flex vx-align-center\">\n <div\n class=\"group-name\"\n [arTooltip]=\"data[listDetails.displayGroupKey]\"\n placement=\"bottom-left\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >\n {{ data[listDetails.displayGroupKey] }}\n </div>\n <span\n id=\"usersofgroup\"\n class=\"counter vx-fs-9 vx-fw-600 vx-pl-1 vx-pr-1 vx-lh-3 vx-tt-uppercase vx-ml-2\"\n >{{ data[\"associatedUsers\"].length }}\n {{\n data[\"associatedUsers\"].length > 1\n ? \"USERS\"\n : \"USER\"\n }}</span\n >\n </div>\n </app-cs-checkbox>\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-container *ngIf=\"groups?.length == 0 && !vLoaderGroups\">\n <app-no-data\n [noDataImage]=\"ASSETS.search_data\"\n [noDataText]=\"\n (searchValue?.length > 0\n ? 'No match found.'\n : 'No data to display.'\n )\n \"\n ></app-no-data>\n </ng-container>\n <app-loader-inline *ngIf=\"vLoaderGroups\"></app-loader-inline>\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div class=\"user-floating-bar\" *ngIf=\"groupsEnabled\">\n <div\n class=\"user-floating-bar-container vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"left vx-d-flex vx-align-center\">\n <button\n class=\"counter vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-m-0 vx-pl-1 vx-pr-1\"\n *ngIf=\"selectedList?.length\"\n appPopover\n (click)=\"userCount.popover()\"\n placement=\"left\"\n >\n {{ selectedList?.length }}\n </button>\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\">\n <span *ngIf=\"selectedList?.length === 1\"\n >User\n {{ selectedgroupList?.length > 0 ? \" & \" : \"selected\" }}</span\n >\n <span *ngIf=\"selectedList?.length > 1\"\n >Users\n {{ selectedgroupList?.length > 0 ? \" & \" : \"are selected\" }}</span\n >\n </div>\n <button\n class=\"counter group vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 vx-ml-2 vx-pl-1 vx-pr-1\"\n *ngIf=\"selectedgroupList?.length\"\n appPopover\n (click)=\"groupCount.popover()\"\n placement=\"left\"\n >\n {{ selectedgroupList?.length }}\n </button>\n <div class=\"name vx-fs-12 vx-paragraph-txt vx-ml-2\">\n <span *ngIf=\"selectedgroupList?.length === 1\"\n >User Group selected</span\n >\n <span *ngIf=\"selectedgroupList?.length > 1\"\n >User Groups selected</span\n >\n </div>\n\n <app-popover #userCount [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedList\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"element.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"selectElement(element)\"\n *ngIf=\"\n !listDetails.nonRemovableUsersList.includes(\n element?.member_id\n )\n \"\n >&#xe90d;</i\n >\n {{ element.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <app-popover #groupCount [dontCloseonClick]=\"true\">\n <div class=\"action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let element of selectedgroupList\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [arTooltip]=\"element?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons cross-icon\"\n (click)=\"selectGroupElement(element)\"\n >&#xe90d;</i\n >\n {{ element?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <div class=\"right vx-d-flex vx-align-center\">\n <button class=\"cancel\" (click)=\"closeUserList.emit()\">Cancel</button>\n <button [disabled]=\"false\" (click)=\"onSubmit()\">\n Next <i class=\"icons\">&#xe91e;</i>\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"user-list-footer\" *ngIf=\"!groupsEnabled\">\n <app-dashboard-footer\n [footerDetails]=\"footerDetails\"\n (cancelEvent)=\"closeUserList.emit(); paginationService.reset()\"\n (deleteEvent)=\"selectElement($event)\"\n (submitEvent)=\"onSubmit()\"\n [userButtonColor]=\"'greenBg'\"\n ></app-dashboard-footer>\n </div>\n </div>\n</div>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .user-list{background:#fff;border-right:1px solid #F1F1F1;position:fixed;inset:0 500px 0 0}::ng-deep .user-list-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .user-list-body{height:calc(100vh - 2.75rem);padding:2rem;position:relative}::ng-deep .user-list-body-top{display:flex;justify-content:space-between;padding:0 0 16px}::ng-deep .user-list-body-top app-cs-checkbox{display:flex}::ng-deep .user-list-body-top app-cs-checkbox label span.value{margin-left:9px!important}::ng-deep .user-list-body-top app-cs-checkbox label span.value strong{color:#161b2f;font-size:12px;font-weight:600;white-space:nowrap}::ng-deep .user-list-body .selection-list{height:calc(100vh - 16rem);overflow:hidden;overflow-y:auto}::ng-deep .user-list-body .selection-list::-webkit-scrollbar-track{background:transparent}::ng-deep .user-list-body .selection-list.with-pagination{height:calc(100vh - 18rem)}::ng-deep .user-list-body .selection-list.with-group{height:calc(100vh - 18.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-pagination{height:calc(100vh - 20.1rem)}::ng-deep .user-list-body .selection-list.with-group.with-noData{height:calc(100vh - 16.1rem)}::ng-deep .user-list-body .selection-list ul{padding:0;margin:0;display:flex;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-body .selection-list ul li{width:50%;padding:0 20px 4px 0;margin-bottom:12px;list-style:none}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox,::ng-deep .user-list-body .selection-list ul li app-cs-radio{display:flex}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label,::ng-deep .user-list-body .selection-list ul li app-cs-radio label{width:100%}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value{width:auto;justify-content:flex-start;flex-wrap:wrap;margin-left:8px!important;color:#161b2f!important;font-size:12px!important}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.name,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.name{color:#161b2f;font-weight:400;line-height:20px;display:block;width:100%;font-size:13px}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position{border-radius:2px;display:inline-flex;height:12px;align-items:center;padding:0 2px;text-transform:uppercase;font-size:9px;line-height:12px;font-weight:500}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.admin{background:#fff9e6;color:#f2bf19}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.key-admin,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.key-admin{background:#dff2e1;color:#34aa44}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.manager,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.manager{background:#d4e2fc;color:#4681ef}::ng-deep .user-list-body .selection-list ul li app-cs-checkbox label span.value span.position.executive,::ng-deep .user-list-body .selection-list ul li app-cs-radio label span.value span.position.executive{color:#747576;background:#f1f1f1}::ng-deep .user-list-body .pagination-box app-pagination .pagination-box{margin-bottom:.5rem!important}::ng-deep .user-list-body .list-of-user app-no-data .no-data-wrapper{height:calc(100vh - 16.125rem)}::ng-deep .user-list-search{position:relative}::ng-deep .user-list-search input{height:2.75rem;line-height:1.5rem;padding:.5rem 1rem .5rem 2.5rem;outline:none;border:1px solid #7475763f;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .user-list-search input:focus{border-color:#1e5dd3}::ng-deep .user-list-search i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .user-list-tab{border-bottom:1px solid #dbdbdb}::ng-deep .user-list-tab button.tab-btn{background:transparent;border-radius:0;border:none;border-bottom:3px solid transparent;margin-right:1.75rem!important;padding-bottom:6px!important}::ng-deep .user-list-tab button.tab-btn span{border-radius:1.25rem;color:#74757680;min-width:1.5rem}::ng-deep .user-list-tab button.active{pointer-events:none}::ng-deep .user-list-tab button.active.tab-btn{border-color:#1e5dd3;color:#1e5dd3}::ng-deep .user-list-tab button.active.tab-btn span{background:#1e5dd3;color:#fff;font-weight:500}::ng-deep .user-list-mid{width:calc(100% + .75rem);height:calc(100vh - 15.6rem);overflow:auto;padding-right:.75rem}::ng-deep .user-list-mid::-webkit-scrollbar-track{background-color:#fff}::ng-deep .user-list-mid.with-pagination{height:calc(100vh - 17.6rem)}::ng-deep .user-list-mid .user-list-select{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .user-list-mid .user-list-select app-cs-checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate{display:flex}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkbox,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item .checkmark,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value{color:#747576!important;font-size:11px!important;font-weight:600!important;text-transform:uppercase!important;width:100%}::ng-deep .user-list-mid .user-list-select app-cs-checkbox .checkbox-item span.value .user-name,::ng-deep .user-list-mid .user-list-select app-cs-checkbox-indeterminate .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul{list-style-type:none;align-items:flex-start;flex-wrap:wrap}::ng-deep .user-list-mid .user-list-item ul li{width:50%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox{width:calc(100% - 4.5rem);display:flex}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item{position:relative;padding-left:1.5rem;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkbox{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item .checkmark{position:absolute!important;left:0;top:0}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span{justify-content:unset!important;margin:0!important}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value{color:#161b2f!important;font-size:12px!important;width:100%}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .user-name .group-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 40px)}::ng-deep .user-list-mid .user-list-item ul li app-cs-checkbox .checkbox-item span.value .counter{background:#f1f1f1;border-radius:.125rem;color:#042e7d;margin-left:.5rem!important}::ng-deep .user-list-mid app-no-data .no-data-wrapper{height:calc(100vh - 15.625rem)}::ng-deep .user-floating-bar-container{height:48px;border-radius:4px;box-shadow:0 6px 12px #4681ef26;border:1px solid #f8f8f8;padding:8px 12px;position:relative;background:#fff;width:100%}::ng-deep .user-floating-bar-container .left .counter{background:#34aa44;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem}::ng-deep .user-floating-bar-container .left .counter.group{background:#1e5dd3}::ng-deep .user-floating-bar-container .right{display:flex;align-items:center}::ng-deep .user-floating-bar-container .right button{border-radius:2px;height:24px;background:#1e5dd3!important;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff!important;text-transform:uppercase;font-size:11px;font-weight:500;border:none!important;padding:0 8px;margin:0 0 0 8px}::ng-deep .user-floating-bar-container .right button i{margin-left:8px;font-size:11px}::ng-deep .user-floating-bar-container .right button:disabled{filter:unset;background:#f1f1f1!important;color:#747576!important;opacity:1;pointer-events:none}::ng-deep .user-floating-bar-container .right button.cancel{background:transparent!important;color:#eb2424!important}\n"] }]
421
421
  }], ctorParameters: function () { return [{ type: i1.PaginationService }, { type: i2.CreateDashboardService }]; }, propDecorators: { closeUserList: [{
422
422
  type: Output
423
423
  }], saveSelectedUsers: [{
@@ -437,4 +437,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
437
437
  }], totalgroupscount: [{
438
438
  type: Input
439
439
  }] } });
440
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWF0ZS1kYXNoYm9hcmQvc3JjL2xpYi9jcmVhdGUtZGFzaGJvYXJkLWNvbnRhaW5lci91c2VyLWxpc3QvdXNlci1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWF0ZS1kYXNoYm9hcmQvc3JjL2xpYi9jcmVhdGUtZGFzaGJvYXJkLWNvbnRhaW5lci91c2VyLWxpc3QvdXNlci1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFPdEQsTUFBTSxPQUFPLGlCQUFpQjtJQWtEbkI7SUFDQztJQWxEQSxhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNuQyxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3hDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDbkIsV0FBVyxHQUEwQjtRQUM1QyxpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLGVBQWUsRUFBRSxFQUFFO1FBQ25CLFVBQVUsRUFBRSxFQUFFO1FBQ2QsWUFBWSxFQUFFLEVBQUU7UUFDaEIsVUFBVSxFQUFFLEVBQUU7UUFDZCxpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLGlCQUFpQixFQUFFLEVBQUU7UUFDckIscUJBQXFCLEVBQUUsRUFBRTtLQUMxQixDQUFDO0lBRUYsYUFBYSxHQUEwQjtRQUNyQyxZQUFZLEVBQUUsRUFBRTtRQUNoQixnQkFBZ0IsRUFBRSxFQUFFO1FBQ3BCLGlCQUFpQixFQUFFLEVBQUU7UUFDckIsU0FBUyxFQUFFLEVBQUU7UUFDYixZQUFZLEVBQUUsZUFBZTtRQUM3QixVQUFVLEVBQUUsZ0JBQWdCO1FBQzVCLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLGFBQWEsRUFBRSxFQUFFO1FBQ2pCLFVBQVUsRUFBRSxLQUFLO0tBQ2xCLENBQUM7SUFDRixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDdEIsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUVQLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDZixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLE9BQU8sQ0FBTTtJQUNiLGdCQUFnQixDQUFNO0lBQy9CLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDaEIsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNqQixZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLFdBQVcsR0FBVSxFQUFFLENBQUM7SUFDeEIsWUFBWSxHQUFVLEVBQUUsQ0FBQztJQUN6QixTQUFTLEdBQVUsRUFBRSxDQUFDO0lBRXRCLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDakIsV0FBVyxDQUFNO0lBQ2pCLGlCQUFpQixDQUFNO0lBQ3ZCLGdCQUFnQixHQUFVLEVBQUUsQ0FBQztJQUM3QixhQUFhLENBQU07SUFDbkIsaUJBQWlCLEdBQVUsRUFBRSxDQUFDO0lBQzlCLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDaEIsWUFDUyxpQkFBb0MsRUFDbkMsZ0JBQXdDO1FBRHpDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDbkMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF3QjtRQUVoRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxXQUFXLEtBQUksQ0FBQztJQUVoQixRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNSLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7WUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0I7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUM7WUFDekMsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQy9DLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEVBQUU7b0JBQ3RDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7aUJBQzNDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUM7WUFDaEIseUZBQXlGO1lBQ3pGLENBQUMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxJQUFJLENBQUM7WUFDMUMsSUFBSSxFQUFFLEVBQUU7U0FDVCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUM7UUFDMUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7UUFDN0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDeEI7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7WUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0I7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUM7WUFDekMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDcEQsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDcEMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDekM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGFBQWEsS0FBSSxDQUFDO0lBQ2xCLGFBQWEsQ0FBQyxLQUFVLElBQUcsQ0FBQztJQUM1QixhQUFhLEtBQUksQ0FBQztJQUNsQixTQUFTLENBQUMsS0FBVTtRQUNsQixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7Z0JBQ3hDLElBQ0UsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FDeEIsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQzdDLEVBQ0Q7b0JBQ0EsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7b0JBQ3BFLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7aUJBQ3JEO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtnQkFDeEMsSUFDRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUM5QyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FDN0MsRUFDRDtvQkFDQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FDdkMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQzt3QkFDbEMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQy9DLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNuQyxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO29CQUVwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FDeEMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FDOUQsQ0FBQztvQkFDRixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ3JDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsS0FBVTtRQUN2QixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDekQsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDbEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRTt3QkFDakMsSUFDRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUN4QixhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FDN0MsRUFDRDs0QkFDQSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzs0QkFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ25CLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUM3QyxDQUFDOzRCQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7eUJBQ3JEO29CQUNILENBQUMsQ0FBQyxDQUFDO2lCQUNKO2dCQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsU0FBUyxDQUNsQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUM1QyxDQUFDO1lBQ0YsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQ2YsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFFakQsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBRXJDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7YUFDckQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7YUFDdEM7U0FDRjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsS0FBVTtRQUN4QixJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzlCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2hFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUN2QixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWtCLEVBQUUsRUFBRTt3QkFDdEMsSUFDRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQzdCLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUMzQyxFQUNEOzRCQUNBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7NEJBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3hCLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUMzQyxDQUFDOzRCQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQzt5QkFDMUQ7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUFVO1FBQzlCLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtnQkFDdkMsSUFDRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQzdCLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUMzQyxFQUNEO29CQUNBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3hCLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUMzQyxDQUFDO29CQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztpQkFDMUQ7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsSUFBUztRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUU7WUFDbEUsSUFDRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FDcEMsRUFDRDtnQkFDQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FDdkMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztvQkFDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQ3RDLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUVwRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FDeEMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FDckQsQ0FBQztnQkFFRixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDckM7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQ3JEO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVM7UUFDMUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7WUFDckUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FDNUMsQ0FBQyxHQUF5QixFQUFFLEVBQUUsQ0FDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQ3pFLENBQUM7WUFDRixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDekQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FDN0MsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FDbkQsQ0FBQztZQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzFDO2FBQU07WUFDTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7U0FDMUQ7SUFDSCxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDM0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3RELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5QixNQUFNLElBQUksR0FBWSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQzlELENBQUM7WUFDRixPQUFPLElBQUksQ0FBQztTQUNiO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CO1FBQ2xCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sSUFBSSxHQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUNqRSxDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNO1lBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pCLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUNuQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLE1BQU0sRUFBRTtnQkFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQztvQkFDaEIseUZBQXlGO29CQUN6RixDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsSUFBSSxDQUFDO29CQUMxQyxJQUFJLEVBQUUsRUFBRTtvQkFDUixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVzt3QkFDcEMsQ0FBQyxDQUFDLEVBQUU7d0JBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXO2lCQUN2QyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLHlCQUF5QixDQUFDO29CQUM3QixDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsSUFBSSxDQUFDO29CQUMxQyxJQUFJLEVBQUUsRUFBRTtvQkFDUixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVzt3QkFDcEMsQ0FBQyxDQUFDLEVBQUU7d0JBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXO2lCQUN2QyxDQUFDLENBQUM7YUFDSjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsYUFBYSxDQUFDO29CQUNqQixJQUFJLEVBQ0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsS0FBSyxDQUFDO3dCQUN0QyxDQUFDLENBQUMsRUFBRTt3QkFDSixDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVc7b0JBQ3hDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXO3dCQUM1QyxDQUFDLENBQUMsRUFBRTt3QkFDSixDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVc7aUJBQ3ZDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQ2hCLHlGQUF5RjtnQkFDekYsQ0FBQyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLElBQUksQ0FBQztnQkFDMUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVc7b0JBQ3BDLENBQUMsQ0FBQyxFQUFFO29CQUNKLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVzthQUN2QyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMseUJBQXlCLENBQUM7Z0JBQzdCLENBQUMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxJQUFJLENBQUM7Z0JBQzFDLElBQUksRUFBRSxFQUFFO2dCQUNSLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXO29CQUNwQyxDQUFDLENBQUMsRUFBRTtvQkFDSixDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVc7YUFDdkMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLEdBQVE7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxDQUFDLGdCQUFnQjthQUNsQixvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3BDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDOUIsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3JDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUN6RDtRQUNELElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuRCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDckM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2hFLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7WUFDbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sZ0RBQWdEO1FBQ2hELG9DQUFvQztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQzFCLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWTtZQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtTQUMvQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUNELFVBQVUsR0FBRyxNQUFNLENBQUM7SUFDcEIsU0FBUyxDQUFDLEdBQVc7UUFDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksTUFBTSxFQUFFO1lBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7U0FDOUQ7YUFBTTtZQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQseUJBQXlCLENBQUMsR0FBUTtRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDckUsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO1lBQ25DLElBQUksR0FBRyxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO2FBQ25DO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXpjVSxpQkFBaUI7NEZBQWpCLGlCQUFpQixtV0NiOUIsd2liQXFXQTs7NEZEeFZhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlOzZJQUtmLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNFLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkEwQkcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhc2hib2FyZEZvb3RlckNvbmZpZyB9IGZyb20gJy4uLy4uL3VpLWtpdC9kYXNoYm9hcmQtZm9vdGVyL2Rhc2hib2FyZC1mb290ZXItY29uZmlnJztcbmltcG9ydCB7IENyZWF0ZURhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jcmVhdGUtZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wYWdpbmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlckxpc3RDb25maWd1cmF0aW9uIH0gZnJvbSAnLi91c2VyLWxpc3QuY29uZmlnJztcbmltcG9ydCB7IEFTU0VUUyB9IGZyb20gJy4uL2NvbnN0YW50cy9hc3NldHMuY29uc3RhbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdXNlci1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VzZXItbGlzdC5jb21wb25lbnQubGVzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBVc2VyTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBPdXRwdXQoKSBjbG9zZVVzZXJMaXN0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2F2ZVNlbGVjdGVkVXNlcnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGUgPSAnJztcbiAgQElucHV0KCkgbGlzdERldGFpbHM6IFVzZXJMaXN0Q29uZmlndXJhdGlvbiA9IHtcbiAgICBkaXNwbGF5RWxlbWVudEtleTogJycsXG4gICAgZGlzcGxheUdyb3VwS2V5OiAnJyxcbiAgICBncm91cElka2V5OiAnJyxcbiAgICBlbGVtZW50SWRLZXk6ICcnLFxuICAgIHRvb2x0aXBLZXk6ICcnLFxuICAgIHNlbGVjdGVkVXNlcnNMaXN0OiBbXSxcbiAgICBzZWxlY3RlZEdyb3VwTGlzdDogW10sXG4gICAgbm9uUmVtb3ZhYmxlVXNlcnNMaXN0OiBbXSxcbiAgfTtcblxuICBmb290ZXJEZXRhaWxzOiBEYXNoYm9hcmRGb290ZXJDb25maWcgPSB7XG4gICAgc2VsZWN0ZWREYXRhOiBbXSxcbiAgICBub25SZW1vdmFibGVMaXN0OiBbXSxcbiAgICBkaXNwbGF5RWxlbWVudEtleTogJycsXG4gICAgZWxlbWVudElkOiAnJyxcbiAgICBzaW5ndWxhclRleHQ6ICdVc2VyIHNlbGVjdGVkJyxcbiAgICBwbHVyYWxUZXh0OiAnVXNlcnMgc2VsZWN0ZWQnLFxuICAgIHNob3dGcmVxdWVuY3k6IGZhbHNlLFxuICAgIGZyZXF1ZW5jeVRleHQ6ICcnLFxuICAgIGlzRGlzYWJsZWQ6IGZhbHNlLFxuICB9O1xuICB2TG9hZGVyID0gZmFsc2U7XG4gIHZMb2FkZXJHcm91cHMgPSBmYWxzZTtcbiAgQVNTRVRTID0gQVNTRVRTO1xuXG4gIEBJbnB1dCgpIHRvdGFsUGFnZXMgPSAxO1xuICBASW5wdXQoKSBsaW1pdCA9IDE7XG4gIEBJbnB1dCgpIHRvdGFsTGlzdCA9IDE7XG4gIEBJbnB1dCgpIGZlYXR1cmU6IGFueTtcbiAgQElucHV0KCkgdG90YWxncm91cHNjb3VudDogYW55O1xuICBzZWFyY2hMaXN0ID0gW107XG4gIHNlYXJjaFZhbHVlID0gJyc7XG4gIHNlYXJjaEZpbHRlciA9ICcnO1xuICBzZWxlY3RlZElkczogYW55W10gPSBbXTtcbiAgc2VsZWN0ZWRMaXN0OiBhbnlbXSA9IFtdO1xuICBncm91cGRhdGE6IGFueVtdID0gW107XG5cbiAgYW5pbWF0aW9uID0gdHJ1ZTtcbiAgdG90YWxncm91cHM6IGFueTtcbiAgdG90YWxfZ3JvdXBfcGFnZXM6IGFueTtcbiAgc2VsZWN0ZWRHcm91cElkczogYW55W10gPSBbXTtcbiAgZ3JvdXBzRW5hYmxlZDogYW55O1xuICBzZWxlY3RlZGdyb3VwTGlzdDogYW55W10gPSBbXTtcbiAgY3VycmVudFBhZ2UgPSAxO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZGFzaGJvYXJkU2VydmljZTogQ3JlYXRlRGFzaGJvYXJkU2VydmljZVxuICApIHtcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnJlc2V0KCk7XG4gICAgdGhpcy5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KCcnKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdyb3Vwc0VuYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYW5pbWF0aW9uID0gZmFsc2U7XG4gICAgfSwgMzAwKTtcbiAgICBpZiAodGhpcy5saXN0RGV0YWlscy5zZWxlY3RlZFVzZXJzTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IFsuLi5uZXcgU2V0KHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRVc2Vyc0xpc3QpXTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IFsuLi5uZXcgU2V0KHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRVc2Vyc0xpc3QpXTtcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSBzZWxlY3RlZERhdGE7XG4gICAgICB0aGlzLmZvb3RlckRldGFpbHMubm9uUmVtb3ZhYmxlTGlzdCA9XG4gICAgICAgIHRoaXMubGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0O1xuICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IHNlbGVjdGVkRGF0YS5tYXAoKGVsZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChlbGVbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZVt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmdldFVzZXJzTGlzdCh7XG4gICAgICAvLyBwOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID09PSAxID8gJycgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlLFxuICAgICAgcDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSA/PyAxLFxuICAgICAgdHlwZTogJycsXG4gICAgfSk7XG4gICAgdGhpcy5mb290ZXJEZXRhaWxzLmRpc3BsYXlFbGVtZW50S2V5ID0gdGhpcy5saXN0RGV0YWlscy5kaXNwbGF5RWxlbWVudEtleTtcbiAgICB0aGlzLmZvb3RlckRldGFpbHMuZWxlbWVudElkID0gdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXk7XG4gICAgaWYgKHRoaXMuZ3JvdXBzRW5hYmxlZCkge1xuICAgICAgdGhpcy5nZXRHcm91cHNMaXN0KHt9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRHcm91cExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZGdyb3VwTGlzdCA9IFsuLi5uZXcgU2V0KHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRHcm91cExpc3QpXTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IFsuLi5uZXcgU2V0KHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRHcm91cExpc3QpXTtcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSBzZWxlY3RlZERhdGE7XG4gICAgICB0aGlzLmZvb3RlckRldGFpbHMubm9uUmVtb3ZhYmxlTGlzdCA9XG4gICAgICAgIHRoaXMubGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0O1xuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWRzID0gc2VsZWN0ZWREYXRhLm1hcCgoZWxlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVsZVt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZVt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWxDaGFuZ2VzKCkge31cbiAgcmVtb3ZlRWxlbWVudChldmVudDogYW55KSB7fVxuICBzdWJtaXRDaGFuZ2VzKCkge31cbiAgc2VsZWN0QWxsKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuc2VhcmNoTGlzdC5mb3JFYWNoKChzZWFyY2hFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5zZWxlY3RlZElkcy5pbmNsdWRlcyhcbiAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdC5wdXNoKHNlYXJjaEVsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChzZWFyY2hFbGVtZW50W3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XSk7XG4gICAgICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRMaXN0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hMaXN0LmZvckVhY2goKHNlYXJjaEVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdC5pbmNsdWRlcyhcbiAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRMaXN0LmZpbmRJbmRleChcbiAgICAgICAgICAgIChlbGUpID0+XG4gICAgICAgICAgICAgIGVsZVt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0gPT09XG4gICAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkTGlzdCA9IFsuLi50aGlzLnNlbGVjdGVkTGlzdF07XG4gICAgICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRMaXN0O1xuXG4gICAgICAgICAgY29uc3QgaWRJbmRleCA9IHRoaXMuc2VsZWN0ZWRJZHMuZmluZEluZGV4KFxuICAgICAgICAgICAgKGVsZSkgPT4gZWxlID09PSBzZWFyY2hFbGVtZW50W3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5zcGxpY2UoaWRJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGFsbCBhZG1pbnMgYW5kIG1hbmFnZXJzIGF0IG9uY2UgYnkgbWFraW5nIGFwaSBjYWxsLlxuICAgKiBAcGFyYW0gZXZlbnQgY29uc2lzdHMgYm9vbGVhbiB2YWx1ZSB0byBzZWxlY3Qgb2YgdW5zZWxlY3QuXG4gICAqL1xuICBzZWxlY3RBbGxVc2VycyhldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldEFsbFVzZXJzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICByZXMuZm9yRWFjaCgoc2VhcmNoRWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICF0aGlzLnNlbGVjdGVkSWRzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdC5wdXNoKHNlYXJjaEVsZW1lbnQpO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goXG4gICAgICAgICAgICAgICAgc2VhcmNoRWxlbWVudFt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRMaXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IFsuLi5uZXcgU2V0KHRoaXMuc2VsZWN0ZWRMaXN0KV07XG4gICAgICBjb25zdCBpbmRleCA9IHNlbGVjdGVkRGF0YS5maW5kSW5kZXgoXG4gICAgICAgIChlbGUpID0+XG4gICAgICAgICAgZWxlW3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XSA9PT1cbiAgICAgICAgICB0aGlzLmxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdFswXVxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCAhPSAtMSkge1xuICAgICAgICBjb25zdCBvd25lciA9IE9iamVjdC5hc3NpZ24oc2VsZWN0ZWREYXRhW2luZGV4XSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IFtdO1xuICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gW107XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QucHVzaChvd25lcik7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChvd25lci5tZW1iZXJfaWQpO1xuICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gdGhpcy5zZWxlY3RlZExpc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XG4gICAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3RBbGxHcm91cHMoZXZlbnQ6IGFueSkge1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2ZldGNoX2FsbCcsIDEpO1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy52TG9hZGVyR3JvdXBzID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRBbGxHcm91cHMocGFyYW1zKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXMuZGF0YS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcmVzLmRhdGEuZm9yRWFjaCgoc2VhcmNoRWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICF0aGlzLnNlbGVjdGVkR3JvdXBJZHMuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgc2VhcmNoRWxlbWVudFt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0LnB1c2goc2VhcmNoRWxlbWVudCk7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcy5wdXNoKFxuICAgICAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gdGhpcy5zZWxlY3RlZGdyb3VwTGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZMb2FkZXJHcm91cHMgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0ID0gW107XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMgPSBbXTtcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSBbXTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RBbGxzZWFyY2hncm91cHMoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5ncm91cGRhdGEuZm9yRWFjaCgoc2VhcmNoRWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMuc2VsZWN0ZWRHcm91cElkcy5pbmNsdWRlcyhcbiAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZGdyb3VwTGlzdC5wdXNoKHNlYXJjaEVsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcy5wdXNoKFxuICAgICAgICAgICAgc2VhcmNoRWxlbWVudFt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gdGhpcy5zZWxlY3RlZGdyb3VwTGlzdDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRncm91cExpc3QgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IFtdO1xuICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGNoZWNrZWQgaXRlbSBmcm9tIHRoZSBsaXN0LlxuICAgKiBJbiBjYXNlIG9mIHVzZXIncyBsaXN0IGNhbGN1bGF0ZXMgbnVtYmVyIG9mIGFkbWlucy9tYW5hZ2VzIHRvIHNldCB2aXNpYmlsaXR5KGVpdGhlciB0byBhbGwgYWRtaW5zLyBhZG1pbnMgYW5kIG1hbmFnZXJzKVxuICAgKiBAcGFyYW0gZGF0YSBpcyB0aGUgc2VsZWN0ZWQgZWxlbWVudFxuICAgKi9cbiAgc2VsZWN0RWxlbWVudChkYXRhOiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZElkcy5pbmNsdWRlcyhkYXRhW3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XSkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMubGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LmluY2x1ZGVzKFxuICAgICAgICAgIGRhdGFbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRMaXN0LmZpbmRJbmRleChcbiAgICAgICAgICAoZWxlKSA9PlxuICAgICAgICAgICAgZWxlW3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XSA9PT1cbiAgICAgICAgICAgIGRhdGFbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSB0aGlzLnNlbGVjdGVkTGlzdDtcblxuICAgICAgICBjb25zdCBpZEluZGV4ID0gdGhpcy5zZWxlY3RlZElkcy5maW5kSW5kZXgoXG4gICAgICAgICAgKGVsZSkgPT4gZWxlID09PSBkYXRhW3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuc3BsaWNlKGlkSW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdC5wdXNoKGRhdGEpO1xuICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGRhdGFbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldKTtcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSB0aGlzLnNlbGVjdGVkTGlzdDtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RHcm91cEVsZW1lbnQoZGF0YTogYW55KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cElkcy5pbmNsdWRlcyhkYXRhW3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV0pKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRncm91cExpc3QuZmluZEluZGV4KFxuICAgICAgICAoZWxlOiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT5cbiAgICAgICAgICBlbGVbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XSA9PT0gZGF0YVt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldXG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3RlZGdyb3VwTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRncm91cExpc3Q7XG4gICAgICBjb25zdCBpZEluZGV4ID0gdGhpcy5zZWxlY3RlZEdyb3VwSWRzLmZpbmRJbmRleChcbiAgICAgICAgKGVsZSkgPT4gZWxlID09PSBkYXRhW3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV1cbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMuc3BsaWNlKGlkSW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0LnB1c2goZGF0YSk7XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMucHVzaChkYXRhW3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV0pO1xuICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRncm91cExpc3Q7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBJdCBpcyB1c2VkIHRvIHNldCBhbmQgc2VhcmNoIHZhbHVlIGluY2FzZSBvZiBiYWNrZW5kIGRyaXZlbiBsaXN0IHRvIGRpZmZlcmVudGlhdGUgc2VhcmNoIGxpc3QgYW5kIG9yaWdpbmFsIGxpc3RcbiAgICovXG4gIHNldFNlYXJjaFZhbHVlKCkge1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlICE9PSB0aGlzLnNlYXJjaFZhbHVlKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uRmlsdGVyKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBpdCBpcyB1c2VkIGNoZWNrIHNlbGVjdCBhbGwgY29uZGl0aW9uIGluY2FzZSBvZiBiYWNrZW5kIGRyaXZlbiBzZWFyY2hcbiAgICovXG4gIGNoZWNrU2VsZWN0QWxsKCkge1xuICAgIGlmICh0aGlzLnNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGF0YTogYm9vbGVhbiA9IHRoaXMuc2VhcmNoTGlzdC5ldmVyeSgoZWxlKSA9PlxuICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLmluY2x1ZGVzKGVsZVt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0pXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaXQgaXMgdXNlZCBjaGVjayBzZWxlY3QgYWxsIGdyb3VwcyBjb25kaXRpb24gaW5jYXNlIG9mIGJhY2tlbmQgZHJpdmVuIHNlYXJjaFxuICAgKi9cbiAgY2hlY2tTZWxlY3RBbGxHcm91cHMoKSB7XG4gICAgaWYgKHRoaXMuZ3JvdXBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGRhdGE6IGJvb2xlYW4gPSB0aGlzLmdyb3VwZGF0YS5ldmVyeSgoZWxlKSA9PlxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMuaW5jbHVkZXMoZWxlW3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV0pXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIGxpc3QgdXNlcidzIGxpc3QgYmFzZWQgb24gcGFnaW5hdGlvbiBieSBtYWtpbmcgYXBpIGNhbGxcbiAgICogQHBhcmFtIGV2ZW50IHNwZWNpZmllcyBhIGJvb2xlYW4gdmFsdWUgdG8gY2FsbCBhcGlcbiAgICovXG4gIHBhZ2luYXRpb25GaWx0ZXIoZXZlbnQ6IGFueSkge1xuICAgIGlmICghZXZlbnQpIHJldHVybjtcbiAgICBpZiAodGhpcy5ncm91cHNFbmFibGVkKSB7XG4gICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMuY3VycmVudFRhYiA9PSAnVVNFUicpIHtcbiAgICAgICAgdGhpcy5nZXRVc2Vyc0xpc3Qoe1xuICAgICAgICAgIC8vIHA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPT09IDEgPyAnJyA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UsXG4gICAgICAgICAgcDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSA/PyAxLFxuICAgICAgICAgIHR5cGU6ICcnLFxuICAgICAgICAgIHE6ICF0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldE9yZ2FuaXphdGlvblVzZXJzQ291bnQoe1xuICAgICAgICAgIHA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPz8gMSxcbiAgICAgICAgICB0eXBlOiAnJyxcbiAgICAgICAgICBxOiAhdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZVxuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCh7XG4gICAgICAgICAgcGFnZTpcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPT09IDFcbiAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UsXG4gICAgICAgICAgZ3JvdXBOYW1lOiAhdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZVxuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52TG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuZ2V0VXNlcnNMaXN0KHtcbiAgICAgICAgLy8gcDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSA9PT0gMSA/ICcnIDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSxcbiAgICAgICAgcDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSA/PyAxLFxuICAgICAgICB0eXBlOiAnJyxcbiAgICAgICAgcTogIXRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWVcbiAgICAgICAgICA/ICcnXG4gICAgICAgICAgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmdldE9yZ2FuaXphdGlvblVzZXJzQ291bnQoe1xuICAgICAgICBwOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID8/IDEsXG4gICAgICAgIHR5cGU6ICcnLFxuICAgICAgICBxOiAhdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZVxuICAgICAgICAgID8gJydcbiAgICAgICAgICA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdXNlcidzIGxpc3QgIGJ5IG1ha2luZyBhcGkgY2FsbFxuICAgKiBAcGFyYW0gdXJsIGNvbnRhaW5zIHVzZXJsaXN0IGZpbHRlciBkZXRhaWxzXG4gICAqL1xuICBnZXRVc2Vyc0xpc3QodXJsOiBhbnkpIHtcbiAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlXG4gICAgICAuZ2V0T3JnYW5pemF0aW9uVXNlcnModXJsID8gdXJsIDogJycpXG4gICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hMaXN0ID0gcmVzO1xuICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG4gIGdldEdyb3Vwc0xpc3QoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMudkxvYWRlckdyb3VwcyA9IHRydWU7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaWYgKGV2ZW50Lmhhc093blByb3BlcnR5KCdncm91cE5hbWUnKSkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnZ3JvdXBOYW1lJywgZXZlbnRbJ2dyb3VwTmFtZSddKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50Lmhhc093blByb3BlcnR5KCdwYWdlJykgJiYgIXRoaXMuc2VhcmNoVmFsdWUpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3BhZ2UnLCBldmVudFsncGFnZSddKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG90YWxncm91cHNjb3VudCA+IDMwICYmICF0aGlzLnNlYXJjaFZhbHVlKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdsaW1pdCcsIDMwKTtcbiAgICB9XG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldEFsbEdyb3VwcyhwYXJhbXMpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZ3JvdXBkYXRhID0gcmVzPy5kYXRhO1xuICAgICAgdGhpcy52TG9hZGVyR3JvdXBzID0gZmFsc2U7XG4gICAgICB0aGlzLnRvdGFsZ3JvdXBzID0gcmVzLnRvdGFsX2l0ZW1zO1xuICAgICAgdGhpcy50b3RhbF9ncm91cF9wYWdlcyA9IHJlcy50b3RhbF9wYWdlcztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvbiBjbGljayBvbiBuZXh0IGJ1dHRvbiBmcm9tIHRoZSBsaXN0LCBpdCBlbWl0cyB0aGUgc2VsZWN0ZWQgbGlzdCBvZiBlbGVtZW50cyB0byBwYXJlbnQgY29tcG9uZW50LlxuICAgKi9cbiAgb25TdWJtaXQoKSB7XG4gICAgLy8gY29uc3QgZGF0YSA9IFsuLi5uZXcgU2V0KHRoaXMuc2VsZWN0ZWRMaXN0KV07XG4gICAgLy8gZGF0YS5wdXNoKHRoaXMuc2VsZWN0ZWRncm91cExpc3QpXG4gICAgdGhpcy5zYXZlU2VsZWN0ZWRVc2Vycy5lbWl0KHtcbiAgICAgIHVzZXJzOiB0aGlzLnNlbGVjdGVkTGlzdCxcbiAgICAgIGdyb3VwczogdGhpcy5zZWxlY3RlZGdyb3VwTGlzdCxcbiAgICB9KTtcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnJlc2V0KCk7XG4gIH1cbiAgY3VycmVudFRhYiA9ICdVU0VSJztcbiAgc3dpdGNoVGFiKHRhYjogc3RyaW5nKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMuZ2V0T3JnYW5pemF0aW9uVXNlcnNDb3VudCgnJyk7XG4gICAgdGhpcy5jdXJyZW50VGFiID0gdGFiO1xuICAgIGlmICh0aGlzLmN1cnJlbnRUYWIgPT0gJ1VTRVInKSB7XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICB0aGlzLmdldFVzZXJzTGlzdCh7IHA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCh7fSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0T3JnYW5pemF0aW9uVXNlcnNDb3VudChVcmw6IGFueSkge1xuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KFVybCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIHRoaXMudG90YWxMaXN0ID0gcmVzLnRvdGFsX21lbWJlcnM7XG4gICAgICBpZiAocmVzLnRvdGFsX21lbWJlcnMgJiYgcmVzLmxpbWl0X3Blcl9wYWdlID4gMSkge1xuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSByZXMuY3JlYXRlX3BhZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSAxO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidXNlci1saXN0XCIgW2NsYXNzLmFuaW1hdGUtc2xpZGVJblJpZ2h0XT1cImFuaW1hdGlvblwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJ1c2VyLWxpc3QtaGVhZCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1wbC00IHZ4LXByLTRcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInZ4LWZzLTE0IHZ4LWZ3LTUwMCB2eC1sYWJlbC10eHRcIj5cbiAgICAgIFdobyBjYW4gdmlldyB0aGlzIGRhc2hib2FyZD9cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtYm9keVwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidXNlci1saXN0LXRhYiB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LW1iLTJcIlxuICAgICAgKm5nSWY9XCJncm91cHNFbmFibGVkXCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoJ1VTRVInKVwiXG4gICAgICAgIGNsYXNzPVwidGFiLWJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRUYWIgPT09ICdVU0VSJ1wiXG4gICAgICA+XG4gICAgICAgIFVTRVJTXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ2eC1wbC0xIHZ4LXByLTEgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1tbC0yIHZ4LWxoLTRcIlxuICAgICAgICAgID57eyB0b3RhbExpc3QgfX08L3NwYW5cbiAgICAgICAgPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGlkPVwic3dpdGNodGFiXCJcbiAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRhYignR1JPVVAnKVwiXG4gICAgICAgIGNsYXNzPVwidGFiLWJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRUYWIgPT09ICdHUk9VUCdcIlxuICAgICAgPlxuICAgICAgICBVU0VSIEdST1VQU1xuICAgICAgICA8c3BhblxuICAgICAgICAgIGlkPVwiZ3JvdXBzY291bnRcIlxuICAgICAgICAgIGNsYXNzPVwidngtcGwtMSB2eC1wci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbWwtMiB2eC1saC00XCJcbiAgICAgICAgICA+e3sgdG90YWxncm91cHMgfX08L3NwYW5cbiAgICAgICAgPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidXNlci1saXN0LXNlYXJjaCB2eC1tYi0yXCI+XG4gICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwYjs8L2k+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAgIGN1cnJlbnRUYWIgPT09ICdVU0VSJyA/ICdTZWFyY2ggVXNlcihzKScgOiAnU2VhcmNoIFVzZXIgR3JvdXAocyknXG4gICAgICAgIH19IHdobyBjYW4gdmlldyB0aGlzIGRhc2hib2FyZFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZXRTZWFyY2hWYWx1ZSgpXCJcbiAgICAgICAgKGZvY3Vzb3V0KT1cInNldFNlYXJjaFZhbHVlKClcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50VGFiID09PSAnVVNFUidcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktZW5kXCJcbiAgICAgICAgKm5nSWY9XCJ0b3RhbFBhZ2VzID4gMVwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInBhZ2luYXRpb24tYm94XCJcbiAgICAgICAgICAqbmdJZj1cInRvdGFsUGFnZXMgPiAxICYmIHNlYXJjaExpc3QubGVuZ3RoID4gMVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXBwLXBhZ2luYXRpb25cbiAgICAgICAgICAgIChwYWdpbmF0aW9uRmlsdGVyKT1cInBhZ2luYXRpb25GaWx0ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbGltaXRdPVwibGltaXRcIlxuICAgICAgICAgICAgW3RvdGFsUGFnZXNdPVwidG90YWxQYWdlc1wiXG4gICAgICAgICAgICBbdG90YWxMaXN0XT1cInRvdGFsTGlzdFwiXG4gICAgICAgICAgPjwvYXBwLXBhZ2luYXRpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidXNlci1saXN0LWJvZHktdG9wXCIgKm5nSWY9XCJzZWFyY2hMaXN0Lmxlbmd0aCAhPT0gMFwiPlxuICAgICAgICA8YXBwLWNzLWNoZWNrYm94XG4gICAgICAgICAgKm5nSWY9XCIhc2VhcmNoVmFsdWUgJiYgc2VhcmNoTGlzdC5sZW5ndGggPiAxXCJcbiAgICAgICAgICBbbmdWYWx1ZV09XCJzZWxlY3RlZExpc3QubGVuZ3RoID09IHRvdGFsTGlzdFwiXG4gICAgICAgICAgKG5nVmFsdWVDaGFuZ2UpPVwic2VsZWN0QWxsVXNlcnMoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3Ryb25nPnt7XG4gICAgICAgICAgICBzZWxlY3RlZExpc3QubGVuZ3RoID09IHRvdGFsTGlzdCA/IFwiRGVzZWxlY3QgQWxsXCIgOiBcIlNlbGVjdCBBbGxcIlxuICAgICAgICAgIH19PC9zdHJvbmc+XG4gICAgICAgIDwvYXBwLWNzLWNoZWNrYm94PlxuICAgICAgICA8YXBwLWNzLWNoZWNrYm94XG4gICAgICAgICAgKm5nSWY9XCJzZWFyY2hWYWx1ZSAmJiBzZWFyY2hMaXN0Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgIFtuZ1ZhbHVlXT1cImNoZWNrU2VsZWN0QWxsKClcIlxuICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cInNlbGVjdEFsbCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdHJvbmc+e3tcbiAgICAgICAgICAgIHNlbGVjdGVkTGlzdC5sZW5ndGggPT0gdG90YWxMaXN0ID8gXCJEZXNlbGVjdCBBbGxcIiA6IFwiU2VsZWN0IEFsbFwiXG4gICAgICAgICAgfX08L3N0cm9uZz5cbiAgICAgICAgPC9hcHAtY3MtY2hlY2tib3g+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LW9mLXVzZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic2VsZWN0aW9uLWxpc3QgdngtbWItNFwiXG4gICAgICAgICAgW2NsYXNzLndpdGgtZ3JvdXBdPVwiZ3JvdXBzRW5hYmxlZFwiXG4gICAgICAgICAgW2NsYXNzLndpdGgtbm9EYXRhXT1cInNlYXJjaExpc3QubGVuZ3RoID09IDBcIlxuICAgICAgICAgIFtjbGFzcy53aXRoLXBhZ2luYXRpb25dPVwidG90YWxQYWdlcyA+IDEgJiYgc2VhcmNoTGlzdC5sZW5ndGggPiAxXCJcbiAgICAgICAgPlxuICAgICAgICAgIDx1bCAqbmdJZj1cInNlYXJjaExpc3QubGVuZ3RoICE9PSAwXCI+XG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGRhdGEgb2Ygc2VhcmNoTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8YXBwLWNzLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgbGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICBkYXRhW2xpc3REZXRhaWxzLmVsZW1lbnRJZEtleV1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cIlxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSWRzLmluY2x1ZGVzKGRhdGFbbGlzdERldGFpbHMuZWxlbWVudElkS2V5XSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cInNlbGVjdEVsZW1lbnQoZGF0YSlcIlxuICAgICAgICAgICAgICAgIFthclRvb2x0aXBdPVwiZGF0YVtsaXN0RGV0YWlscy50b29sdGlwS2V5XVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPnt7IGRhdGFbbGlzdERldGFpbHMuZGlzcGxheUVsZW1lbnRLZXldIH19PC9hcHAtY3MtY2hlY2tib3hcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuXG4gICAgICAgICAgPGFwcC1uby1kYXRhXG4gICAgICAgICAgICAqbmdJZj1cIiF2TG9hZGVyICYmIHNlYXJjaExpc3QubGVuZ3RoID09IDBcIlxuICAgICAgICAgICAgW25vRGF0YUltYWdlXT1cIkFTU0VUUy5zZWFyY2hfZGF0YVwiXG4gICAgICAgICAgICBbbm9EYXRhVGV4dF09XCInTm8gZGF0YSB0byBkaXNwbGF5J1wiXG4gICAgICAgICAgPjwvYXBwLW5vLWRhdGE+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cInZMb2FkZXJcIj48L2FwcC1sb2FkZXItaW5saW5lPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFRhYiA9PT0gJ0dST1VQJyAmJiBncm91cHNFbmFibGVkXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBkYXRhIGFzIGdyb3Vwc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWVuZFwiICpuZ0lmPVwidHJ1ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWJveFwiICpuZ0lmPVwidG90YWxfZ3JvdXBfcGFnZXMgPiAxXCI+XG4gICAgICAgICAgICA8YXBwLXBhZ2luYXRpb25cbiAgICAgICAgICAgICAgKHBhZ2luYXRpb25GaWx0ZXIpPVwicGFnaW5hdGlvbkZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2xpbWl0XT1cImxpbWl0XCJcbiAgICAgICAgICAgICAgW3RvdGFsUGFnZXNdPVwidG90YWxfZ3JvdXBfcGFnZXNcIlxuICAgICAgICAgICAgICBbdG90YWxMaXN0XT1cInRvdGFsZ3JvdXBzXCJcbiAgICAgICAgICAgID48L2FwcC1wYWdpbmF0aW9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInVzZXItbGlzdC1taWQgdngtbWItNFwiXG4gICAgICAgICAgICBbY2xhc3Mud2l0aC1wYWdpbmF0aW9uXT1cInRvdGFsX2dyb3VwX3BhZ2VzID4gMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3Vwcz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1saXN0LXNlbGVjdCB2eC1tYi00XCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jcy1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXNlYXJjaFZhbHVlICYmIGdyb3Vwcy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInNlbGVjdGVkZ3JvdXBMaXN0Lmxlbmd0aCA9PSB0b3RhbGdyb3Vwc1wiXG4gICAgICAgICAgICAgICAgICAobmdWYWx1ZUNoYW5nZSk9XCJzZWxlY3RBbGxHcm91cHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVzZXItbmFtZSB2eC1mcy0xMiB2eC1mdy02MDAgdngtbGFiZWwtdHh0IHZ4LXR0LW5vbmVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkZ3JvdXBMaXN0Lmxlbmd0aCA9PSB0b3RhbGdyb3Vwc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkRlc2VsZWN0IEFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiU2VsZWN0IEFsbFwiXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jcy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICA8YXBwLWNzLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWFyY2hWYWx1ZSAmJiBncm91cHMubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJjaGVja1NlbGVjdEFsbEdyb3VwcygpXCJcbiAgICAgICAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cInNlbGVjdEFsbHNlYXJjaGdyb3VwcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci1uYW1lIHZ4LWZzLTEyIHZ4LWZ3LTYwMCB2eC1sYWJlbC10eHQgdngtdHQtbm9uZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRncm91cExpc3QubGVuZ3RoID09IHRvdGFsZ3JvdXBzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiRGVzZWxlY3QgQWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJTZWxlY3QgQWxsXCJcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvYXBwLWNzLWNoZWNrYm94PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidngtbS0wIHZ4LXAtMCB2eC1kLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LW1iLTRcIlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBncm91cHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLWNzLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgKG5nVmFsdWVDaGFuZ2UpPVwic2VsZWN0R3JvdXBFbGVtZW50KGRhdGEpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRncm91cExpc3QubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRHcm91cElkcy5pbmNsdWRlcyhkYXRhW2xpc3REZXRhaWxzLmdyb3VwSWRrZXldKVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1uYW1lIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyVG9vbHRpcF09XCJkYXRhW2xpc3REZXRhaWxzLmRpc3BsYXlHcm91cEtleV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhW2xpc3REZXRhaWxzLmRpc3BsYXlHcm91cEtleV0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ1c2Vyc29mZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50ZXIgdngtZnMtOSB2eC1mdy02MDAgdngtcGwtMSB2eC1wci0xIHZ4LWxoLTMgdngtdHQtdXBwZXJjYXNlIHZ4LW1sLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgZGF0YVtcImFzc29jaWF0ZWRVc2Vyc1wiXS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW1wiYXNzb2NpYXRlZFVzZXJzXCJdLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJVU0VSU1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiVVNFUlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLWNzLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3Vwcz8ubGVuZ3RoID09IDAgJiYgIXZMb2FkZXJHcm91cHNcIj5cbiAgICAgICAgICAgICAgPGFwcC1uby1kYXRhXG4gICAgICAgICAgICAgICAgW25vRGF0YUltYWdlXT1cIkFTU0VUUy5zZWFyY2hfZGF0YVwiXG4gICAgICAgICAgICAgICAgW25vRGF0YVRleHRdPVwiXG4gICAgICAgICAgICAgICAgICBzZWFyY2hLZXk/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyAnTm8gbWF0Y2ggZm91bmQuJ1xuICAgICAgICAgICAgICAgICAgICA6ICdObyBkYXRhIHRvIGRpc3BsYXkuJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L2FwcC1uby1kYXRhPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8YXBwLWxvYWRlci1pbmxpbmUgKm5nSWY9XCJ2TG9hZGVyR3JvdXBzXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWZsb2F0aW5nLWJhclwiICpuZ0lmPVwiZ3JvdXBzRW5hYmxlZFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInVzZXItZmxvYXRpbmctYmFyLWNvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0IHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImNvdW50ZXIgdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCB2eC1tLTAgdngtcGwtMSB2eC1wci0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRMaXN0Py5sZW5ndGhcIlxuICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgKGNsaWNrKT1cInVzZXJDb3VudC5wb3BvdmVyKClcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgc2VsZWN0ZWRMaXN0Py5sZW5ndGggfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZSB2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTJcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRMaXN0Py5sZW5ndGggPT09IDFcIlxuICAgICAgICAgICAgICA+VXNlclxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZGdyb3VwTGlzdD8ubGVuZ3RoID4gMCA/IFwiICYgXCIgOiBcInNlbGVjdGVkXCIgfX08L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRMaXN0Py5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgPlVzZXJzXG4gICAgICAgICAgICAgIHt7IHNlbGVjdGVkZ3JvdXBMaXN0Py5sZW5ndGggPiAwID8gXCIgJiBcIiA6IFwiYXJlIHNlbGVjdGVkXCIgfX08L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImNvdW50ZXIgZ3JvdXAgdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCB2eC1tbC0yIHZ4LXBsLTEgdngtcHItMVwiXG4gICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkZ3JvdXBMaXN0Py5sZW5ndGhcIlxuICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgKGNsaWNrKT1cImdyb3VwQ291bnQucG9wb3ZlcigpXCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHNlbGVjdGVkZ3JvdXBMaXN0Py5sZW5ndGggfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZSB2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTJcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRncm91cExpc3Q/Lmxlbmd0aCA9PT0gMVwiXG4gICAgICAgICAgICAgID5Vc2VyIEdyb3VwIHNlbGVjdGVkPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkZ3JvdXBMaXN0Py5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgPlVzZXIgR3JvdXBzIHNlbGVjdGVkPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI3VzZXJDb3VudCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2Ygc2VsZWN0ZWRMaXN0XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXJUb29sdGlwXT1cImVsZW1lbnQubWVtYmVyX25hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RWxlbWVudChlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAhbGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ/Lm1lbWJlcl9pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnQubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI2dyb3VwQ291bnQgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHNlbGVjdGVkZ3JvdXBMaXN0XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXJUb29sdGlwXT1cImVsZW1lbnQ/Lmdyb3VwX25hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0R3JvdXBFbGVtZW50KGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50Py5ncm91cF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWxcIiAoY2xpY2spPVwiY2xvc2VVc2VyTGlzdC5lbWl0KClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJmYWxzZVwiIChjbGljayk9XCJvblN1Ym1pdCgpXCI+XG4gICAgICAgICAgICBOZXh0IDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFlOzwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtZm9vdGVyXCIgKm5nSWY9XCIhZ3JvdXBzRW5hYmxlZFwiPlxuICAgICAgPGFwcC1kYXNoYm9hcmQtZm9vdGVyXG4gICAgICAgIFtmb290ZXJEZXRhaWxzXT1cImZvb3RlckRldGFpbHNcIlxuICAgICAgICAoY2FuY2VsRXZlbnQpPVwiY2xvc2VVc2VyTGlzdC5lbWl0KCk7IHBhZ2luYXRpb25TZXJ2aWNlLnJlc2V0KClcIlxuICAgICAgICAoZGVsZXRlRXZlbnQpPVwic2VsZWN0RWxlbWVudCgkZXZlbnQpXCJcbiAgICAgICAgKHN1Ym1pdEV2ZW50KT1cIm9uU3VibWl0KClcIlxuICAgICAgICBbdXNlckJ1dHRvbkNvbG9yXT1cIidncmVlbkJnJ1wiXG4gICAgICA+PC9hcHAtZGFzaGJvYXJkLWZvb3Rlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
440
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWF0ZS1kYXNoYm9hcmQvc3JjL2xpYi9jcmVhdGUtZGFzaGJvYXJkLWNvbnRhaW5lci91c2VyLWxpc3QvdXNlci1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWF0ZS1kYXNoYm9hcmQvc3JjL2xpYi9jcmVhdGUtZGFzaGJvYXJkLWNvbnRhaW5lci91c2VyLWxpc3QvdXNlci1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFPdEQsTUFBTSxPQUFPLGlCQUFpQjtJQWtEbkI7SUFDQztJQWxEQSxhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNuQyxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3hDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDbkIsV0FBVyxHQUEwQjtRQUM1QyxpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLGVBQWUsRUFBRSxFQUFFO1FBQ25CLFVBQVUsRUFBRSxFQUFFO1FBQ2QsWUFBWSxFQUFFLEVBQUU7UUFDaEIsVUFBVSxFQUFFLEVBQUU7UUFDZCxpQkFBaUIsRUFBRSxFQUFFO1FBQ3JCLGlCQUFpQixFQUFFLEVBQUU7UUFDckIscUJBQXFCLEVBQUUsRUFBRTtLQUMxQixDQUFDO0lBRUYsYUFBYSxHQUEwQjtRQUNyQyxZQUFZLEVBQUUsRUFBRTtRQUNoQixnQkFBZ0IsRUFBRSxFQUFFO1FBQ3BCLGlC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QXlCLENBQUMsR0FBUTtRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDckUsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO1lBQ25DLElBQUksR0FBRyxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUMsY0FBYyxHQUFHLENBQUMsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO2FBQ25DO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXpjVSxpQkFBaUI7NEZBQWpCLGlCQUFpQixtV0NiOUIsZ2tiQXNXQTs7NEZEelZhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlOzZJQUtmLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNFLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkEwQkcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhc2hib2FyZEZvb3RlckNvbmZpZyB9IGZyb20gJy4uLy4uL3VpLWtpdC9kYXNoYm9hcmQtZm9vdGVyL2Rhc2hib2FyZC1mb290ZXItY29uZmlnJztcbmltcG9ydCB7IENyZWF0ZURhc2hib2FyZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jcmVhdGUtZGFzaGJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wYWdpbmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlckxpc3RDb25maWd1cmF0aW9uIH0gZnJvbSAnLi91c2VyLWxpc3QuY29uZmlnJztcbmltcG9ydCB7IEFTU0VUUyB9IGZyb20gJy4uL2NvbnN0YW50cy9hc3NldHMuY29uc3RhbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdXNlci1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VzZXItbGlzdC5jb21wb25lbnQubGVzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBVc2VyTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBPdXRwdXQoKSBjbG9zZVVzZXJMaXN0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2F2ZVNlbGVjdGVkVXNlcnMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGUgPSAnJztcbiAgQElucHV0KCkgbGlzdERldGFpbHM6IFVzZXJMaXN0Q29uZmlndXJhdGlvbiA9IHtcbiAgICBkaXNwbGF5RWxlbWVudEtleTogJycsXG4gICAgZGlzcGxheUdyb3VwS2V5OiAnJyxcbiAgICBncm91cElka2V5OiAnJyxcbiAgICBlbGVtZW50SWRLZXk6ICcnLFxuICAgIHRvb2x0aXBLZXk6ICcnLFxuICAgIHNlbGVjdGVkVXNlcnNMaXN0OiBbXSxcbiAgICBzZWxlY3RlZEdyb3VwTGlzdDogW10sXG4gICAgbm9uUmVtb3ZhYmxlVXNlcnNMaXN0OiBbXSxcbiAgfTtcblxuICBmb290ZXJEZXRhaWxzOiBEYXNoYm9hcmRGb290ZXJDb25maWcgPSB7XG4gICAgc2VsZWN0ZWREYXRhOiBbXSxcbiAgICBub25SZW1vdmFibGVMaXN0OiBbXSxcbiAgICBkaXNwbGF5RWxlbWVudEtleTogJycsXG4gICAgZWxlbWVudElkOiAnJyxcbiAgICBzaW5ndWxhclRleHQ6ICdVc2VyIHNlbGVjdGVkJyxcbiAgICBwbHVyYWxUZXh0OiAnVXNlcnMgc2VsZWN0ZWQnLFxuICAgIHNob3dGcmVxdWVuY3k6IGZhbHNlLFxuICAgIGZyZXF1ZW5jeVRleHQ6ICcnLFxuICAgIGlzRGlzYWJsZWQ6IGZhbHNlLFxuICB9O1xuICB2TG9hZGVyID0gZmFsc2U7XG4gIHZMb2FkZXJHcm91cHMgPSBmYWxzZTtcbiAgQVNTRVRTID0gQVNTRVRTO1xuXG4gIEBJbnB1dCgpIHRvdGFsUGFnZXMgPSAxO1xuICBASW5wdXQoKSBsaW1pdCA9IDE7XG4gIEBJbnB1dCgpIHRvdGFsTGlzdCA9IDE7XG4gIEBJbnB1dCgpIGZlYXR1cmU6IGFueTtcbiAgQElucHV0KCkgdG90YWxncm91cHNjb3VudDogYW55O1xuICBzZWFyY2hMaXN0ID0gW107XG4gIHNlYXJjaFZhbHVlID0gJyc7XG4gIHNlYXJjaEZpbHRlciA9ICcnO1xuICBzZWxlY3RlZElkczogYW55W10gPSBbXTtcbiAgc2VsZWN0ZWRMaXN0OiBhbnlbXSA9IFtdO1xuICBncm91cGRhdGE6IGFueVtdID0gW107XG5cbiAgYW5pbWF0aW9uID0gdHJ1ZTtcbiAgdG90YWxncm91cHM6IGFueTtcbiAgdG90YWxfZ3JvdXBfcGFnZXM6IGFueTtcbiAgc2VsZWN0ZWRHcm91cElkczogYW55W10gPSBbXTtcbiAgZ3JvdXBzRW5hYmxlZDogYW55O1xuICBzZWxlY3RlZGdyb3VwTGlzdDogYW55W10gPSBbXTtcbiAgY3VycmVudFBhZ2UgPSAxO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZGFzaGJvYXJkU2VydmljZTogQ3JlYXRlRGFzaGJvYXJkU2VydmljZVxuICApIHtcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnJlc2V0KCk7XG4gICAgdGhpcy5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KCcnKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdyb3Vwc0VuYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuYW5pbWF0aW9uID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYW5pbWF0aW9uID0gZmFsc2U7XG4gICAgfSwgMzAwKTtcbiAgICBpZiAodGhpcy5saXN0RGV0YWlscy5zZWxlY3RlZFVzZXJzTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IFsuLi5uZXcgU2V0KHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRVc2Vyc0xpc3QpXTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IFsuLi5uZXcgU2V0KHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRVc2Vyc0xpc3QpXTtcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSBzZWxlY3RlZERhdGE7XG4gICAgICB0aGlzLmZvb3RlckRldGFpbHMubm9uUmVtb3ZhYmxlTGlzdCA9XG4gICAgICAgIHRoaXMubGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0O1xuICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IHNlbGVjdGVkRGF0YS5tYXAoKGVsZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChlbGVbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZVt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmdldFVzZXJzTGlzdCh7XG4gICAgICAvLyBwOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID09PSAxID8gJycgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlLFxuICAgICAgcDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSA/PyAxLFxuICAgICAgdHlwZTogJycsXG4gICAgfSk7XG4gICAgdGhpcy5mb290ZXJEZXRhaWxzLmRpc3BsYXlFbGVtZW50S2V5ID0gdGhpcy5saXN0RGV0YWlscy5kaXNwbGF5RWxlbWVudEtleTtcbiAgICB0aGlzLmZvb3RlckRldGFpbHMuZWxlbWVudElkID0gdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXk7XG4gICAgaWYgKHRoaXMuZ3JvdXBzRW5hYmxlZCkge1xuICAgICAgdGhpcy5nZXRHcm91cHNMaXN0KHt9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRHcm91cExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZGdyb3VwTGlzdCA9IFsuLi5uZXcgU2V0KHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRHcm91cExpc3QpXTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IFsuLi5uZXcgU2V0KHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRHcm91cExpc3QpXTtcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSBzZWxlY3RlZERhdGE7XG4gICAgICB0aGlzLmZvb3RlckRldGFpbHMubm9uUmVtb3ZhYmxlTGlzdCA9XG4gICAgICAgIHRoaXMubGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0O1xuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWRzID0gc2VsZWN0ZWREYXRhLm1hcCgoZWxlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVsZVt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZVt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWxDaGFuZ2VzKCkge31cbiAgcmVtb3ZlRWxlbWVudChldmVudDogYW55KSB7fVxuICBzdWJtaXRDaGFuZ2VzKCkge31cbiAgc2VsZWN0QWxsKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuc2VhcmNoTGlzdC5mb3JFYWNoKChzZWFyY2hFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGhpcy5zZWxlY3RlZElkcy5pbmNsdWRlcyhcbiAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdC5wdXNoKHNlYXJjaEVsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChzZWFyY2hFbGVtZW50W3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XSk7XG4gICAgICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRMaXN0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hMaXN0LmZvckVhY2goKHNlYXJjaEVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdC5pbmNsdWRlcyhcbiAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRMaXN0LmZpbmRJbmRleChcbiAgICAgICAgICAgIChlbGUpID0+XG4gICAgICAgICAgICAgIGVsZVt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0gPT09XG4gICAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkTGlzdCA9IFsuLi50aGlzLnNlbGVjdGVkTGlzdF07XG4gICAgICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRMaXN0O1xuXG4gICAgICAgICAgY29uc3QgaWRJbmRleCA9IHRoaXMuc2VsZWN0ZWRJZHMuZmluZEluZGV4KFxuICAgICAgICAgICAgKGVsZSkgPT4gZWxlID09PSBzZWFyY2hFbGVtZW50W3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5zcGxpY2UoaWRJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGFsbCBhZG1pbnMgYW5kIG1hbmFnZXJzIGF0IG9uY2UgYnkgbWFraW5nIGFwaSBjYWxsLlxuICAgKiBAcGFyYW0gZXZlbnQgY29uc2lzdHMgYm9vbGVhbiB2YWx1ZSB0byBzZWxlY3Qgb2YgdW5zZWxlY3QuXG4gICAqL1xuICBzZWxlY3RBbGxVc2VycyhldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldEFsbFVzZXJzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICByZXMuZm9yRWFjaCgoc2VhcmNoRWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICF0aGlzLnNlbGVjdGVkSWRzLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdC5wdXNoKHNlYXJjaEVsZW1lbnQpO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnB1c2goXG4gICAgICAgICAgICAgICAgc2VhcmNoRWxlbWVudFt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRMaXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IFsuLi5uZXcgU2V0KHRoaXMuc2VsZWN0ZWRMaXN0KV07XG4gICAgICBjb25zdCBpbmRleCA9IHNlbGVjdGVkRGF0YS5maW5kSW5kZXgoXG4gICAgICAgIChlbGUpID0+XG4gICAgICAgICAgZWxlW3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XSA9PT1cbiAgICAgICAgICB0aGlzLmxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdFswXVxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCAhPSAtMSkge1xuICAgICAgICBjb25zdCBvd25lciA9IE9iamVjdC5hc3NpZ24oc2VsZWN0ZWREYXRhW2luZGV4XSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkcyA9IFtdO1xuICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gW107XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QucHVzaChvd25lcik7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucHVzaChvd25lci5tZW1iZXJfaWQpO1xuICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gdGhpcy5zZWxlY3RlZExpc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSWRzID0gW107XG4gICAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3RBbGxHcm91cHMoZXZlbnQ6IGFueSkge1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2ZldGNoX2FsbCcsIDEpO1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy52TG9hZGVyR3JvdXBzID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRBbGxHcm91cHMocGFyYW1zKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXMuZGF0YS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcmVzLmRhdGEuZm9yRWFjaCgoc2VhcmNoRWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICF0aGlzLnNlbGVjdGVkR3JvdXBJZHMuaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgc2VhcmNoRWxlbWVudFt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0LnB1c2goc2VhcmNoRWxlbWVudCk7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcy5wdXNoKFxuICAgICAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gdGhpcy5zZWxlY3RlZGdyb3VwTGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZMb2FkZXJHcm91cHMgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0ID0gW107XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMgPSBbXTtcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSBbXTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RBbGxzZWFyY2hncm91cHMoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5ncm91cGRhdGEuZm9yRWFjaCgoc2VhcmNoRWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMuc2VsZWN0ZWRHcm91cElkcy5pbmNsdWRlcyhcbiAgICAgICAgICAgIHNlYXJjaEVsZW1lbnRbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZGdyb3VwTGlzdC5wdXNoKHNlYXJjaEVsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcy5wdXNoKFxuICAgICAgICAgICAgc2VhcmNoRWxlbWVudFt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmZvb3RlckRldGFpbHMuc2VsZWN0ZWREYXRhID0gdGhpcy5zZWxlY3RlZGdyb3VwTGlzdDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRncm91cExpc3QgPSBbXTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkcyA9IFtdO1xuICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGNoZWNrZWQgaXRlbSBmcm9tIHRoZSBsaXN0LlxuICAgKiBJbiBjYXNlIG9mIHVzZXIncyBsaXN0IGNhbGN1bGF0ZXMgbnVtYmVyIG9mIGFkbWlucy9tYW5hZ2VzIHRvIHNldCB2aXNpYmlsaXR5KGVpdGhlciB0byBhbGwgYWRtaW5zLyBhZG1pbnMgYW5kIG1hbmFnZXJzKVxuICAgKiBAcGFyYW0gZGF0YSBpcyB0aGUgc2VsZWN0ZWQgZWxlbWVudFxuICAgKi9cbiAgc2VsZWN0RWxlbWVudChkYXRhOiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZElkcy5pbmNsdWRlcyhkYXRhW3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XSkpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMubGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LmluY2x1ZGVzKFxuICAgICAgICAgIGRhdGFbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRMaXN0LmZpbmRJbmRleChcbiAgICAgICAgICAoZWxlKSA9PlxuICAgICAgICAgICAgZWxlW3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XSA9PT1cbiAgICAgICAgICAgIGRhdGFbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSB0aGlzLnNlbGVjdGVkTGlzdDtcblxuICAgICAgICBjb25zdCBpZEluZGV4ID0gdGhpcy5zZWxlY3RlZElkcy5maW5kSW5kZXgoXG4gICAgICAgICAgKGVsZSkgPT4gZWxlID09PSBkYXRhW3RoaXMubGlzdERldGFpbHMuZWxlbWVudElkS2V5XVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuc3BsaWNlKGlkSW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdC5wdXNoKGRhdGEpO1xuICAgICAgdGhpcy5zZWxlY3RlZElkcy5wdXNoKGRhdGFbdGhpcy5saXN0RGV0YWlscy5lbGVtZW50SWRLZXldKTtcbiAgICAgIHRoaXMuZm9vdGVyRGV0YWlscy5zZWxlY3RlZERhdGEgPSB0aGlzLnNlbGVjdGVkTGlzdDtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RHcm91cEVsZW1lbnQoZGF0YTogYW55KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cElkcy5pbmNsdWRlcyhkYXRhW3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV0pKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRncm91cExpc3QuZmluZEluZGV4KFxuICAgICAgICAoZWxlOiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT5cbiAgICAgICAgICBlbGVbdGhpcy5saXN0RGV0YWlscy5ncm91cElka2V5XSA9PT0gZGF0YVt0aGlzLmxpc3REZXRhaWxzLmdyb3VwSWRrZXldXG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3RlZGdyb3VwTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRncm91cExpc3Q7XG4gICAgICBjb25zdCBpZEluZGV4ID0gdGhpcy5zZWxlY3RlZEdyb3VwSWRzLmZpbmRJbmRleChcbiAgICAgICAgKGVsZSkgPT4gZWxlID09PSBkYXRhW3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV1cbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMuc3BsaWNlKGlkSW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkZ3JvdXBMaXN0LnB1c2goZGF0YSk7XG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMucHVzaChkYXRhW3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV0pO1xuICAgICAgdGhpcy5mb290ZXJEZXRhaWxzLnNlbGVjdGVkRGF0YSA9IHRoaXMuc2VsZWN0ZWRncm91cExpc3Q7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBJdCBpcyB1c2VkIHRvIHNldCBhbmQgc2VhcmNoIHZhbHVlIGluY2FzZSBvZiBiYWNrZW5kIGRyaXZlbiBsaXN0IHRvIGRpZmZlcmVudGlhdGUgc2VhcmNoIGxpc3QgYW5kIG9yaWdpbmFsIGxpc3RcbiAgICovXG4gIHNldFNlYXJjaFZhbHVlKCkge1xuICAgIGlmICh0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlICE9PSB0aGlzLnNlYXJjaFZhbHVlKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uRmlsdGVyKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBpdCBpcyB1c2VkIGNoZWNrIHNlbGVjdCBhbGwgY29uZGl0aW9uIGluY2FzZSBvZiBiYWNrZW5kIGRyaXZlbiBzZWFyY2hcbiAgICovXG4gIGNoZWNrU2VsZWN0QWxsKCkge1xuICAgIGlmICh0aGlzLnNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGF0YTogYm9vbGVhbiA9IHRoaXMuc2VhcmNoTGlzdC5ldmVyeSgoZWxlKSA9PlxuICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLmluY2x1ZGVzKGVsZVt0aGlzLmxpc3REZXRhaWxzLmVsZW1lbnRJZEtleV0pXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaXQgaXMgdXNlZCBjaGVjayBzZWxlY3QgYWxsIGdyb3VwcyBjb25kaXRpb24gaW5jYXNlIG9mIGJhY2tlbmQgZHJpdmVuIHNlYXJjaFxuICAgKi9cbiAgY2hlY2tTZWxlY3RBbGxHcm91cHMoKSB7XG4gICAgaWYgKHRoaXMuZ3JvdXBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGRhdGE6IGJvb2xlYW4gPSB0aGlzLmdyb3VwZGF0YS5ldmVyeSgoZWxlKSA9PlxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZHMuaW5jbHVkZXMoZWxlW3RoaXMubGlzdERldGFpbHMuZ3JvdXBJZGtleV0pXG4gICAgICApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIGxpc3QgdXNlcidzIGxpc3QgYmFzZWQgb24gcGFnaW5hdGlvbiBieSBtYWtpbmcgYXBpIGNhbGxcbiAgICogQHBhcmFtIGV2ZW50IHNwZWNpZmllcyBhIGJvb2xlYW4gdmFsdWUgdG8gY2FsbCBhcGlcbiAgICovXG4gIHBhZ2luYXRpb25GaWx0ZXIoZXZlbnQ6IGFueSkge1xuICAgIGlmICghZXZlbnQpIHJldHVybjtcbiAgICBpZiAodGhpcy5ncm91cHNFbmFibGVkKSB7XG4gICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMuY3VycmVudFRhYiA9PSAnVVNFUicpIHtcbiAgICAgICAgdGhpcy5nZXRVc2Vyc0xpc3Qoe1xuICAgICAgICAgIC8vIHA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPT09IDEgPyAnJyA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UsXG4gICAgICAgICAgcDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSA/PyAxLFxuICAgICAgICAgIHR5cGU6ICcnLFxuICAgICAgICAgIHE6ICF0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdldE9yZ2FuaXphdGlvblVzZXJzQ291bnQoe1xuICAgICAgICAgIHA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPz8gMSxcbiAgICAgICAgICB0eXBlOiAnJyxcbiAgICAgICAgICBxOiAhdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZVxuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCh7XG4gICAgICAgICAgcGFnZTpcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgPT09IDFcbiAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UsXG4gICAgICAgICAgZ3JvdXBOYW1lOiAhdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZVxuICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52TG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuZ2V0VXNlcnNMaXN0KHtcbiAgICAgICAgLy8gcDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSA9PT0gMSA/ICcnIDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSxcbiAgICAgICAgcDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jdXJyZW50UGFnZSA/PyAxLFxuICAgICAgICB0eXBlOiAnJyxcbiAgICAgICAgcTogIXRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWVcbiAgICAgICAgICA/ICcnXG4gICAgICAgICAgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmdldE9yZ2FuaXphdGlvblVzZXJzQ291bnQoe1xuICAgICAgICBwOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID8/IDEsXG4gICAgICAgIHR5cGU6ICcnLFxuICAgICAgICBxOiAhdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZVxuICAgICAgICAgID8gJydcbiAgICAgICAgICA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2Uuc2VhcmNoVmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdXNlcidzIGxpc3QgIGJ5IG1ha2luZyBhcGkgY2FsbFxuICAgKiBAcGFyYW0gdXJsIGNvbnRhaW5zIHVzZXJsaXN0IGZpbHRlciBkZXRhaWxzXG4gICAqL1xuICBnZXRVc2Vyc0xpc3QodXJsOiBhbnkpIHtcbiAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xuXG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlXG4gICAgICAuZ2V0T3JnYW5pemF0aW9uVXNlcnModXJsID8gdXJsIDogJycpXG4gICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hMaXN0ID0gcmVzO1xuICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG4gIGdldEdyb3Vwc0xpc3QoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMudkxvYWRlckdyb3VwcyA9IHRydWU7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaWYgKGV2ZW50Lmhhc093blByb3BlcnR5KCdncm91cE5hbWUnKSkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnZ3JvdXBOYW1lJywgZXZlbnRbJ2dyb3VwTmFtZSddKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50Lmhhc093blByb3BlcnR5KCdwYWdlJykgJiYgIXRoaXMuc2VhcmNoVmFsdWUpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3BhZ2UnLCBldmVudFsncGFnZSddKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudG90YWxncm91cHNjb3VudCA+IDMwICYmICF0aGlzLnNlYXJjaFZhbHVlKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdsaW1pdCcsIDMwKTtcbiAgICB9XG4gICAgdGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldEFsbEdyb3VwcyhwYXJhbXMpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZ3JvdXBkYXRhID0gcmVzPy5kYXRhO1xuICAgICAgdGhpcy52TG9hZGVyR3JvdXBzID0gZmFsc2U7XG4gICAgICB0aGlzLnRvdGFsZ3JvdXBzID0gcmVzLnRvdGFsX2l0ZW1zO1xuICAgICAgdGhpcy50b3RhbF9ncm91cF9wYWdlcyA9IHJlcy50b3RhbF9wYWdlcztcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvbiBjbGljayBvbiBuZXh0IGJ1dHRvbiBmcm9tIHRoZSBsaXN0LCBpdCBlbWl0cyB0aGUgc2VsZWN0ZWQgbGlzdCBvZiBlbGVtZW50cyB0byBwYXJlbnQgY29tcG9uZW50LlxuICAgKi9cbiAgb25TdWJtaXQoKSB7XG4gICAgLy8gY29uc3QgZGF0YSA9IFsuLi5uZXcgU2V0KHRoaXMuc2VsZWN0ZWRMaXN0KV07XG4gICAgLy8gZGF0YS5wdXNoKHRoaXMuc2VsZWN0ZWRncm91cExpc3QpXG4gICAgdGhpcy5zYXZlU2VsZWN0ZWRVc2Vycy5lbWl0KHtcbiAgICAgIHVzZXJzOiB0aGlzLnNlbGVjdGVkTGlzdCxcbiAgICAgIGdyb3VwczogdGhpcy5zZWxlY3RlZGdyb3VwTGlzdCxcbiAgICB9KTtcbiAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnJlc2V0KCk7XG4gIH1cbiAgY3VycmVudFRhYiA9ICdVU0VSJztcbiAgc3dpdGNoVGFiKHRhYjogc3RyaW5nKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMuZ2V0T3JnYW5pemF0aW9uVXNlcnNDb3VudCgnJyk7XG4gICAgdGhpcy5jdXJyZW50VGFiID0gdGFiO1xuICAgIGlmICh0aGlzLmN1cnJlbnRUYWIgPT0gJ1VTRVInKSB7XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICB0aGlzLmdldFVzZXJzTGlzdCh7IHA6IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY3VycmVudFBhZ2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCh7fSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0T3JnYW5pemF0aW9uVXNlcnNDb3VudChVcmw6IGFueSkge1xuICAgIHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KFVybCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIHRoaXMudG90YWxMaXN0ID0gcmVzLnRvdGFsX21lbWJlcnM7XG4gICAgICBpZiAocmVzLnRvdGFsX21lbWJlcnMgJiYgcmVzLmxpbWl0X3Blcl9wYWdlID4gMSkge1xuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSByZXMuY3JlYXRlX3BhZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSAxO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidXNlci1saXN0XCIgW2NsYXNzLmFuaW1hdGUtc2xpZGVJblJpZ2h0XT1cImFuaW1hdGlvblwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJ1c2VyLWxpc3QtaGVhZCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1wbC00IHZ4LXByLTRcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInZ4LWZzLTE0IHZ4LWZ3LTUwMCB2eC1sYWJlbC10eHRcIj5cbiAgICAgIFdobyBjYW4gdmlldyB0aGlzIGRhc2hib2FyZD9cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtYm9keVwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidXNlci1saXN0LXRhYiB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LW1iLTJcIlxuICAgICAgKm5nSWY9XCJncm91cHNFbmFibGVkXCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJzd2l0Y2hUYWIoJ1VTRVInKVwiXG4gICAgICAgIGNsYXNzPVwidGFiLWJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRUYWIgPT09ICdVU0VSJ1wiXG4gICAgICA+XG4gICAgICAgIFVTRVJTXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJ2eC1wbC0xIHZ4LXByLTEgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1tbC0yIHZ4LWxoLTRcIlxuICAgICAgICAgID57eyB0b3RhbExpc3QgfX08L3NwYW5cbiAgICAgICAgPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGlkPVwic3dpdGNodGFiXCJcbiAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRhYignR1JPVVAnKVwiXG4gICAgICAgIGNsYXNzPVwidGFiLWJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtcGFyYWdyYXBoLXR4dCB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImN1cnJlbnRUYWIgPT09ICdHUk9VUCdcIlxuICAgICAgPlxuICAgICAgICBVU0VSIEdST1VQU1xuICAgICAgICA8c3BhblxuICAgICAgICAgIGlkPVwiZ3JvdXBzY291bnRcIlxuICAgICAgICAgIGNsYXNzPVwidngtcGwtMSB2eC1wci0xIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbWwtMiB2eC1saC00XCJcbiAgICAgICAgICA+e3sgdG90YWxncm91cHMgfX08L3NwYW5cbiAgICAgICAgPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidXNlci1saXN0LXNlYXJjaCB2eC1tYi0yXCI+XG4gICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwYjs8L2k+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAgIGN1cnJlbnRUYWIgPT09ICdVU0VSJyA/ICdTZWFyY2ggVXNlcihzKScgOiAnU2VhcmNoIFVzZXIgR3JvdXAocyknXG4gICAgICAgIH19IHdobyBjYW4gdmlldyB0aGlzIGRhc2hib2FyZFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZXRTZWFyY2hWYWx1ZSgpXCJcbiAgICAgICAgKGZvY3Vzb3V0KT1cInNldFNlYXJjaFZhbHVlKClcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50VGFiID09PSAnVVNFUidcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktZW5kXCJcbiAgICAgICAgKm5nSWY9XCJ0b3RhbFBhZ2VzID4gMVwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInBhZ2luYXRpb24tYm94XCJcbiAgICAgICAgICAqbmdJZj1cInRvdGFsUGFnZXMgPiAxICYmIHNlYXJjaExpc3QubGVuZ3RoID4gMVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXBwLXBhZ2luYXRpb25cbiAgICAgICAgICAgIChwYWdpbmF0aW9uRmlsdGVyKT1cInBhZ2luYXRpb25GaWx0ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbGltaXRdPVwibGltaXRcIlxuICAgICAgICAgICAgW3RvdGFsUGFnZXNdPVwidG90YWxQYWdlc1wiXG4gICAgICAgICAgICBbdG90YWxMaXN0XT1cInRvdGFsTGlzdFwiXG4gICAgICAgICAgPjwvYXBwLXBhZ2luYXRpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidXNlci1saXN0LWJvZHktdG9wXCIgKm5nSWY9XCJzZWFyY2hMaXN0Lmxlbmd0aCAhPT0gMFwiPlxuICAgICAgICA8YXBwLWNzLWNoZWNrYm94XG4gICAgICAgICAgKm5nSWY9XCIhc2VhcmNoVmFsdWUgJiYgc2VhcmNoTGlzdC5sZW5ndGggPiAxXCJcbiAgICAgICAgICBbbmdWYWx1ZV09XCJzZWxlY3RlZExpc3QubGVuZ3RoID09IHRvdGFsTGlzdFwiXG4gICAgICAgICAgKG5nVmFsdWVDaGFuZ2UpPVwic2VsZWN0QWxsVXNlcnMoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3Ryb25nPnt7XG4gICAgICAgICAgICBzZWxlY3RlZExpc3QubGVuZ3RoID09IHRvdGFsTGlzdCA/IFwiRGVzZWxlY3QgQWxsXCIgOiBcIlNlbGVjdCBBbGxcIlxuICAgICAgICAgIH19PC9zdHJvbmc+XG4gICAgICAgIDwvYXBwLWNzLWNoZWNrYm94PlxuICAgICAgICA8YXBwLWNzLWNoZWNrYm94XG4gICAgICAgICAgKm5nSWY9XCJzZWFyY2hWYWx1ZSAmJiBzZWFyY2hMaXN0Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgIFtuZ1ZhbHVlXT1cImNoZWNrU2VsZWN0QWxsKClcIlxuICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cInNlbGVjdEFsbCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdHJvbmc+e3tcbiAgICAgICAgICAgIHNlbGVjdGVkTGlzdC5sZW5ndGggPT0gdG90YWxMaXN0ID8gXCJEZXNlbGVjdCBBbGxcIiA6IFwiU2VsZWN0IEFsbFwiXG4gICAgICAgICAgfX08L3N0cm9uZz5cbiAgICAgICAgPC9hcHAtY3MtY2hlY2tib3g+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LW9mLXVzZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic2VsZWN0aW9uLWxpc3QgdngtbWItNFwiXG4gICAgICAgICAgW2NsYXNzLndpdGgtZ3JvdXBdPVwiZ3JvdXBzRW5hYmxlZFwiXG4gICAgICAgICAgW2NsYXNzLndpdGgtbm9EYXRhXT1cInNlYXJjaExpc3QubGVuZ3RoID09IDBcIlxuICAgICAgICAgIFtjbGFzcy53aXRoLXBhZ2luYXRpb25dPVwidG90YWxQYWdlcyA+IDEgJiYgc2VhcmNoTGlzdC5sZW5ndGggPiAxXCJcbiAgICAgICAgPlxuICAgICAgICAgIDx1bCAqbmdJZj1cInNlYXJjaExpc3QubGVuZ3RoICE9PSAwXCI+XG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGRhdGEgb2Ygc2VhcmNoTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8YXBwLWNzLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgbGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICBkYXRhW2xpc3REZXRhaWxzLmVsZW1lbnRJZEtleV1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cIlxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMaXN0Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSWRzLmluY2x1ZGVzKGRhdGFbbGlzdERldGFpbHMuZWxlbWVudElkS2V5XSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cInNlbGVjdEVsZW1lbnQoZGF0YSlcIlxuICAgICAgICAgICAgICAgIFthclRvb2x0aXBdPVwiZGF0YVtsaXN0RGV0YWlscy50b29sdGlwS2V5XVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPnt7IGRhdGFbbGlzdERldGFpbHMuZGlzcGxheUVsZW1lbnRLZXldIH19PC9hcHAtY3MtY2hlY2tib3hcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuXG4gICAgICAgICAgPGFwcC1uby1kYXRhXG4gICAgICAgICAgICAqbmdJZj1cIiF2TG9hZGVyICYmIHNlYXJjaExpc3QubGVuZ3RoID09IDBcIlxuICAgICAgICAgICAgW25vRGF0YUltYWdlXT1cIkFTU0VUUy5zZWFyY2hfZGF0YVwiXG4gICAgICAgICAgICBbbm9EYXRhVGV4dF09XCInTm8gZGF0YSB0byBkaXNwbGF5J1wiXG4gICAgICAgICAgPjwvYXBwLW5vLWRhdGE+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cInZMb2FkZXJcIj48L2FwcC1sb2FkZXItaW5saW5lPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFRhYiA9PT0gJ0dST1VQJyAmJiBncm91cHNFbmFibGVkXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBkYXRhIGFzIGdyb3Vwc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWVuZFwiICpuZ0lmPVwidHJ1ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uLWJveFwiICpuZ0lmPVwidG90YWxfZ3JvdXBfcGFnZXMgPiAxXCI+XG4gICAgICAgICAgICA8YXBwLXBhZ2luYXRpb25cbiAgICAgICAgICAgICAgKHBhZ2luYXRpb25GaWx0ZXIpPVwicGFnaW5hdGlvbkZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2xpbWl0XT1cImxpbWl0XCJcbiAgICAgICAgICAgICAgW3RvdGFsUGFnZXNdPVwidG90YWxfZ3JvdXBfcGFnZXNcIlxuICAgICAgICAgICAgICBbdG90YWxMaXN0XT1cInRvdGFsZ3JvdXBzXCJcbiAgICAgICAgICAgID48L2FwcC1wYWdpbmF0aW9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInVzZXItbGlzdC1taWQgdngtbWItNFwiXG4gICAgICAgICAgICBbY2xhc3Mud2l0aC1wYWdpbmF0aW9uXT1cInRvdGFsX2dyb3VwX3BhZ2VzID4gMVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3Vwcz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1saXN0LXNlbGVjdCB2eC1tYi00XCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jcy1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXNlYXJjaFZhbHVlICYmIGdyb3Vwcy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInNlbGVjdGVkZ3JvdXBMaXN0Lmxlbmd0aCA9PSB0b3RhbGdyb3Vwc1wiXG4gICAgICAgICAgICAgICAgICAobmdWYWx1ZUNoYW5nZSk9XCJzZWxlY3RBbGxHcm91cHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVzZXItbmFtZSB2eC1mcy0xMiB2eC1mdy02MDAgdngtbGFiZWwtdHh0IHZ4LXR0LW5vbmVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkZ3JvdXBMaXN0Lmxlbmd0aCA9PSB0b3RhbGdyb3Vwc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkRlc2VsZWN0IEFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFwiU2VsZWN0IEFsbFwiXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jcy1jaGVja2JveD5cbiAgICAgICAgICAgICAgICA8YXBwLWNzLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWFyY2hWYWx1ZSAmJiBncm91cHMubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJjaGVja1NlbGVjdEFsbEdyb3VwcygpXCJcbiAgICAgICAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cInNlbGVjdEFsbHNlYXJjaGdyb3VwcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci1uYW1lIHZ4LWZzLTEyIHZ4LWZ3LTYwMCB2eC1sYWJlbC10eHQgdngtdHQtbm9uZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRncm91cExpc3QubGVuZ3RoID09IHRvdGFsZ3JvdXBzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFwiRGVzZWxlY3QgQWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJTZWxlY3QgQWxsXCJcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvYXBwLWNzLWNoZWNrYm94PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItbGlzdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidngtbS0wIHZ4LXAtMCB2eC1kLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LW1iLTRcIlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBncm91cHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLWNzLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgKG5nVmFsdWVDaGFuZ2UpPVwic2VsZWN0R3JvdXBFbGVtZW50KGRhdGEpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRncm91cExpc3QubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRHcm91cElkcy5pbmNsdWRlcyhkYXRhW2xpc3REZXRhaWxzLmdyb3VwSWRrZXldKVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1uYW1lIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2FyVG9vbHRpcF09XCJkYXRhW2xpc3REZXRhaWxzLmRpc3BsYXlHcm91cEtleV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhW2xpc3REZXRhaWxzLmRpc3BsYXlHcm91cEtleV0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ1c2Vyc29mZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50ZXIgdngtZnMtOSB2eC1mdy02MDAgdngtcGwtMSB2eC1wci0xIHZ4LWxoLTMgdngtdHQtdXBwZXJjYXNlIHZ4LW1sLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgZGF0YVtcImFzc29jaWF0ZWRVc2Vyc1wiXS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW1wiYXNzb2NpYXRlZFVzZXJzXCJdLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJVU0VSU1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiVVNFUlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLWNzLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3Vwcz8ubGVuZ3RoID09IDAgJiYgIXZMb2FkZXJHcm91cHNcIj5cbiAgICAgICAgICAgICAgPGFwcC1uby1kYXRhXG4gICAgICAgICAgICAgICAgW25vRGF0YUltYWdlXT1cIkFTU0VUUy5zZWFyY2hfZGF0YVwiXG4gICAgICAgICAgICAgICAgW25vRGF0YVRleHRdPVwiXG4gICAgICAgICAgICAgICAgICAoc2VhcmNoVmFsdWU/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyAnTm8gbWF0Y2ggZm91bmQuJ1xuICAgICAgICAgICAgICAgICAgICA6ICdObyBkYXRhIHRvIGRpc3BsYXkuJ1xuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L2FwcC1uby1kYXRhPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8YXBwLWxvYWRlci1pbmxpbmUgKm5nSWY9XCJ2TG9hZGVyR3JvdXBzXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWZsb2F0aW5nLWJhclwiICpuZ0lmPVwiZ3JvdXBzRW5hYmxlZFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInVzZXItZmxvYXRpbmctYmFyLWNvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0IHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImNvdW50ZXIgdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCB2eC1tLTAgdngtcGwtMSB2eC1wci0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRMaXN0Py5sZW5ndGhcIlxuICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgKGNsaWNrKT1cInVzZXJDb3VudC5wb3BvdmVyKClcIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgc2VsZWN0ZWRMaXN0Py5sZW5ndGggfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZSB2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTJcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRMaXN0Py5sZW5ndGggPT09IDFcIlxuICAgICAgICAgICAgICA+VXNlclxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZGdyb3VwTGlzdD8ubGVuZ3RoID4gMCA/IFwiICYgXCIgOiBcInNlbGVjdGVkXCIgfX08L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRMaXN0Py5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgPlVzZXJzXG4gICAgICAgICAgICAgIHt7IHNlbGVjdGVkZ3JvdXBMaXN0Py5sZW5ndGggPiAwID8gXCIgJiBcIiA6IFwiYXJlIHNlbGVjdGVkXCIgfX08L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImNvdW50ZXIgZ3JvdXAgdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCB2eC1tbC0yIHZ4LXBsLTEgdngtcHItMVwiXG4gICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkZ3JvdXBMaXN0Py5sZW5ndGhcIlxuICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgKGNsaWNrKT1cImdyb3VwQ291bnQucG9wb3ZlcigpXCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IHNlbGVjdGVkZ3JvdXBMaXN0Py5sZW5ndGggfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZSB2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTJcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ZWRncm91cExpc3Q/Lmxlbmd0aCA9PT0gMVwiXG4gICAgICAgICAgICAgID5Vc2VyIEdyb3VwIHNlbGVjdGVkPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkZ3JvdXBMaXN0Py5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgPlVzZXIgR3JvdXBzIHNlbGVjdGVkPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI3VzZXJDb3VudCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2Ygc2VsZWN0ZWRMaXN0XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXJUb29sdGlwXT1cImVsZW1lbnQubWVtYmVyX25hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RWxlbWVudChlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAhbGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0LmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ/Lm1lbWJlcl9pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGVsZW1lbnQubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI2dyb3VwQ291bnQgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHNlbGVjdGVkZ3JvdXBMaXN0XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXJUb29sdGlwXT1cImVsZW1lbnQ/Lmdyb3VwX25hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0R3JvdXBFbGVtZW50KGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBlbGVtZW50Py5ncm91cF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicmlnaHQgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWxcIiAoY2xpY2spPVwiY2xvc2VVc2VyTGlzdC5lbWl0KClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJmYWxzZVwiIChjbGljayk9XCJvblN1Ym1pdCgpXCI+XG4gICAgICAgICAgICBOZXh0IDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFlOzwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWxpc3QtZm9vdGVyXCIgKm5nSWY9XCIhZ3JvdXBzRW5hYmxlZFwiPlxuICAgICAgPGFwcC1kYXNoYm9hcmQtZm9vdGVyXG4gICAgICAgIFtmb290ZXJEZXRhaWxzXT1cImZvb3RlckRldGFpbHNcIlxuICAgICAgICAoY2FuY2VsRXZlbnQpPVwiY2xvc2VVc2VyTGlzdC5lbWl0KCk7IHBhZ2luYXRpb25TZXJ2aWNlLnJlc2V0KClcIlxuICAgICAgICAoZGVsZXRlRXZlbnQpPVwic2VsZWN0RWxlbWVudCgkZXZlbnQpXCJcbiAgICAgICAgKHN1Ym1pdEV2ZW50KT1cIm9uU3VibWl0KClcIlxuICAgICAgICBbdXNlckJ1dHRvbkNvbG9yXT1cIidncmVlbkJnJ1wiXG4gICAgICA+PC9hcHAtZGFzaGJvYXJkLWZvb3Rlcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==