qms-angular 2.0.8 → 2.0.10

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.
@@ -663,7 +663,7 @@ export class QMSSelectAccessDialogComponent {
663
663
  clickAction: 'noop'
664
664
  }
665
665
  }
666
- ], viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true, read: SelectDepartmentTreeComponent }, { propertyName: "pagingPerson", first: true, predicate: ["pagingPerson"], descendants: true }, { propertyName: "pagingUserGroup", first: true, predicate: ["pagingUserGroup"], descendants: true }, { propertyName: "pagingDepartment", first: true, predicate: ["pagingDepartment"], descendants: true }], ngImport: i0, template: "<h3 mat-dialog-title class=\"more-action\">\n {{dialogData.titleDialog || LANG.SELECT_ACCESS}}\n <button matDialogClose class=\"close-btn\" qms-btn-icon color=\"light\">\n <mat-icon class=\"mat-icons-outlined\">close</mat-icon>\n </button>\n</h3>\n<mat-dialog-content>\n <div [class.active]=\"optionSelect.value !== null\" class=\"qms-dialog-content\">\n <div class=\"access-dialog-wraper\">\n <mat-form-field *ngIf=\"options.length > 1\" qms-form qms-select-input class=\"field-select-option w-100 mb-2\"\n appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.TYPE\" qms-select-input>{{LANG.TYPE}}</mat-label>\n <mat-select (selectionChange)=\"onSelectionTypeChange($event)\" [formControl]=\"optionSelect\" placeholder=\"Select\"\n disableOptionCentering #singleSelect panelClass=\"qms-select-panel\" qms-select>\n\n <mat-option *ngFor=\"let item of options\" [value]=\"item.type\">\n {{ LANG[item.displayName] }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"body-dialog-container\">\n <div class=\"option-selected-content\">\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.PERSON\">\n <form *ngIf=\"personForm\" [formGroup]=\"personForm\">\n <div class=\"group-filter-person-option\">\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.userGroups.length\" qms-form qms-select-input\n class=\"w-100 mb-2\" appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.ROLE\" qms-select-input>{{LANG.ROLE}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select formControlName=\"userGroup\"\n disableOptionCentering>\n <mat-select-trigger>\n {{personForm.controls['userGroup'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"userGroupFilter\" placeholderLabel=\"{{ LANG.ROLE }}\"\n noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option mode=\"dark\" class=\"opt-check-icon\"\n *ngFor=\"let item of filteredSearchTextBox.userGroup.value\" [value]=\"item\">\n <span qms-elipsify position=\"top\" mode=\"dark\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['userGroup'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span [@inOutAnimation] (click)=\"personForm.get('userGroup').setValue('')\" class=\"pointer \" matSuffix\n aria-label=\"Clear\" *ngIf=\"personForm.get('userGroup').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.departments.length\"\n class=\"w-100 input-select-option mb-2\" qms-form qms-select-input>\n <mat-label [attr.aria-label]=\"LANG.DEPARTMENT_UNIT\">{{LANG.DEPARTMENT_UNIT}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select disableOptionCentering\n formControlName=\"department\">\n <mat-select-trigger>\n {{personForm.controls['department'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"departmentFilter\"\n [placeholderLabel]=\"LANG.DEPARTMENT_UNIT\" noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option class=\"opt-check-icon\" *ngFor=\"let item of filteredSearchTextBox.department.value\"\n [value]=\"item\">\n <span qms-elipsify mode=\"dark\" position=\"top\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['department'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span (click)=\"setFormControlValue(['recursive','department'], [false,''])\" [@inOutAnimation]\n class=\"pointer\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('department').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n </div>\n\n <mat-slide-toggle [@inOutAnimation] *ngIf=\"personForm.controls['department'].value\"\n class=\"w-100 slide-toggle\" formControlName=\"recursive\" color=\"default\" qms-group-options>\n <span class=\"text-label\">{{LANG.INCLUDE_SUB_DEPARTMENTS}}</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"w-100 mb-2\" appearance=\"fill\" qms-form qms-search-field>\n <mat-label [attr.aria-label]=\"LANG.SEARCH_WITH_NAME\" class=\"visually-hidden\"\n qms-select-input>{{LANG.SEARCH_WITH_NAME}}</mat-label>\n <input matInput appearance=\"off\" placeholder=\"{{LANG.SEARCH_WITH_NAME}}\" formControlName=\"keyword\"\n type=\"text\" autocomplete=\"off\" />\n <button *ngIf=\"!getLoading$.value\" qms-btn-icon color=\"light\" [@inOutAnimation]\n (click)=\"onSearchPersonFreeText()\" class=\"pointer me-1\" matSuffix aria-label=\"Search\">\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <button [@inOutAnimation] (click)=\"personForm.get('keyword').setValue('')\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('keyword').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <button (click)=\"onFilterPerson()\" qms-btn-outlined class=\"w-100 my-1\">\n {{LANG.FILTER}}\n </button>\n\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && personFiltered.length && !dialogData.modeSelectOnePerson\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.PERSON)\" #checkPerson class=\"w-100 mb-1 checkbox-all\"\n (click)=\"personFiltered.length && onCheckAll(OPTION_ENUM.PERSON,checkPerson)\"\n [checked]=\"isCheckAll(OPTION_ENUM.PERSON)\" [indeterminate]=\"isIndeterminate(OPTION_ENUM.PERSON)\"\n color=\"default\" qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}} (<b>{{personFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value; then loading\">\n </ng-container>\n <div [@inOutAnimation] *ngIf=\"personFiltered.length && !getLoading$.value\" [@listAnimation]\n class=\"item-list-wrapper\">\n <div class=\"item mt-1\" [@inOutAnimation] *ngFor=\"let employee of personFiltered; trackBy: trackByFn\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOnePerson ?itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: employee, type: OPTION_ENUM.PERSON}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!personFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingPerson\n *ngIf=\"getPerson$.value.length > 10\" [length]=\"getPerson$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getPerson$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.PERSON)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </form>\n </ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.USER_GROUP\">\n <div>\n <form (submit)=\"onFilterUserGroup()\">\n <mat-form-field class=\"w-100 mb-2\" qms-form qms-search-field>\n <mat-label aria-label=\"User group\" class=\"visually-hidden\" qms-select-input>User group</mat-label>\n <input [formControl]=\"userGroupForm\" matInput type=\"text\" autocomplete=\"off\"\n placeholder=\"{{ LANG.SEARCH }}\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <button matSuffix (click)=\"userGroupForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </form>\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && (userGroupFiltered.length && !dialogData.modeSelectOneUserGroup)\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.USER_GROUP)\" #checkUserGroup\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.USER_GROUP)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.USER_GROUP)\"\n (click)=\"userGroupFiltered.length && onCheckAll(OPTION_ENUM.USER_GROUP,checkUserGroup)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}\n (<b>{{userGroupFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"userGroupFiltered.length && !getLoading$.value\" [@listAnimation] class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let userGroup of userGroupFiltered\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOneUserGroup ? itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: userGroup,type: OPTION_ENUM.USER_GROUP}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!userGroupFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingUserGroup class=\"my-1\"\n *ngIf=\"getUserGroup$.value.length > 10 \" [length]=\"getUserGroup$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getUserGroup$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.USER_GROUP)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.DEPARTMENT\">\n\n <ng-container *ngIf=\"!dialogData.isDepartmentPaging\">\n <qms-select-department-tree #tree [rowsSkeleton]=\"8\" [config]=\"dialogData.treeDepartmentConfig\"\n [maxWidthNode]=\"dialogData.maxWidthNode\" (onSearchEvent)=\"onSearchDepartmentEvent.emit($event)\"\n (onValueChangeEvent)=\"onResultDepartmentChange($event)\"\n (selectionNodeChangeEvent)=\"onSelectionNodeDepartmentChange($event)\"\n (onPagingSearchEvent)=\"onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)\">\n </qms-select-department-tree>\n </ng-container>\n\n <ng-container *ngIf=\"dialogData.isDepartmentPaging\">\n\n <form (ngSubmit)=\"onFilterDepartment()\">\n <mat-form-field class=\"w-100 mb-2\" qms-form qms-search-field>\n <mat-label aria-label=\"Department\" class=\"visually-hidden\" qms-select-input>Department</mat-label>\n <input [formControl]=\"departmentSearchForm\" matInput type=\"text\" autocomplete=\"off\"\n placeholder=\"{{ LANG.SEARCH }}\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <div [@inOutAnimation] *ngIf=\"!!departmentSearchForm.value && !getLoading$.value\" matSuffix\n qms-input-clear>\n <button (click)=\"departmentSearchForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </mat-form-field>\n </form>\n\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation] *ngIf=\"!getLoading$.value && departmentFiltered.length\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.DEPARTMENT)\" #checkDepartment\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.DEPARTMENT)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.DEPARTMENT)\"\n (click)=\"departmentFiltered.length && onCheckAll(OPTION_ENUM.DEPARTMENT,checkDepartment)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}\n (<b>{{departmentFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"departmentFiltered.length && !getLoading$.value\" [@listAnimation] class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let item of departmentFiltered\">\n <ng-container [ngTemplateOutlet]=\"itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: item,type: OPTION_ENUM.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!departmentFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingDepartment class=\"my-1\"\n *ngIf=\"getDepartment$.value.length > 10 \" [length]=\"getDepartment$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getDepartment$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"optionSelect.value !== null\" class=\"result-wrapper\">\n <div class=\"result-selected-container\">\n <div [@inOutAnimation] *ngIf=\"(options.length === 1) || (options.length > 1 && optionSelect.value !== null)\"\n class=\"header-title result-header\">\n <span>\n {{\n dialogData.titleResult || LANG.RESULTS}}\n <span *ngIf=\"options.length === 1 && hasItemSelected()\">\n ({{getResultTabActive().length}})\n </span>\n </span>\n </div>\n <div class=\"result-body\">\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.PERSON)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.persons, type:OPTION_ENUM.PERSON, title:LANG.PERSON}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.USER_GROUP)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.userGroups, type:OPTION_ENUM.USER_GROUP, title:LANG.USER_GROUP}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT) && !dialogData.isDepartmentPaging\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departments || resultAccess.departmentsFlat, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT) && dialogData.isDepartmentPaging\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departmentsFlat, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <mat-divider class=\"w-100 mb-3\"></mat-divider>\n <button class=\"me-2\" qms-btn-text mat-dialog-close>\n {{dialogData.cancelTitle || LANG.CANCEL}}\n </button>\n <button *ngIf=\"optionSelect.value !== null\"\n [disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\" class=\"btn-add\"\n [class.qms-btn-disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\"\n [mat-dialog-close]=\"resultAccess\" qms-btn>\n <span>{{dialogData.confirmTitle || LANG.ADD}}</span>\n </button>\n</mat-dialog-actions>\n\n<ng-template #noResult>\n <svg width=\"89\" height=\"130\" viewBox=\"0 0 89 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"white\" />\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"#0163B2\" fill-opacity=\"0.12\" />\n <path\n d=\"M44.5 56.6936L58.096 64.8996L54.488 49.4336L66.5 39.0276L50.682 37.6856L44.5 23.0996L38.318 37.6856L22.5 39.0276L34.512 49.4336L30.904 64.8996L44.5 56.6936Z\"\n fill=\"#0163B3\" />\n <text x=\"10\" y=\"105\" fill=\"#0163B2\">{{LANG.NO_RESULT}}</text>\n </svg>\n</ng-template>\n<ng-template #listChip let-data=\"data\" let-type=\"type\">\n <mat-chip-set [@inOutAnimation] *ngIf=\"data?.length\" class=\"panel__item qms-scrollbar\">\n <div [@inOutAnimation_2] *ngFor=\"let item of data; let i = index\">\n <mat-chip (click)=\"onScollToNodeTreeDepartment(item)\" [@updateItemAnimation]\n *qmsContentChanges=\"item.children?.length\" class=\"chip-item-result\" qms-chip [removable]=\"true\">\n <span qms-chip-body>\n <span [qms-tool-tip]=\"generateTooltip(item)\" position=\"top\" mode=\"dark\" class=\"text-label\">\n {{item.name}}\n <span *ngIf=\"item.subName\">({{ item.subName }})</span>\n </span>\n <span class=\"chip-item-children__count ms-1\" *ngIf=\"item?.children && item?.isGroup\">\n {{item.children.length}}/{{item.childCount}}\n </span>\n </span>\n\n <button matChipRemove *ngIf=\"allowRemove(type, item)\" (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n <button matChipRemove *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\"\n (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n </mat-chip>\n </div>\n </mat-chip-set>\n</ng-template>\n\n\n<ng-template #viewResultCollapse let-title=\"title\" let-data=\"data\" let-type=\"type\">\n <mat-expansion-panel qms-expansion [expanded]=\"optionSelect.value === type\">\n <mat-expansion-panel-header>\n <div class=\"title-content\">\n <div class=\"qms-list-text\">\n <div qms-line color=\"default-subtitle\">{{title}}\n <span class=\"fw-600\">\n ({{data?.length}})\n </span>\n </div>\n </div>\n </div>\n </mat-expansion-panel-header>\n <ng-container [ngTemplateOutlet]=\"listChip\" [ngTemplateOutletContext]=\"{data: data,type: type}\">\n </ng-container>\n </mat-expansion-panel>\n</ng-template>\n\n<ng-template #itemWithoutCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <div (click)=\"onSelectItem(type,item)\" class=\"item-without-checkbox w-100\" [class.active]=\"item.selected\">\n <div class=\"item-content\">\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </div>\n <div class=\"item-state\">\n <mat-icon [@inOutAnimation] *ngIf=\"item.selected\">check</mat-icon>\n </div>\n </div>\n</ng-template>\n\n<ng-template #itemCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <mat-checkbox [disabled]=\"!allowRemove(type, item)\" [checked]=\"item.selected\" (click)=\"onSelectItem(type,item)\"\n class=\"w-100\" color=\"default\" qms-group-options>\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </mat-checkbox>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"qms-loading-container\">\n <div class=\"qms-loader\" *ngFor=\"let item of arrSkeleton\">\n <div class=\"qms-loader__wrapper\">\n <div class=\"row-loader\">\n </div>\n </div>\n </div>\n </div>\n</ng-template>", styles: ["@font-face{font-family:icomoon;src:url(/assets/fonts/icomoon.eot?aghldx);src:url(/assets/fonts/icomoon.eot?aghldx#iefix) format(\"embedded-opentype\"),url(/assets/fonts/icomoon.ttf?aghldx) format(\"truetype\"),url(/assets/fonts/icomoon.woff?aghldx) format(\"woff\"),url(/assets/fonts/icomoon.svg?aghldx#icomoon) format(\"svg\");font-weight:400;font-style:normal;font-display:block}[class^=icon-],[class*=\" icon-\"]{font-family:icomoon!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-acutely-toxic .path1:before{content:\"\\e91b\";color:#e32730}.icon-acutely-toxic .path2:before{content:\"\\e922\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path3:before{content:\"\\e923\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path4:before{content:\"\\e924\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path5:before{content:\"\\e925\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path6:before{content:\"\\e926\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path7:before{content:\"\\e927\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path8:before{content:\"\\e928\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path9:before{content:\"\\e929\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path10:before{content:\"\\e92a\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path11:before{content:\"\\e92b\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path12:before{content:\"\\e92c\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path13:before{content:\"\\e92d\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path14:before{content:\"\\e92e\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path15:before{content:\"\\e92f\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path16:before{content:\"\\e930\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path17:before{content:\"\\e931\";margin-left:-1em;color:#323232}.icon-add-column:before{content:\"\\e932\"}.icon-add-tooltip:before{content:\"\\e933\"}.icon-admin:before{content:\"\\e934\"}.icon-annual-cycle:before{content:\"\\e935\"}.icon-assignment-repete:before{content:\"\\e936\"}.icon-barrier-add:before{content:\"\\e937\"}.icon-barrier-edit:before{content:\"\\e938\"}.icon-barrier-view:before{content:\"\\e939\"}.icon-button-group:before{content:\"\\e93a\"}.icon-chemical-manager:before{content:\"\\e93b\"}.icon-chronic-health-hazard .path1:before{content:\"\\e93c\";color:#e32730}.icon-chronic-health-hazard .path2:before{content:\"\\e93d\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path3:before{content:\"\\e93e\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path4:before{content:\"\\e93f\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path5:before{content:\"\\e940\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path6:before{content:\"\\e941\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path7:before{content:\"\\e942\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path8:before{content:\"\\e943\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path9:before{content:\"\\e944\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path10:before{content:\"\\e945\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path11:before{content:\"\\e946\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path12:before{content:\"\\e947\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path13:before{content:\"\\e948\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path14:before{content:\"\\e949\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path15:before{content:\"\\e94a\";margin-left:-1em;color:#323232}.icon-contingency:before{content:\"\\e94b\"}.icon-corrosive .path1:before{content:\"\\e94c\";color:#323232}.icon-corrosive .path2:before{content:\"\\e94d\";margin-left:-1em;color:#323232}.icon-corrosive .path3:before{content:\"\\e94e\";margin-left:-1em;color:#323232}.icon-corrosive .path4:before{content:\"\\e94f\";margin-left:-1em;color:#323232}.icon-corrosive .path5:before{content:\"\\e950\";margin-left:-1em;color:#323232}.icon-corrosive .path6:before{content:\"\\e951\";margin-left:-1em;color:#323232}.icon-corrosive .path7:before{content:\"\\e952\";margin-left:-1em;color:#323232}.icon-corrosive .path8:before{content:\"\\e953\";margin-left:-1em;color:#323232}.icon-corrosive .path9:before{content:\"\\e954\";margin-left:-1em;color:#323232}.icon-corrosive .path10:before{content:\"\\e955\";margin-left:-1em;color:#323232}.icon-corrosive .path11:before{content:\"\\e956\";margin-left:-1em;color:#323232}.icon-corrosive .path12:before{content:\"\\e957\";margin-left:-1em;color:#323232}.icon-corrosive .path13:before{content:\"\\e958\";margin-left:-1em;color:#323232}.icon-corrosive .path14:before{content:\"\\e959\";margin-left:-1em;color:#323232}.icon-corrosive .path15:before{content:\"\\e95a\";margin-left:-1em;color:#323232}.icon-corrosive .path16:before{content:\"\\e95b\";margin-left:-1em;color:#323232}.icon-corrosive .path17:before{content:\"\\e95c\";margin-left:-1em;color:#323232}.icon-corrosive .path18:before{content:\"\\e95d\";margin-left:-1em;color:#323232}.icon-corrosive .path19:before{content:\"\\e95e\";margin-left:-1em;color:#323232}.icon-corrosive .path20:before{content:\"\\e95f\";margin-left:-1em;color:#323232}.icon-corrosive .path21:before{content:\"\\e960\";margin-left:-1em;color:#e32730}.icon-dashboard:before{content:\"\\e961\"}.icon-database-sds:before{content:\"\\e962\"}.icon-description-add:before{content:\"\\e963\"}.icon-description-edit:before{content:\"\\e964\"}.icon-description-view:before{content:\"\\e965\";color:#666}.icon-document-read .path1:before{content:\"\\e966\";color:#000;opacity:.6}.icon-document-read .path2:before{content:\"\\e967\";margin-left:-1em;color:#fff}.icon-document-read .path3:before{content:\"\\e968\";margin-left:-1em;color:#000;opacity:.6}.icon-draft:before{content:\"\\e969\"}.icon-expired-off:before{content:\"\\e96a\"}.icon-expired-on:before{content:\"\\e96b\"}.icon-explosive .path1:before{content:\"\\e96c\";color:#e32730}.icon-explosive .path2:before{content:\"\\e96d\";margin-left:-1em;color:#323232}.icon-explosive .path3:before{content:\"\\e96e\";margin-left:-1em;color:#323232}.icon-explosive .path4:before{content:\"\\e96f\";margin-left:-1em;color:#323232}.icon-explosive .path5:before{content:\"\\e970\";margin-left:-1em;color:#323232}.icon-explosive .path6:before{content:\"\\e971\";margin-left:-1em;color:#323232}.icon-explosive .path7:before{content:\"\\e972\";margin-left:-1em;color:#323232}.icon-explosive .path8:before{content:\"\\e973\";margin-left:-1em;color:#323232}.icon-explosive .path9:before{content:\"\\e974\";margin-left:-1em;color:#323232}.icon-explosive .path10:before{content:\"\\e975\";margin-left:-1em;color:#323232}.icon-explosive .path11:before{content:\"\\e976\";margin-left:-1em;color:#323232}.icon-explosive .path12:before{content:\"\\e977\";margin-left:-1em;color:#323232}.icon-explosive .path13:before{content:\"\\e978\";margin-left:-1em;color:#323232}.icon-explosive .path14:before{content:\"\\e979\";margin-left:-1em;color:#323232}.icon-explosive .path15:before{content:\"\\e97a\";margin-left:-1em;color:#323232}.icon-explosive .path16:before{content:\"\\e97b\";margin-left:-1em;color:#323232}.icon-explosive .path17:before{content:\"\\e97c\";margin-left:-1em;color:#323232}.icon-explosive .path18:before{content:\"\\e97d\";margin-left:-1em;color:#323232}.icon-explosive .path19:before{content:\"\\e97e\";margin-left:-1em;color:#323232}.icon-explosive .path20:before{content:\"\\e97f\";margin-left:-1em;color:#323232}.icon-explosive .path21:before{content:\"\\e980\";margin-left:-1em;color:#323232}.icon-explosive .path22:before{content:\"\\e981\";margin-left:-1em;color:#323232}.icon-explosive .path23:before{content:\"\\e982\";margin-left:-1em;color:#323232}.icon-explosive .path24:before{content:\"\\e983\";margin-left:-1em;color:#323232}.icon-explosive .path25:before{content:\"\\e984\";margin-left:-1em;color:#323232}.icon-explosive .path26:before{content:\"\\e985\";margin-left:-1em;color:#323232}.icon-explosive .path27:before{content:\"\\e986\";margin-left:-1em;color:#323232}.icon-explosive .path28:before{content:\"\\e987\";margin-left:-1em;color:#323232}.icon-explosive .path29:before{content:\"\\e988\";margin-left:-1em;color:#323232}.icon-explosive .path30:before{content:\"\\e989\";margin-left:-1em;color:#323232}.icon-explosive .path31:before{content:\"\\e98a\";margin-left:-1em;color:#323232}.icon-explosive .path32:before{content:\"\\e98b\";margin-left:-1em;color:#323232}.icon-explosive .path33:before{content:\"\\e98c\";margin-left:-1em;color:#323232}.icon-explosive .path34:before{content:\"\\e98d\";margin-left:-1em;color:#323232}.icon-explosive .path35:before{content:\"\\e98e\";margin-left:-1em;color:#323232}.icon-explosive .path36:before{content:\"\\e98f\";margin-left:-1em;color:#323232}.icon-explosive .path37:before{content:\"\\e990\";margin-left:-1em;color:#323232}.icon-explosive .path38:before{content:\"\\e991\";margin-left:-1em;color:#323232}.icon-explosive .path39:before{content:\"\\e992\";margin-left:-1em;color:#323232}.icon-explosive .path40:before{content:\"\\e993\";margin-left:-1em;color:#323232}.icon-explosive .path41:before{content:\"\\e994\";margin-left:-1em;color:#323232}.icon-explosive .path42:before{content:\"\\e995\";margin-left:-1em;color:#323232}.icon-explosive .path43:before{content:\"\\e996\";margin-left:-1em;color:#323232}.icon-explosive .path44:before{content:\"\\e997\";margin-left:-1em;color:#323232}.icon-explosive .path45:before{content:\"\\e998\";margin-left:-1em;color:#323232}.icon-explosive .path46:before{content:\"\\e999\";margin-left:-1em;color:#323232}.icon-file-excel:before{content:\"\\e99a\"}.icon-file-pdf:before{content:\"\\e99b\"}.icon-file-pdf-verified .path1:before{content:\"\\e99c\";color:#000;opacity:.6}.icon-file-pdf-verified .path2:before{content:\"\\e99d\";margin-left:-1em;color:#fff}.icon-file-pdf-verified .path3:before{content:\"\\e99e\";margin-left:-1em;color:#000;opacity:.6}.icon-file-word:before{content:\"\\e99f\"}.icon-filter-alt:before{content:\"\\e9a0\"}.icon-flammable .path1:before{content:\"\\e9a1\";color:#323232}.icon-flammable .path2:before{content:\"\\e9a2\";margin-left:-1em;color:#323232}.icon-flammable .path3:before{content:\"\\e9a3\";margin-left:-1em;color:#e32730}.icon-gas-under-pressure .path1:before{content:\"\\e9a4\";color:#323232}.icon-gas-under-pressure .path2:before{content:\"\\e9a5\";margin-left:-1em;color:#e32730}.icon-health-hazard .path1:before{content:\"\\e9a6\";color:#323232}.icon-health-hazard .path2:before{content:\"\\e9a7\";margin-left:-1em;color:#e32730}.icon-line-break:before{content:\"\\e9a8\"}.icon-location:before{content:\"\\e9a9\"}.icon-measure-add:before{content:\"\\e9aa\"}.icon-measure-edit:before{content:\"\\e9ab\"}.icon-measure-view:before{content:\"\\e9ac\";color:#666}.icon-messages:before{content:\"\\e9ad\"}.icon-monitoring:before{content:\"\\e9ae\";color:#666}.icon-move:before{content:\"\\e9af\"}.icon-oxidizing .path1:before{content:\"\\e9b0\";color:#e32730}.icon-oxidizing .path2:before{content:\"\\e9b1\";margin-left:-1em;color:#323232}.icon-oxidizing .path3:before{content:\"\\e9b2\";margin-left:-1em;color:#323232}.icon-oxidizing .path4:before{content:\"\\e9b3\";margin-left:-1em;color:#323232}.icon-process-area-closed:before{content:\"\\e9b4\"}.icon-process-area-open:before{content:\"\\e9b5\"}.icon-process-linked .path1:before{content:\"\\e9b6\";color:#000;opacity:.6}.icon-process-linked .path2:before{content:\"\\e9b7\";margin-left:-1em;color:#666}.icon-risk:before{content:\"\\e9b8\"}.icon-search-in-file:before{content:\"\\e9b9\"}.icon-sort-ascending:before{content:\"\\e9ba\"}.icon-sort-descending:before{content:\"\\e9bb\"}.icon-subscript:before{content:\"\\e9bc\"}.icon-superscript:before{content:\"\\e9bd\"}.icon-syncronice-favorites:before{content:\"\\e9be\"}.icon-system-settings:before{content:\"\\e9bf\"}.icon-view-three-outlined:before{content:\"\\e9c0\"}.icon-workplace-safety:before{content:\"\\e9c1\"}.icon-checklist:before{content:\"\\e900\"}.icon-department-document .path1:before{content:\"\\e901\";color:#000;opacity:.6}.icon-department-document .path2:before{content:\"\\e902\";margin-left:-1em;color:#00804c}.icon-department-folder-closed .path1:before{content:\"\\e903\";color:#000;opacity:.6}.icon-department-folder-closed .path2:before{content:\"\\e904\";margin-left:-1em;color:#00804c}.icon-department-folder-open .path1:before{content:\"\\e905\";color:#000;opacity:.6}.icon-department-folder-open .path2:before{content:\"\\e906\";margin-left:-1em;color:#00804c}.icon-deviation:before{content:\"\\e907\"}.icon-dropdown-folder .path1:before{content:\"\\e908\";color:#00324e}.icon-dropdown-folder .path2:before{content:\"\\e909\";margin-left:-1em;color:#fff;opacity:.6}.icon-enterprise-document .path1:before{content:\"\\e90a\";color:#000;opacity:.6}.icon-enterprise-document .path2:before{content:\"\\e90b\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-closed .path1:before{content:\"\\e90c\";color:#000;opacity:.6}.icon-enterprise-folder-closed .path2:before{content:\"\\e90d\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-open .path1:before{content:\"\\e90e\";color:#000;opacity:.6}.icon-enterprise-folder-open .path2:before{content:\"\\e90f\";margin-left:-1em;color:#cf4714}.icon-folder-closed:before{content:\"\\e910\"}.icon-folder-open:before{content:\"\\e911\"}.icon-keyboard_arrow_down:before{content:\"\\e912\"}.icon-keyboard_arrow_up:before{content:\"\\e913\"}.icon-local-document .path1:before{content:\"\\e914\";color:#000;opacity:.6}.icon-local-document .path2:before{content:\"\\e915\";margin-left:-1em;color:#1954a9}.icon-local-folder-closed .path1:before{content:\"\\e916\";color:#000;opacity:.6}.icon-local-folder-closed .path2:before{content:\"\\e917\";margin-left:-1em;color:#1954a9}.icon-local-folder-open .path1:before{content:\"\\e918\";color:#000;opacity:.6}.icon-local-folder-open .path2:before{content:\"\\e919\";margin-left:-1em;color:#1954a9}.icon-process:before{content:\"\\e91a\"}.icon-regional-document .path1:before{content:\"\\e91c\";color:#000;opacity:.6}.icon-regional-document .path2:before{content:\"\\e91d\";margin-left:-1em;color:#662e0d}.icon-regional-folder-closed .path1:before{content:\"\\e91e\";color:#000;opacity:.6}.icon-regional-folder-closed .path2:before{content:\"\\e91f\";margin-left:-1em;color:#662e0d}.icon-regional-folder-open .path1:before{content:\"\\e920\";color:#000;opacity:.6}.icon-regional-folder-open .path2:before{content:\"\\e921\";margin-left:-1em;color:#662e0d}.select-access-paginator{max-height:150px!important}.mat-expansion-panel .mat-expansion-panel-body{padding-top:0!important}.mat-expansion-panel-header{font-weight:800!important}.mat-expansion-panel-header .title-content{font-size:12px!important}.w-100{width:100%}.h-100{height:100%}.pointer{cursor:pointer}.fw-600{font-weight:600}.label-item{font-weight:600;color:var(--ws-text-primary)}.sub-label{color:var(--ws-text-secondary)}.fs-14{font-size:14px}.fs-12{font-size:12px}.color-primary{color:var(--primary-light)!important}.header-title{font-weight:600;color:var(--ws-text-primary);font-size:16px}.mat-mdc-chip.chip-item-result{max-width:250px}.mat-mdc-chip.chip-item-result.item-department .qms-chip-body{display:flex;justify-content:center;align-items:center}.remove-chip-icon{cursor:pointer}.remove-chip-icon:hover{color:#000000b3}.mat-form-field-wrapper{padding-bottom:8px!important}.mat-expansion-panel{border-radius:unset!important}.mat-expansion-panel-header:not([aria-disabled=true]){background:unset}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header{background:#e5eefb}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header .qms-line{color:var(--primary-light)!important}.access-dialog-header{display:flex;justify-content:space-between;align-items:center}.mat-chip-list-wrapper{margin:unset!important}.item-list-wrapper{height:40vh;padding:4px 4px 4px 0;overflow-y:auto}.item-list-wrapper.no-result{height:50vh;display:flex;justify-content:center;align-items:center}.item-list-wrapper .item{min-height:40px}.item-list-wrapper .item-without-checkbox{min-height:45px;display:flex;justify-content:space-between;align-items:center;padding:4px 8px;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;transition:background .3s ease}.item-list-wrapper .item-without-checkbox.active{background:var(--primary-light-12-opacity)}.item-list-wrapper .item-without-checkbox:hover{background:var(--primary-light-6-opacity)}.item-list-wrapper .item-without-checkbox .mat-icon{color:var(--primary-light)!important}.confirm__button__groups .btn-add>.qms-btn-wrapper{display:flex;justify-content:center;align-items:center}.qms-dialog-content{display:grid;column-gap:8px}.qms-dialog-content.active{grid-template-columns:2fr 1fr;min-height:50vh}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-wrapper{padding-bottom:16px!important}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-underline{bottom:16px!important}.qms-dialog-content .result-wrapper{position:relative;width:100%;margin-left:8px}.qms-dialog-content .result-wrapper:after{position:absolute;content:\"\";top:0;left:0;background-color:#0000001f;height:100%;width:1px}.qms-dialog-content .result-selected-container{position:absolute;inset:0;overflow-y:auto;padding:0 8px}.qms-dialog-content .result-selected-container .result-header{height:51px;display:flex;align-items:center;position:sticky;top:0;z-index:10;padding:0!important;background:#fff;margin-bottom:12px}.qms-dialog-content .result-selected-container .result-header:after{position:absolute;content:\"\";bottom:0;left:0;width:100%;height:1px;background:#0000000a}.qms-dialog-content .result-selected-container .result-header .mat-mdc-card-content{height:51px;width:100%;padding-left:4px;display:flex;align-items:center;background-color:#0000000a}.option-selected-content .group-filter-person-option{display:flex;flex-direction:row-reverse;justify-content:center;align-items:center;gap:8px}span.chip-item__content_name{display:inline-block;max-width:175px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}span.chip-item-children__count{font-size:.75rem;color:#00000080;font-weight:600}.mat-mdc-slide-toggle.qms-group-options{padding:unset!important}.input-option-filter .mat-form-field-wrapper{padding-bottom:8px!important}.input-option-filter .mat-form-field-underline{bottom:8px!important}.slide-toggle{margin-bottom:8px}.confirm__button__groups.none-option{margin-top:85px}.btn-icon-clear{position:relative;padding:0 1rem}.btn-icon-clear .qms-btn-icon{margin-right:unset!important}.btn-icon-clear:after{position:absolute;content:\"\";left:0;top:0;height:100%;width:1px;background:#0000004d}.qms-paginator .mat-mdc-paginator-container .qms-total-result{margin-bottom:0;margin-right:12px;height:100%;display:flex;align-items:center}.qms-paginator .mat-mdc-paginator-container .qms-total-result span{font-weight:600;color:#000c}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions{margin-bottom:0;column-gap:2px}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions>.qms-total-result{margin-bottom:0}.qms-paginator .qms-paginator-page-size{align-items:center}.qms-paginator .mat-form-field-wrapper{padding-bottom:0!important}.mat-mdc-checkbox.checkbox-all .mat-checkbox-label{flex-direction:row!important;align-items:center!important;column-gap:4px!important}.mat-expansion-panel.qms-expansion{margin:0!important}.access-department .qms-view-search-result{height:100%!important}.access-department .qms-view-search-result .result{max-height:calc(100% - 80px)!important}.access-department .loading-container{height:calc(100% - 40px)!important}.qms-loading-container{height:45vh;overflow:hidden;display:grid;grid-template-rows:repeat(60px)}.qms-loading-container .qms-loader{position:relative;width:100%;height:100%;padding:10px 0;overflow:hidden}.qms-loading-container .qms-loader:after{content:\"\";position:absolute;width:100%;height:100%;top:0;left:0;background:linear-gradient(110deg,#e9e9e900,#e3e3e300 40%,#e3e3e380 50%,#e3e3e300 60% 100%);animation:animate-loading 1.2s linear infinite}.qms-loading-container .qms-loader__wrapper{position:relative;width:100%;height:100%}.qms-loading-container .qms-loader__wrapper .row-loader{background-color:#eee;position:absolute;left:0;width:100%;height:40px;overflow:hidden}@keyframes animate-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}.btn-close-dialog.qms-btn-icon:focus:not(:hover){background-color:unset!important;color:unset!important}.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8.QMSSearchFieldDirective, selector: "mat-form-field[qms-search-field]", inputs: ["isLoading"] }, { kind: "directive", type: i8.QMSInputClearDirective, selector: "[qms-input-clear]" }, { kind: "directive", type: i9.QMSFormFieldDirective, selector: "[qms-form]" }, { kind: "directive", type: i9.QMSGroupOptionDirective, selector: "[qms-group-options]", inputs: ["label"] }, { kind: "directive", type: i9.AutocompleteOffDirective, selector: "[qms-group-options]" }, { kind: "directive", type: i10.QMSInputChipDirective, selector: "mat-chip[qms-chip]", inputs: ["selected"] }, { kind: "directive", type: i11.QMSChipBodyDirective, selector: "[qms-chip-body]" }, { kind: "directive", type: i12.QMSScrollbarDirective, selector: "[qms-scrollbar]", inputs: ["isNoneBackground"] }, { kind: "directive", type: i13.QMSToolTipRendererDirective, selector: "[qms-tool-tip]", inputs: ["showToolTip", "mode", "qms-tool-tip", "contentTemplate", "position"] }, { kind: "directive", type: i14.EllipsifyDirective, selector: "[qms-elipsify]" }, { kind: "directive", type: i15.QMSContentChangesDirective, selector: "[qmsContentChanges]", inputs: ["qmsContentChanges"] }, { kind: "component", type: i16.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i16.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i17.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i18.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i19.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i20.QMSButton, selector: "button[qms-btn], button[qms-btn-lg], button[qms-btn-outlined],\n button[qms-btn-outlined-lg], button[qms-btn-text], button[qms-btn-text-lg],\n button[qms-btn-fab],button[qms-btn-fab-sm],button[qms-btn-fab-ext],\n button[qms-btn-fab-outlined],button[qms-btn-fab-outlined-sm],button[qms-btn-fab-outlined-ext]", inputs: ["disabled", "color"], exportAs: ["qmsButton"] }, { kind: "component", type: i20.QMSButtonIcon, selector: "button[qms-btn-icon]", inputs: ["disabled", "color", "active"], exportAs: ["qmsButtonIcon"] }, { kind: "component", type: i21.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i22.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled", "tabIndex"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i22.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i22.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: i23.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i24.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i24.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "component", type: i25.SelectDepartmentTreeComponent, selector: "qms-select-department-tree", inputs: ["rowsSkeleton", "height", "config", "maxWidthNode"], outputs: ["onSearchEvent", "onPagingSearchEvent", "onValueChangeEvent", "selectionNodeChangeEvent", "onCheckNodeEvent", "onExpandNodeEvent", "onLoadMoreEvent", "onCheckItemSearchEvent", "onCheckAllItemSearchEvent", "toggleIncludeChildEvent", "isPushingChildNodes"] }, { kind: "component", type: i26.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i27.QMSListLine, selector: "[qms-line]", inputs: ["size", "type", "color"] }, { kind: "directive", type: i27.QMSListExpansion, selector: "[qms-expansion]" }, { kind: "component", type: i28.QMSPaginatorComponent, selector: "qms-paginator", inputs: ["numHidden", "size", "pageSizeOptions", "pageSize", "length", "pageIndex", "overlayPanelClass"], outputs: ["page"] }], animations: [SelectAccessAnimationTrigger], encapsulation: i0.ViewEncapsulation.None }); }
666
+ ], viewQueries: [{ propertyName: "tree", first: true, predicate: ["tree"], descendants: true, read: SelectDepartmentTreeComponent }, { propertyName: "pagingPerson", first: true, predicate: ["pagingPerson"], descendants: true }, { propertyName: "pagingUserGroup", first: true, predicate: ["pagingUserGroup"], descendants: true }, { propertyName: "pagingDepartment", first: true, predicate: ["pagingDepartment"], descendants: true }], ngImport: i0, template: "<h3 mat-dialog-title class=\"more-action\">\n {{dialogData.titleDialog || LANG.SELECT_ACCESS}}\n <button matDialogClose class=\"close-btn\" qms-btn-icon color=\"light\">\n <mat-icon class=\"mat-icons-outlined\">close</mat-icon>\n </button>\n</h3>\n<mat-dialog-content>\n <div [class.active]=\"optionSelect.value !== null\" class=\"qms-dialog-content\">\n <div class=\"access-dialog-wraper\">\n <mat-form-field *ngIf=\"options.length > 1\" qms-form qms-select-input class=\"field-select-option w-100 mb-2\"\n appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.TYPE\" qms-select-input>{{LANG.TYPE}}</mat-label>\n <mat-select (selectionChange)=\"onSelectionTypeChange($event)\" [formControl]=\"optionSelect\" placeholder=\"Select\"\n disableOptionCentering #singleSelect panelClass=\"qms-select-panel\" qms-select>\n\n <mat-option *ngFor=\"let item of options\" [value]=\"item.type\">\n {{ LANG[item.displayName] }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"body-dialog-container\">\n <div class=\"option-selected-content\">\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.PERSON\">\n <form *ngIf=\"personForm\" [formGroup]=\"personForm\">\n <div class=\"group-filter-person-option\">\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.userGroups.length\" qms-form qms-select-input\n class=\"w-100 mb-2\" appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.ROLE\" qms-select-input>{{LANG.ROLE}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select formControlName=\"userGroup\"\n disableOptionCentering>\n <mat-select-trigger>\n {{personForm.controls['userGroup'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"userGroupFilter\" placeholderLabel=\"{{ LANG.ROLE }}\"\n noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option mode=\"dark\" class=\"opt-check-icon\"\n *ngFor=\"let item of filteredSearchTextBox.userGroup.value\" [value]=\"item\">\n <span qms-elipsify position=\"top\" mode=\"dark\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['userGroup'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span [@inOutAnimation] (click)=\"personForm.get('userGroup').setValue('')\" class=\"pointer \" matSuffix\n aria-label=\"Clear\" *ngIf=\"personForm.get('userGroup').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.departments.length\"\n class=\"w-100 input-select-option mb-2\" qms-form qms-select-input>\n <mat-label [attr.aria-label]=\"LANG.DEPARTMENT_UNIT\">{{LANG.DEPARTMENT_UNIT}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select disableOptionCentering\n formControlName=\"department\">\n <mat-select-trigger>\n {{personForm.controls['department'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"departmentFilter\"\n [placeholderLabel]=\"LANG.DEPARTMENT_UNIT\" noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option class=\"opt-check-icon\" *ngFor=\"let item of filteredSearchTextBox.department.value\"\n [value]=\"item\">\n <span qms-elipsify mode=\"dark\" position=\"top\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['department'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span (click)=\"setFormControlValue(['recursive','department'], [false,''])\" [@inOutAnimation]\n class=\"pointer\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('department').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n </div>\n\n <mat-slide-toggle [@inOutAnimation] *ngIf=\"personForm.controls['department'].value\"\n class=\"w-100 slide-toggle\" formControlName=\"recursive\" color=\"default\" qms-group-options>\n <span class=\"text-label\">{{LANG.INCLUDE_SUB_DEPARTMENTS}}</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"w-100 mb-2\" appearance=\"fill\" qms-form qms-search-field>\n <mat-label [attr.aria-label]=\"LANG.SEARCH_WITH_NAME\"\n qms-select-input>{{LANG.SEARCH_WITH_NAME}}</mat-label>\n <input matInput appearance=\"off\" formControlName=\"keyword\" type=\"text\" autocomplete=\"off\" />\n <button *ngIf=\"!getLoading$.value\" qms-btn-icon color=\"light\" [@inOutAnimation]\n (click)=\"onSearchPersonFreeText()\" class=\"pointer me-1\" matSuffix aria-label=\"Search\">\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <button [@inOutAnimation] (click)=\"personForm.get('keyword').setValue('')\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('keyword').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <button (click)=\"onFilterPerson()\" qms-btn-outlined class=\"w-100 my-1\">\n {{LANG.FILTER}}\n </button>\n\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && personFiltered.length && !dialogData.modeSelectOnePerson\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.PERSON)\" #checkPerson class=\"w-100 mb-1 checkbox-all\"\n (click)=\"personFiltered.length && onCheckAll(OPTION_ENUM.PERSON,checkPerson)\"\n [checked]=\"isCheckAll(OPTION_ENUM.PERSON)\" [indeterminate]=\"isIndeterminate(OPTION_ENUM.PERSON)\"\n color=\"default\" qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}} (<b>{{personFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value; then loading\">\n </ng-container>\n <div [@inOutAnimation] *ngIf=\"personFiltered.length && !getLoading$.value\" [@listAnimation]\n class=\"item-list-wrapper\">\n <div class=\"item mt-1\" [@inOutAnimation] *ngFor=\"let employee of personFiltered; trackBy: trackByFn\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOnePerson ?itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: employee, type: OPTION_ENUM.PERSON}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!personFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingPerson\n *ngIf=\"getPerson$.value.length > 10\" [length]=\"getPerson$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getPerson$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.PERSON)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </form>\n </ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.USER_GROUP\">\n <div>\n <form (submit)=\"onFilterUserGroup()\">\n <mat-form-field class=\"w-100 mb-2\" qms-form qms-search-field>\n <mat-label aria-label=\"User group\" qms-select-input>{{ LANG.SEARCH }} {{ LANG.USER_GROUP\n }}</mat-label>\n <input [formControl]=\"userGroupForm\" matInput type=\"text\" autocomplete=\"off\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <button matSuffix (click)=\"userGroupForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </form>\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && (userGroupFiltered.length && !dialogData.modeSelectOneUserGroup)\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.USER_GROUP)\" #checkUserGroup\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.USER_GROUP)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.USER_GROUP)\"\n (click)=\"userGroupFiltered.length && onCheckAll(OPTION_ENUM.USER_GROUP,checkUserGroup)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}\n (<b>{{userGroupFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"userGroupFiltered.length && !getLoading$.value\" [@listAnimation] class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let userGroup of userGroupFiltered\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOneUserGroup ? itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: userGroup,type: OPTION_ENUM.USER_GROUP}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!userGroupFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingUserGroup class=\"my-1\"\n *ngIf=\"getUserGroup$.value.length > 10 \" [length]=\"getUserGroup$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getUserGroup$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.USER_GROUP)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.DEPARTMENT\">\n\n <ng-container *ngIf=\"!dialogData.isDepartmentPaging\">\n <qms-select-department-tree #tree [rowsSkeleton]=\"8\" [config]=\"dialogData.treeDepartmentConfig\"\n [maxWidthNode]=\"dialogData.maxWidthNode\" (onSearchEvent)=\"onSearchDepartmentEvent.emit($event)\"\n (onValueChangeEvent)=\"onResultDepartmentChange($event)\"\n (selectionNodeChangeEvent)=\"onSelectionNodeDepartmentChange($event)\"\n (onPagingSearchEvent)=\"onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)\">\n </qms-select-department-tree>\n </ng-container>\n\n <ng-container *ngIf=\"dialogData.isDepartmentPaging\">\n\n <form (ngSubmit)=\"onFilterDepartment()\">\n <mat-form-field class=\"w-100 mb-2\" qms-form qms-search-field>\n <mat-label aria-label=\"Department\" qms-select-input>{{ LANG.SEARCH }} {{LANG.DEPARTMENT}}</mat-label>\n <input [formControl]=\"departmentSearchForm\" matInput type=\"text\" autocomplete=\"off\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <div [@inOutAnimation] *ngIf=\"!!departmentSearchForm.value && !getLoading$.value\" matSuffix\n qms-input-clear>\n <button (click)=\"departmentSearchForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </mat-form-field>\n </form>\n\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation] *ngIf=\"!getLoading$.value && departmentFiltered.length\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.DEPARTMENT)\" #checkDepartment\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.DEPARTMENT)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.DEPARTMENT)\"\n (click)=\"departmentFiltered.length && onCheckAll(OPTION_ENUM.DEPARTMENT,checkDepartment)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}\n (<b>{{departmentFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"departmentFiltered.length && !getLoading$.value\" [@listAnimation] class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let item of departmentFiltered\">\n <ng-container [ngTemplateOutlet]=\"itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: item,type: OPTION_ENUM.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!departmentFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingDepartment class=\"my-1\"\n *ngIf=\"getDepartment$.value.length > 10 \" [length]=\"getDepartment$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getDepartment$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"optionSelect.value !== null\" class=\"result-wrapper\">\n <div class=\"result-selected-container\">\n <div [@inOutAnimation] *ngIf=\"(options.length === 1) || (options.length > 1 && optionSelect.value !== null)\"\n class=\"header-title result-header\">\n <span>\n {{\n dialogData.titleResult || LANG.RESULTS}}\n <span *ngIf=\"options.length === 1 && hasItemSelected()\">\n ({{getResultTabActive().length}})\n </span>\n </span>\n </div>\n <div class=\"result-body\">\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.PERSON)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.persons, type:OPTION_ENUM.PERSON, title:LANG.PERSON}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.USER_GROUP)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.userGroups, type:OPTION_ENUM.USER_GROUP, title:LANG.USER_GROUP}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT) && !dialogData.isDepartmentPaging\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departments || resultAccess.departmentsFlat, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT) && dialogData.isDepartmentPaging\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departmentsFlat, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <mat-divider class=\"w-100 mb-3\"></mat-divider>\n <button class=\"me-2\" qms-btn-text mat-dialog-close>\n {{dialogData.cancelTitle || LANG.CANCEL}}\n </button>\n <button *ngIf=\"optionSelect.value !== null\"\n [disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\" class=\"btn-add\"\n [class.qms-btn-disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\"\n [mat-dialog-close]=\"resultAccess\" qms-btn>\n <span>{{dialogData.confirmTitle || LANG.ADD}}</span>\n </button>\n</mat-dialog-actions>\n\n<ng-template #noResult>\n <svg width=\"89\" height=\"130\" viewBox=\"0 0 89 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"white\" />\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"#0163B2\" fill-opacity=\"0.12\" />\n <path\n d=\"M44.5 56.6936L58.096 64.8996L54.488 49.4336L66.5 39.0276L50.682 37.6856L44.5 23.0996L38.318 37.6856L22.5 39.0276L34.512 49.4336L30.904 64.8996L44.5 56.6936Z\"\n fill=\"#0163B3\" />\n <text x=\"10\" y=\"105\" fill=\"#0163B2\">{{LANG.NO_RESULT}}</text>\n </svg>\n</ng-template>\n<ng-template #listChip let-data=\"data\" let-type=\"type\">\n <mat-chip-set [@inOutAnimation] *ngIf=\"data?.length\" class=\"panel__item qms-scrollbar\">\n <div [@inOutAnimation_2] *ngFor=\"let item of data; let i = index\">\n <mat-chip (click)=\"onScollToNodeTreeDepartment(item)\" [@updateItemAnimation]\n *qmsContentChanges=\"item.children?.length\" class=\"chip-item-result\" qms-chip [removable]=\"true\">\n <span qms-chip-body>\n <span [qms-tool-tip]=\"generateTooltip(item)\" position=\"top\" mode=\"dark\" class=\"text-label\">\n {{item.name}}\n <span *ngIf=\"item.subName\">({{ item.subName }})</span>\n </span>\n <span class=\"chip-item-children__count ms-1\" *ngIf=\"item?.children && item?.isGroup\">\n {{item.children.length}}/{{item.childCount}}\n </span>\n </span>\n\n <button matChipRemove *ngIf=\"allowRemove(type, item)\" (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n <button matChipRemove *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\"\n (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n </mat-chip>\n </div>\n </mat-chip-set>\n</ng-template>\n\n\n<ng-template #viewResultCollapse let-title=\"title\" let-data=\"data\" let-type=\"type\">\n <mat-expansion-panel qms-expansion [expanded]=\"optionSelect.value === type\">\n <mat-expansion-panel-header>\n <div class=\"title-content\">\n <div class=\"qms-list-text\">\n <div qms-line color=\"default-subtitle\">{{title}}\n <span class=\"fw-600\">\n ({{data?.length}})\n </span>\n </div>\n </div>\n </div>\n </mat-expansion-panel-header>\n <ng-container [ngTemplateOutlet]=\"listChip\" [ngTemplateOutletContext]=\"{data: data,type: type}\">\n </ng-container>\n </mat-expansion-panel>\n</ng-template>\n\n<ng-template #itemWithoutCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <div (click)=\"onSelectItem(type,item)\" class=\"item-without-checkbox w-100\" [class.active]=\"item.selected\">\n <div class=\"item-content\">\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </div>\n <div class=\"item-state\">\n <mat-icon [@inOutAnimation] *ngIf=\"item.selected\">check</mat-icon>\n </div>\n </div>\n</ng-template>\n\n<ng-template #itemCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <mat-checkbox [disabled]=\"!allowRemove(type, item)\" [checked]=\"item.selected\" (click)=\"onSelectItem(type,item)\"\n class=\"w-100\" color=\"default\" qms-group-options>\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </mat-checkbox>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"qms-loading-container\">\n <div class=\"qms-loader\" *ngFor=\"let item of arrSkeleton\">\n <div class=\"qms-loader__wrapper\">\n <div class=\"row-loader\">\n </div>\n </div>\n </div>\n </div>\n</ng-template>", styles: ["@font-face{font-family:icomoon;src:url(/assets/fonts/icomoon.eot?aghldx);src:url(/assets/fonts/icomoon.eot?aghldx#iefix) format(\"embedded-opentype\"),url(/assets/fonts/icomoon.ttf?aghldx) format(\"truetype\"),url(/assets/fonts/icomoon.woff?aghldx) format(\"woff\"),url(/assets/fonts/icomoon.svg?aghldx#icomoon) format(\"svg\");font-weight:400;font-style:normal;font-display:block}[class^=icon-],[class*=\" icon-\"]{font-family:icomoon!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-acutely-toxic .path1:before{content:\"\\e91b\";color:#e32730}.icon-acutely-toxic .path2:before{content:\"\\e922\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path3:before{content:\"\\e923\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path4:before{content:\"\\e924\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path5:before{content:\"\\e925\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path6:before{content:\"\\e926\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path7:before{content:\"\\e927\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path8:before{content:\"\\e928\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path9:before{content:\"\\e929\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path10:before{content:\"\\e92a\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path11:before{content:\"\\e92b\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path12:before{content:\"\\e92c\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path13:before{content:\"\\e92d\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path14:before{content:\"\\e92e\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path15:before{content:\"\\e92f\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path16:before{content:\"\\e930\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path17:before{content:\"\\e931\";margin-left:-1em;color:#323232}.icon-add-column:before{content:\"\\e932\"}.icon-add-tooltip:before{content:\"\\e933\"}.icon-admin:before{content:\"\\e934\"}.icon-annual-cycle:before{content:\"\\e935\"}.icon-assignment-repete:before{content:\"\\e936\"}.icon-barrier-add:before{content:\"\\e937\"}.icon-barrier-edit:before{content:\"\\e938\"}.icon-barrier-view:before{content:\"\\e939\"}.icon-button-group:before{content:\"\\e93a\"}.icon-chemical-manager:before{content:\"\\e93b\"}.icon-chronic-health-hazard .path1:before{content:\"\\e93c\";color:#e32730}.icon-chronic-health-hazard .path2:before{content:\"\\e93d\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path3:before{content:\"\\e93e\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path4:before{content:\"\\e93f\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path5:before{content:\"\\e940\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path6:before{content:\"\\e941\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path7:before{content:\"\\e942\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path8:before{content:\"\\e943\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path9:before{content:\"\\e944\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path10:before{content:\"\\e945\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path11:before{content:\"\\e946\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path12:before{content:\"\\e947\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path13:before{content:\"\\e948\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path14:before{content:\"\\e949\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path15:before{content:\"\\e94a\";margin-left:-1em;color:#323232}.icon-contingency:before{content:\"\\e94b\"}.icon-corrosive .path1:before{content:\"\\e94c\";color:#323232}.icon-corrosive .path2:before{content:\"\\e94d\";margin-left:-1em;color:#323232}.icon-corrosive .path3:before{content:\"\\e94e\";margin-left:-1em;color:#323232}.icon-corrosive .path4:before{content:\"\\e94f\";margin-left:-1em;color:#323232}.icon-corrosive .path5:before{content:\"\\e950\";margin-left:-1em;color:#323232}.icon-corrosive .path6:before{content:\"\\e951\";margin-left:-1em;color:#323232}.icon-corrosive .path7:before{content:\"\\e952\";margin-left:-1em;color:#323232}.icon-corrosive .path8:before{content:\"\\e953\";margin-left:-1em;color:#323232}.icon-corrosive .path9:before{content:\"\\e954\";margin-left:-1em;color:#323232}.icon-corrosive .path10:before{content:\"\\e955\";margin-left:-1em;color:#323232}.icon-corrosive .path11:before{content:\"\\e956\";margin-left:-1em;color:#323232}.icon-corrosive .path12:before{content:\"\\e957\";margin-left:-1em;color:#323232}.icon-corrosive .path13:before{content:\"\\e958\";margin-left:-1em;color:#323232}.icon-corrosive .path14:before{content:\"\\e959\";margin-left:-1em;color:#323232}.icon-corrosive .path15:before{content:\"\\e95a\";margin-left:-1em;color:#323232}.icon-corrosive .path16:before{content:\"\\e95b\";margin-left:-1em;color:#323232}.icon-corrosive .path17:before{content:\"\\e95c\";margin-left:-1em;color:#323232}.icon-corrosive .path18:before{content:\"\\e95d\";margin-left:-1em;color:#323232}.icon-corrosive .path19:before{content:\"\\e95e\";margin-left:-1em;color:#323232}.icon-corrosive .path20:before{content:\"\\e95f\";margin-left:-1em;color:#323232}.icon-corrosive .path21:before{content:\"\\e960\";margin-left:-1em;color:#e32730}.icon-dashboard:before{content:\"\\e961\"}.icon-database-sds:before{content:\"\\e962\"}.icon-description-add:before{content:\"\\e963\"}.icon-description-edit:before{content:\"\\e964\"}.icon-description-view:before{content:\"\\e965\";color:#666}.icon-document-read .path1:before{content:\"\\e966\";color:#000;opacity:.6}.icon-document-read .path2:before{content:\"\\e967\";margin-left:-1em;color:#fff}.icon-document-read .path3:before{content:\"\\e968\";margin-left:-1em;color:#000;opacity:.6}.icon-draft:before{content:\"\\e969\"}.icon-expired-off:before{content:\"\\e96a\"}.icon-expired-on:before{content:\"\\e96b\"}.icon-explosive .path1:before{content:\"\\e96c\";color:#e32730}.icon-explosive .path2:before{content:\"\\e96d\";margin-left:-1em;color:#323232}.icon-explosive .path3:before{content:\"\\e96e\";margin-left:-1em;color:#323232}.icon-explosive .path4:before{content:\"\\e96f\";margin-left:-1em;color:#323232}.icon-explosive .path5:before{content:\"\\e970\";margin-left:-1em;color:#323232}.icon-explosive .path6:before{content:\"\\e971\";margin-left:-1em;color:#323232}.icon-explosive .path7:before{content:\"\\e972\";margin-left:-1em;color:#323232}.icon-explosive .path8:before{content:\"\\e973\";margin-left:-1em;color:#323232}.icon-explosive .path9:before{content:\"\\e974\";margin-left:-1em;color:#323232}.icon-explosive .path10:before{content:\"\\e975\";margin-left:-1em;color:#323232}.icon-explosive .path11:before{content:\"\\e976\";margin-left:-1em;color:#323232}.icon-explosive .path12:before{content:\"\\e977\";margin-left:-1em;color:#323232}.icon-explosive .path13:before{content:\"\\e978\";margin-left:-1em;color:#323232}.icon-explosive .path14:before{content:\"\\e979\";margin-left:-1em;color:#323232}.icon-explosive .path15:before{content:\"\\e97a\";margin-left:-1em;color:#323232}.icon-explosive .path16:before{content:\"\\e97b\";margin-left:-1em;color:#323232}.icon-explosive .path17:before{content:\"\\e97c\";margin-left:-1em;color:#323232}.icon-explosive .path18:before{content:\"\\e97d\";margin-left:-1em;color:#323232}.icon-explosive .path19:before{content:\"\\e97e\";margin-left:-1em;color:#323232}.icon-explosive .path20:before{content:\"\\e97f\";margin-left:-1em;color:#323232}.icon-explosive .path21:before{content:\"\\e980\";margin-left:-1em;color:#323232}.icon-explosive .path22:before{content:\"\\e981\";margin-left:-1em;color:#323232}.icon-explosive .path23:before{content:\"\\e982\";margin-left:-1em;color:#323232}.icon-explosive .path24:before{content:\"\\e983\";margin-left:-1em;color:#323232}.icon-explosive .path25:before{content:\"\\e984\";margin-left:-1em;color:#323232}.icon-explosive .path26:before{content:\"\\e985\";margin-left:-1em;color:#323232}.icon-explosive .path27:before{content:\"\\e986\";margin-left:-1em;color:#323232}.icon-explosive .path28:before{content:\"\\e987\";margin-left:-1em;color:#323232}.icon-explosive .path29:before{content:\"\\e988\";margin-left:-1em;color:#323232}.icon-explosive .path30:before{content:\"\\e989\";margin-left:-1em;color:#323232}.icon-explosive .path31:before{content:\"\\e98a\";margin-left:-1em;color:#323232}.icon-explosive .path32:before{content:\"\\e98b\";margin-left:-1em;color:#323232}.icon-explosive .path33:before{content:\"\\e98c\";margin-left:-1em;color:#323232}.icon-explosive .path34:before{content:\"\\e98d\";margin-left:-1em;color:#323232}.icon-explosive .path35:before{content:\"\\e98e\";margin-left:-1em;color:#323232}.icon-explosive .path36:before{content:\"\\e98f\";margin-left:-1em;color:#323232}.icon-explosive .path37:before{content:\"\\e990\";margin-left:-1em;color:#323232}.icon-explosive .path38:before{content:\"\\e991\";margin-left:-1em;color:#323232}.icon-explosive .path39:before{content:\"\\e992\";margin-left:-1em;color:#323232}.icon-explosive .path40:before{content:\"\\e993\";margin-left:-1em;color:#323232}.icon-explosive .path41:before{content:\"\\e994\";margin-left:-1em;color:#323232}.icon-explosive .path42:before{content:\"\\e995\";margin-left:-1em;color:#323232}.icon-explosive .path43:before{content:\"\\e996\";margin-left:-1em;color:#323232}.icon-explosive .path44:before{content:\"\\e997\";margin-left:-1em;color:#323232}.icon-explosive .path45:before{content:\"\\e998\";margin-left:-1em;color:#323232}.icon-explosive .path46:before{content:\"\\e999\";margin-left:-1em;color:#323232}.icon-file-excel:before{content:\"\\e99a\"}.icon-file-pdf:before{content:\"\\e99b\"}.icon-file-pdf-verified .path1:before{content:\"\\e99c\";color:#000;opacity:.6}.icon-file-pdf-verified .path2:before{content:\"\\e99d\";margin-left:-1em;color:#fff}.icon-file-pdf-verified .path3:before{content:\"\\e99e\";margin-left:-1em;color:#000;opacity:.6}.icon-file-word:before{content:\"\\e99f\"}.icon-filter-alt:before{content:\"\\e9a0\"}.icon-flammable .path1:before{content:\"\\e9a1\";color:#323232}.icon-flammable .path2:before{content:\"\\e9a2\";margin-left:-1em;color:#323232}.icon-flammable .path3:before{content:\"\\e9a3\";margin-left:-1em;color:#e32730}.icon-gas-under-pressure .path1:before{content:\"\\e9a4\";color:#323232}.icon-gas-under-pressure .path2:before{content:\"\\e9a5\";margin-left:-1em;color:#e32730}.icon-health-hazard .path1:before{content:\"\\e9a6\";color:#323232}.icon-health-hazard .path2:before{content:\"\\e9a7\";margin-left:-1em;color:#e32730}.icon-line-break:before{content:\"\\e9a8\"}.icon-location:before{content:\"\\e9a9\"}.icon-measure-add:before{content:\"\\e9aa\"}.icon-measure-edit:before{content:\"\\e9ab\"}.icon-measure-view:before{content:\"\\e9ac\";color:#666}.icon-messages:before{content:\"\\e9ad\"}.icon-monitoring:before{content:\"\\e9ae\";color:#666}.icon-move:before{content:\"\\e9af\"}.icon-oxidizing .path1:before{content:\"\\e9b0\";color:#e32730}.icon-oxidizing .path2:before{content:\"\\e9b1\";margin-left:-1em;color:#323232}.icon-oxidizing .path3:before{content:\"\\e9b2\";margin-left:-1em;color:#323232}.icon-oxidizing .path4:before{content:\"\\e9b3\";margin-left:-1em;color:#323232}.icon-process-area-closed:before{content:\"\\e9b4\"}.icon-process-area-open:before{content:\"\\e9b5\"}.icon-process-linked .path1:before{content:\"\\e9b6\";color:#000;opacity:.6}.icon-process-linked .path2:before{content:\"\\e9b7\";margin-left:-1em;color:#666}.icon-risk:before{content:\"\\e9b8\"}.icon-search-in-file:before{content:\"\\e9b9\"}.icon-sort-ascending:before{content:\"\\e9ba\"}.icon-sort-descending:before{content:\"\\e9bb\"}.icon-subscript:before{content:\"\\e9bc\"}.icon-superscript:before{content:\"\\e9bd\"}.icon-syncronice-favorites:before{content:\"\\e9be\"}.icon-system-settings:before{content:\"\\e9bf\"}.icon-view-three-outlined:before{content:\"\\e9c0\"}.icon-workplace-safety:before{content:\"\\e9c1\"}.icon-checklist:before{content:\"\\e900\"}.icon-department-document .path1:before{content:\"\\e901\";color:#000;opacity:.6}.icon-department-document .path2:before{content:\"\\e902\";margin-left:-1em;color:#00804c}.icon-department-folder-closed .path1:before{content:\"\\e903\";color:#000;opacity:.6}.icon-department-folder-closed .path2:before{content:\"\\e904\";margin-left:-1em;color:#00804c}.icon-department-folder-open .path1:before{content:\"\\e905\";color:#000;opacity:.6}.icon-department-folder-open .path2:before{content:\"\\e906\";margin-left:-1em;color:#00804c}.icon-deviation:before{content:\"\\e907\"}.icon-dropdown-folder .path1:before{content:\"\\e908\";color:#00324e}.icon-dropdown-folder .path2:before{content:\"\\e909\";margin-left:-1em;color:#fff;opacity:.6}.icon-enterprise-document .path1:before{content:\"\\e90a\";color:#000;opacity:.6}.icon-enterprise-document .path2:before{content:\"\\e90b\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-closed .path1:before{content:\"\\e90c\";color:#000;opacity:.6}.icon-enterprise-folder-closed .path2:before{content:\"\\e90d\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-open .path1:before{content:\"\\e90e\";color:#000;opacity:.6}.icon-enterprise-folder-open .path2:before{content:\"\\e90f\";margin-left:-1em;color:#cf4714}.icon-folder-closed:before{content:\"\\e910\"}.icon-folder-open:before{content:\"\\e911\"}.icon-keyboard_arrow_down:before{content:\"\\e912\"}.icon-keyboard_arrow_up:before{content:\"\\e913\"}.icon-local-document .path1:before{content:\"\\e914\";color:#000;opacity:.6}.icon-local-document .path2:before{content:\"\\e915\";margin-left:-1em;color:#1954a9}.icon-local-folder-closed .path1:before{content:\"\\e916\";color:#000;opacity:.6}.icon-local-folder-closed .path2:before{content:\"\\e917\";margin-left:-1em;color:#1954a9}.icon-local-folder-open .path1:before{content:\"\\e918\";color:#000;opacity:.6}.icon-local-folder-open .path2:before{content:\"\\e919\";margin-left:-1em;color:#1954a9}.icon-process:before{content:\"\\e91a\"}.icon-regional-document .path1:before{content:\"\\e91c\";color:#000;opacity:.6}.icon-regional-document .path2:before{content:\"\\e91d\";margin-left:-1em;color:#662e0d}.icon-regional-folder-closed .path1:before{content:\"\\e91e\";color:#000;opacity:.6}.icon-regional-folder-closed .path2:before{content:\"\\e91f\";margin-left:-1em;color:#662e0d}.icon-regional-folder-open .path1:before{content:\"\\e920\";color:#000;opacity:.6}.icon-regional-folder-open .path2:before{content:\"\\e921\";margin-left:-1em;color:#662e0d}.select-access-paginator{max-height:150px!important}.mat-expansion-panel .mat-expansion-panel-body{padding-top:0!important}.mat-expansion-panel-header{font-weight:800!important}.mat-expansion-panel-header .title-content{font-size:12px!important}.w-100{width:100%}.h-100{height:100%}.pointer{cursor:pointer}.fw-600{font-weight:600}.label-item{font-weight:600;color:var(--ws-text-primary)}.sub-label{color:var(--ws-text-secondary)}.fs-14{font-size:14px}.fs-12{font-size:12px}.color-primary{color:var(--primary-light)!important}.header-title{font-weight:600;color:var(--ws-text-primary);font-size:16px}.mat-mdc-chip.chip-item-result{max-width:250px}.mat-mdc-chip.chip-item-result.item-department .qms-chip-body{display:flex;justify-content:center;align-items:center}.remove-chip-icon{cursor:pointer}.remove-chip-icon:hover{color:#000000b3}.mat-form-field-wrapper{padding-bottom:8px!important}.mat-expansion-panel{border-radius:unset!important}.mat-expansion-panel-header:not([aria-disabled=true]){background:unset}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header{background:#e5eefb}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header .qms-line{color:var(--primary-light)!important}.access-dialog-header{display:flex;justify-content:space-between;align-items:center}.mat-chip-list-wrapper{margin:unset!important}.item-list-wrapper{height:40vh;padding:4px 4px 4px 0;overflow-y:auto}.item-list-wrapper.no-result{height:50vh;display:flex;justify-content:center;align-items:center}.item-list-wrapper .item{min-height:40px}.item-list-wrapper .item-without-checkbox{min-height:45px;display:flex;justify-content:space-between;align-items:center;padding:4px 8px;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;transition:background .3s ease}.item-list-wrapper .item-without-checkbox.active{background:var(--primary-light-12-opacity)}.item-list-wrapper .item-without-checkbox:hover{background:var(--primary-light-6-opacity)}.item-list-wrapper .item-without-checkbox .mat-icon{color:var(--primary-light)!important}.confirm__button__groups .btn-add>.qms-btn-wrapper{display:flex;justify-content:center;align-items:center}.qms-dialog-content{display:grid;column-gap:8px}.qms-dialog-content.active{grid-template-columns:2fr 1fr;min-height:50vh}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-wrapper{padding-bottom:16px!important}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-underline{bottom:16px!important}.qms-dialog-content .result-wrapper{position:relative;width:100%;margin-left:8px}.qms-dialog-content .result-wrapper:after{position:absolute;content:\"\";top:0;left:0;background-color:#0000001f;height:100%;width:1px}.qms-dialog-content .result-selected-container{position:absolute;inset:0;overflow-y:auto;padding:0 8px}.qms-dialog-content .result-selected-container .result-header{height:51px;display:flex;align-items:center;position:sticky;top:0;z-index:10;padding:0!important;background:#fff;margin-bottom:12px}.qms-dialog-content .result-selected-container .result-header:after{position:absolute;content:\"\";bottom:0;left:0;width:100%;height:1px;background:#0000000a}.qms-dialog-content .result-selected-container .result-header .mat-mdc-card-content{height:51px;width:100%;padding-left:4px;display:flex;align-items:center;background-color:#0000000a}.option-selected-content .group-filter-person-option{display:flex;flex-direction:row-reverse;justify-content:center;align-items:center;gap:8px}span.chip-item__content_name{display:inline-block;max-width:175px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}span.chip-item-children__count{font-size:.75rem;color:#00000080;font-weight:600}.mat-mdc-slide-toggle.qms-group-options{padding:unset!important}.input-option-filter .mat-form-field-wrapper{padding-bottom:8px!important}.input-option-filter .mat-form-field-underline{bottom:8px!important}.slide-toggle{margin-bottom:8px}.confirm__button__groups.none-option{margin-top:85px}.btn-icon-clear{position:relative;padding:0 1rem}.btn-icon-clear .qms-btn-icon{margin-right:unset!important}.btn-icon-clear:after{position:absolute;content:\"\";left:0;top:0;height:100%;width:1px;background:#0000004d}.qms-paginator .mat-mdc-paginator-container .qms-total-result{margin-bottom:0;margin-right:12px;height:100%;display:flex;align-items:center}.qms-paginator .mat-mdc-paginator-container .qms-total-result span{font-weight:600;color:#000c}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions{margin-bottom:0;column-gap:2px}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions>.qms-total-result{margin-bottom:0}.qms-paginator .qms-paginator-page-size{align-items:center}.qms-paginator .mat-form-field-wrapper{padding-bottom:0!important}.mat-mdc-checkbox.checkbox-all .mat-checkbox-label{flex-direction:row!important;align-items:center!important;column-gap:4px!important}.mat-expansion-panel.qms-expansion{margin:0!important}.access-department .qms-view-search-result{height:100%!important}.access-department .qms-view-search-result .result{max-height:calc(100% - 80px)!important}.access-department .loading-container{height:calc(100% - 40px)!important}.qms-loading-container{height:45vh;overflow:hidden;display:grid;grid-template-rows:repeat(60px)}.qms-loading-container .qms-loader{position:relative;width:100%;height:100%;padding:10px 0;overflow:hidden}.qms-loading-container .qms-loader:after{content:\"\";position:absolute;width:100%;height:100%;top:0;left:0;background:linear-gradient(110deg,#e9e9e900,#e3e3e300 40%,#e3e3e380 50%,#e3e3e300 60% 100%);animation:animate-loading 1.2s linear infinite}.qms-loading-container .qms-loader__wrapper{position:relative;width:100%;height:100%}.qms-loading-container .qms-loader__wrapper .row-loader{background-color:#eee;position:absolute;left:0;width:100%;height:40px;overflow:hidden}@keyframes animate-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}.btn-close-dialog.qms-btn-icon:focus:not(:hover){background-color:unset!important;color:unset!important}.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8.QMSSearchFieldDirective, selector: "mat-form-field[qms-search-field]", inputs: ["isLoading"] }, { kind: "directive", type: i8.QMSInputClearDirective, selector: "[qms-input-clear]" }, { kind: "directive", type: i9.QMSFormFieldDirective, selector: "[qms-form]" }, { kind: "directive", type: i9.QMSGroupOptionDirective, selector: "[qms-group-options]", inputs: ["label"] }, { kind: "directive", type: i9.AutocompleteOffDirective, selector: "[qms-group-options]" }, { kind: "directive", type: i10.QMSInputChipDirective, selector: "mat-chip[qms-chip]", inputs: ["selected"] }, { kind: "directive", type: i11.QMSChipBodyDirective, selector: "[qms-chip-body]" }, { kind: "directive", type: i12.QMSScrollbarDirective, selector: "[qms-scrollbar]", inputs: ["isNoneBackground"] }, { kind: "directive", type: i13.QMSToolTipRendererDirective, selector: "[qms-tool-tip]", inputs: ["showToolTip", "mode", "qms-tool-tip", "contentTemplate", "position"] }, { kind: "directive", type: i14.EllipsifyDirective, selector: "[qms-elipsify]" }, { kind: "directive", type: i15.QMSContentChangesDirective, selector: "[qmsContentChanges]", inputs: ["qmsContentChanges"] }, { kind: "component", type: i16.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i16.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i17.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i18.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toggleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti", "recreateValuesArray"], outputs: ["toggleAll"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i19.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i20.QMSButton, selector: "button[qms-btn], button[qms-btn-lg], button[qms-btn-outlined],\n button[qms-btn-outlined-lg], button[qms-btn-text], button[qms-btn-text-lg],\n button[qms-btn-fab],button[qms-btn-fab-sm],button[qms-btn-fab-ext],\n button[qms-btn-fab-outlined],button[qms-btn-fab-outlined-sm],button[qms-btn-fab-outlined-ext]", inputs: ["disabled", "color"], exportAs: ["qmsButton"] }, { kind: "component", type: i20.QMSButtonIcon, selector: "button[qms-btn-icon]", inputs: ["disabled", "color", "active"], exportAs: ["qmsButtonIcon"] }, { kind: "component", type: i21.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i22.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled", "tabIndex"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i22.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i22.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: i23.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i24.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i24.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "component", type: i25.SelectDepartmentTreeComponent, selector: "qms-select-department-tree", inputs: ["rowsSkeleton", "height", "config", "maxWidthNode"], outputs: ["onSearchEvent", "onPagingSearchEvent", "onValueChangeEvent", "selectionNodeChangeEvent", "onCheckNodeEvent", "onExpandNodeEvent", "onLoadMoreEvent", "onCheckItemSearchEvent", "onCheckAllItemSearchEvent", "toggleIncludeChildEvent", "isPushingChildNodes"] }, { kind: "component", type: i26.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i27.QMSListLine, selector: "[qms-line]", inputs: ["size", "type", "color"] }, { kind: "directive", type: i27.QMSListExpansion, selector: "[qms-expansion]" }, { kind: "component", type: i28.QMSPaginatorComponent, selector: "qms-paginator", inputs: ["numHidden", "size", "pageSizeOptions", "pageSize", "length", "pageIndex", "overlayPanelClass"], outputs: ["page"] }], animations: [SelectAccessAnimationTrigger], encapsulation: i0.ViewEncapsulation.None }); }
667
667
  }
668
668
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: QMSSelectAccessDialogComponent, decorators: [{
669
669
  type: Component,
@@ -674,7 +674,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
674
674
  clickAction: 'noop'
675
675
  }
676
676
  }
677
- ], encapsulation: ViewEncapsulation.None, template: "<h3 mat-dialog-title class=\"more-action\">\n {{dialogData.titleDialog || LANG.SELECT_ACCESS}}\n <button matDialogClose class=\"close-btn\" qms-btn-icon color=\"light\">\n <mat-icon class=\"mat-icons-outlined\">close</mat-icon>\n </button>\n</h3>\n<mat-dialog-content>\n <div [class.active]=\"optionSelect.value !== null\" class=\"qms-dialog-content\">\n <div class=\"access-dialog-wraper\">\n <mat-form-field *ngIf=\"options.length > 1\" qms-form qms-select-input class=\"field-select-option w-100 mb-2\"\n appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.TYPE\" qms-select-input>{{LANG.TYPE}}</mat-label>\n <mat-select (selectionChange)=\"onSelectionTypeChange($event)\" [formControl]=\"optionSelect\" placeholder=\"Select\"\n disableOptionCentering #singleSelect panelClass=\"qms-select-panel\" qms-select>\n\n <mat-option *ngFor=\"let item of options\" [value]=\"item.type\">\n {{ LANG[item.displayName] }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"body-dialog-container\">\n <div class=\"option-selected-content\">\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.PERSON\">\n <form *ngIf=\"personForm\" [formGroup]=\"personForm\">\n <div class=\"group-filter-person-option\">\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.userGroups.length\" qms-form qms-select-input\n class=\"w-100 mb-2\" appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.ROLE\" qms-select-input>{{LANG.ROLE}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select formControlName=\"userGroup\"\n disableOptionCentering>\n <mat-select-trigger>\n {{personForm.controls['userGroup'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"userGroupFilter\" placeholderLabel=\"{{ LANG.ROLE }}\"\n noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option mode=\"dark\" class=\"opt-check-icon\"\n *ngFor=\"let item of filteredSearchTextBox.userGroup.value\" [value]=\"item\">\n <span qms-elipsify position=\"top\" mode=\"dark\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['userGroup'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span [@inOutAnimation] (click)=\"personForm.get('userGroup').setValue('')\" class=\"pointer \" matSuffix\n aria-label=\"Clear\" *ngIf=\"personForm.get('userGroup').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.departments.length\"\n class=\"w-100 input-select-option mb-2\" qms-form qms-select-input>\n <mat-label [attr.aria-label]=\"LANG.DEPARTMENT_UNIT\">{{LANG.DEPARTMENT_UNIT}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select disableOptionCentering\n formControlName=\"department\">\n <mat-select-trigger>\n {{personForm.controls['department'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"departmentFilter\"\n [placeholderLabel]=\"LANG.DEPARTMENT_UNIT\" noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option class=\"opt-check-icon\" *ngFor=\"let item of filteredSearchTextBox.department.value\"\n [value]=\"item\">\n <span qms-elipsify mode=\"dark\" position=\"top\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['department'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span (click)=\"setFormControlValue(['recursive','department'], [false,''])\" [@inOutAnimation]\n class=\"pointer\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('department').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n </div>\n\n <mat-slide-toggle [@inOutAnimation] *ngIf=\"personForm.controls['department'].value\"\n class=\"w-100 slide-toggle\" formControlName=\"recursive\" color=\"default\" qms-group-options>\n <span class=\"text-label\">{{LANG.INCLUDE_SUB_DEPARTMENTS}}</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"w-100 mb-2\" appearance=\"fill\" qms-form qms-search-field>\n <mat-label [attr.aria-label]=\"LANG.SEARCH_WITH_NAME\" class=\"visually-hidden\"\n qms-select-input>{{LANG.SEARCH_WITH_NAME}}</mat-label>\n <input matInput appearance=\"off\" placeholder=\"{{LANG.SEARCH_WITH_NAME}}\" formControlName=\"keyword\"\n type=\"text\" autocomplete=\"off\" />\n <button *ngIf=\"!getLoading$.value\" qms-btn-icon color=\"light\" [@inOutAnimation]\n (click)=\"onSearchPersonFreeText()\" class=\"pointer me-1\" matSuffix aria-label=\"Search\">\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <button [@inOutAnimation] (click)=\"personForm.get('keyword').setValue('')\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('keyword').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <button (click)=\"onFilterPerson()\" qms-btn-outlined class=\"w-100 my-1\">\n {{LANG.FILTER}}\n </button>\n\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && personFiltered.length && !dialogData.modeSelectOnePerson\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.PERSON)\" #checkPerson class=\"w-100 mb-1 checkbox-all\"\n (click)=\"personFiltered.length && onCheckAll(OPTION_ENUM.PERSON,checkPerson)\"\n [checked]=\"isCheckAll(OPTION_ENUM.PERSON)\" [indeterminate]=\"isIndeterminate(OPTION_ENUM.PERSON)\"\n color=\"default\" qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}} (<b>{{personFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value; then loading\">\n </ng-container>\n <div [@inOutAnimation] *ngIf=\"personFiltered.length && !getLoading$.value\" [@listAnimation]\n class=\"item-list-wrapper\">\n <div class=\"item mt-1\" [@inOutAnimation] *ngFor=\"let employee of personFiltered; trackBy: trackByFn\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOnePerson ?itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: employee, type: OPTION_ENUM.PERSON}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!personFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingPerson\n *ngIf=\"getPerson$.value.length > 10\" [length]=\"getPerson$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getPerson$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.PERSON)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </form>\n </ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.USER_GROUP\">\n <div>\n <form (submit)=\"onFilterUserGroup()\">\n <mat-form-field class=\"w-100 mb-2\" qms-form qms-search-field>\n <mat-label aria-label=\"User group\" class=\"visually-hidden\" qms-select-input>User group</mat-label>\n <input [formControl]=\"userGroupForm\" matInput type=\"text\" autocomplete=\"off\"\n placeholder=\"{{ LANG.SEARCH }}\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <button matSuffix (click)=\"userGroupForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </form>\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && (userGroupFiltered.length && !dialogData.modeSelectOneUserGroup)\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.USER_GROUP)\" #checkUserGroup\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.USER_GROUP)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.USER_GROUP)\"\n (click)=\"userGroupFiltered.length && onCheckAll(OPTION_ENUM.USER_GROUP,checkUserGroup)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}\n (<b>{{userGroupFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"userGroupFiltered.length && !getLoading$.value\" [@listAnimation] class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let userGroup of userGroupFiltered\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOneUserGroup ? itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: userGroup,type: OPTION_ENUM.USER_GROUP}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!userGroupFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingUserGroup class=\"my-1\"\n *ngIf=\"getUserGroup$.value.length > 10 \" [length]=\"getUserGroup$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getUserGroup$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.USER_GROUP)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.DEPARTMENT\">\n\n <ng-container *ngIf=\"!dialogData.isDepartmentPaging\">\n <qms-select-department-tree #tree [rowsSkeleton]=\"8\" [config]=\"dialogData.treeDepartmentConfig\"\n [maxWidthNode]=\"dialogData.maxWidthNode\" (onSearchEvent)=\"onSearchDepartmentEvent.emit($event)\"\n (onValueChangeEvent)=\"onResultDepartmentChange($event)\"\n (selectionNodeChangeEvent)=\"onSelectionNodeDepartmentChange($event)\"\n (onPagingSearchEvent)=\"onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)\">\n </qms-select-department-tree>\n </ng-container>\n\n <ng-container *ngIf=\"dialogData.isDepartmentPaging\">\n\n <form (ngSubmit)=\"onFilterDepartment()\">\n <mat-form-field class=\"w-100 mb-2\" qms-form qms-search-field>\n <mat-label aria-label=\"Department\" class=\"visually-hidden\" qms-select-input>Department</mat-label>\n <input [formControl]=\"departmentSearchForm\" matInput type=\"text\" autocomplete=\"off\"\n placeholder=\"{{ LANG.SEARCH }}\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <div [@inOutAnimation] *ngIf=\"!!departmentSearchForm.value && !getLoading$.value\" matSuffix\n qms-input-clear>\n <button (click)=\"departmentSearchForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </mat-form-field>\n </form>\n\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation] *ngIf=\"!getLoading$.value && departmentFiltered.length\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.DEPARTMENT)\" #checkDepartment\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.DEPARTMENT)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.DEPARTMENT)\"\n (click)=\"departmentFiltered.length && onCheckAll(OPTION_ENUM.DEPARTMENT,checkDepartment)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}\n (<b>{{departmentFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"departmentFiltered.length && !getLoading$.value\" [@listAnimation] class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let item of departmentFiltered\">\n <ng-container [ngTemplateOutlet]=\"itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: item,type: OPTION_ENUM.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!departmentFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingDepartment class=\"my-1\"\n *ngIf=\"getDepartment$.value.length > 10 \" [length]=\"getDepartment$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getDepartment$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"optionSelect.value !== null\" class=\"result-wrapper\">\n <div class=\"result-selected-container\">\n <div [@inOutAnimation] *ngIf=\"(options.length === 1) || (options.length > 1 && optionSelect.value !== null)\"\n class=\"header-title result-header\">\n <span>\n {{\n dialogData.titleResult || LANG.RESULTS}}\n <span *ngIf=\"options.length === 1 && hasItemSelected()\">\n ({{getResultTabActive().length}})\n </span>\n </span>\n </div>\n <div class=\"result-body\">\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.PERSON)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.persons, type:OPTION_ENUM.PERSON, title:LANG.PERSON}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.USER_GROUP)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.userGroups, type:OPTION_ENUM.USER_GROUP, title:LANG.USER_GROUP}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT) && !dialogData.isDepartmentPaging\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departments || resultAccess.departmentsFlat, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT) && dialogData.isDepartmentPaging\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departmentsFlat, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <mat-divider class=\"w-100 mb-3\"></mat-divider>\n <button class=\"me-2\" qms-btn-text mat-dialog-close>\n {{dialogData.cancelTitle || LANG.CANCEL}}\n </button>\n <button *ngIf=\"optionSelect.value !== null\"\n [disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\" class=\"btn-add\"\n [class.qms-btn-disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\"\n [mat-dialog-close]=\"resultAccess\" qms-btn>\n <span>{{dialogData.confirmTitle || LANG.ADD}}</span>\n </button>\n</mat-dialog-actions>\n\n<ng-template #noResult>\n <svg width=\"89\" height=\"130\" viewBox=\"0 0 89 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"white\" />\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"#0163B2\" fill-opacity=\"0.12\" />\n <path\n d=\"M44.5 56.6936L58.096 64.8996L54.488 49.4336L66.5 39.0276L50.682 37.6856L44.5 23.0996L38.318 37.6856L22.5 39.0276L34.512 49.4336L30.904 64.8996L44.5 56.6936Z\"\n fill=\"#0163B3\" />\n <text x=\"10\" y=\"105\" fill=\"#0163B2\">{{LANG.NO_RESULT}}</text>\n </svg>\n</ng-template>\n<ng-template #listChip let-data=\"data\" let-type=\"type\">\n <mat-chip-set [@inOutAnimation] *ngIf=\"data?.length\" class=\"panel__item qms-scrollbar\">\n <div [@inOutAnimation_2] *ngFor=\"let item of data; let i = index\">\n <mat-chip (click)=\"onScollToNodeTreeDepartment(item)\" [@updateItemAnimation]\n *qmsContentChanges=\"item.children?.length\" class=\"chip-item-result\" qms-chip [removable]=\"true\">\n <span qms-chip-body>\n <span [qms-tool-tip]=\"generateTooltip(item)\" position=\"top\" mode=\"dark\" class=\"text-label\">\n {{item.name}}\n <span *ngIf=\"item.subName\">({{ item.subName }})</span>\n </span>\n <span class=\"chip-item-children__count ms-1\" *ngIf=\"item?.children && item?.isGroup\">\n {{item.children.length}}/{{item.childCount}}\n </span>\n </span>\n\n <button matChipRemove *ngIf=\"allowRemove(type, item)\" (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n <button matChipRemove *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\"\n (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n </mat-chip>\n </div>\n </mat-chip-set>\n</ng-template>\n\n\n<ng-template #viewResultCollapse let-title=\"title\" let-data=\"data\" let-type=\"type\">\n <mat-expansion-panel qms-expansion [expanded]=\"optionSelect.value === type\">\n <mat-expansion-panel-header>\n <div class=\"title-content\">\n <div class=\"qms-list-text\">\n <div qms-line color=\"default-subtitle\">{{title}}\n <span class=\"fw-600\">\n ({{data?.length}})\n </span>\n </div>\n </div>\n </div>\n </mat-expansion-panel-header>\n <ng-container [ngTemplateOutlet]=\"listChip\" [ngTemplateOutletContext]=\"{data: data,type: type}\">\n </ng-container>\n </mat-expansion-panel>\n</ng-template>\n\n<ng-template #itemWithoutCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <div (click)=\"onSelectItem(type,item)\" class=\"item-without-checkbox w-100\" [class.active]=\"item.selected\">\n <div class=\"item-content\">\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </div>\n <div class=\"item-state\">\n <mat-icon [@inOutAnimation] *ngIf=\"item.selected\">check</mat-icon>\n </div>\n </div>\n</ng-template>\n\n<ng-template #itemCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <mat-checkbox [disabled]=\"!allowRemove(type, item)\" [checked]=\"item.selected\" (click)=\"onSelectItem(type,item)\"\n class=\"w-100\" color=\"default\" qms-group-options>\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </mat-checkbox>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"qms-loading-container\">\n <div class=\"qms-loader\" *ngFor=\"let item of arrSkeleton\">\n <div class=\"qms-loader__wrapper\">\n <div class=\"row-loader\">\n </div>\n </div>\n </div>\n </div>\n</ng-template>", styles: ["@font-face{font-family:icomoon;src:url(/assets/fonts/icomoon.eot?aghldx);src:url(/assets/fonts/icomoon.eot?aghldx#iefix) format(\"embedded-opentype\"),url(/assets/fonts/icomoon.ttf?aghldx) format(\"truetype\"),url(/assets/fonts/icomoon.woff?aghldx) format(\"woff\"),url(/assets/fonts/icomoon.svg?aghldx#icomoon) format(\"svg\");font-weight:400;font-style:normal;font-display:block}[class^=icon-],[class*=\" icon-\"]{font-family:icomoon!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-acutely-toxic .path1:before{content:\"\\e91b\";color:#e32730}.icon-acutely-toxic .path2:before{content:\"\\e922\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path3:before{content:\"\\e923\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path4:before{content:\"\\e924\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path5:before{content:\"\\e925\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path6:before{content:\"\\e926\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path7:before{content:\"\\e927\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path8:before{content:\"\\e928\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path9:before{content:\"\\e929\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path10:before{content:\"\\e92a\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path11:before{content:\"\\e92b\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path12:before{content:\"\\e92c\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path13:before{content:\"\\e92d\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path14:before{content:\"\\e92e\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path15:before{content:\"\\e92f\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path16:before{content:\"\\e930\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path17:before{content:\"\\e931\";margin-left:-1em;color:#323232}.icon-add-column:before{content:\"\\e932\"}.icon-add-tooltip:before{content:\"\\e933\"}.icon-admin:before{content:\"\\e934\"}.icon-annual-cycle:before{content:\"\\e935\"}.icon-assignment-repete:before{content:\"\\e936\"}.icon-barrier-add:before{content:\"\\e937\"}.icon-barrier-edit:before{content:\"\\e938\"}.icon-barrier-view:before{content:\"\\e939\"}.icon-button-group:before{content:\"\\e93a\"}.icon-chemical-manager:before{content:\"\\e93b\"}.icon-chronic-health-hazard .path1:before{content:\"\\e93c\";color:#e32730}.icon-chronic-health-hazard .path2:before{content:\"\\e93d\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path3:before{content:\"\\e93e\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path4:before{content:\"\\e93f\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path5:before{content:\"\\e940\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path6:before{content:\"\\e941\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path7:before{content:\"\\e942\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path8:before{content:\"\\e943\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path9:before{content:\"\\e944\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path10:before{content:\"\\e945\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path11:before{content:\"\\e946\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path12:before{content:\"\\e947\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path13:before{content:\"\\e948\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path14:before{content:\"\\e949\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path15:before{content:\"\\e94a\";margin-left:-1em;color:#323232}.icon-contingency:before{content:\"\\e94b\"}.icon-corrosive .path1:before{content:\"\\e94c\";color:#323232}.icon-corrosive .path2:before{content:\"\\e94d\";margin-left:-1em;color:#323232}.icon-corrosive .path3:before{content:\"\\e94e\";margin-left:-1em;color:#323232}.icon-corrosive .path4:before{content:\"\\e94f\";margin-left:-1em;color:#323232}.icon-corrosive .path5:before{content:\"\\e950\";margin-left:-1em;color:#323232}.icon-corrosive .path6:before{content:\"\\e951\";margin-left:-1em;color:#323232}.icon-corrosive .path7:before{content:\"\\e952\";margin-left:-1em;color:#323232}.icon-corrosive .path8:before{content:\"\\e953\";margin-left:-1em;color:#323232}.icon-corrosive .path9:before{content:\"\\e954\";margin-left:-1em;color:#323232}.icon-corrosive .path10:before{content:\"\\e955\";margin-left:-1em;color:#323232}.icon-corrosive .path11:before{content:\"\\e956\";margin-left:-1em;color:#323232}.icon-corrosive .path12:before{content:\"\\e957\";margin-left:-1em;color:#323232}.icon-corrosive .path13:before{content:\"\\e958\";margin-left:-1em;color:#323232}.icon-corrosive .path14:before{content:\"\\e959\";margin-left:-1em;color:#323232}.icon-corrosive .path15:before{content:\"\\e95a\";margin-left:-1em;color:#323232}.icon-corrosive .path16:before{content:\"\\e95b\";margin-left:-1em;color:#323232}.icon-corrosive .path17:before{content:\"\\e95c\";margin-left:-1em;color:#323232}.icon-corrosive .path18:before{content:\"\\e95d\";margin-left:-1em;color:#323232}.icon-corrosive .path19:before{content:\"\\e95e\";margin-left:-1em;color:#323232}.icon-corrosive .path20:before{content:\"\\e95f\";margin-left:-1em;color:#323232}.icon-corrosive .path21:before{content:\"\\e960\";margin-left:-1em;color:#e32730}.icon-dashboard:before{content:\"\\e961\"}.icon-database-sds:before{content:\"\\e962\"}.icon-description-add:before{content:\"\\e963\"}.icon-description-edit:before{content:\"\\e964\"}.icon-description-view:before{content:\"\\e965\";color:#666}.icon-document-read .path1:before{content:\"\\e966\";color:#000;opacity:.6}.icon-document-read .path2:before{content:\"\\e967\";margin-left:-1em;color:#fff}.icon-document-read .path3:before{content:\"\\e968\";margin-left:-1em;color:#000;opacity:.6}.icon-draft:before{content:\"\\e969\"}.icon-expired-off:before{content:\"\\e96a\"}.icon-expired-on:before{content:\"\\e96b\"}.icon-explosive .path1:before{content:\"\\e96c\";color:#e32730}.icon-explosive .path2:before{content:\"\\e96d\";margin-left:-1em;color:#323232}.icon-explosive .path3:before{content:\"\\e96e\";margin-left:-1em;color:#323232}.icon-explosive .path4:before{content:\"\\e96f\";margin-left:-1em;color:#323232}.icon-explosive .path5:before{content:\"\\e970\";margin-left:-1em;color:#323232}.icon-explosive .path6:before{content:\"\\e971\";margin-left:-1em;color:#323232}.icon-explosive .path7:before{content:\"\\e972\";margin-left:-1em;color:#323232}.icon-explosive .path8:before{content:\"\\e973\";margin-left:-1em;color:#323232}.icon-explosive .path9:before{content:\"\\e974\";margin-left:-1em;color:#323232}.icon-explosive .path10:before{content:\"\\e975\";margin-left:-1em;color:#323232}.icon-explosive .path11:before{content:\"\\e976\";margin-left:-1em;color:#323232}.icon-explosive .path12:before{content:\"\\e977\";margin-left:-1em;color:#323232}.icon-explosive .path13:before{content:\"\\e978\";margin-left:-1em;color:#323232}.icon-explosive .path14:before{content:\"\\e979\";margin-left:-1em;color:#323232}.icon-explosive .path15:before{content:\"\\e97a\";margin-left:-1em;color:#323232}.icon-explosive .path16:before{content:\"\\e97b\";margin-left:-1em;color:#323232}.icon-explosive .path17:before{content:\"\\e97c\";margin-left:-1em;color:#323232}.icon-explosive .path18:before{content:\"\\e97d\";margin-left:-1em;color:#323232}.icon-explosive .path19:before{content:\"\\e97e\";margin-left:-1em;color:#323232}.icon-explosive .path20:before{content:\"\\e97f\";margin-left:-1em;color:#323232}.icon-explosive .path21:before{content:\"\\e980\";margin-left:-1em;color:#323232}.icon-explosive .path22:before{content:\"\\e981\";margin-left:-1em;color:#323232}.icon-explosive .path23:before{content:\"\\e982\";margin-left:-1em;color:#323232}.icon-explosive .path24:before{content:\"\\e983\";margin-left:-1em;color:#323232}.icon-explosive .path25:before{content:\"\\e984\";margin-left:-1em;color:#323232}.icon-explosive .path26:before{content:\"\\e985\";margin-left:-1em;color:#323232}.icon-explosive .path27:before{content:\"\\e986\";margin-left:-1em;color:#323232}.icon-explosive .path28:before{content:\"\\e987\";margin-left:-1em;color:#323232}.icon-explosive .path29:before{content:\"\\e988\";margin-left:-1em;color:#323232}.icon-explosive .path30:before{content:\"\\e989\";margin-left:-1em;color:#323232}.icon-explosive .path31:before{content:\"\\e98a\";margin-left:-1em;color:#323232}.icon-explosive .path32:before{content:\"\\e98b\";margin-left:-1em;color:#323232}.icon-explosive .path33:before{content:\"\\e98c\";margin-left:-1em;color:#323232}.icon-explosive .path34:before{content:\"\\e98d\";margin-left:-1em;color:#323232}.icon-explosive .path35:before{content:\"\\e98e\";margin-left:-1em;color:#323232}.icon-explosive .path36:before{content:\"\\e98f\";margin-left:-1em;color:#323232}.icon-explosive .path37:before{content:\"\\e990\";margin-left:-1em;color:#323232}.icon-explosive .path38:before{content:\"\\e991\";margin-left:-1em;color:#323232}.icon-explosive .path39:before{content:\"\\e992\";margin-left:-1em;color:#323232}.icon-explosive .path40:before{content:\"\\e993\";margin-left:-1em;color:#323232}.icon-explosive .path41:before{content:\"\\e994\";margin-left:-1em;color:#323232}.icon-explosive .path42:before{content:\"\\e995\";margin-left:-1em;color:#323232}.icon-explosive .path43:before{content:\"\\e996\";margin-left:-1em;color:#323232}.icon-explosive .path44:before{content:\"\\e997\";margin-left:-1em;color:#323232}.icon-explosive .path45:before{content:\"\\e998\";margin-left:-1em;color:#323232}.icon-explosive .path46:before{content:\"\\e999\";margin-left:-1em;color:#323232}.icon-file-excel:before{content:\"\\e99a\"}.icon-file-pdf:before{content:\"\\e99b\"}.icon-file-pdf-verified .path1:before{content:\"\\e99c\";color:#000;opacity:.6}.icon-file-pdf-verified .path2:before{content:\"\\e99d\";margin-left:-1em;color:#fff}.icon-file-pdf-verified .path3:before{content:\"\\e99e\";margin-left:-1em;color:#000;opacity:.6}.icon-file-word:before{content:\"\\e99f\"}.icon-filter-alt:before{content:\"\\e9a0\"}.icon-flammable .path1:before{content:\"\\e9a1\";color:#323232}.icon-flammable .path2:before{content:\"\\e9a2\";margin-left:-1em;color:#323232}.icon-flammable .path3:before{content:\"\\e9a3\";margin-left:-1em;color:#e32730}.icon-gas-under-pressure .path1:before{content:\"\\e9a4\";color:#323232}.icon-gas-under-pressure .path2:before{content:\"\\e9a5\";margin-left:-1em;color:#e32730}.icon-health-hazard .path1:before{content:\"\\e9a6\";color:#323232}.icon-health-hazard .path2:before{content:\"\\e9a7\";margin-left:-1em;color:#e32730}.icon-line-break:before{content:\"\\e9a8\"}.icon-location:before{content:\"\\e9a9\"}.icon-measure-add:before{content:\"\\e9aa\"}.icon-measure-edit:before{content:\"\\e9ab\"}.icon-measure-view:before{content:\"\\e9ac\";color:#666}.icon-messages:before{content:\"\\e9ad\"}.icon-monitoring:before{content:\"\\e9ae\";color:#666}.icon-move:before{content:\"\\e9af\"}.icon-oxidizing .path1:before{content:\"\\e9b0\";color:#e32730}.icon-oxidizing .path2:before{content:\"\\e9b1\";margin-left:-1em;color:#323232}.icon-oxidizing .path3:before{content:\"\\e9b2\";margin-left:-1em;color:#323232}.icon-oxidizing .path4:before{content:\"\\e9b3\";margin-left:-1em;color:#323232}.icon-process-area-closed:before{content:\"\\e9b4\"}.icon-process-area-open:before{content:\"\\e9b5\"}.icon-process-linked .path1:before{content:\"\\e9b6\";color:#000;opacity:.6}.icon-process-linked .path2:before{content:\"\\e9b7\";margin-left:-1em;color:#666}.icon-risk:before{content:\"\\e9b8\"}.icon-search-in-file:before{content:\"\\e9b9\"}.icon-sort-ascending:before{content:\"\\e9ba\"}.icon-sort-descending:before{content:\"\\e9bb\"}.icon-subscript:before{content:\"\\e9bc\"}.icon-superscript:before{content:\"\\e9bd\"}.icon-syncronice-favorites:before{content:\"\\e9be\"}.icon-system-settings:before{content:\"\\e9bf\"}.icon-view-three-outlined:before{content:\"\\e9c0\"}.icon-workplace-safety:before{content:\"\\e9c1\"}.icon-checklist:before{content:\"\\e900\"}.icon-department-document .path1:before{content:\"\\e901\";color:#000;opacity:.6}.icon-department-document .path2:before{content:\"\\e902\";margin-left:-1em;color:#00804c}.icon-department-folder-closed .path1:before{content:\"\\e903\";color:#000;opacity:.6}.icon-department-folder-closed .path2:before{content:\"\\e904\";margin-left:-1em;color:#00804c}.icon-department-folder-open .path1:before{content:\"\\e905\";color:#000;opacity:.6}.icon-department-folder-open .path2:before{content:\"\\e906\";margin-left:-1em;color:#00804c}.icon-deviation:before{content:\"\\e907\"}.icon-dropdown-folder .path1:before{content:\"\\e908\";color:#00324e}.icon-dropdown-folder .path2:before{content:\"\\e909\";margin-left:-1em;color:#fff;opacity:.6}.icon-enterprise-document .path1:before{content:\"\\e90a\";color:#000;opacity:.6}.icon-enterprise-document .path2:before{content:\"\\e90b\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-closed .path1:before{content:\"\\e90c\";color:#000;opacity:.6}.icon-enterprise-folder-closed .path2:before{content:\"\\e90d\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-open .path1:before{content:\"\\e90e\";color:#000;opacity:.6}.icon-enterprise-folder-open .path2:before{content:\"\\e90f\";margin-left:-1em;color:#cf4714}.icon-folder-closed:before{content:\"\\e910\"}.icon-folder-open:before{content:\"\\e911\"}.icon-keyboard_arrow_down:before{content:\"\\e912\"}.icon-keyboard_arrow_up:before{content:\"\\e913\"}.icon-local-document .path1:before{content:\"\\e914\";color:#000;opacity:.6}.icon-local-document .path2:before{content:\"\\e915\";margin-left:-1em;color:#1954a9}.icon-local-folder-closed .path1:before{content:\"\\e916\";color:#000;opacity:.6}.icon-local-folder-closed .path2:before{content:\"\\e917\";margin-left:-1em;color:#1954a9}.icon-local-folder-open .path1:before{content:\"\\e918\";color:#000;opacity:.6}.icon-local-folder-open .path2:before{content:\"\\e919\";margin-left:-1em;color:#1954a9}.icon-process:before{content:\"\\e91a\"}.icon-regional-document .path1:before{content:\"\\e91c\";color:#000;opacity:.6}.icon-regional-document .path2:before{content:\"\\e91d\";margin-left:-1em;color:#662e0d}.icon-regional-folder-closed .path1:before{content:\"\\e91e\";color:#000;opacity:.6}.icon-regional-folder-closed .path2:before{content:\"\\e91f\";margin-left:-1em;color:#662e0d}.icon-regional-folder-open .path1:before{content:\"\\e920\";color:#000;opacity:.6}.icon-regional-folder-open .path2:before{content:\"\\e921\";margin-left:-1em;color:#662e0d}.select-access-paginator{max-height:150px!important}.mat-expansion-panel .mat-expansion-panel-body{padding-top:0!important}.mat-expansion-panel-header{font-weight:800!important}.mat-expansion-panel-header .title-content{font-size:12px!important}.w-100{width:100%}.h-100{height:100%}.pointer{cursor:pointer}.fw-600{font-weight:600}.label-item{font-weight:600;color:var(--ws-text-primary)}.sub-label{color:var(--ws-text-secondary)}.fs-14{font-size:14px}.fs-12{font-size:12px}.color-primary{color:var(--primary-light)!important}.header-title{font-weight:600;color:var(--ws-text-primary);font-size:16px}.mat-mdc-chip.chip-item-result{max-width:250px}.mat-mdc-chip.chip-item-result.item-department .qms-chip-body{display:flex;justify-content:center;align-items:center}.remove-chip-icon{cursor:pointer}.remove-chip-icon:hover{color:#000000b3}.mat-form-field-wrapper{padding-bottom:8px!important}.mat-expansion-panel{border-radius:unset!important}.mat-expansion-panel-header:not([aria-disabled=true]){background:unset}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header{background:#e5eefb}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header .qms-line{color:var(--primary-light)!important}.access-dialog-header{display:flex;justify-content:space-between;align-items:center}.mat-chip-list-wrapper{margin:unset!important}.item-list-wrapper{height:40vh;padding:4px 4px 4px 0;overflow-y:auto}.item-list-wrapper.no-result{height:50vh;display:flex;justify-content:center;align-items:center}.item-list-wrapper .item{min-height:40px}.item-list-wrapper .item-without-checkbox{min-height:45px;display:flex;justify-content:space-between;align-items:center;padding:4px 8px;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;transition:background .3s ease}.item-list-wrapper .item-without-checkbox.active{background:var(--primary-light-12-opacity)}.item-list-wrapper .item-without-checkbox:hover{background:var(--primary-light-6-opacity)}.item-list-wrapper .item-without-checkbox .mat-icon{color:var(--primary-light)!important}.confirm__button__groups .btn-add>.qms-btn-wrapper{display:flex;justify-content:center;align-items:center}.qms-dialog-content{display:grid;column-gap:8px}.qms-dialog-content.active{grid-template-columns:2fr 1fr;min-height:50vh}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-wrapper{padding-bottom:16px!important}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-underline{bottom:16px!important}.qms-dialog-content .result-wrapper{position:relative;width:100%;margin-left:8px}.qms-dialog-content .result-wrapper:after{position:absolute;content:\"\";top:0;left:0;background-color:#0000001f;height:100%;width:1px}.qms-dialog-content .result-selected-container{position:absolute;inset:0;overflow-y:auto;padding:0 8px}.qms-dialog-content .result-selected-container .result-header{height:51px;display:flex;align-items:center;position:sticky;top:0;z-index:10;padding:0!important;background:#fff;margin-bottom:12px}.qms-dialog-content .result-selected-container .result-header:after{position:absolute;content:\"\";bottom:0;left:0;width:100%;height:1px;background:#0000000a}.qms-dialog-content .result-selected-container .result-header .mat-mdc-card-content{height:51px;width:100%;padding-left:4px;display:flex;align-items:center;background-color:#0000000a}.option-selected-content .group-filter-person-option{display:flex;flex-direction:row-reverse;justify-content:center;align-items:center;gap:8px}span.chip-item__content_name{display:inline-block;max-width:175px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}span.chip-item-children__count{font-size:.75rem;color:#00000080;font-weight:600}.mat-mdc-slide-toggle.qms-group-options{padding:unset!important}.input-option-filter .mat-form-field-wrapper{padding-bottom:8px!important}.input-option-filter .mat-form-field-underline{bottom:8px!important}.slide-toggle{margin-bottom:8px}.confirm__button__groups.none-option{margin-top:85px}.btn-icon-clear{position:relative;padding:0 1rem}.btn-icon-clear .qms-btn-icon{margin-right:unset!important}.btn-icon-clear:after{position:absolute;content:\"\";left:0;top:0;height:100%;width:1px;background:#0000004d}.qms-paginator .mat-mdc-paginator-container .qms-total-result{margin-bottom:0;margin-right:12px;height:100%;display:flex;align-items:center}.qms-paginator .mat-mdc-paginator-container .qms-total-result span{font-weight:600;color:#000c}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions{margin-bottom:0;column-gap:2px}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions>.qms-total-result{margin-bottom:0}.qms-paginator .qms-paginator-page-size{align-items:center}.qms-paginator .mat-form-field-wrapper{padding-bottom:0!important}.mat-mdc-checkbox.checkbox-all .mat-checkbox-label{flex-direction:row!important;align-items:center!important;column-gap:4px!important}.mat-expansion-panel.qms-expansion{margin:0!important}.access-department .qms-view-search-result{height:100%!important}.access-department .qms-view-search-result .result{max-height:calc(100% - 80px)!important}.access-department .loading-container{height:calc(100% - 40px)!important}.qms-loading-container{height:45vh;overflow:hidden;display:grid;grid-template-rows:repeat(60px)}.qms-loading-container .qms-loader{position:relative;width:100%;height:100%;padding:10px 0;overflow:hidden}.qms-loading-container .qms-loader:after{content:\"\";position:absolute;width:100%;height:100%;top:0;left:0;background:linear-gradient(110deg,#e9e9e900,#e3e3e300 40%,#e3e3e380 50%,#e3e3e300 60% 100%);animation:animate-loading 1.2s linear infinite}.qms-loading-container .qms-loader__wrapper{position:relative;width:100%;height:100%}.qms-loading-container .qms-loader__wrapper .row-loader{background-color:#eee;position:absolute;left:0;width:100%;height:40px;overflow:hidden}@keyframes animate-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}.btn-close-dialog.qms-btn-icon:focus:not(:hover){background-color:unset!important;color:unset!important}.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden}\n"] }]
677
+ ], encapsulation: ViewEncapsulation.None, template: "<h3 mat-dialog-title class=\"more-action\">\n {{dialogData.titleDialog || LANG.SELECT_ACCESS}}\n <button matDialogClose class=\"close-btn\" qms-btn-icon color=\"light\">\n <mat-icon class=\"mat-icons-outlined\">close</mat-icon>\n </button>\n</h3>\n<mat-dialog-content>\n <div [class.active]=\"optionSelect.value !== null\" class=\"qms-dialog-content\">\n <div class=\"access-dialog-wraper\">\n <mat-form-field *ngIf=\"options.length > 1\" qms-form qms-select-input class=\"field-select-option w-100 mb-2\"\n appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.TYPE\" qms-select-input>{{LANG.TYPE}}</mat-label>\n <mat-select (selectionChange)=\"onSelectionTypeChange($event)\" [formControl]=\"optionSelect\" placeholder=\"Select\"\n disableOptionCentering #singleSelect panelClass=\"qms-select-panel\" qms-select>\n\n <mat-option *ngFor=\"let item of options\" [value]=\"item.type\">\n {{ LANG[item.displayName] }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"body-dialog-container\">\n <div class=\"option-selected-content\">\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.PERSON\">\n <form *ngIf=\"personForm\" [formGroup]=\"personForm\">\n <div class=\"group-filter-person-option\">\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.userGroups.length\" qms-form qms-select-input\n class=\"w-100 mb-2\" appearance=\"fill\">\n <mat-label [attr.aria-label]=\"LANG.ROLE\" qms-select-input>{{LANG.ROLE}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select formControlName=\"userGroup\"\n disableOptionCentering>\n <mat-select-trigger>\n {{personForm.controls['userGroup'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"userGroupFilter\" placeholderLabel=\"{{ LANG.ROLE }}\"\n noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option mode=\"dark\" class=\"opt-check-icon\"\n *ngFor=\"let item of filteredSearchTextBox.userGroup.value\" [value]=\"item\">\n <span qms-elipsify position=\"top\" mode=\"dark\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['userGroup'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span [@inOutAnimation] (click)=\"personForm.get('userGroup').setValue('')\" class=\"pointer \" matSuffix\n aria-label=\"Clear\" *ngIf=\"personForm.get('userGroup').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n <mat-form-field *ngIf=\"optionFilterPersonDataGlobal.departments.length\"\n class=\"w-100 input-select-option mb-2\" qms-form qms-select-input>\n <mat-label [attr.aria-label]=\"LANG.DEPARTMENT_UNIT\">{{LANG.DEPARTMENT_UNIT}}</mat-label>\n <mat-select panelClass=\"qms-select-panel\" qms-select disableOptionCentering\n formControlName=\"department\">\n <mat-select-trigger>\n {{personForm.controls['department'].value?.name || ''}}\n </mat-select-trigger>\n <mat-option>\n <ngx-mat-select-search formControlName=\"departmentFilter\"\n [placeholderLabel]=\"LANG.DEPARTMENT_UNIT\" noEntriesFoundLabel=\"\">\n </ngx-mat-select-search>\n </mat-option>\n <mat-option class=\"opt-check-icon\" *ngFor=\"let item of filteredSearchTextBox.department.value\"\n [value]=\"item\">\n <span qms-elipsify mode=\"dark\" position=\"top\" class=\"text-option-content\">{{ item.name }}</span>\n <mat-icon class=\"check-icon\"\n *ngIf=\"personForm.controls['department'].value?.id == item.id\">check</mat-icon>\n </mat-option>\n </mat-select>\n <span (click)=\"setFormControlValue(['recursive','department'], [false,''])\" [@inOutAnimation]\n class=\"pointer\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('department').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </span>\n </mat-form-field>\n </div>\n\n <mat-slide-toggle [@inOutAnimation] *ngIf=\"personForm.controls['department'].value\"\n class=\"w-100 slide-toggle\" formControlName=\"recursive\" color=\"default\" qms-group-options>\n <span class=\"text-label\">{{LANG.INCLUDE_SUB_DEPARTMENTS}}</span>\n </mat-slide-toggle>\n\n <mat-form-field class=\"w-100 mb-2\" appearance=\"fill\" qms-form qms-search-field>\n <mat-label [attr.aria-label]=\"LANG.SEARCH_WITH_NAME\"\n qms-select-input>{{LANG.SEARCH_WITH_NAME}}</mat-label>\n <input matInput appearance=\"off\" formControlName=\"keyword\" type=\"text\" autocomplete=\"off\" />\n <button *ngIf=\"!getLoading$.value\" qms-btn-icon color=\"light\" [@inOutAnimation]\n (click)=\"onSearchPersonFreeText()\" class=\"pointer me-1\" matSuffix aria-label=\"Search\">\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <button [@inOutAnimation] (click)=\"personForm.get('keyword').setValue('')\" matSuffix aria-label=\"Clear\"\n *ngIf=\"personForm.get('keyword').value && !getLoading$.value\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n <button (click)=\"onFilterPerson()\" qms-btn-outlined class=\"w-100 my-1\">\n {{LANG.FILTER}}\n </button>\n\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && personFiltered.length && !dialogData.modeSelectOnePerson\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.PERSON)\" #checkPerson class=\"w-100 mb-1 checkbox-all\"\n (click)=\"personFiltered.length && onCheckAll(OPTION_ENUM.PERSON,checkPerson)\"\n [checked]=\"isCheckAll(OPTION_ENUM.PERSON)\" [indeterminate]=\"isIndeterminate(OPTION_ENUM.PERSON)\"\n color=\"default\" qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}} (<b>{{personFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value; then loading\">\n </ng-container>\n <div [@inOutAnimation] *ngIf=\"personFiltered.length && !getLoading$.value\" [@listAnimation]\n class=\"item-list-wrapper\">\n <div class=\"item mt-1\" [@inOutAnimation] *ngFor=\"let employee of personFiltered; trackBy: trackByFn\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOnePerson ?itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: employee, type: OPTION_ENUM.PERSON}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!personFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingPerson\n *ngIf=\"getPerson$.value.length > 10\" [length]=\"getPerson$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getPerson$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.PERSON)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </form>\n </ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.USER_GROUP\">\n <div>\n <form (submit)=\"onFilterUserGroup()\">\n <mat-form-field class=\"w-100 mb-2\" qms-form qms-search-field>\n <mat-label aria-label=\"User group\" qms-select-input>{{ LANG.SEARCH }} {{ LANG.USER_GROUP\n }}</mat-label>\n <input [formControl]=\"userGroupForm\" matInput type=\"text\" autocomplete=\"off\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <button matSuffix (click)=\"userGroupForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n </form>\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation]\n *ngIf=\"!getLoading$.value && (userGroupFiltered.length && !dialogData.modeSelectOneUserGroup)\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.USER_GROUP)\" #checkUserGroup\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.USER_GROUP)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.USER_GROUP)\"\n (click)=\"userGroupFiltered.length && onCheckAll(OPTION_ENUM.USER_GROUP,checkUserGroup)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}\n (<b>{{userGroupFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"userGroupFiltered.length && !getLoading$.value\" [@listAnimation] class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let userGroup of userGroupFiltered\">\n <ng-container\n [ngTemplateOutlet]=\"dialogData.modeSelectOneUserGroup ? itemWithoutCheckboxTemplate : itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: userGroup,type: OPTION_ENUM.USER_GROUP}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!userGroupFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingUserGroup class=\"my-1\"\n *ngIf=\"getUserGroup$.value.length > 10 \" [length]=\"getUserGroup$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getUserGroup$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.USER_GROUP)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"optionSelect.value === OPTION_ENUM.DEPARTMENT\">\n\n <ng-container *ngIf=\"!dialogData.isDepartmentPaging\">\n <qms-select-department-tree #tree [rowsSkeleton]=\"8\" [config]=\"dialogData.treeDepartmentConfig\"\n [maxWidthNode]=\"dialogData.maxWidthNode\" (onSearchEvent)=\"onSearchDepartmentEvent.emit($event)\"\n (onValueChangeEvent)=\"onResultDepartmentChange($event)\"\n (selectionNodeChangeEvent)=\"onSelectionNodeDepartmentChange($event)\"\n (onPagingSearchEvent)=\"onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)\">\n </qms-select-department-tree>\n </ng-container>\n\n <ng-container *ngIf=\"dialogData.isDepartmentPaging\">\n\n <form (ngSubmit)=\"onFilterDepartment()\">\n <mat-form-field class=\"w-100 mb-2\" qms-form qms-search-field>\n <mat-label aria-label=\"Department\" qms-select-input>{{ LANG.SEARCH }} {{LANG.DEPARTMENT}}</mat-label>\n <input [formControl]=\"departmentSearchForm\" matInput type=\"text\" autocomplete=\"off\" />\n <button [@inOutAnimation] *ngIf=\"!getLoading$.value\" type=\"submit\" qms-btn-icon color=\"light\"\n matSuffix>\n <mat-icon>search</mat-icon>\n </button>\n <div matSuffix class=\"d-inline-block\">\n <mat-progress-spinner [@inOutAnimation] *ngIf=\"getLoading$.value\" mode=\"indeterminate\"\n diameter=\"20\"></mat-progress-spinner>\n </div>\n <div [@inOutAnimation] *ngIf=\"!!departmentSearchForm.value && !getLoading$.value\" matSuffix\n qms-input-clear>\n <button (click)=\"departmentSearchForm.setValue('')\" qms-btn-icon color=\"light\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </mat-form-field>\n </form>\n\n <div qms-scrollbar>\n <div class=\"item\">\n <mat-checkbox [@inOutAnimation] *ngIf=\"!getLoading$.value && departmentFiltered.length\"\n [disabled]=\"isDisabledSelectAll(OPTION_ENUM.DEPARTMENT)\" #checkDepartment\n class=\"w-100 checkbox-all mb-1\" color=\"default\" [checked]=\"isCheckAll(OPTION_ENUM.DEPARTMENT)\"\n [indeterminate]=\"isIndeterminate(OPTION_ENUM.DEPARTMENT)\"\n (click)=\"departmentFiltered.length && onCheckAll(OPTION_ENUM.DEPARTMENT,checkDepartment)\"\n qms-group-options>\n <span class=\"text-label header-title\">{{LANG.CHOOSE_ALL}}\n (<b>{{departmentFiltered.length}}</b>)</span>\n </mat-checkbox>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <ng-container *ngIf=\"getLoading$.value;then loading\">\n </ng-container>\n <div *ngIf=\"departmentFiltered.length && !getLoading$.value\" [@listAnimation] class=\"item-list-wrapper\">\n <div [@inOutAnimation] class=\"item mt-1\" *ngFor=\"let item of departmentFiltered\">\n <ng-container [ngTemplateOutlet]=\"itemCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{item: item,type: OPTION_ENUM.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n <div [@inOutAnimation] *ngIf=\"!departmentFiltered.length && !getLoading$.value\"\n class=\"item-list-wrapper no-result\">\n <ng-container *ngTemplateOutlet=\"noResult\"></ng-container>\n </div>\n <mat-divider class=\"mx-auto\"></mat-divider>\n <qms-paginator overlayPanelClass=\"select-access-paginator\" #pagingDepartment class=\"my-1\"\n *ngIf=\"getDepartment$.value.length > 10 \" [length]=\"getDepartment$.value.length\" [numHidden]=\"0\"\n [pageSize]=\"getDepartment$.value.pageSize\" [pageSizeOptions]=\"PAGE_SIZE_OPTION\"\n (page)='onPaginatorEvent($event, OPTION_ENUM.DEPARTMENT)' [size]='PAGINATION_SIZE.medium'>\n </qms-paginator>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"optionSelect.value !== null\" class=\"result-wrapper\">\n <div class=\"result-selected-container\">\n <div [@inOutAnimation] *ngIf=\"(options.length === 1) || (options.length > 1 && optionSelect.value !== null)\"\n class=\"header-title result-header\">\n <span>\n {{\n dialogData.titleResult || LANG.RESULTS}}\n <span *ngIf=\"options.length === 1 && hasItemSelected()\">\n ({{getResultTabActive().length}})\n </span>\n </span>\n </div>\n <div class=\"result-body\">\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.PERSON)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.persons, type:OPTION_ENUM.PERSON, title:LANG.PERSON}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.USER_GROUP)\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data:resultAccess.userGroups, type:OPTION_ENUM.USER_GROUP, title:LANG.USER_GROUP}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT) && !dialogData.isDepartmentPaging\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departments || resultAccess.departmentsFlat, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n <ng-container *ngIf=\"checkExistOptionSelect(OPTION_ENUM.DEPARTMENT) && dialogData.isDepartmentPaging\"\n [ngTemplateOutlet]=\"options?.length == 1 ? listChip : viewResultCollapse\"\n [ngTemplateOutletContext]=\"{data: resultAccess.departmentsFlat, type:OPTION_ENUM.DEPARTMENT, title:LANG.DEPARTMENT}\">\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <mat-divider class=\"w-100 mb-3\"></mat-divider>\n <button class=\"me-2\" qms-btn-text mat-dialog-close>\n {{dialogData.cancelTitle || LANG.CANCEL}}\n </button>\n <button *ngIf=\"optionSelect.value !== null\"\n [disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\" class=\"btn-add\"\n [class.qms-btn-disabled]=\"!hasItemSelected() && !dialogData.treeDepartmentConfig.canAddNullResult\"\n [mat-dialog-close]=\"resultAccess\" qms-btn>\n <span>{{dialogData.confirmTitle || LANG.ADD}}</span>\n </button>\n</mat-dialog-actions>\n\n<ng-template #noResult>\n <svg width=\"89\" height=\"130\" viewBox=\"0 0 89 88\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"white\" />\n <rect x=\"0.5\" width=\"88\" height=\"88\" rx=\"44\" fill=\"#0163B2\" fill-opacity=\"0.12\" />\n <path\n d=\"M44.5 56.6936L58.096 64.8996L54.488 49.4336L66.5 39.0276L50.682 37.6856L44.5 23.0996L38.318 37.6856L22.5 39.0276L34.512 49.4336L30.904 64.8996L44.5 56.6936Z\"\n fill=\"#0163B3\" />\n <text x=\"10\" y=\"105\" fill=\"#0163B2\">{{LANG.NO_RESULT}}</text>\n </svg>\n</ng-template>\n<ng-template #listChip let-data=\"data\" let-type=\"type\">\n <mat-chip-set [@inOutAnimation] *ngIf=\"data?.length\" class=\"panel__item qms-scrollbar\">\n <div [@inOutAnimation_2] *ngFor=\"let item of data; let i = index\">\n <mat-chip (click)=\"onScollToNodeTreeDepartment(item)\" [@updateItemAnimation]\n *qmsContentChanges=\"item.children?.length\" class=\"chip-item-result\" qms-chip [removable]=\"true\">\n <span qms-chip-body>\n <span [qms-tool-tip]=\"generateTooltip(item)\" position=\"top\" mode=\"dark\" class=\"text-label\">\n {{item.name}}\n <span *ngIf=\"item.subName\">({{ item.subName }})</span>\n </span>\n <span class=\"chip-item-children__count ms-1\" *ngIf=\"item?.children && item?.isGroup\">\n {{item.children.length}}/{{item.childCount}}\n </span>\n </span>\n\n <button matChipRemove *ngIf=\"allowRemove(type, item)\" (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n <button matChipRemove *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\"\n (click)=\"onRemoveChip(type,item, i)\">\n <mat-icon class=\"remove-chip-icon\">cancel</mat-icon>\n <mat-icon *ngIf=\"!allowRemove(type, item) && dialogData.formatMsgDisable\" position=\"top\" mode=\"dark\"\n [qms-tool-tip]=\"dialogData.formatMsgDisable(item)\" class=\"remove-chip-icon\">info_i</mat-icon>\n </button>\n </mat-chip>\n </div>\n </mat-chip-set>\n</ng-template>\n\n\n<ng-template #viewResultCollapse let-title=\"title\" let-data=\"data\" let-type=\"type\">\n <mat-expansion-panel qms-expansion [expanded]=\"optionSelect.value === type\">\n <mat-expansion-panel-header>\n <div class=\"title-content\">\n <div class=\"qms-list-text\">\n <div qms-line color=\"default-subtitle\">{{title}}\n <span class=\"fw-600\">\n ({{data?.length}})\n </span>\n </div>\n </div>\n </div>\n </mat-expansion-panel-header>\n <ng-container [ngTemplateOutlet]=\"listChip\" [ngTemplateOutletContext]=\"{data: data,type: type}\">\n </ng-container>\n </mat-expansion-panel>\n</ng-template>\n\n<ng-template #itemWithoutCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <div (click)=\"onSelectItem(type,item)\" class=\"item-without-checkbox w-100\" [class.active]=\"item.selected\">\n <div class=\"item-content\">\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </div>\n <div class=\"item-state\">\n <mat-icon [@inOutAnimation] *ngIf=\"item.selected\">check</mat-icon>\n </div>\n </div>\n</ng-template>\n\n<ng-template #itemCheckboxTemplate let-item=\"item\" let-type=\"type\">\n <mat-checkbox [disabled]=\"!allowRemove(type, item)\" [checked]=\"item.selected\" (click)=\"onSelectItem(type,item)\"\n class=\"w-100\" color=\"default\" qms-group-options>\n <div class=\"text-label\">\n <span class=\"text-label label-item fs-14 \">\n {{ item.name }}\n </span>\n <span *ngIf=\"item.subName\" class=\"ms-1 sub-label\">({{item.subName}})</span>\n </div>\n <small *ngIf=\"item.helpText\" class=\"text-help px-1 fs-12 sub-label\">{{ item.helpText }}</small>\n </mat-checkbox>\n</ng-template>\n\n<ng-template #loading>\n <div class=\"qms-loading-container\">\n <div class=\"qms-loader\" *ngFor=\"let item of arrSkeleton\">\n <div class=\"qms-loader__wrapper\">\n <div class=\"row-loader\">\n </div>\n </div>\n </div>\n </div>\n</ng-template>", styles: ["@font-face{font-family:icomoon;src:url(/assets/fonts/icomoon.eot?aghldx);src:url(/assets/fonts/icomoon.eot?aghldx#iefix) format(\"embedded-opentype\"),url(/assets/fonts/icomoon.ttf?aghldx) format(\"truetype\"),url(/assets/fonts/icomoon.woff?aghldx) format(\"woff\"),url(/assets/fonts/icomoon.svg?aghldx#icomoon) format(\"svg\");font-weight:400;font-style:normal;font-display:block}[class^=icon-],[class*=\" icon-\"]{font-family:icomoon!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-acutely-toxic .path1:before{content:\"\\e91b\";color:#e32730}.icon-acutely-toxic .path2:before{content:\"\\e922\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path3:before{content:\"\\e923\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path4:before{content:\"\\e924\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path5:before{content:\"\\e925\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path6:before{content:\"\\e926\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path7:before{content:\"\\e927\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path8:before{content:\"\\e928\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path9:before{content:\"\\e929\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path10:before{content:\"\\e92a\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path11:before{content:\"\\e92b\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path12:before{content:\"\\e92c\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path13:before{content:\"\\e92d\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path14:before{content:\"\\e92e\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path15:before{content:\"\\e92f\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path16:before{content:\"\\e930\";margin-left:-1em;color:#323232}.icon-acutely-toxic .path17:before{content:\"\\e931\";margin-left:-1em;color:#323232}.icon-add-column:before{content:\"\\e932\"}.icon-add-tooltip:before{content:\"\\e933\"}.icon-admin:before{content:\"\\e934\"}.icon-annual-cycle:before{content:\"\\e935\"}.icon-assignment-repete:before{content:\"\\e936\"}.icon-barrier-add:before{content:\"\\e937\"}.icon-barrier-edit:before{content:\"\\e938\"}.icon-barrier-view:before{content:\"\\e939\"}.icon-button-group:before{content:\"\\e93a\"}.icon-chemical-manager:before{content:\"\\e93b\"}.icon-chronic-health-hazard .path1:before{content:\"\\e93c\";color:#e32730}.icon-chronic-health-hazard .path2:before{content:\"\\e93d\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path3:before{content:\"\\e93e\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path4:before{content:\"\\e93f\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path5:before{content:\"\\e940\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path6:before{content:\"\\e941\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path7:before{content:\"\\e942\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path8:before{content:\"\\e943\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path9:before{content:\"\\e944\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path10:before{content:\"\\e945\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path11:before{content:\"\\e946\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path12:before{content:\"\\e947\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path13:before{content:\"\\e948\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path14:before{content:\"\\e949\";margin-left:-1em;color:#323232}.icon-chronic-health-hazard .path15:before{content:\"\\e94a\";margin-left:-1em;color:#323232}.icon-contingency:before{content:\"\\e94b\"}.icon-corrosive .path1:before{content:\"\\e94c\";color:#323232}.icon-corrosive .path2:before{content:\"\\e94d\";margin-left:-1em;color:#323232}.icon-corrosive .path3:before{content:\"\\e94e\";margin-left:-1em;color:#323232}.icon-corrosive .path4:before{content:\"\\e94f\";margin-left:-1em;color:#323232}.icon-corrosive .path5:before{content:\"\\e950\";margin-left:-1em;color:#323232}.icon-corrosive .path6:before{content:\"\\e951\";margin-left:-1em;color:#323232}.icon-corrosive .path7:before{content:\"\\e952\";margin-left:-1em;color:#323232}.icon-corrosive .path8:before{content:\"\\e953\";margin-left:-1em;color:#323232}.icon-corrosive .path9:before{content:\"\\e954\";margin-left:-1em;color:#323232}.icon-corrosive .path10:before{content:\"\\e955\";margin-left:-1em;color:#323232}.icon-corrosive .path11:before{content:\"\\e956\";margin-left:-1em;color:#323232}.icon-corrosive .path12:before{content:\"\\e957\";margin-left:-1em;color:#323232}.icon-corrosive .path13:before{content:\"\\e958\";margin-left:-1em;color:#323232}.icon-corrosive .path14:before{content:\"\\e959\";margin-left:-1em;color:#323232}.icon-corrosive .path15:before{content:\"\\e95a\";margin-left:-1em;color:#323232}.icon-corrosive .path16:before{content:\"\\e95b\";margin-left:-1em;color:#323232}.icon-corrosive .path17:before{content:\"\\e95c\";margin-left:-1em;color:#323232}.icon-corrosive .path18:before{content:\"\\e95d\";margin-left:-1em;color:#323232}.icon-corrosive .path19:before{content:\"\\e95e\";margin-left:-1em;color:#323232}.icon-corrosive .path20:before{content:\"\\e95f\";margin-left:-1em;color:#323232}.icon-corrosive .path21:before{content:\"\\e960\";margin-left:-1em;color:#e32730}.icon-dashboard:before{content:\"\\e961\"}.icon-database-sds:before{content:\"\\e962\"}.icon-description-add:before{content:\"\\e963\"}.icon-description-edit:before{content:\"\\e964\"}.icon-description-view:before{content:\"\\e965\";color:#666}.icon-document-read .path1:before{content:\"\\e966\";color:#000;opacity:.6}.icon-document-read .path2:before{content:\"\\e967\";margin-left:-1em;color:#fff}.icon-document-read .path3:before{content:\"\\e968\";margin-left:-1em;color:#000;opacity:.6}.icon-draft:before{content:\"\\e969\"}.icon-expired-off:before{content:\"\\e96a\"}.icon-expired-on:before{content:\"\\e96b\"}.icon-explosive .path1:before{content:\"\\e96c\";color:#e32730}.icon-explosive .path2:before{content:\"\\e96d\";margin-left:-1em;color:#323232}.icon-explosive .path3:before{content:\"\\e96e\";margin-left:-1em;color:#323232}.icon-explosive .path4:before{content:\"\\e96f\";margin-left:-1em;color:#323232}.icon-explosive .path5:before{content:\"\\e970\";margin-left:-1em;color:#323232}.icon-explosive .path6:before{content:\"\\e971\";margin-left:-1em;color:#323232}.icon-explosive .path7:before{content:\"\\e972\";margin-left:-1em;color:#323232}.icon-explosive .path8:before{content:\"\\e973\";margin-left:-1em;color:#323232}.icon-explosive .path9:before{content:\"\\e974\";margin-left:-1em;color:#323232}.icon-explosive .path10:before{content:\"\\e975\";margin-left:-1em;color:#323232}.icon-explosive .path11:before{content:\"\\e976\";margin-left:-1em;color:#323232}.icon-explosive .path12:before{content:\"\\e977\";margin-left:-1em;color:#323232}.icon-explosive .path13:before{content:\"\\e978\";margin-left:-1em;color:#323232}.icon-explosive .path14:before{content:\"\\e979\";margin-left:-1em;color:#323232}.icon-explosive .path15:before{content:\"\\e97a\";margin-left:-1em;color:#323232}.icon-explosive .path16:before{content:\"\\e97b\";margin-left:-1em;color:#323232}.icon-explosive .path17:before{content:\"\\e97c\";margin-left:-1em;color:#323232}.icon-explosive .path18:before{content:\"\\e97d\";margin-left:-1em;color:#323232}.icon-explosive .path19:before{content:\"\\e97e\";margin-left:-1em;color:#323232}.icon-explosive .path20:before{content:\"\\e97f\";margin-left:-1em;color:#323232}.icon-explosive .path21:before{content:\"\\e980\";margin-left:-1em;color:#323232}.icon-explosive .path22:before{content:\"\\e981\";margin-left:-1em;color:#323232}.icon-explosive .path23:before{content:\"\\e982\";margin-left:-1em;color:#323232}.icon-explosive .path24:before{content:\"\\e983\";margin-left:-1em;color:#323232}.icon-explosive .path25:before{content:\"\\e984\";margin-left:-1em;color:#323232}.icon-explosive .path26:before{content:\"\\e985\";margin-left:-1em;color:#323232}.icon-explosive .path27:before{content:\"\\e986\";margin-left:-1em;color:#323232}.icon-explosive .path28:before{content:\"\\e987\";margin-left:-1em;color:#323232}.icon-explosive .path29:before{content:\"\\e988\";margin-left:-1em;color:#323232}.icon-explosive .path30:before{content:\"\\e989\";margin-left:-1em;color:#323232}.icon-explosive .path31:before{content:\"\\e98a\";margin-left:-1em;color:#323232}.icon-explosive .path32:before{content:\"\\e98b\";margin-left:-1em;color:#323232}.icon-explosive .path33:before{content:\"\\e98c\";margin-left:-1em;color:#323232}.icon-explosive .path34:before{content:\"\\e98d\";margin-left:-1em;color:#323232}.icon-explosive .path35:before{content:\"\\e98e\";margin-left:-1em;color:#323232}.icon-explosive .path36:before{content:\"\\e98f\";margin-left:-1em;color:#323232}.icon-explosive .path37:before{content:\"\\e990\";margin-left:-1em;color:#323232}.icon-explosive .path38:before{content:\"\\e991\";margin-left:-1em;color:#323232}.icon-explosive .path39:before{content:\"\\e992\";margin-left:-1em;color:#323232}.icon-explosive .path40:before{content:\"\\e993\";margin-left:-1em;color:#323232}.icon-explosive .path41:before{content:\"\\e994\";margin-left:-1em;color:#323232}.icon-explosive .path42:before{content:\"\\e995\";margin-left:-1em;color:#323232}.icon-explosive .path43:before{content:\"\\e996\";margin-left:-1em;color:#323232}.icon-explosive .path44:before{content:\"\\e997\";margin-left:-1em;color:#323232}.icon-explosive .path45:before{content:\"\\e998\";margin-left:-1em;color:#323232}.icon-explosive .path46:before{content:\"\\e999\";margin-left:-1em;color:#323232}.icon-file-excel:before{content:\"\\e99a\"}.icon-file-pdf:before{content:\"\\e99b\"}.icon-file-pdf-verified .path1:before{content:\"\\e99c\";color:#000;opacity:.6}.icon-file-pdf-verified .path2:before{content:\"\\e99d\";margin-left:-1em;color:#fff}.icon-file-pdf-verified .path3:before{content:\"\\e99e\";margin-left:-1em;color:#000;opacity:.6}.icon-file-word:before{content:\"\\e99f\"}.icon-filter-alt:before{content:\"\\e9a0\"}.icon-flammable .path1:before{content:\"\\e9a1\";color:#323232}.icon-flammable .path2:before{content:\"\\e9a2\";margin-left:-1em;color:#323232}.icon-flammable .path3:before{content:\"\\e9a3\";margin-left:-1em;color:#e32730}.icon-gas-under-pressure .path1:before{content:\"\\e9a4\";color:#323232}.icon-gas-under-pressure .path2:before{content:\"\\e9a5\";margin-left:-1em;color:#e32730}.icon-health-hazard .path1:before{content:\"\\e9a6\";color:#323232}.icon-health-hazard .path2:before{content:\"\\e9a7\";margin-left:-1em;color:#e32730}.icon-line-break:before{content:\"\\e9a8\"}.icon-location:before{content:\"\\e9a9\"}.icon-measure-add:before{content:\"\\e9aa\"}.icon-measure-edit:before{content:\"\\e9ab\"}.icon-measure-view:before{content:\"\\e9ac\";color:#666}.icon-messages:before{content:\"\\e9ad\"}.icon-monitoring:before{content:\"\\e9ae\";color:#666}.icon-move:before{content:\"\\e9af\"}.icon-oxidizing .path1:before{content:\"\\e9b0\";color:#e32730}.icon-oxidizing .path2:before{content:\"\\e9b1\";margin-left:-1em;color:#323232}.icon-oxidizing .path3:before{content:\"\\e9b2\";margin-left:-1em;color:#323232}.icon-oxidizing .path4:before{content:\"\\e9b3\";margin-left:-1em;color:#323232}.icon-process-area-closed:before{content:\"\\e9b4\"}.icon-process-area-open:before{content:\"\\e9b5\"}.icon-process-linked .path1:before{content:\"\\e9b6\";color:#000;opacity:.6}.icon-process-linked .path2:before{content:\"\\e9b7\";margin-left:-1em;color:#666}.icon-risk:before{content:\"\\e9b8\"}.icon-search-in-file:before{content:\"\\e9b9\"}.icon-sort-ascending:before{content:\"\\e9ba\"}.icon-sort-descending:before{content:\"\\e9bb\"}.icon-subscript:before{content:\"\\e9bc\"}.icon-superscript:before{content:\"\\e9bd\"}.icon-syncronice-favorites:before{content:\"\\e9be\"}.icon-system-settings:before{content:\"\\e9bf\"}.icon-view-three-outlined:before{content:\"\\e9c0\"}.icon-workplace-safety:before{content:\"\\e9c1\"}.icon-checklist:before{content:\"\\e900\"}.icon-department-document .path1:before{content:\"\\e901\";color:#000;opacity:.6}.icon-department-document .path2:before{content:\"\\e902\";margin-left:-1em;color:#00804c}.icon-department-folder-closed .path1:before{content:\"\\e903\";color:#000;opacity:.6}.icon-department-folder-closed .path2:before{content:\"\\e904\";margin-left:-1em;color:#00804c}.icon-department-folder-open .path1:before{content:\"\\e905\";color:#000;opacity:.6}.icon-department-folder-open .path2:before{content:\"\\e906\";margin-left:-1em;color:#00804c}.icon-deviation:before{content:\"\\e907\"}.icon-dropdown-folder .path1:before{content:\"\\e908\";color:#00324e}.icon-dropdown-folder .path2:before{content:\"\\e909\";margin-left:-1em;color:#fff;opacity:.6}.icon-enterprise-document .path1:before{content:\"\\e90a\";color:#000;opacity:.6}.icon-enterprise-document .path2:before{content:\"\\e90b\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-closed .path1:before{content:\"\\e90c\";color:#000;opacity:.6}.icon-enterprise-folder-closed .path2:before{content:\"\\e90d\";margin-left:-1em;color:#cf4714}.icon-enterprise-folder-open .path1:before{content:\"\\e90e\";color:#000;opacity:.6}.icon-enterprise-folder-open .path2:before{content:\"\\e90f\";margin-left:-1em;color:#cf4714}.icon-folder-closed:before{content:\"\\e910\"}.icon-folder-open:before{content:\"\\e911\"}.icon-keyboard_arrow_down:before{content:\"\\e912\"}.icon-keyboard_arrow_up:before{content:\"\\e913\"}.icon-local-document .path1:before{content:\"\\e914\";color:#000;opacity:.6}.icon-local-document .path2:before{content:\"\\e915\";margin-left:-1em;color:#1954a9}.icon-local-folder-closed .path1:before{content:\"\\e916\";color:#000;opacity:.6}.icon-local-folder-closed .path2:before{content:\"\\e917\";margin-left:-1em;color:#1954a9}.icon-local-folder-open .path1:before{content:\"\\e918\";color:#000;opacity:.6}.icon-local-folder-open .path2:before{content:\"\\e919\";margin-left:-1em;color:#1954a9}.icon-process:before{content:\"\\e91a\"}.icon-regional-document .path1:before{content:\"\\e91c\";color:#000;opacity:.6}.icon-regional-document .path2:before{content:\"\\e91d\";margin-left:-1em;color:#662e0d}.icon-regional-folder-closed .path1:before{content:\"\\e91e\";color:#000;opacity:.6}.icon-regional-folder-closed .path2:before{content:\"\\e91f\";margin-left:-1em;color:#662e0d}.icon-regional-folder-open .path1:before{content:\"\\e920\";color:#000;opacity:.6}.icon-regional-folder-open .path2:before{content:\"\\e921\";margin-left:-1em;color:#662e0d}.select-access-paginator{max-height:150px!important}.mat-expansion-panel .mat-expansion-panel-body{padding-top:0!important}.mat-expansion-panel-header{font-weight:800!important}.mat-expansion-panel-header .title-content{font-size:12px!important}.w-100{width:100%}.h-100{height:100%}.pointer{cursor:pointer}.fw-600{font-weight:600}.label-item{font-weight:600;color:var(--ws-text-primary)}.sub-label{color:var(--ws-text-secondary)}.fs-14{font-size:14px}.fs-12{font-size:12px}.color-primary{color:var(--primary-light)!important}.header-title{font-weight:600;color:var(--ws-text-primary);font-size:16px}.mat-mdc-chip.chip-item-result{max-width:250px}.mat-mdc-chip.chip-item-result.item-department .qms-chip-body{display:flex;justify-content:center;align-items:center}.remove-chip-icon{cursor:pointer}.remove-chip-icon:hover{color:#000000b3}.mat-form-field-wrapper{padding-bottom:8px!important}.mat-expansion-panel{border-radius:unset!important}.mat-expansion-panel-header:not([aria-disabled=true]){background:unset}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header{background:#e5eefb}.mat-expansion-panel.mat-expanded .mat-expansion-panel-header .qms-line{color:var(--primary-light)!important}.access-dialog-header{display:flex;justify-content:space-between;align-items:center}.mat-chip-list-wrapper{margin:unset!important}.item-list-wrapper{height:40vh;padding:4px 4px 4px 0;overflow-y:auto}.item-list-wrapper.no-result{height:50vh;display:flex;justify-content:center;align-items:center}.item-list-wrapper .item{min-height:40px}.item-list-wrapper .item-without-checkbox{min-height:45px;display:flex;justify-content:space-between;align-items:center;padding:4px 8px;cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:4px;transition:background .3s ease}.item-list-wrapper .item-without-checkbox.active{background:var(--primary-light-12-opacity)}.item-list-wrapper .item-without-checkbox:hover{background:var(--primary-light-6-opacity)}.item-list-wrapper .item-without-checkbox .mat-icon{color:var(--primary-light)!important}.confirm__button__groups .btn-add>.qms-btn-wrapper{display:flex;justify-content:center;align-items:center}.qms-dialog-content{display:grid;column-gap:8px}.qms-dialog-content.active{grid-template-columns:2fr 1fr;min-height:50vh}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-wrapper{padding-bottom:16px!important}.qms-dialog-content .access-dialog-wraper .field-select-option .mat-form-field-underline{bottom:16px!important}.qms-dialog-content .result-wrapper{position:relative;width:100%;margin-left:8px}.qms-dialog-content .result-wrapper:after{position:absolute;content:\"\";top:0;left:0;background-color:#0000001f;height:100%;width:1px}.qms-dialog-content .result-selected-container{position:absolute;inset:0;overflow-y:auto;padding:0 8px}.qms-dialog-content .result-selected-container .result-header{height:51px;display:flex;align-items:center;position:sticky;top:0;z-index:10;padding:0!important;background:#fff;margin-bottom:12px}.qms-dialog-content .result-selected-container .result-header:after{position:absolute;content:\"\";bottom:0;left:0;width:100%;height:1px;background:#0000000a}.qms-dialog-content .result-selected-container .result-header .mat-mdc-card-content{height:51px;width:100%;padding-left:4px;display:flex;align-items:center;background-color:#0000000a}.option-selected-content .group-filter-person-option{display:flex;flex-direction:row-reverse;justify-content:center;align-items:center;gap:8px}span.chip-item__content_name{display:inline-block;max-width:175px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}span.chip-item-children__count{font-size:.75rem;color:#00000080;font-weight:600}.mat-mdc-slide-toggle.qms-group-options{padding:unset!important}.input-option-filter .mat-form-field-wrapper{padding-bottom:8px!important}.input-option-filter .mat-form-field-underline{bottom:8px!important}.slide-toggle{margin-bottom:8px}.confirm__button__groups.none-option{margin-top:85px}.btn-icon-clear{position:relative;padding:0 1rem}.btn-icon-clear .qms-btn-icon{margin-right:unset!important}.btn-icon-clear:after{position:absolute;content:\"\";left:0;top:0;height:100%;width:1px;background:#0000004d}.qms-paginator .mat-mdc-paginator-container .qms-total-result{margin-bottom:0;margin-right:12px;height:100%;display:flex;align-items:center}.qms-paginator .mat-mdc-paginator-container .qms-total-result span{font-weight:600;color:#000c}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions{margin-bottom:0;column-gap:2px}.qms-paginator .mat-mdc-paginator-container .qms-paginator-range-actions>.qms-total-result{margin-bottom:0}.qms-paginator .qms-paginator-page-size{align-items:center}.qms-paginator .mat-form-field-wrapper{padding-bottom:0!important}.mat-mdc-checkbox.checkbox-all .mat-checkbox-label{flex-direction:row!important;align-items:center!important;column-gap:4px!important}.mat-expansion-panel.qms-expansion{margin:0!important}.access-department .qms-view-search-result{height:100%!important}.access-department .qms-view-search-result .result{max-height:calc(100% - 80px)!important}.access-department .loading-container{height:calc(100% - 40px)!important}.qms-loading-container{height:45vh;overflow:hidden;display:grid;grid-template-rows:repeat(60px)}.qms-loading-container .qms-loader{position:relative;width:100%;height:100%;padding:10px 0;overflow:hidden}.qms-loading-container .qms-loader:after{content:\"\";position:absolute;width:100%;height:100%;top:0;left:0;background:linear-gradient(110deg,#e9e9e900,#e3e3e300 40%,#e3e3e380 50%,#e3e3e300 60% 100%);animation:animate-loading 1.2s linear infinite}.qms-loading-container .qms-loader__wrapper{position:relative;width:100%;height:100%}.qms-loading-container .qms-loader__wrapper .row-loader{background-color:#eee;position:absolute;left:0;width:100%;height:40px;overflow:hidden}@keyframes animate-loading{0%{transform:translate(-100%)}to{transform:translate(100%)}}.btn-close-dialog.qms-btn-icon:focus:not(:hover){background-color:unset!important;color:unset!important}.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__cell--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mdc-evolution-chip__action--primary,.mdc-evolution-chip-set .mat-mdc-standard-chip .mat-mdc-chip-action-label{overflow:hidden}\n"] }]
678
678
  }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: i29.QMSSelectAccessDialog, decorators: [{
679
679
  type: Inject,
680
680
  args: [MAT_DIALOG_DATA]
@@ -693,4 +693,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
693
693
  type: ViewChild,
694
694
  args: ['pagingDepartment']
695
695
  }] } });
696
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWFjY2Vzcy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1hY2Nlc3MtZGlhbG9nL3NlbGVjdC1hY2Nlc3MtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QtYWNjZXNzLWRpYWxvZy9zZWxlY3QtYWNjZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBR04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXNCLGtCQUFrQixFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSw0QkFBNEIsRUFBNkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXpELE9BQU8sRUFBRSxjQUFjLEVBQXlCLE1BQU0sa0JBQWtCLENBQUM7QUFFekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDM0csT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEUsT0FBTyxFQUFFLHNCQUFzQixF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LGlCQUFpQjtnQkFDRyxnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTUFUX0NIRUNLQk9YX0RFRkFVTFRfT1BUSU9OUywgTWF0Q2hlY2tib3hEZWZhdWx0T3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUU1TRmxhdE5vZGVUcmVlIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9xbXMtZmxhdC1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TVHJlZU5vZGUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy10cmVlLW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBhZ2luYXRpb25TaXplLCBRTVNQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9xbXMtcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgSVNlbGVjdGlvbk5vZGVDaGFuZ2UsIFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbCB9IGZyb20gJy4uL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUnO1xyXG5pbXBvcnQgeyBTZWxlY3REZXBhcnRtZW50VHJlZUNvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RBY2Nlc3NBbmltYXRpb25UcmlnZ2VyIH0gZnJvbSAnLi9jb21tb24vYW5pbWF0aW9uJztcclxuaW1wb3J0IHsgT3B0aW9uU2VsZWN0QWNjZXNzRW51bSB9IGZyb20gJy4vY29tbW9uL29wdGlvbi1zZWxlY3QtYWNjZXNzLmVudW0nO1xyXG5pbXBvcnQgeyBRTVNBY2Nlc3NJdGVtIH0gZnJvbSAnLi9tb2RlbC9hY2Nlc3MtaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0FjY2Vzc1BhZ2luZ0NoYW5nZU1vZGVsLCBRTVNBY2Nlc3NQYWdpbmdNb2RlbCB9IGZyb20gJy4vbW9kZWwvYWNjZXNzLXBhZ2luZy5tb2RlbCc7XHJcbmltcG9ydCB7IEZpbHRlclBlcnNvbk1vZGVsIH0gZnJvbSAnLi9tb2RlbC9maWx0ZXItcGVyc29uLm1vZGVsJztcclxuaW1wb3J0IHsgT3B0aW9uU2VsZWN0QWNjZXNzTW9kZWwgfSBmcm9tICcuL21vZGVsL29wdGlvbi1zZWxlY3QtYWNjZXNzLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TU2VsZWN0QWNjZXNzRGlhbG9nIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3QtYWNjZXNzLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU1NlbGVjdEFjY2Vzc1Jlc3VsdCB9IGZyb20gJy4vbW9kZWwvc2VsZWN0LWFjY2Vzcy1kYXRhJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncW1zLXNlbGVjdC1hY2Nlc3MtZGlhbG9nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LWFjY2Vzcy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC1hY2Nlc3MtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1NlbGVjdEFjY2Vzc0FuaW1hdGlvblRyaWdnZXJdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBNQVRfQ0hFQ0tCT1hfREVGQVVMVF9PUFRJT05TLFxyXG4gICAgICB1c2VWYWx1ZToge1xyXG4gICAgICAgIGNsaWNrQWN0aW9uOiAnbm9vcCdcclxuICAgICAgfSBhcyBNYXRDaGVja2JveERlZmF1bHRPcHRpb25zXHJcbiAgICB9XHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRTVNTZWxlY3RBY2Nlc3NEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgbmdVbnN1YmNyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBMQU5HOiBhbnk7XHJcbiAgb3B0aW9uU2VsZWN0ID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIE9QVElPTl9FTlVNID0gT3B0aW9uU2VsZWN0QWNjZXNzRW51bTtcclxuICBvcHRpb25zOiBPcHRpb25TZWxlY3RBY2Nlc3NNb2RlbFtdID0gW107XHJcblxyXG4gIHByaXZhdGUgX2RlcGFydG1lbnRTZWxlY3RlZDogUU1TVHJlZU5vZGVbXSA9IFtdO1xyXG4gIGdldCBzZWxlY3RlZERlcGFydG1lbnRzKCkge1xyXG4gICAgY29uc3QgZGVwYXJ0bWVudFNlbGVjdGVkOiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdO1xyXG4gICAgdGhpcy5fZGVwYXJ0bWVudFNlbGVjdGVkLmZvckVhY2goeCA9PiB7XHJcbiAgICAgIGRlcGFydG1lbnRTZWxlY3RlZC5wdXNoKHtcclxuICAgICAgICBpZDogeC5pZCxcclxuICAgICAgICBncm91cElkOiB4Lmdyb3VwSWQsXHJcbiAgICAgICAgaXNHcm91cDogeC5pc0dyb3VwXHJcbiAgICAgIH0gYXMgUU1TRmxhdE5vZGVUcmVlKTtcclxuICAgICAgaWYgKCF4LmNoaWxkcmVuPy5sZW5ndGgpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICBkZXBhcnRtZW50U2VsZWN0ZWQucHVzaCguLi4oeC5jaGlsZHJlbi5tYXAoaXRlbSA9PiAoe1xyXG4gICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgIGdyb3VwSWQ6IGl0ZW0uZ3JvdXBJZCxcclxuICAgICAgICBpc0dyb3VwOiBpdGVtLmlzR3JvdXBcclxuICAgICAgfSBhcyBRTVNGbGF0Tm9kZVRyZWUpKSkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGVwYXJ0bWVudFNlbGVjdGVkIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBlcnNvbkZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgcHVibGljIHVzZXJHcm91cEZvcm0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnKVxyXG4gIHB1YmxpYyBnZXRMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIG9uU2VhcmNoUGVyc29uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlclBlcnNvbk1vZGVsPigpO1xyXG4gIG9uU2VhcmNoUGVyc29uRnJlZVRleHRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBvblNlYXJjaFVzZXJHcm91cEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgb25TZWFyY2hEZXBhcnRtZW50RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgb25TZWFyY2hEZXBhcnRtZW50UGFnaW5nRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBkZXBhcnRtZW50U2VhcmNoRm9ybSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycpO1xyXG4gIG9uUGFnaW5nRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU0FjY2Vzc1BhZ2luZ0NoYW5nZU1vZGVsPigpO1xyXG4gIG9uU2VsZWN0T3B0aW9uQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PE1hdFNlbGVjdENoYW5nZT4oKTtcclxuICB0cmVlRGVwYXJ0bWVudDogU2VsZWN0RGVwYXJ0bWVudFRyZWVDb21wb25lbnRcclxuICBAVmlld0NoaWxkKCd0cmVlJywge1xyXG4gICAgcmVhZDogU2VsZWN0RGVwYXJ0bWVudFRyZWVDb21wb25lbnRcclxuICB9KSBzZXQgdHJlZShkYXRhOiBTZWxlY3REZXBhcnRtZW50VHJlZUNvbXBvbmVudCkge1xyXG4gICAgdGhpcy50cmVlRGVwYXJ0bWVudCA9IGRhdGE7XHJcblxyXG4gICAgY29uc3QgZ3JvdXBzID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMuZmlsdGVyKHggPT4geC5pc0dyb3VwKTtcclxuICAgIGlmIChncm91cHMubGVuZ3RoKVxyXG4gICAgICBncm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgICAgaWYgKCFncm91cC5jaGlsZENvdW50KSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMudHJlZURlcGFydG1lbnQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRyZWVEZXBhcnRtZW50LnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKHggPT4geC5pZCA9PSBncm91cC5pZCk7XHJcbiAgICAgICAgICBpZiAobm9kZSlcclxuICAgICAgICAgICAgZ3JvdXAuY2hpbGRDb3VudCA9IHRoaXMudHJlZURlcGFydG1lbnQuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgncGFnaW5nUGVyc29uJykgcGFnaW5nUGVyc29uOiBRTVNQYWdpbmF0b3JDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgncGFnaW5nVXNlckdyb3VwJykgcGFnaW5nVXNlckdyb3VwOiBRTVNQYWdpbmF0b3JDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgncGFnaW5nRGVwYXJ0bWVudCcpIHBhZ2luZ0RlcGFydG1lbnQ6IFFNU1BhZ2luYXRvckNvbXBvbmVudDtcclxuXHJcbiAgLyoqIGxpc3QgZmlsdGVyZWQgYnkgc2VhcmNoIGtleXdvcmQgKi9cclxuICBvcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsOiB7XHJcbiAgICBkZXBhcnRtZW50czogUU1TRmxhdE5vZGVUcmVlW10sXHJcbiAgICB1c2VyR3JvdXBzOiBRTVNBY2Nlc3NJdGVtW11cclxuICB9ID0ge1xyXG4gICAgICBkZXBhcnRtZW50czogW10sXHJcbiAgICAgIHVzZXJHcm91cHM6IFtdXHJcbiAgICB9O1xyXG5cclxuICBwdWJsaWMgZmlsdGVyZWRTZWFyY2hUZXh0Qm94ID0ge1xyXG4gICAgZGVwYXJ0bWVudDogbmV3IEJlaGF2aW9yU3ViamVjdDxRTVNGbGF0Tm9kZVRyZWVbXT4oW10pLFxyXG4gICAgdXNlckdyb3VwOiBuZXcgQmVoYXZpb3JTdWJqZWN0PFFNU0FjY2Vzc0l0ZW1bXT4oW10pLFxyXG4gIH1cclxuICBnZXRQZXJzb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRTVNBY2Nlc3NQYWdpbmdNb2RlbDxRTVNBY2Nlc3NJdGVtPj4obmV3IFFNU0FjY2Vzc1BhZ2luZ01vZGVsPFFNU0FjY2Vzc0l0ZW0+KCkpO1xyXG4gIGdldCBwZXJzb25GaWx0ZXJlZCgpIHtcclxuICAgIGNvbnN0IHBlcnNvbnMgPSB0aGlzLmdldFBlcnNvbiQudmFsdWU7XHJcbiAgICBjb25zdCBpZHMgPSB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLm1hcCh4ID0+IHguaWQpO1xyXG4gICAgcGVyc29ucy5kYXRhPy5mb3JFYWNoKHggPT4geC5zZWxlY3RlZCA9IGlkcy5pbmNsdWRlcyh4LmlkKSk7XHJcbiAgICByZXR1cm4gcGVyc29ucy5kYXRhIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckdyb3VwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TQWNjZXNzSXRlbT4+KG5ldyBRTVNBY2Nlc3NQYWdpbmdNb2RlbDxRTVNBY2Nlc3NJdGVtPigpKTtcclxuICBnZXQgdXNlckdyb3VwRmlsdGVyZWQoKSB7XHJcbiAgICBjb25zdCB1c2VyR3JvdXBzID0gdGhpcy5nZXRVc2VyR3JvdXAkLnZhbHVlO1xyXG4gICAgY29uc3QgaWRzID0gdGhpcy5yZXN1bHRBY2Nlc3MudXNlckdyb3Vwcy5tYXAoeCA9PiB4LmlkKTtcclxuICAgIHVzZXJHcm91cHMuZGF0YT8uZm9yRWFjaCh4ID0+IHguc2VsZWN0ZWQgPSBpZHMuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgcmV0dXJuIHVzZXJHcm91cHMuZGF0YSB8fCBbXTtcclxuICB9O1xyXG5cclxuICBnZXREZXBhcnRtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TQWNjZXNzSXRlbT4+KG5ldyBRTVNBY2Nlc3NQYWdpbmdNb2RlbDxRTVNBY2Nlc3NJdGVtPigpKTtcclxuICBnZXQgZGVwYXJ0bWVudEZpbHRlcmVkKCkge1xyXG4gICAgY29uc3QgZGVwYXJ0bWVudHMgPSB0aGlzLmdldERlcGFydG1lbnQkLnZhbHVlO1xyXG4gICAgY29uc3QgaWRzID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0Lm1hcCh4ID0+IHguaWQpO1xyXG4gICAgZGVwYXJ0bWVudHMuZGF0YT8uZm9yRWFjaCh4ID0+IHguc2VsZWN0ZWQgPSBpZHMuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgcmV0dXJuIGRlcGFydG1lbnRzLmRhdGEgfHwgW107XHJcbiAgfTtcclxuXHJcblxyXG4gIFBBR0lOQVRJT05fU0laRSA9IFBhZ2luYXRpb25TaXplO1xyXG4gIFBBR0VfU0laRV9PUFRJT046IG51bWJlcltdID0gWzUsIDEwLCAxNSwgMjAsIDI1LCAxMDBdO1xyXG4gIHJlc3VsdEFjY2VzcyA9IG5ldyBRTVNTZWxlY3RBY2Nlc3NSZXN1bHQoKTtcclxuICBhcnJTa2VsZXRvbiA9IG5ldyBBcnJheSg4KS5maWxsKDApO1xyXG4gIC8vcHJldmVudCBldmVudCBwYWdpbmcgd2hlbiBzZWFyY2ggZW1pdCBzZWFyY2ggZXZlbnRcclxuICBnZXRTZWFyY2hpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxRTVNTZWxlY3RBY2Nlc3NEaWFsb2dDb21wb25lbnQ+LFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkaWFsb2dEYXRhOiBRTVNTZWxlY3RBY2Nlc3NEaWFsb2csXHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgX2ZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5faW5pdFJlc3VsdEFjY2VzcygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZS5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9idWlsZE9wdGlvblNlbGVjdCgpO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgdGhpcy5wZXJzb25Gb3JtICYmIHRoaXMucGVyc29uRm9ybS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICB0aGlzLnVzZXJHcm91cEZvcm0gJiYgdGhpcy51c2VyR3JvdXBGb3JtLmRpc2FibGUoKTtcclxuICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudFNlYXJjaEZvcm0gJiYgdGhpcy5kZXBhcnRtZW50U2VhcmNoRm9ybS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGVyc29uRm9ybSAmJiB0aGlzLnBlcnNvbkZvcm0uZW5hYmxlKCk7XHJcbiAgICAgICAgdGhpcy51c2VyR3JvdXBGb3JtICYmIHRoaXMudXNlckdyb3VwRm9ybS5lbmFibGUoKTtcclxuICAgICAgICB0aGlzLmRlcGFydG1lbnRTZWFyY2hGb3JtICYmIHRoaXMuZGVwYXJ0bWVudFNlYXJjaEZvcm0uZW5hYmxlKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLm5nVW5zdWJjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLm5nVW5zdWJjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYnVpbGRPcHRpb25TZWxlY3QoKSB7XHJcbiAgICBjb25zdCBvcHRpb25PYmogPSB7XHJcbiAgICAgIGVuYWJsZVNlbGVjdERlcGFydG1lbnQ6IHtcclxuICAgICAgICBkaXNwbGF5TmFtZTogJ0RFUEFSVE1FTlQnLFxyXG4gICAgICAgIHR5cGU6IHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVFxyXG4gICAgICB9LFxyXG4gICAgICBlbmFibGVTZWxlY3RQZXJzb246IHtcclxuICAgICAgICBkaXNwbGF5TmFtZTogJ1BFUlNPTicsXHJcbiAgICAgICAgdHlwZTogdGhpcy5PUFRJT05fRU5VTS5QRVJTT05cclxuICAgICAgfSxcclxuICAgICAgZW5hYmxlU2VsZWN0VXNlckdyb3VwOiB7XHJcbiAgICAgICAgZGlzcGxheU5hbWU6ICdVU0VSX0dST1VQJyxcclxuICAgICAgICB0eXBlOiB0aGlzLk9QVElPTl9FTlVNLlVTRVJfR1JPVVBcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGl0ZW0gaW4gdGhpcy5kaWFsb2dEYXRhKSB7XHJcbiAgICAgIGlmICghIXRoaXMuZGlhbG9nRGF0YVtpdGVtXSAmJiBvcHRpb25PYmpbaXRlbV0pIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb25PYmpbaXRlbV0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggPT09IDEgfHwgdGhpcy5kaWFsb2dEYXRhLnNraXBGaXJzdEFza2luZ1NjcmVlbikge1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZi51cGRhdGVTaXplKHRoaXMuZGlhbG9nRGF0YS5zaXplVXBkYXRlRGVmYXVsdCk7XHJcbiAgICAgIHRoaXMub3B0aW9uU2VsZWN0LnNldFZhbHVlKHRoaXMub3B0aW9uc1swXS50eXBlKTtcclxuICAgICAgY29uc3QgZXZlbnQkID0gbmV3IE1hdFNlbGVjdENoYW5nZShudWxsLCB0aGlzLm9wdGlvbnNbMF0udHlwZSk7XHJcbiAgICAgIHRoaXMub25TZWxlY3Rpb25UeXBlQ2hhbmdlKGV2ZW50JCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0UmVzdWx0QWNjZXNzKCkge1xyXG4gICAgdGhpcy5yZXN1bHRBY2Nlc3MgPSBfLmNsb25lRGVlcCh7XHJcbiAgICAgIC4uLnRoaXMuZGlhbG9nRGF0YS5kYXRhLnNlbGVjdGVkRGF0YSxcclxuICAgICAgZGVwYXJ0bWVudHM6IFtdXHJcbiAgICB9IGFzIFFNU1NlbGVjdEFjY2Vzc1Jlc3VsdCk7XHJcbiAgICAvLyBpbml0IGdyb3VwIHNlbGVjdGVkIGRlcGFydG1lbnRcclxuICAgIHRoaXMuX2RlcGFydG1lbnRTZWxlY3RlZCA9IF8uY2xvbmVEZWVwKHRoaXMuZGlhbG9nRGF0YS5kYXRhLnNlbGVjdGVkRGF0YS5kZXBhcnRtZW50cyk7XHJcbiAgICBjb25zdCBncm91cHMgPSBbXTtcclxuICAgIGNvbnN0IHNpbmdsZUl0ZW0gPSBbXTtcclxuXHJcbiAgICB0aGlzLl9kZXBhcnRtZW50U2VsZWN0ZWQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaWYgKGl0ZW0uaXNHcm91cCkge1xyXG4gICAgICAgIGdyb3Vwcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFpdGVtLmdyb3VwSWQpIHtcclxuICAgICAgICBzaW5nbGVJdGVtLnB1c2goaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuX2RlcGFydG1lbnRTZWxlY3RlZC5zb21lKHggPT4geC5pZCA9PSBpdGVtLmdyb3VwSWQpKSB7XHJcbiAgICAgICAgaXRlbS5ncm91cElkID0gbnVsbDtcclxuICAgICAgICBzaW5nbGVJdGVtLnB1c2goaXRlbSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLl9kZXBhcnRtZW50U2VsZWN0ZWQuZmlsdGVyKGl0ZW0gPT4gaXRlbS5ncm91cElkID09IGdyb3VwLmlkKTtcclxuICAgICAgZ3JvdXAuY2hpbGRyZW4gPSBjaGlsZDtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMgPSBbLi4uZ3JvdXBzLCAuLi5zaW5nbGVJdGVtXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbHRlck9wdGlvblBlcnNvbkNoYW5nZSgpIHtcclxuICAgIC8vIEZpbHRlciBwZXJzb24gYnkgcm9sZXNcclxuICAgIHRoaXMucGVyc29uRm9ybS5nZXQoJ3VzZXJHcm91cEZpbHRlcicpLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpLCBkZWJvdW5jZVRpbWUoNTAwKSlcclxuICAgICAgLnN1YnNjcmliZShrZXl3b3JkID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC51c2VyR3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWtleXdvcmQpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRTZWFyY2hUZXh0Qm94LnVzZXJHcm91cC5uZXh0KHRoaXMub3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC51c2VyR3JvdXBzKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzdWx0RmlsdGVyID0gdGhpcy5vcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLnVzZXJHcm91cHMuZmlsdGVyKHVzZXJHcm91cCA9PiB1c2VyR3JvdXAubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQudG9Mb2NhbGVMb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRTZWFyY2hUZXh0Qm94LnVzZXJHcm91cC5uZXh0KHJlc3VsdEZpbHRlcik7XHJcbiAgICAgIH0pO1xyXG4gICAgLy8gRmlsdGVyIHBlcnNvbiBieSBkZXBhcnRtZW50c1xyXG4gICAgdGhpcy5wZXJzb25Gb3JtLmdldCgnZGVwYXJ0bWVudEZpbHRlcicpLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC5kZXBhcnRtZW50cykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc2VhcmNoID0gdGhpcy5wZXJzb25Gb3JtLmdldCgnZGVwYXJ0bWVudEZpbHRlcicpLnZhbHVlO1xyXG4gICAgICAgIGlmICghc2VhcmNoKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC5kZXBhcnRtZW50Lm5leHQodGhpcy5vcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLmRlcGFydG1lbnRzLnNsaWNlKCkpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWFyY2ggPSBzZWFyY2gudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC5kZXBhcnRtZW50Lm5leHQoXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbkZpbHRlclBlcnNvbkRhdGFHbG9iYWwuZGVwYXJ0bWVudHMuZmlsdGVyKHggPT4geC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gpID4gLTEpXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXN1bHRUYWJBY3RpdmUoKSB7XHJcbiAgICBjb25zdCByZXN1bHRPYmogPSB7XHJcbiAgICAgIDA6IHRoaXMucmVzdWx0QWNjZXNzLnBlcnNvbnMsXHJcbiAgICAgIDE6IHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMsXHJcbiAgICAgIDI6IHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzIHx8IHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzRmxhdFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdyZXN1bHRPYmonLCByZXN1bHRPYmpbdGhpcy5vcHRpb25TZWxlY3QudmFsdWVdKTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0T2JqW3RoaXMub3B0aW9uU2VsZWN0LnZhbHVlXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGVja0V4aXN0T3B0aW9uU2VsZWN0KG9wdGlvbjogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5vcHRpb25zLmZpbmQoaXRlbSA9PiBpdGVtLnR5cGUgPT09IG9wdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkUGVyc29uRm9ybSgpIHtcclxuICAgIHRoaXMucGVyc29uRm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgdXNlckdyb3VwOiBbXSxcclxuICAgICAgZGVwYXJ0bWVudDogW10sXHJcbiAgICAgIGRlcGFydG1lbnRGaWx0ZXI6IFsnJ10sXHJcbiAgICAgIHJlY3Vyc2l2ZTogW3tcclxuICAgICAgICB2YWx1ZTogZmFsc2UsIGRpc2FibGVkOiB0cnVlXHJcbiAgICAgIH1dLFxyXG4gICAgICBrZXl3b3JkOiBbJyddLFxyXG4gICAgICB1c2VyR3JvdXBGaWx0ZXI6IFsnJ10sXHJcbiAgICAgIGV4Y2x1ZGVkUXVpdERlcGFydG1lbnRJZDogW3RydWVdXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBvbkZpbHRlclBlcnNvbigpIHtcclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMucGVyc29uRm9ybS5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgY29uc3QgZmlsdGVyRGF0YTogRmlsdGVyUGVyc29uTW9kZWwgPSB7XHJcbiAgICAgIGRlcGFydG1lbnRJZDogZm9ybVZhbHVlLmRlcGFydG1lbnQ/LmlkLFxyXG4gICAgICB1c2VyR3JvdXBJZDogZm9ybVZhbHVlLnVzZXJHcm91cD8uaWQsXHJcbiAgICAgIGtleXdvcmQ6IGZvcm1WYWx1ZS5rZXl3b3JkLFxyXG4gICAgICByZWN1cnNpdmU6IGZvcm1WYWx1ZS5yZWN1cnNpdmVcclxuICAgIH07XHJcbiAgICB0aGlzLmdldFNlYXJjaGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuX3Jlc2V0UGFnaW5hdG9yKHRoaXMucGFnaW5nUGVyc29uKTtcclxuICAgIHRoaXMub25TZWFyY2hQZXJzb25FdmVudC5lbWl0KGZpbHRlckRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzZXRQYWdpbmF0b3IocGFnaW5hdG9yOiBRTVNQYWdpbmF0b3JDb21wb25lbnQpIHtcclxuICAgIGlmICghcGFnaW5hdG9yKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBwYWdpbmF0b3IuY2hhbmdlUGFnZSgwKTtcclxuICAgIHBhZ2luYXRvci5yZW5kZXJEaXNwbGF5TnVtYmVyT2ZwYWdlcygpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hQZXJzb25GcmVlVGV4dCgpIHtcclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZ2V0U2VhcmNoaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5vblNlYXJjaFBlcnNvbkZyZWVUZXh0RXZlbnQuZW1pdCh0aGlzLnBlcnNvbkZvcm0uZ2V0KCdrZXl3b3JkJykudmFsdWUpO1xyXG4gICAgdGhpcy5fcmVzZXRQYWdpbmF0b3IodGhpcy5wYWdpbmdQZXJzb24pO1xyXG4gIH1cclxuXHJcbiAgb25GaWx0ZXJVc2VyR3JvdXAoKSB7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmdldFNlYXJjaGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuX3Jlc2V0UGFnaW5hdG9yKHRoaXMucGFnaW5nVXNlckdyb3VwKTtcclxuICAgIHRoaXMub25TZWFyY2hVc2VyR3JvdXBFdmVudC5lbWl0KHRoaXMudXNlckdyb3VwRm9ybS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvbkZpbHRlckRlcGFydG1lbnQoKSB7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmdldFNlYXJjaGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuX3Jlc2V0UGFnaW5hdG9yKHRoaXMucGFnaW5nRGVwYXJ0bWVudCk7XHJcbiAgICB0aGlzLm9uU2VhcmNoRGVwYXJ0bWVudFBhZ2luZ0V2ZW50LmVtaXQodGhpcy5kZXBhcnRtZW50U2VhcmNoRm9ybS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdEl0ZW0odHlwZTogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSwgaXRlbTogUU1TQWNjZXNzSXRlbSkge1xyXG4gICAgaWYgKCF0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIGl0ZW0pKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBpdGVtLnNlbGVjdGVkID0gIWl0ZW0uc2VsZWN0ZWQ7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLlBFUlNPTjpcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVQZXJzb24pIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucyA9IGl0ZW0uc2VsZWN0ZWQgPyBbaXRlbV0gOiBbXTtcclxuICAgICAgICAgICAgdGhpcy5wZXJzb25GaWx0ZXJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChpdGVtLmlkICE9PSBpdGVtLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGl0ZW0uc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBpbmRleEl0ZW0gPSB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICAgICAgaW5kZXhJdGVtID4gLTEgJiYgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucy5zcGxpY2UoaW5kZXhJdGVtLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5VU0VSX0dST1VQOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVVzZXJHcm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzID0gaXRlbS5zZWxlY3RlZCA/IFtpdGVtXSA6IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJHcm91cEZpbHRlcmVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgIT09IGl0ZW0uaWQpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMucHVzaChpdGVtKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBpbmRleEl0ZW0gPSB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICAgICAgaW5kZXhJdGVtID4gLTEgJiYgdGhpcy5yZXN1bHRBY2Nlc3MudXNlckdyb3Vwcy5zcGxpY2UoaW5kZXhJdGVtLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5ERVBBUlRNRU5UOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVVzZXJHcm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50c0ZsYXQgPSBpdGVtLnNlbGVjdGVkID8gW2l0ZW1dIDogW107XHJcbiAgICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudEZpbHRlcmVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgIT09IGl0ZW0uaWQpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXRlbS5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50c0ZsYXQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgaW5kZXhJdGVtID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICAgICAgaW5kZXhJdGVtID4gLTEgJiYgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0LnNwbGljZShpbmRleEl0ZW0sIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZUNoaXAodHlwZTogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSwgaXRlbSwgaW5kZXgpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uUEVSU09OOlxyXG4gICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLnBlcnNvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICBpZiAodGhpcy5wZXJzb25GaWx0ZXJlZFtpbmRleF0pIHtcclxuICAgICAgICAgIHRoaXMucGVyc29uRmlsdGVyZWRbaW5kZXhdLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uVVNFUl9HUk9VUDpcclxuICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlckdyb3VwRmlsdGVyZWRbaW5kZXhdKSB7XHJcbiAgICAgICAgICB0aGlzLnVzZXJHcm91cEZpbHRlcmVkW2luZGV4XS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLkRFUEFSVE1FTlQ6XHJcbiAgICAgICAgaWYgKCF0aGlzLmRpYWxvZ0RhdGEuaXNEZXBhcnRtZW50UGFnaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5fZGVwYXJ0bWVudFNlbGVjdGVkID0gXy5jbG9uZURlZXAodGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMpO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLnRyZWVEZXBhcnRtZW50KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB0aGlzLnRyZWVEZXBhcnRtZW50Lm9uUmVtb3ZlTm9kZShpdGVtLmlkKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50c0ZsYXQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIGlmICh0aGlzLmRlcGFydG1lbnRGaWx0ZXJlZFtpbmRleF0pIHtcclxuICAgICAgICAgICAgdGhpcy5kZXBhcnRtZW50RmlsdGVyZWRbaW5kZXhdLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25UeXBlQ2hhbmdlKGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UpIHtcclxuICAgIHN3aXRjaCAoZXZlbnQudmFsdWUpIHtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlBFUlNPTjpcclxuICAgICAgICB0aGlzLmJ1aWxkUGVyc29uRm9ybSgpO1xyXG4gICAgICAgIHRoaXMuX2ZpbHRlck9wdGlvblBlcnNvbkNoYW5nZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVDpcclxuICAgICAgICB0aGlzLmRpYWxvZ0RhdGEudHJlZURlcGFydG1lbnRDb25maWcuc2VsZWN0ZWRMaXN0ID0gdGhpcy5zZWxlY3RlZERlcGFydG1lbnRzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kaWFsb2dSZWYudXBkYXRlU2l6ZSh0aGlzLmRpYWxvZ0RhdGEuc2l6ZVVwZGF0ZURlZmF1bHQpO1xyXG4gICAgdGhpcy5vblNlbGVjdE9wdGlvbkNoYW5nZSQubmV4dChldmVudCk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHNldEZvcm1Db250cm9sVmFsdWUoZm9ybUNvbnRyb2xOYW1lczogc3RyaW5nW10sIHZhbHVlcykge1xyXG4gICAgZm9ybUNvbnRyb2xOYW1lcy5mb3JFYWNoKChjb250cm9sTmFtZSwgX2luZGV4KSA9PiB7XHJcbiAgICAgIHRoaXMucGVyc29uRm9ybS5nZXQoY29udHJvbE5hbWUpPy5zZXRWYWx1ZSh2YWx1ZXNbX2luZGV4XSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgaXNDaGVja0FsbCh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlBFUlNPTjpcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lUGVyc29uICYmIHRoaXMucGVyc29uRmlsdGVyZWQubGVuZ3RoICYmIHRoaXMucGVyc29uRmlsdGVyZWQuZXZlcnkoeCA9PiB4LnNlbGVjdGVkKTtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlVTRVJfR1JPVVA6XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVVzZXJHcm91cCAmJiB0aGlzLnVzZXJHcm91cEZpbHRlcmVkLmxlbmd0aCAmJiB0aGlzLnVzZXJHcm91cEZpbHRlcmVkLmV2ZXJ5KHggPT4geC5zZWxlY3RlZCk7XHJcbiAgICAgIGNhc2UgdGhpcy5PUFRJT05fRU5VTS5ERVBBUlRNRU5UOlxyXG4gICAgICAgIHJldHVybiAhdGhpcy5kaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVVc2VyR3JvdXAgJiYgdGhpcy5kZXBhcnRtZW50RmlsdGVyZWQubGVuZ3RoICYmIHRoaXMuZGVwYXJ0bWVudEZpbHRlcmVkLmV2ZXJ5KHggPT4geC5zZWxlY3RlZCk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlZFNlbGVjdEFsbCh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLlBFUlNPTjogcmV0dXJuICF0aGlzLnBlcnNvbkZpbHRlcmVkLmxlbmd0aCB8fCB0aGlzLnBlcnNvbkZpbHRlcmVkLmV2ZXJ5KHggPT4gIXRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkpXHJcbiAgICAgIGNhc2UgT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5VU0VSX0dST1VQOiByZXR1cm4gIXRoaXMudXNlckdyb3VwRmlsdGVyZWQubGVuZ3RoIHx8IHRoaXMudXNlckdyb3VwRmlsdGVyZWQuZXZlcnkoeCA9PiAhdGhpcy5hbGxvd1JlbW92ZSh0eXBlLCB4KSlcclxuICAgICAgY2FzZSBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLkRFUEFSVE1FTlQ6IHJldHVybiAhdGhpcy5kZXBhcnRtZW50RmlsdGVyZWQubGVuZ3RoIHx8IHRoaXMuZGVwYXJ0bWVudEZpbHRlcmVkLmV2ZXJ5KHggPT4gIXRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkpXHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzSW5kZXRlcm1pbmF0ZSh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlBFUlNPTjpcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lUGVyc29uICYmICF0aGlzLmlzQ2hlY2tBbGwodHlwZSkgJiYgdGhpcy5wZXJzb25GaWx0ZXJlZD8uc29tZSh4ID0+IHguc2VsZWN0ZWQpO1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uVVNFUl9HUk9VUDpcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwICYmICF0aGlzLmlzQ2hlY2tBbGwodHlwZSkgJiYgdGhpcy51c2VyR3JvdXBGaWx0ZXJlZD8uc29tZSh4ID0+IHguc2VsZWN0ZWQpO1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVDpcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwICYmICF0aGlzLmlzQ2hlY2tBbGwodHlwZSkgJiYgdGhpcy5kZXBhcnRtZW50RmlsdGVyZWQ/LnNvbWUoeCA9PiB4LnNlbGVjdGVkKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoZWNrQWxsKHR5cGU6IE9wdGlvblNlbGVjdEFjY2Vzc0VudW0sICRldmVudCkge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZFNlbGVjdEFsbCh0eXBlKSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgJGV2ZW50LmNoZWNrZWQgPSAhJGV2ZW50LmNoZWNrZWQ7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlBFUlNPTjoge1xyXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVBlcnNvbikge1xyXG4gICAgICAgICAgJGV2ZW50LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnBlcnNvbkZpbHRlcmVkLmxlbmd0aClcclxuICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5wZXJzb25GaWx0ZXJlZC5maWx0ZXIoeCA9PiB0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpKS5mb3JFYWNoKHggPT4geC5zZWxlY3RlZCA9ICRldmVudC5jaGVja2VkKTtcclxuICAgICAgICBjb25zdCBpZEZpbHRlcmVkID0gdGhpcy5wZXJzb25GaWx0ZXJlZC5tYXAoeCA9PiB4LmlkKTtcclxuICAgICAgICBpZiAoJGV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGlkUGVyc29uU2VsZWN0ZWQgPSB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLm1hcCh4ID0+IHguaWQpO1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucyA9IFsuLi50aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLCAuLi50aGlzLnBlcnNvbkZpbHRlcmVkLmZpbHRlcih4ID0+IHRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkgJiYgIWlkUGVyc29uU2VsZWN0ZWQuaW5jbHVkZXMoeC5pZCkpXTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucyA9IHRoaXMucmVzdWx0QWNjZXNzLnBlcnNvbnMuZmlsdGVyKHggPT4gIXRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkgfHwgIWlkRmlsdGVyZWQuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgdGhpcy5PUFRJT05fRU5VTS5VU0VSX0dST1VQOiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwKSB7XHJcbiAgICAgICAgICAkZXZlbnQuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1c2VyR3JvdXBQYWdpbmcgPSB0aGlzLnVzZXJHcm91cEZpbHRlcmVkO1xyXG4gICAgICAgIHVzZXJHcm91cFBhZ2luZy5maWx0ZXIoeCA9PiB0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpKS5mb3JFYWNoKHggPT4geC5zZWxlY3RlZCA9ICRldmVudC5jaGVja2VkKTtcclxuICAgICAgICBjb25zdCBpZEZpbHRlcmVkID0gdXNlckdyb3VwUGFnaW5nLm1hcCh4ID0+IHguaWQpO1xyXG4gICAgICAgIGlmICgkZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICAgICAgY29uc3QgaWRTZWxlY3RlZCA9IHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMubWFwKHggPT4geC5pZCk7XHJcbiAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzID0gWy4uLnRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMsIC4uLnVzZXJHcm91cFBhZ2luZy5maWx0ZXIoeCA9PiB0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpICYmICFpZFNlbGVjdGVkLmluY2x1ZGVzKHguaWQpKV07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMgPSB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLmZpbHRlcih4ID0+ICF0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpIHx8ICFpZEZpbHRlcmVkLmluY2x1ZGVzKHguaWQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVDoge1xyXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVVzZXJHcm91cCkge1xyXG4gICAgICAgICAgJGV2ZW50LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGVwYXJ0bWVudFBhZ2luZyA9IHRoaXMuZGVwYXJ0bWVudEZpbHRlcmVkO1xyXG4gICAgICAgIGRlcGFydG1lbnRQYWdpbmcuZmlsdGVyKHggPT4gdGhpcy5hbGxvd1JlbW92ZSh0eXBlLCB4KSkuZm9yRWFjaCh4ID0+IHguc2VsZWN0ZWQgPSAkZXZlbnQuY2hlY2tlZCk7XHJcbiAgICAgICAgY29uc3QgaWRGaWx0ZXJlZCA9IGRlcGFydG1lbnRQYWdpbmcubWFwKHggPT4geC5pZCk7XHJcbiAgICAgICAgaWYgKCRldmVudC5jaGVja2VkKSB7XHJcbiAgICAgICAgICBjb25zdCBpZFNlbGVjdGVkID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0Lm1hcCh4ID0+IHguaWQpO1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0ID0gWy4uLnRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzRmxhdCwgLi4uZGVwYXJ0bWVudFBhZ2luZy5maWx0ZXIoeCA9PiB0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpICYmICFpZFNlbGVjdGVkLmluY2x1ZGVzKHguaWQpKV07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzRmxhdCA9IHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzRmxhdC5maWx0ZXIoeCA9PiAhdGhpcy5hbGxvd1JlbW92ZSh0eXBlLCB4KSB8fCAhaWRGaWx0ZXJlZC5pbmNsdWRlcyh4LmlkKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbk5vZGVEZXBhcnRtZW50Q2hhbmdlKHsgYWRkZWQsIHJlbW92ZWQsIHVwZGF0ZWQgfTogSVNlbGVjdGlvbk5vZGVDaGFuZ2U8UU1TVHJlZU5vZGU+KSB7XHJcbiAgICBpZiAoYWRkZWQubGVuZ3RoKSB7XHJcbiAgICAgIGFkZGVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzLnNvbWUoeCA9PiB4LmlkID09PSBpdGVtLmlkKSlcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChyZW1vdmVkLmxlbmd0aCkge1xyXG4gICAgICByZW1vdmVkLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSB4LmlkKTtcclxuICAgICAgICBpZiAoaW5kZXggPCAwKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHVwZGF0ZWQubGVuZ3RoKSB7XHJcbiAgICAgIHVwZGF0ZWQuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT0geC5pZCk7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMClcclxuICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZGVwYXJ0bWVudHMgPSB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PSB4LmlkKTtcclxuICAgICAgICBpZiAoIWRlcGFydG1lbnRzKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGRlcGFydG1lbnRzLmNoaWxkcmVuID0geC5jaGlsZHJlbjtcclxuICAgICAgICBkZXBhcnRtZW50cy5jaGlsZENvdW50ID0geC5jaGlsZENvdW50O1xyXG5cclxuICAgICAgICBpZiAoZGVwYXJ0bWVudHMuY2hpbGRyZW4ubGVuZ3RoKVxyXG4gICAgICAgICAgZGVwYXJ0bWVudHMuY2hpbGRyZW4uZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSB4LmlkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpXHJcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoISFpdGVtLmNoaWxkcmVuKVxyXG4gICAgICAgIGl0ZW0uY2hpbGRyZW4gPSBpdGVtLmNoaWxkcmVuLmZpbHRlcigoeCwgaW5kZXgpID0+IGluZGV4ID09PSBpdGVtLmNoaWxkcmVuLmZpbmRJbmRleChfeCA9PiB4LmlkID09PSBfeC5pZCkpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9kZXBhcnRtZW50U2VsZWN0ZWQgPSBfLmNsb25lRGVlcCh0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cyk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uU2NvbGxUb05vZGVUcmVlRGVwYXJ0bWVudChub2RlOiBRTVNUcmVlTm9kZSkge1xyXG4gICAgdGhpcy5vcHRpb25TZWxlY3QudmFsdWUgPT09IHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVCAmJiB0aGlzLnRyZWVEZXBhcnRtZW50LnNjcm9sbFRvTm9kZShub2RlLmlkKVxyXG4gIH1cclxuXHJcbiAgdHJhY2tCeUZuKGluZGV4LCBpdGVtKSB7XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQZXJzb25GaWx0ZXIoZGF0YTogUU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TQWNjZXNzSXRlbT4pIHtcclxuICAgIHRoaXMuZ2V0UGVyc29uJC5uZXh0KGRhdGEpO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuZ2V0U2VhcmNoaW5nJC5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVVzZXJHcm91cEZpbHRlcihkYXRhOiBRTVNBY2Nlc3NQYWdpbmdNb2RlbDxRTVNBY2Nlc3NJdGVtPikge1xyXG4gICAgdGhpcy5nZXRVc2VyR3JvdXAkLm5leHQoZGF0YSk7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5nZXRTZWFyY2hpbmckLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgb25QYWdpbmF0b3JFdmVudCh2YWw6IFBhZ2VFdmVudCwgdHlwZTogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSkge1xyXG4gICAgaWYgKHRoaXMuZ2V0U2VhcmNoaW5nJC52YWx1ZSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KHRoaXMub3B0aW9uU2VsZWN0LnZhbHVlICE9PSAnJyk7XHJcbiAgICB0aGlzLm9uUGFnaW5nRXZlbnQuZW1pdCh7XHJcbiAgICAgIC4uLnZhbCxcclxuICAgICAgdHlwZTogdHlwZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblJlc3VsdERlcGFydG1lbnRDaGFuZ2UoZXZlbnQ6IFFNU1RyZWVOb2RlW10pIHtcclxuICAgIC8vIHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSZXN1bHRTZWFyY2hEZXBhcnRtZW50KGRhdGE6IFFNU0FjY2Vzc1BhZ2luZ01vZGVsPFFNU0ZsYXROb2RlVHJlZT4gPSBuZXcgUU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPigpKSB7XHJcbiAgICBpZiAoIXRoaXMudHJlZURlcGFydG1lbnQpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGRhdGEgPSBkYXRhIGFzIFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbDxRTVNGbGF0Tm9kZVRyZWU+O1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5kaXNhYmxlU2VsZWN0ZWRMaXN0KSB7XHJcbiAgICAgIGRhdGEuZGF0YS5mb3JFYWNoKHggPT4geC5kaXNhYmxlZCA9ICF0aGlzLmFsbG93UmVtb3ZlKE9wdGlvblNlbGVjdEFjY2Vzc0VudW0uREVQQVJUTUVOVCwgeCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmVlRGVwYXJ0bWVudC5zZXRSZXN1bHRTZWFyY2goZGF0YSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEZXBhcnRtZW50RmlsdGVyKGRhdGE6IFFNU0FjY2Vzc1BhZ2luZ01vZGVsPFFNU0FjY2Vzc0l0ZW0+KSB7XHJcbiAgICB0aGlzLmdldERlcGFydG1lbnQkLm5leHQoZGF0YSk7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5nZXRTZWFyY2hpbmckLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcblxyXG4gIGdlbmVyYXRlVG9vbHRpcChub2RlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGE/LmZvcm1hdFRvb2x0aXApXHJcbiAgICAgIHJldHVybiB0aGlzLmRpYWxvZ0RhdGEuZm9ybWF0VG9vbHRpcChub2RlKTtcclxuICAgIHJldHVybiAobm9kZT8uaXNHcm91cCkgPyB0aGlzLmZvcm1hdFN0cmluZyh0aGlzLkxBTkcuVE9PTFRJUF9JTkNMVURFX1NVQl9ERVBBUlRNRU5ULCBub2RlLm5hbWUsIG5vZGUuY2hpbGRyZW4/Lmxlbmd0aC50b1N0cmluZygpKSA6IChgJHtub2RlLm5hbWV9ICR7bm9kZT8uc3ViTmFtZSA/IGAtICgke25vZGUuc3ViTmFtZX0pYCA6ICcnfWApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRTdHJpbmcoLi4ucmVwbGFjZW1lbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVzdWx0ID0gYXJndW1lbnRzWzBdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoYFxcXFx7JHtpfVxcXFx9YCwgJ2dtJyk7XHJcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHJlZywgYXJndW1lbnRzW2kgKyAxXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgaGFzSXRlbVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVzdWx0QWNjZXNzKS5zb21lKGtleSA9PiAhIXRoaXMucmVzdWx0QWNjZXNzW2tleV0/Lmxlbmd0aClcclxuICB9XHJcblxyXG4gIHVwZGF0ZURlcGFydG1lbnQoZGF0YTogUU1TVHJlZU5vZGVbXSA9IFtdKSB7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xyXG5cclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEuZGlzYWJsZVNlbGVjdGVkTGlzdCkge1xyXG4gICAgICBkYXRhLmZvckVhY2goaXRlbSA9PiBpdGVtLmRpc2FibGVkID0gIXRoaXMuYWxsb3dSZW1vdmUoT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5ERVBBUlRNRU5ULCBpdGVtKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpYWxvZ0RhdGEudHJlZURlcGFydG1lbnRDb25maWcudHJlZURhdGEgPSBfLmNsb25lRGVlcChkYXRhKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU9wdGlvblBlcnNvbkZpbHRlcihkZXBhcnRtZW50RmlsdGVyOiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdLCB1c2VyR3JvdXBGaWx0ZXI6IFFNU0FjY2Vzc0l0ZW1bXSA9IFtdKSB7XHJcbiAgICB0aGlzLm9wdGlvbkZpbHRlclBlcnNvbkRhdGFHbG9iYWwuZGVwYXJ0bWVudHMgPSBkZXBhcnRtZW50RmlsdGVyO1xyXG4gICAgdGhpcy5vcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLnVzZXJHcm91cHMgPSB1c2VyR3JvdXBGaWx0ZXI7XHJcbiAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC5kZXBhcnRtZW50Lm5leHQoZGVwYXJ0bWVudEZpbHRlcik7XHJcbiAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC51c2VyR3JvdXAubmV4dCh1c2VyR3JvdXBGaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFBhZ2VTaXplT3B0aW9uKGRhdGE6IG51bWJlcltdKSB7XHJcbiAgICB0aGlzLlBBR0VfU0laRV9PUFRJT04gPSBkYXRhO1xyXG4gIH1cclxuICBhbGxvd1JlbW92ZSA9ICh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLCBpdGVtOiBhbnkpOiBib29sZWFuID0+IHtcclxuICAgIGlmICghdGhpcy5kaWFsb2dEYXRhLmRpc2FibGVTZWxlY3RlZExpc3QpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgeyBwZXJzb25zLCBkZXBhcnRtZW50cywgdXNlckdyb3VwcyB9ID0gdGhpcy5kaWFsb2dEYXRhLmRhdGEuc2VsZWN0ZWREYXRhO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5QRVJTT046IHJldHVybiAhcGVyc29ucy5zb21lKHggPT4geC5pZCA9PSBpdGVtLmlkKVxyXG4gICAgICBjYXNlIE9wdGlvblNlbGVjdEFjY2Vzc0VudW0uREVQQVJUTUVOVDogcmV0dXJuICFkZXBhcnRtZW50cy5zb21lKHggPT4geC5pZCA9PSBpdGVtLmlkKVxyXG4gICAgICBjYXNlIE9wdGlvblNlbGVjdEFjY2Vzc0VudW0uVVNFUl9HUk9VUDogcmV0dXJuICF1c2VyR3JvdXBzLnNvbWUoeCA9PiB4LmlkID09IGl0ZW0uaWQpXHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuIiwiPGgzIG1hdC1kaWFsb2ctdGl0bGUgY2xhc3M9XCJtb3JlLWFjdGlvblwiPlxuICB7e2RpYWxvZ0RhdGEudGl0bGVEaWFsb2cgfHwgTEFORy5TRUxFQ1RfQUNDRVNTfX1cbiAgPGJ1dHRvbiBtYXREaWFsb2dDbG9zZSBjbGFzcz1cImNsb3NlLWJ0blwiIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb25zLW91dGxpbmVkXCI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvaDM+XG48bWF0LWRpYWxvZy1jb250ZW50PlxuICA8ZGl2IFtjbGFzcy5hY3RpdmVdPVwib3B0aW9uU2VsZWN0LnZhbHVlICE9PSBudWxsXCIgY2xhc3M9XCJxbXMtZGlhbG9nLWNvbnRlbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLWRpYWxvZy13cmFwZXJcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIm9wdGlvbnMubGVuZ3RoID4gMVwiIHFtcy1mb3JtIHFtcy1zZWxlY3QtaW5wdXQgY2xhc3M9XCJmaWVsZC1zZWxlY3Qtb3B0aW9uIHctMTAwIG1iLTJcIlxuICAgICAgICBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgICA8bWF0LWxhYmVsIFthdHRyLmFyaWEtbGFiZWxdPVwiTEFORy5UWVBFXCIgcW1zLXNlbGVjdC1pbnB1dD57e0xBTkcuVFlQRX19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25UeXBlQ2hhbmdlKCRldmVudClcIiBbZm9ybUNvbnRyb2xdPVwib3B0aW9uU2VsZWN0XCIgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIlxuICAgICAgICAgIGRpc2FibGVPcHRpb25DZW50ZXJpbmcgI3NpbmdsZVNlbGVjdCBwYW5lbENsYXNzPVwicW1zLXNlbGVjdC1wYW5lbFwiIHFtcy1zZWxlY3Q+XG5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zXCIgW3ZhbHVlXT1cIml0ZW0udHlwZVwiPlxuICAgICAgICAgICAge3sgTEFOR1tpdGVtLmRpc3BsYXlOYW1lXSB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxkaXYgY2xhc3M9XCJib2R5LWRpYWxvZy1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1zZWxlY3RlZC1jb250ZW50XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvblNlbGVjdC52YWx1ZSA9PT0gT1BUSU9OX0VOVU0uUEVSU09OXCI+XG4gICAgICAgICAgICA8Zm9ybSAqbmdJZj1cInBlcnNvbkZvcm1cIiBbZm9ybUdyb3VwXT1cInBlcnNvbkZvcm1cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWZpbHRlci1wZXJzb24tb3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwib3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC51c2VyR3JvdXBzLmxlbmd0aFwiIHFtcy1mb3JtIHFtcy1zZWxlY3QtaW5wdXRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgIG1iLTJcIiBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBbYXR0ci5hcmlhLWxhYmVsXT1cIkxBTkcuUk9MRVwiIHFtcy1zZWxlY3QtaW5wdXQ+e3tMQU5HLlJPTEV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGFuZWxDbGFzcz1cInFtcy1zZWxlY3QtcGFuZWxcIiBxbXMtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInVzZXJHcm91cFwiXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVPcHRpb25DZW50ZXJpbmc+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAge3twZXJzb25Gb3JtLmNvbnRyb2xzWyd1c2VyR3JvdXAnXS52YWx1ZT8ubmFtZSB8fCAnJ319XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoIGZvcm1Db250cm9sTmFtZT1cInVzZXJHcm91cEZpbHRlclwiIHBsYWNlaG9sZGVyTGFiZWw9XCJ7eyBMQU5HLlJPTEUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbm9FbnRyaWVzRm91bmRMYWJlbD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIG1vZGU9XCJkYXJrXCIgY2xhc3M9XCJvcHQtY2hlY2staWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRTZWFyY2hUZXh0Qm94LnVzZXJHcm91cC52YWx1ZVwiIFt2YWx1ZV09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gcW1zLWVsaXBzaWZ5IHBvc2l0aW9uPVwidG9wXCIgbW9kZT1cImRhcmtcIiBjbGFzcz1cInRleHQtb3B0aW9uLWNvbnRlbnRcIj57eyBpdGVtLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY2hlY2staWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBlcnNvbkZvcm0uY29udHJvbHNbJ3VzZXJHcm91cCddLnZhbHVlPy5pZCA9PSBpdGVtLmlkXCI+Y2hlY2s8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbQGluT3V0QW5pbWF0aW9uXSAoY2xpY2spPVwicGVyc29uRm9ybS5nZXQoJ3VzZXJHcm91cCcpLnNldFZhbHVlKCcnKVwiIGNsYXNzPVwicG9pbnRlciBcIiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCIgKm5nSWY9XCJwZXJzb25Gb3JtLmdldCgndXNlckdyb3VwJykudmFsdWUgJiYgIWdldExvYWRpbmckLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJvcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLmRlcGFydG1lbnRzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIGlucHV0LXNlbGVjdC1vcHRpb24gIG1iLTJcIiBxbXMtZm9ybSBxbXMtc2VsZWN0LWlucHV0PlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBbYXR0ci5hcmlhLWxhYmVsXT1cIkxBTkcuREVQQVJUTUVOVF9VTklUXCI+e3tMQU5HLkRFUEFSVE1FTlRfVU5JVH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwYW5lbENsYXNzPVwicW1zLXNlbGVjdC1wYW5lbFwiIHFtcy1zZWxlY3QgZGlzYWJsZU9wdGlvbkNlbnRlcmluZ1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXBhcnRtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAge3twZXJzb25Gb3JtLmNvbnRyb2xzWydkZXBhcnRtZW50J10udmFsdWU/Lm5hbWUgfHwgJyd9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPG5neC1tYXQtc2VsZWN0LXNlYXJjaCBmb3JtQ29udHJvbE5hbWU9XCJkZXBhcnRtZW50RmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlckxhYmVsXT1cIkxBTkcuREVQQVJUTUVOVF9VTklUXCIgbm9FbnRyaWVzRm91bmRMYWJlbD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwib3B0LWNoZWNrLWljb25cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZFNlYXJjaFRleHRCb3guZGVwYXJ0bWVudC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBxbXMtZWxpcHNpZnkgbW9kZT1cImRhcmtcIiBwb3NpdGlvbj1cInRvcFwiIGNsYXNzPVwidGV4dC1vcHRpb24tY29udGVudFwiPnt7IGl0ZW0ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjaGVjay1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGVyc29uRm9ybS5jb250cm9sc1snZGVwYXJ0bWVudCddLnZhbHVlPy5pZCA9PSBpdGVtLmlkXCI+Y2hlY2s8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic2V0Rm9ybUNvbnRyb2xWYWx1ZShbJ3JlY3Vyc2l2ZScsJ2RlcGFydG1lbnQnXSwgW2ZhbHNlLCcnXSlcIiBbQGluT3V0QW5pbWF0aW9uXVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvaW50ZXJcIiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwZXJzb25Gb3JtLmdldCgnZGVwYXJ0bWVudCcpLnZhbHVlICYmICFnZXRMb2FkaW5nJC52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwicGVyc29uRm9ybS5jb250cm9sc1snZGVwYXJ0bWVudCddLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIHNsaWRlLXRvZ2dsZVwiIGZvcm1Db250cm9sTmFtZT1cInJlY3Vyc2l2ZVwiIGNvbG9yPVwiZGVmYXVsdFwiIHFtcy1ncm91cC1vcHRpb25zPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbFwiPnt7TEFORy5JTkNMVURFX1NVQl9ERVBBUlRNRU5UU319PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDAgIG1iLTJcIiBhcHBlYXJhbmNlPVwiZmlsbFwiIHFtcy1mb3JtIHFtcy1zZWFyY2gtZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBbYXR0ci5hcmlhLWxhYmVsXT1cIkxBTkcuU0VBUkNIX1dJVEhfTkFNRVwiIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgIHFtcy1zZWxlY3QtaW5wdXQ+e3tMQU5HLlNFQVJDSF9XSVRIX05BTUV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBhcHBlYXJhbmNlPVwib2ZmXCIgcGxhY2Vob2xkZXI9XCJ7e0xBTkcuU0VBUkNIX1dJVEhfTkFNRX19XCIgZm9ybUNvbnRyb2xOYW1lPVwia2V5d29yZFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFnZXRMb2FkaW5nJC52YWx1ZVwiIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCIgW0Bpbk91dEFuaW1hdGlvbl1cbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlYXJjaFBlcnNvbkZyZWVUZXh0KClcIiBjbGFzcz1cInBvaW50ZXIgbWUtMVwiIG1hdFN1ZmZpeCBhcmlhLWxhYmVsPVwiU2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeCBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCJnZXRMb2FkaW5nJC52YWx1ZVwiIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgZGlhbWV0ZXI9XCIyMFwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBbQGluT3V0QW5pbWF0aW9uXSAoY2xpY2spPVwicGVyc29uRm9ybS5nZXQoJ2tleXdvcmQnKS5zZXRWYWx1ZSgnJylcIiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGVyc29uRm9ybS5nZXQoJ2tleXdvcmQnKS52YWx1ZSAmJiAhZ2V0TG9hZGluZyQudmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uRmlsdGVyUGVyc29uKClcIiBxbXMtYnRuLW91dGxpbmVkIGNsYXNzPVwidy0xMDAgbXktMVwiPlxuICAgICAgICAgICAgICAgIHt7TEFORy5GSUxURVJ9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8ZGl2IHFtcy1zY3JvbGxiYXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW0Bpbk91dEFuaW1hdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZ2V0TG9hZGluZyQudmFsdWUgJiYgcGVyc29uRmlsdGVyZWQubGVuZ3RoICYmICFkaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVQZXJzb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFNlbGVjdEFsbChPUFRJT05fRU5VTS5QRVJTT04pXCIgI2NoZWNrUGVyc29uIGNsYXNzPVwidy0xMDAgbWItMSBjaGVja2JveC1hbGxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGVyc29uRmlsdGVyZWQubGVuZ3RoICYmIG9uQ2hlY2tBbGwoT1BUSU9OX0VOVU0uUEVSU09OLGNoZWNrUGVyc29uKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQ2hlY2tBbGwoT1BUSU9OX0VOVU0uUEVSU09OKVwiIFtpbmRldGVybWluYXRlXT1cImlzSW5kZXRlcm1pbmF0ZShPUFRJT05fRU5VTS5QRVJTT04pXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJkZWZhdWx0XCIgcW1zLWdyb3VwLW9wdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbCBoZWFkZXItdGl0bGVcIj57e0xBTkcuQ0hPT1NFX0FMTH19ICg8Yj57e3BlcnNvbkZpbHRlcmVkLmxlbmd0aH19PC9iPik8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJteC1hdXRvXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0TG9hZGluZyQudmFsdWU7IHRoZW4gbG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCJwZXJzb25GaWx0ZXJlZC5sZW5ndGggJiYgIWdldExvYWRpbmckLnZhbHVlXCIgW0BsaXN0QW5pbWF0aW9uXVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtLWxpc3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gIG10LTFcIiBbQGluT3V0QW5pbWF0aW9uXSAqbmdGb3I9XCJsZXQgZW1wbG95ZWUgb2YgcGVyc29uRmlsdGVyZWQ7IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lUGVyc29uID9pdGVtV2l0aG91dENoZWNrYm94VGVtcGxhdGUgOiBpdGVtQ2hlY2tib3hUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBlbXBsb3llZSwgdHlwZTogT1BUSU9OX0VOVU0uUEVSU09OfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCIhcGVyc29uRmlsdGVyZWQubGVuZ3RoICYmICFnZXRMb2FkaW5nJC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW0tbGlzdC13cmFwcGVyIG5vLXJlc3VsdFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vUmVzdWx0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibXgtYXV0b1wiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgPHFtcy1wYWdpbmF0b3Igb3ZlcmxheVBhbmVsQ2xhc3M9XCJzZWxlY3QtYWNjZXNzLXBhZ2luYXRvclwiICNwYWdpbmdQZXJzb25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0UGVyc29uJC52YWx1ZS5sZW5ndGggPiAxMFwiIFtsZW5ndGhdPVwiZ2V0UGVyc29uJC52YWx1ZS5sZW5ndGhcIiBbbnVtSGlkZGVuXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cImdldFBlcnNvbiQudmFsdWUucGFnZVNpemVcIiBbcGFnZVNpemVPcHRpb25zXT1cIlBBR0VfU0laRV9PUFRJT05cIlxuICAgICAgICAgICAgICAgICAgKHBhZ2UpPSdvblBhZ2luYXRvckV2ZW50KCRldmVudCwgT1BUSU9OX0VOVU0uUEVSU09OKScgW3NpemVdPSdQQUdJTkFUSU9OX1NJWkUubWVkaXVtJz5cbiAgICAgICAgICAgICAgICA8L3Ftcy1wYWdpbmF0b3I+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25TZWxlY3QudmFsdWUgPT09IE9QVElPTl9FTlVNLlVTRVJfR1JPVVBcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxmb3JtIChzdWJtaXQpPVwib25GaWx0ZXJVc2VyR3JvdXAoKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwICBtYi0yXCIgcW1zLWZvcm0gcW1zLXNlYXJjaC1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgYXJpYS1sYWJlbD1cIlVzZXIgZ3JvdXBcIiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiIHFtcy1zZWxlY3QtaW5wdXQ+VXNlciBncm91cDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJ1c2VyR3JvdXBGb3JtXCIgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IExBTkcuU0VBUkNIIH19XCIgLz5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCIhZ2V0TG9hZGluZyQudmFsdWVcIiB0eXBlPVwic3VibWl0XCIgcW1zLWJ0bi1pY29uIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXg+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeCBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cImdldExvYWRpbmckLnZhbHVlXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGRpYW1ldGVyPVwiMjBcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwidXNlckdyb3VwRm9ybS5zZXRWYWx1ZSgnJylcIiBxbXMtYnRuLWljb24gY29sb3I9XCJsaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICA8ZGl2IHFtcy1zY3JvbGxiYXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW0Bpbk91dEFuaW1hdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZ2V0TG9hZGluZyQudmFsdWUgJiYgKHVzZXJHcm91cEZpbHRlcmVkLmxlbmd0aCAmJiAhZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkU2VsZWN0QWxsKE9QVElPTl9FTlVNLlVTRVJfR1JPVVApXCIgI2NoZWNrVXNlckdyb3VwXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgY2hlY2tib3gtYWxsIG1iLTFcIiBjb2xvcj1cImRlZmF1bHRcIiBbY2hlY2tlZF09XCJpc0NoZWNrQWxsKE9QVElPTl9FTlVNLlVTRVJfR1JPVVApXCJcbiAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNJbmRldGVybWluYXRlKE9QVElPTl9FTlVNLlVTRVJfR1JPVVApXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVzZXJHcm91cEZpbHRlcmVkLmxlbmd0aCAmJiBvbkNoZWNrQWxsKE9QVElPTl9FTlVNLlVTRVJfR1JPVVAsY2hlY2tVc2VyR3JvdXApXCJcbiAgICAgICAgICAgICAgICAgICAgcW1zLWdyb3VwLW9wdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbCBoZWFkZXItdGl0bGVcIj57e0xBTkcuQ0hPT1NFX0FMTH19XG4gICAgICAgICAgICAgICAgICAgICAgKDxiPnt7dXNlckdyb3VwRmlsdGVyZWQubGVuZ3RofX08L2I+KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlciBjbGFzcz1cIm14LWF1dG9cIj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRMb2FkaW5nJC52YWx1ZTt0aGVuIGxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidXNlckdyb3VwRmlsdGVyZWQubGVuZ3RoICYmICFnZXRMb2FkaW5nJC52YWx1ZVwiIFtAbGlzdEFuaW1hdGlvbl0gY2xhc3M9XCJpdGVtLWxpc3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBbQGluT3V0QW5pbWF0aW9uXSBjbGFzcz1cIml0ZW0gbXQtMVwiICpuZ0Zvcj1cImxldCB1c2VyR3JvdXAgb2YgdXNlckdyb3VwRmlsdGVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVVzZXJHcm91cCA/IGl0ZW1XaXRob3V0Q2hlY2tib3hUZW1wbGF0ZSA6IGl0ZW1DaGVja2JveFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IHVzZXJHcm91cCx0eXBlOiBPUFRJT05fRU5VTS5VU0VSX0dST1VQfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCIhdXNlckdyb3VwRmlsdGVyZWQubGVuZ3RoICYmICFnZXRMb2FkaW5nJC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW0tbGlzdC13cmFwcGVyIG5vLXJlc3VsdFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vUmVzdWx0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibXgtYXV0b1wiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgPHFtcy1wYWdpbmF0b3Igb3ZlcmxheVBhbmVsQ2xhc3M9XCJzZWxlY3QtYWNjZXNzLXBhZ2luYXRvclwiICNwYWdpbmdVc2VyR3JvdXAgY2xhc3M9XCJteS0xXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0VXNlckdyb3VwJC52YWx1ZS5sZW5ndGggPiAxMCBcIiBbbGVuZ3RoXT1cImdldFVzZXJHcm91cCQudmFsdWUubGVuZ3RoXCIgW251bUhpZGRlbl09XCIwXCJcbiAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJnZXRVc2VyR3JvdXAkLnZhbHVlLnBhZ2VTaXplXCIgW3BhZ2VTaXplT3B0aW9uc109XCJQQUdFX1NJWkVfT1BUSU9OXCJcbiAgICAgICAgICAgICAgICAgIChwYWdlKT0nb25QYWdpbmF0b3JFdmVudCgkZXZlbnQsIE9QVElPTl9FTlVNLlVTRVJfR1JPVVApJyBbc2l6ZV09J1BBR0lOQVRJT05fU0laRS5tZWRpdW0nPlxuICAgICAgICAgICAgICAgIDwvcW1zLXBhZ2luYXRvcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uU2VsZWN0LnZhbHVlID09PSBPUFRJT05fRU5VTS5ERVBBUlRNRU5UXCI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZGlhbG9nRGF0YS5pc0RlcGFydG1lbnRQYWdpbmdcIj5cbiAgICAgICAgICAgICAgPHFtcy1zZWxlY3QtZGVwYXJ0bWVudC10cmVlICN0cmVlIFtyb3dzU2tlbGV0b25dPVwiOFwiIFtjb25maWddPVwiZGlhbG9nRGF0YS50cmVlRGVwYXJ0bWVudENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgW21heFdpZHRoTm9kZV09XCJkaWFsb2dEYXRhLm1heFdpZHRoTm9kZVwiIChvblNlYXJjaEV2ZW50KT1cIm9uU2VhcmNoRGVwYXJ0bWVudEV2ZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VFdmVudCk9XCJvblJlc3VsdERlcGFydG1lbnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbk5vZGVDaGFuZ2VFdmVudCk9XCJvblNlbGVjdGlvbk5vZGVEZXBhcnRtZW50Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvblBhZ2luZ1NlYXJjaEV2ZW50KT1cIm9uUGFnaW5hdG9yRXZlbnQoJGV2ZW50LCBPUFRJT05fRU5VTS5ERVBBUlRNRU5UKVwiPlxuICAgICAgICAgICAgICA8L3Ftcy1zZWxlY3QtZGVwYXJ0bWVudC10cmVlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkaWFsb2dEYXRhLmlzRGVwYXJ0bWVudFBhZ2luZ1wiPlxuXG4gICAgICAgICAgICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJvbkZpbHRlckRlcGFydG1lbnQoKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwICBtYi0yXCIgcW1zLWZvcm0gcW1zLXNlYXJjaC1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgYXJpYS1sYWJlbD1cIkRlcGFydG1lbnRcIiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiIHFtcy1zZWxlY3QtaW5wdXQ+RGVwYXJ0bWVudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJkZXBhcnRtZW50U2VhcmNoRm9ybVwiIG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBMQU5HLlNFQVJDSCB9fVwiIC8+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwiIWdldExvYWRpbmckLnZhbHVlXCIgdHlwZT1cInN1Ym1pdFwiIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4PlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXggY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCJnZXRMb2FkaW5nJC52YWx1ZVwiIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaWFtZXRlcj1cIjIwXCI+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cIiEhZGVwYXJ0bWVudFNlYXJjaEZvcm0udmFsdWUgJiYgIWdldExvYWRpbmckLnZhbHVlXCIgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIHFtcy1pbnB1dC1jbGVhcj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZGVwYXJ0bWVudFNlYXJjaEZvcm0uc2V0VmFsdWUoJycpXCIgcW1zLWJ0bi1pY29uIGNvbG9yPVwibGlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZm9ybT5cblxuICAgICAgICAgICAgICA8ZGl2IHFtcy1zY3JvbGxiYXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCIhZ2V0TG9hZGluZyQudmFsdWUgJiYgZGVwYXJ0bWVudEZpbHRlcmVkLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkU2VsZWN0QWxsKE9QVElPTl9FTlVNLkRFUEFSVE1FTlQpXCIgI2NoZWNrRGVwYXJ0bWVudFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIGNoZWNrYm94LWFsbCBtYi0xXCIgY29sb3I9XCJkZWZhdWx0XCIgW2NoZWNrZWRdPVwiaXNDaGVja0FsbChPUFRJT05fRU5VTS5ERVBBUlRNRU5UKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImlzSW5kZXRlcm1pbmF0ZShPUFRJT05fRU5VTS5ERVBBUlRNRU5UKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZXBhcnRtZW50RmlsdGVyZWQubGVuZ3RoICYmIG9uQ2hlY2tBbGwoT1BUSU9OX0VOVU0uREVQQVJUTUVOVCxjaGVja0RlcGFydG1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgcW1zLWdyb3VwLW9wdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbCBoZWFkZXItdGl0bGVcIj57e0xBTkcuQ0hPT1NFX0FMTH19XG4gICAgICAgICAgICAgICAgICAgICAgKDxiPnt7ZGVwYXJ0bWVudEZpbHRlcmVkLmxlbmd0aH19PC9iPik8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJteC1hdXRvXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0TG9hZGluZyQudmFsdWU7dGhlbiBsb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRlcGFydG1lbnRGaWx0ZXJlZC5sZW5ndGggJiYgIWdldExvYWRpbmckLnZhbHVlXCIgW0BsaXN0QW5pbWF0aW9uXSBjbGFzcz1cIml0ZW0tbGlzdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtAaW5PdXRBbmltYXRpb25dIGNsYXNzPVwiaXRlbSBtdC0xXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGVwYXJ0bWVudEZpbHRlcmVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbUNoZWNrYm94VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogaXRlbSx0eXBlOiBPUFRJT05fRU5VTS5ERVBBUlRNRU5UfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCIhZGVwYXJ0bWVudEZpbHRlcmVkLmxlbmd0aCAmJiAhZ2V0TG9hZGluZyQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtLWxpc3Qtd3JhcHBlciBuby1yZXN1bHRcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub1Jlc3VsdFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlciBjbGFzcz1cIm14LWF1dG9cIj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgIDxxbXMtcGFnaW5hdG9yIG92ZXJsYXlQYW5lbENsYXNzPVwic2VsZWN0LWFjY2Vzcy1wYWdpbmF0b3JcIiAjcGFnaW5nRGVwYXJ0bWVudCBjbGFzcz1cIm15LTFcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXREZXBhcnRtZW50JC52YWx1ZS5sZW5ndGggPiAxMCBcIiBbbGVuZ3RoXT1cImdldERlcGFydG1lbnQkLnZhbHVlLmxlbmd0aFwiIFtudW1IaWRkZW5dPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbcGFnZVNpemVdPVwiZ2V0RGVwYXJ0bWVudCQudmFsdWUucGFnZVNpemVcIiBbcGFnZVNpemVPcHRpb25zXT1cIlBBR0VfU0laRV9PUFRJT05cIlxuICAgICAgICAgICAgICAgICAgKHBhZ2UpPSdvblBhZ2luYXRvckV2ZW50KCRldmVudCwgT1BUSU9OX0VOVU0uREVQQVJUTUVOVCknIFtzaXplXT0nUEFHSU5BVElPTl9TSVpFLm1lZGl1bSc+XG4gICAgICAgICAgICAgICAgPC9xbXMtcGFnaW5hdG9yPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cIm9wdGlvblNlbGVjdC52YWx1ZSAhPT0gbnVsbFwiIGNsYXNzPVwicmVzdWx0LXdyYXBwZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHQtc2VsZWN0ZWQtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCIob3B0aW9ucy5sZW5ndGggPT09IDEpIHx8IChvcHRpb25zLmxlbmd0aCA+IDEgJiYgb3B0aW9uU2VsZWN0LnZhbHVlICE9PSBudWxsKVwiXG4gICAgICAgICAgY2xhc3M9XCJoZWFkZXItdGl0bGUgcmVzdWx0LWhlYWRlclwiPlxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgIGRpYWxvZ0RhdGEudGl0bGVSZXN1bHQgfHwgTEFORy5SRVNVTFRTfX1cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib3B0aW9ucy5sZW5ndGggPT09IDEgJiYgaGFzSXRlbVNlbGVjdGVkKClcIj5cbiAgICAgICAgICAgICAgKHt7Z2V0UmVzdWx0VGFiQWN0aXZlKCkubGVuZ3RofX0pXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdC1ib2R5XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoZWNrRXhpc3RPcHRpb25TZWxlY3QoT1BUSU9OX0VOVU0uUEVSU09OKVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zPy5sZW5ndGggPT0gMSA/IGxpc3RDaGlwIDogdmlld1Jlc3VsdENvbGxhcHNlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ZGF0YTpyZXN1bHRBY2Nlc3MucGVyc29ucywgdHlwZTpPUFRJT05fRU5VTS5QRVJTT04sIHRpdGxlOkxBTkcuUEVSU09OfVwiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja0V4aXN0T3B0aW9uU2VsZWN0KE9QVElPTl9FTlVNLlVTRVJfR1JPVVApXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnM/Lmxlbmd0aCA9PSAxID8gbGlzdENoaXAgOiB2aWV3UmVzdWx0Q29sbGFwc2VcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntkYXRhOnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLCB0eXBlOk9QVElPTl9FTlVNLlVTRVJfR1JPVVAsIHRpdGxlOkxBTkcuVVNFUl9HUk9VUH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hlY2tFeGlzdE9wdGlvblNlbGVjdChPUFRJT05fRU5VTS5ERVBBUlRNRU5UKSAmJiAhZGlhbG9nRGF0YS5pc0RlcGFydG1lbnRQYWdpbmdcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9ucz8ubGVuZ3RoID09IDEgPyBsaXN0Q2hpcCA6IHZpZXdSZXN1bHRDb2xsYXBzZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2RhdGE6IHJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cyB8fCByZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0LCB0eXBlOk9QVElPTl9FTlVNLkRFUEFSVE1FTlQsIHRpdGxlOkxBTkcuREVQQVJUTUVOVH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hlY2tFeGlzdE9wdGlvblNlbGVjdChPUFRJT05fRU5VTS5ERVBBUlRNRU5UKSAmJiBkaWFsb2dEYXRhLmlzRGVwYXJ0bWVudFBhZ2luZ1wiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zPy5sZW5ndGggPT0gMSA/IGxpc3RDaGlwIDogdmlld1Jlc3VsdENvbGxhcHNlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ZGF0YTogcmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzRmxhdCwgdHlwZTpPUFRJT05fRU5VTS5ERVBBUlRNRU5ULCB0aXRsZTpMQU5HLkRFUEFSVE1FTlR9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG48L21hdC1kaWFsb2ctY29udGVudD5cbjxtYXQtZGlhbG9nLWFjdGlvbnMgYWxpZ249XCJlbmRcIj5cbiAgPG1hdC1kaXZpZGVyIGNsYXNzPVwidy0xMDAgbWItM1wiPjwvbWF0LWRpdmlkZXI+XG4gIDxidXR0b24gY2xhc3M9XCJtZS0yXCIgcW1zLWJ0bi10ZXh0IG1hdC1kaWFsb2ctY2xvc2U+XG4gICAge3tkaWFsb2dEYXRhLmNhbmNlbFRpdGxlIHx8IExBTkcuQ0FOQ0VMfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gKm5nSWY9XCJvcHRpb25TZWxlY3QudmFsdWUgIT09IG51bGxcIlxuICAgIFtkaXNhYmxlZF09XCIhaGFzSXRlbVNlbGVjdGVkKCkgJiYgIWRpYWxvZ0RhdGEudHJlZURlcGFydG1lbnRDb25maWcuY2FuQWRkTnVsbFJlc3VsdFwiIGNsYXNzPVwiYnRuLWFkZFwiXG4gICAgW2NsYXNzLnFtcy1idG4tZGlzYWJsZWRdPVwiIWhhc0l0ZW1TZWxlY3RlZCgpICYmICFkaWFsb2dEYXRhLnRyZWVEZXBhcnRtZW50Q29uZmlnLmNhbkFkZE51bGxSZXN1bHRcIlxuICAgIFttYXQtZGlhbG9nLWNsb3NlXT1cInJlc3VsdEFjY2Vzc1wiIHFtcy1idG4+XG4gICAgPHNwYW4+e3tkaWFsb2dEYXRhLmNvbmZpcm1UaXRsZSB8fCBMQU5HLkFERH19PC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuXG48bmctdGVtcGxhdGUgI25vUmVzdWx0PlxuICA8c3ZnIHdpZHRoPVwiODlcIiBoZWlnaHQ9XCIxMzBcIiB2aWV3Qm94PVwiMCAwIDg5IDg4XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgPHJlY3QgeD1cIjAuNVwiIHdpZHRoPVwiODhcIiBoZWlnaHQ9XCI4OFwiIHJ4PVwiNDRcIiBmaWxsPVwid2hpdGVcIiAvPlxuICAgIDxyZWN0IHg9XCIwLjVcIiB3aWR0aD1cIjg4XCIgaGVpZ2h0PVwiODhcIiByeD1cIjQ0XCIgZmlsbD1cIiMwMTYzQjJcIiBmaWxsLW9wYWNpdHk9XCIwLjEyXCIgLz5cbiAgICA8cGF0aFxuICAgICAgZD1cIk00NC41IDU2LjY5MzZMNTguMDk2IDY0Ljg5OTZMNTQuNDg4IDQ5LjQzMzZMNjYuNSAzOS4wMjc2TDUwLjY4MiAzNy42ODU2TDQ0LjUgMjMuMDk5NkwzOC4zMTggMzcuNjg1NkwyMi41IDM5LjAyNzZMMzQuNTEyIDQ5LjQzMzZMMzAuOTA0IDY0Ljg5OTZMNDQuNSA1Ni42OTM2WlwiXG4gICAgICBmaWxsPVwiIzAxNjNCM1wiIC8+XG4gICAgPHRleHQgeD1cIjEwXCIgeT1cIjEwNVwiIGZpbGw9XCIjMDE2M0IyXCI+e3tMQU5HLk5PX1JFU1VMVH19PC90ZXh0PlxuICA8L3N2Zz5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2xpc3RDaGlwIGxldC1kYXRhPVwiZGF0YVwiIGxldC10eXBlPVwidHlwZVwiPlxuICA8bWF0LWNoaXAtc2V0IFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwiZGF0YT8ubGVuZ3RoXCIgY2xhc3M9XCJwYW5lbF9faXRlbSBxbXMtc2Nyb2xsYmFyXCI+XG4gICAgPGRpdiBbQGluT3V0QW5pbWF0aW9uXzJdICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGE7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDxtYXQtY2hpcCAoY2xpY2spPVwib25TY29sbFRvTm9kZVRyZWVEZXBhcnRtZW50KGl0ZW0pXCIgW0B1cGRhdGVJdGVtQW5pbWF0aW9uXVxuICAgICAgICAqcW1zQ29udGVudENoYW5nZXM9XCJpdGVtLmNoaWxkcmVuPy5sZW5ndGhcIiBjbGFzcz1cImNoaXAtaXRlbS1yZXN1bHRcIiBxbXMtY2hpcCBbcmVtb3ZhYmxlXT1cInRydWVcIj5cbiAgICAgICAgPHNwYW4gcW1zLWNoaXAtYm9keT5cbiAgICAgICAgICA8c3BhbiBbcW1zLXRvb2wtdGlwXT1cImdlbmVyYXRlVG9vbHRpcChpdGVtKVwiIHBvc2l0aW9uPVwidG9wXCIgbW9kZT1cImRhcmtcIiBjbGFzcz1cInRleHQtbGFiZWxcIj5cbiAgICAgICAgICAgIHt7aXRlbS5uYW1lfX1cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zdWJOYW1lXCI+KHt7IGl0ZW0uc3ViTmFtZSB9fSk8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcC1pdGVtLWNoaWxkcmVuX19jb3VudCBtcy0xXCIgKm5nSWY9XCJpdGVtPy5jaGlsZHJlbiAmJiBpdGVtPy5pc0dyb3VwXCI+XG4gICAgICAgICAgICB7e2l0ZW0uY2hpbGRyZW4ubGVuZ3RofX0ve3tpdGVtLmNoaWxkQ291bnR9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxidXR0b24gbWF0Q2hpcFJlbW92ZSAqbmdJZj1cImFsbG93UmVtb3ZlKHR5cGUsIGl0ZW0pXCIgKGNsaWNrKT1cIm9uUmVtb3ZlQ2hpcCh0eXBlLGl0ZW0sIGkpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwicmVtb3ZlLWNoaXAtaWNvblwiPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiYWxsb3dSZW1vdmUodHlwZSwgaXRlbSkgJiYgZGlhbG9nRGF0YS5mb3JtYXRNc2dEaXNhYmxlXCIgcG9zaXRpb249XCJ0b3BcIiBtb2RlPVwiZGFya1wiXG4gICAgICAgICAgICBbcW1zLXRvb2wtdGlwXT1cImRpYWxvZ0RhdGEuZm9ybWF0TXNnRGlzYWJsZShpdGVtKVwiIGNsYXNzPVwicmVtb3ZlLWNoaXAtaWNvblwiPmluZm9faTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdENoaXBSZW1vdmUgKm5nSWY9XCIhYWxsb3dSZW1vdmUodHlwZSwgaXRlbSkgJiYgZGlhbG9nRGF0YS5mb3JtYXRNc2dEaXNhYmxlXCJcbiAgICAgICAgICAoY2xpY2spPVwib25SZW1vdmVDaGlwKHR5cGUsaXRlbSwgaSlcIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJyZW1vdmUtY2hpcC1pY29uXCI+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhYWxsb3dSZW1vdmUodHlwZSwgaXRlbSkgJiYgZGlhbG9nRGF0YS5mb3JtYXRNc2dEaXNhYmxlXCIgcG9zaXRpb249XCJ0b3BcIiBtb2RlPVwiZGFya1wiXG4gICAgICAgICAgICBbcW1zLXRvb2wtdGlwXT1cImRpYWxvZ0RhdGEuZm9ybWF0TXNnRGlzYWJsZShpdGVtKVwiIGNsYXNzPVwicmVtb3ZlLWNoaXAtaWNvblwiPmluZm9faTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtY2hpcD5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtY2hpcC1zZXQ+XG48L25nLXRlbXBsYXRlPlxuXG5cbjxuZy10ZW1wbGF0ZSAjdmlld1Jlc3VsdENvbGxhcHNlIGxldC10aXRsZT1cInRpdGxlXCIgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LXR5cGU9XCJ0eXBlXCI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsIHFtcy1leHBhbnNpb24gW2V4cGFuZGVkXT1cIm9wdGlvblNlbGVjdC52YWx1ZSA9PT0gdHlwZVwiPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJxbXMtbGlzdC10ZXh0XCI+XG4gICAgICAgICAgPGRpdiBxbXMtbGluZSBjb2xvcj1cImRlZmF1bHQtc3VidGl0bGVcIj57e3RpdGxlfX1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctNjAwXCI+XG4gICAgICAgICAgICAgICh7e2RhdGE/Lmxlbmd0aH19KVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsaXN0Q2hpcFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ZGF0YTogZGF0YSx0eXBlOiB0eXBlfVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2l0ZW1XaXRob3V0Q2hlY2tib3hUZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtdHlwZT1cInR5cGVcIj5cbiAgPGRpdiAoY2xpY2spPVwib25TZWxlY3RJdGVtKHR5cGUsaXRlbSlcIiBjbGFzcz1cIml0ZW0td2l0aG91dC1jaGVja2JveCB3LTEwMFwiIFtjbGFzcy5hY3RpdmVdPVwiaXRlbS5zZWxlY3RlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJpdGVtLWNvbnRlbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWxhYmVsXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbCBsYWJlbC1pdGVtIGZzLTE0IFwiPlxuICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zdWJOYW1lXCIgY2xhc3M9XCJtcy0xIHN1Yi1sYWJlbFwiPih7e2l0ZW0uc3ViTmFtZX19KTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNtYWxsICpuZ0lmPVwiaXRlbS5oZWxwVGV4dFwiIGNsYXNzPVwidGV4dC1oZWxwIHB4LTEgZnMtMTIgc3ViLWxhYmVsXCI+e3sgaXRlbS5oZWxwVGV4dCB9fTwvc21hbGw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIml0ZW0tc3RhdGVcIj5cbiAgICAgIDxtYXQtaWNvbiBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cIml0ZW0uc2VsZWN0ZWRcIj5jaGVjazwvbWF0LWljb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpdGVtQ2hlY2tib3hUZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtdHlwZT1cInR5cGVcIj5cbiAgPG1hdC1jaGVja2JveCBbZGlzYWJsZWRdPVwiIWFsbG93UmVtb3ZlKHR5cGUsIGl0ZW0pXCIgW2NoZWNrZWRdPVwiaXRlbS5zZWxlY3RlZFwiIChjbGljayk9XCJvblNlbGVjdEl0ZW0odHlwZSxpdGVtKVwiXG4gICAgY2xhc3M9XCJ3LTEwMFwiIGNvbG9yPVwiZGVmYXVsdFwiIHFtcy1ncm91cC1vcHRpb25zPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWxhYmVsXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWwgbGFiZWwtaXRlbSBmcy0xNCBcIj5cbiAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc3ViTmFtZVwiIGNsYXNzPVwibXMtMSBzdWItbGFiZWxcIj4oe3tpdGVtLnN1Yk5hbWV9fSk8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPHNtYWxsICpuZ0lmPVwiaXRlbS5oZWxwVGV4dFwiIGNsYXNzPVwidGV4dC1oZWxwIHB4LTEgZnMtMTIgc3ViLWxhYmVsXCI+e3sgaXRlbS5oZWxwVGV4dCB9fTwvc21hbGw+XG4gIDwvbWF0LWNoZWNrYm94PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICA8ZGl2IGNsYXNzPVwicW1zLWxvYWRpbmctY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInFtcy1sb2FkZXJcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhcnJTa2VsZXRvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInFtcy1sb2FkZXJfX3dyYXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1sb2FkZXJcIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==
696
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWFjY2Vzcy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1hY2Nlc3MtZGlhbG9nL3NlbGVjdC1hY2Nlc3MtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QtYWNjZXNzLWRpYWxvZy9zZWxlY3QtYWNjZXNzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBR04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXNCLGtCQUFrQixFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSw0QkFBNEIsRUFBNkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXpELE9BQU8sRUFBRSxjQUFjLEVBQXlCLE1BQU0sa0JBQWtCLENBQUM7QUFFekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDM0csT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEUsT0FBTyxFQUFFLHNCQUFzQixF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LGlCQUFpQjtnQkFDRyxnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTUFUX0NIRUNLQk9YX0RFRkFVTFRfT1BUSU9OUywgTWF0Q2hlY2tib3hEZWZhdWx0T3B0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUU1TRmxhdE5vZGVUcmVlIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9xbXMtZmxhdC1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TVHJlZU5vZGUgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy10cmVlLW5vZGUubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBhZ2luYXRpb25TaXplLCBRTVNQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9xbXMtcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgSVNlbGVjdGlvbk5vZGVDaGFuZ2UsIFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbCB9IGZyb20gJy4uL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUnO1xyXG5pbXBvcnQgeyBTZWxlY3REZXBhcnRtZW50VHJlZUNvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdC1kZXBhcnRtZW50LXRyZWUvc2VsZWN0LWRlcGFydG1lbnQtdHJlZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RBY2Nlc3NBbmltYXRpb25UcmlnZ2VyIH0gZnJvbSAnLi9jb21tb24vYW5pbWF0aW9uJztcclxuaW1wb3J0IHsgT3B0aW9uU2VsZWN0QWNjZXNzRW51bSB9IGZyb20gJy4vY29tbW9uL29wdGlvbi1zZWxlY3QtYWNjZXNzLmVudW0nO1xyXG5pbXBvcnQgeyBRTVNBY2Nlc3NJdGVtIH0gZnJvbSAnLi9tb2RlbC9hY2Nlc3MtaXRlbS5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU0FjY2Vzc1BhZ2luZ0NoYW5nZU1vZGVsLCBRTVNBY2Nlc3NQYWdpbmdNb2RlbCB9IGZyb20gJy4vbW9kZWwvYWNjZXNzLXBhZ2luZy5tb2RlbCc7XHJcbmltcG9ydCB7IEZpbHRlclBlcnNvbk1vZGVsIH0gZnJvbSAnLi9tb2RlbC9maWx0ZXItcGVyc29uLm1vZGVsJztcclxuaW1wb3J0IHsgT3B0aW9uU2VsZWN0QWNjZXNzTW9kZWwgfSBmcm9tICcuL21vZGVsL29wdGlvbi1zZWxlY3QtYWNjZXNzLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TU2VsZWN0QWNjZXNzRGlhbG9nIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3QtYWNjZXNzLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFFNU1NlbGVjdEFjY2Vzc1Jlc3VsdCB9IGZyb20gJy4vbW9kZWwvc2VsZWN0LWFjY2Vzcy1kYXRhJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncW1zLXNlbGVjdC1hY2Nlc3MtZGlhbG9nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LWFjY2Vzcy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC1hY2Nlc3MtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW1NlbGVjdEFjY2Vzc0FuaW1hdGlvblRyaWdnZXJdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBNQVRfQ0hFQ0tCT1hfREVGQVVMVF9PUFRJT05TLFxyXG4gICAgICB1c2VWYWx1ZToge1xyXG4gICAgICAgIGNsaWNrQWN0aW9uOiAnbm9vcCdcclxuICAgICAgfSBhcyBNYXRDaGVja2JveERlZmF1bHRPcHRpb25zXHJcbiAgICB9XHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRTVNTZWxlY3RBY2Nlc3NEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgbmdVbnN1YmNyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBMQU5HOiBhbnk7XHJcbiAgb3B0aW9uU2VsZWN0ID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIE9QVElPTl9FTlVNID0gT3B0aW9uU2VsZWN0QWNjZXNzRW51bTtcclxuICBvcHRpb25zOiBPcHRpb25TZWxlY3RBY2Nlc3NNb2RlbFtdID0gW107XHJcblxyXG4gIHByaXZhdGUgX2RlcGFydG1lbnRTZWxlY3RlZDogUU1TVHJlZU5vZGVbXSA9IFtdO1xyXG4gIGdldCBzZWxlY3RlZERlcGFydG1lbnRzKCkge1xyXG4gICAgY29uc3QgZGVwYXJ0bWVudFNlbGVjdGVkOiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdO1xyXG4gICAgdGhpcy5fZGVwYXJ0bWVudFNlbGVjdGVkLmZvckVhY2goeCA9PiB7XHJcbiAgICAgIGRlcGFydG1lbnRTZWxlY3RlZC5wdXNoKHtcclxuICAgICAgICBpZDogeC5pZCxcclxuICAgICAgICBncm91cElkOiB4Lmdyb3VwSWQsXHJcbiAgICAgICAgaXNHcm91cDogeC5pc0dyb3VwXHJcbiAgICAgIH0gYXMgUU1TRmxhdE5vZGVUcmVlKTtcclxuICAgICAgaWYgKCF4LmNoaWxkcmVuPy5sZW5ndGgpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICBkZXBhcnRtZW50U2VsZWN0ZWQucHVzaCguLi4oeC5jaGlsZHJlbi5tYXAoaXRlbSA9PiAoe1xyXG4gICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgIGdyb3VwSWQ6IGl0ZW0uZ3JvdXBJZCxcclxuICAgICAgICBpc0dyb3VwOiBpdGVtLmlzR3JvdXBcclxuICAgICAgfSBhcyBRTVNGbGF0Tm9kZVRyZWUpKSkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGVwYXJ0bWVudFNlbGVjdGVkIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBlcnNvbkZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgcHVibGljIHVzZXJHcm91cEZvcm0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnKVxyXG4gIHB1YmxpYyBnZXRMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIG9uU2VhcmNoUGVyc29uRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlclBlcnNvbk1vZGVsPigpO1xyXG4gIG9uU2VhcmNoUGVyc29uRnJlZVRleHRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBvblNlYXJjaFVzZXJHcm91cEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgb25TZWFyY2hEZXBhcnRtZW50RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgb25TZWFyY2hEZXBhcnRtZW50UGFnaW5nRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBkZXBhcnRtZW50U2VhcmNoRm9ybSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycpO1xyXG4gIG9uUGFnaW5nRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFFNU0FjY2Vzc1BhZ2luZ0NoYW5nZU1vZGVsPigpO1xyXG4gIG9uU2VsZWN0T3B0aW9uQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PE1hdFNlbGVjdENoYW5nZT4oKTtcclxuICB0cmVlRGVwYXJ0bWVudDogU2VsZWN0RGVwYXJ0bWVudFRyZWVDb21wb25lbnRcclxuICBAVmlld0NoaWxkKCd0cmVlJywge1xyXG4gICAgcmVhZDogU2VsZWN0RGVwYXJ0bWVudFRyZWVDb21wb25lbnRcclxuICB9KSBzZXQgdHJlZShkYXRhOiBTZWxlY3REZXBhcnRtZW50VHJlZUNvbXBvbmVudCkge1xyXG4gICAgdGhpcy50cmVlRGVwYXJ0bWVudCA9IGRhdGE7XHJcblxyXG4gICAgY29uc3QgZ3JvdXBzID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMuZmlsdGVyKHggPT4geC5pc0dyb3VwKTtcclxuICAgIGlmIChncm91cHMubGVuZ3RoKVxyXG4gICAgICBncm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgICAgaWYgKCFncm91cC5jaGlsZENvdW50KSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMudHJlZURlcGFydG1lbnQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnRyZWVEZXBhcnRtZW50LnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKHggPT4geC5pZCA9PSBncm91cC5pZCk7XHJcbiAgICAgICAgICBpZiAobm9kZSlcclxuICAgICAgICAgICAgZ3JvdXAuY2hpbGRDb3VudCA9IHRoaXMudHJlZURlcGFydG1lbnQuZ2V0TGlzdENoaWxkcmVuT2ZOb2RlKG5vZGUpLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgncGFnaW5nUGVyc29uJykgcGFnaW5nUGVyc29uOiBRTVNQYWdpbmF0b3JDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgncGFnaW5nVXNlckdyb3VwJykgcGFnaW5nVXNlckdyb3VwOiBRTVNQYWdpbmF0b3JDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgncGFnaW5nRGVwYXJ0bWVudCcpIHBhZ2luZ0RlcGFydG1lbnQ6IFFNU1BhZ2luYXRvckNvbXBvbmVudDtcclxuXHJcbiAgLyoqIGxpc3QgZmlsdGVyZWQgYnkgc2VhcmNoIGtleXdvcmQgKi9cclxuICBvcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsOiB7XHJcbiAgICBkZXBhcnRtZW50czogUU1TRmxhdE5vZGVUcmVlW10sXHJcbiAgICB1c2VyR3JvdXBzOiBRTVNBY2Nlc3NJdGVtW11cclxuICB9ID0ge1xyXG4gICAgICBkZXBhcnRtZW50czogW10sXHJcbiAgICAgIHVzZXJHcm91cHM6IFtdXHJcbiAgICB9O1xyXG5cclxuICBwdWJsaWMgZmlsdGVyZWRTZWFyY2hUZXh0Qm94ID0ge1xyXG4gICAgZGVwYXJ0bWVudDogbmV3IEJlaGF2aW9yU3ViamVjdDxRTVNGbGF0Tm9kZVRyZWVbXT4oW10pLFxyXG4gICAgdXNlckdyb3VwOiBuZXcgQmVoYXZpb3JTdWJqZWN0PFFNU0FjY2Vzc0l0ZW1bXT4oW10pLFxyXG4gIH1cclxuICBnZXRQZXJzb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRTVNBY2Nlc3NQYWdpbmdNb2RlbDxRTVNBY2Nlc3NJdGVtPj4obmV3IFFNU0FjY2Vzc1BhZ2luZ01vZGVsPFFNU0FjY2Vzc0l0ZW0+KCkpO1xyXG4gIGdldCBwZXJzb25GaWx0ZXJlZCgpIHtcclxuICAgIGNvbnN0IHBlcnNvbnMgPSB0aGlzLmdldFBlcnNvbiQudmFsdWU7XHJcbiAgICBjb25zdCBpZHMgPSB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLm1hcCh4ID0+IHguaWQpO1xyXG4gICAgcGVyc29ucy5kYXRhPy5mb3JFYWNoKHggPT4geC5zZWxlY3RlZCA9IGlkcy5pbmNsdWRlcyh4LmlkKSk7XHJcbiAgICByZXR1cm4gcGVyc29ucy5kYXRhIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlckdyb3VwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TQWNjZXNzSXRlbT4+KG5ldyBRTVNBY2Nlc3NQYWdpbmdNb2RlbDxRTVNBY2Nlc3NJdGVtPigpKTtcclxuICBnZXQgdXNlckdyb3VwRmlsdGVyZWQoKSB7XHJcbiAgICBjb25zdCB1c2VyR3JvdXBzID0gdGhpcy5nZXRVc2VyR3JvdXAkLnZhbHVlO1xyXG4gICAgY29uc3QgaWRzID0gdGhpcy5yZXN1bHRBY2Nlc3MudXNlckdyb3Vwcy5tYXAoeCA9PiB4LmlkKTtcclxuICAgIHVzZXJHcm91cHMuZGF0YT8uZm9yRWFjaCh4ID0+IHguc2VsZWN0ZWQgPSBpZHMuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgcmV0dXJuIHVzZXJHcm91cHMuZGF0YSB8fCBbXTtcclxuICB9O1xyXG5cclxuICBnZXREZXBhcnRtZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TQWNjZXNzSXRlbT4+KG5ldyBRTVNBY2Nlc3NQYWdpbmdNb2RlbDxRTVNBY2Nlc3NJdGVtPigpKTtcclxuICBnZXQgZGVwYXJ0bWVudEZpbHRlcmVkKCkge1xyXG4gICAgY29uc3QgZGVwYXJ0bWVudHMgPSB0aGlzLmdldERlcGFydG1lbnQkLnZhbHVlO1xyXG4gICAgY29uc3QgaWRzID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0Lm1hcCh4ID0+IHguaWQpO1xyXG4gICAgZGVwYXJ0bWVudHMuZGF0YT8uZm9yRWFjaCh4ID0+IHguc2VsZWN0ZWQgPSBpZHMuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgcmV0dXJuIGRlcGFydG1lbnRzLmRhdGEgfHwgW107XHJcbiAgfTtcclxuXHJcblxyXG4gIFBBR0lOQVRJT05fU0laRSA9IFBhZ2luYXRpb25TaXplO1xyXG4gIFBBR0VfU0laRV9PUFRJT046IG51bWJlcltdID0gWzUsIDEwLCAxNSwgMjAsIDI1LCAxMDBdO1xyXG4gIHJlc3VsdEFjY2VzcyA9IG5ldyBRTVNTZWxlY3RBY2Nlc3NSZXN1bHQoKTtcclxuICBhcnJTa2VsZXRvbiA9IG5ldyBBcnJheSg4KS5maWxsKDApO1xyXG4gIC8vcHJldmVudCBldmVudCBwYWdpbmcgd2hlbiBzZWFyY2ggZW1pdCBzZWFyY2ggZXZlbnRcclxuICBnZXRTZWFyY2hpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxRTVNTZWxlY3RBY2Nlc3NEaWFsb2dDb21wb25lbnQ+LFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkaWFsb2dEYXRhOiBRTVNTZWxlY3RBY2Nlc3NEaWFsb2csXHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcclxuICAgIHByaXZhdGUgX2ZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5faW5pdFJlc3VsdEFjY2VzcygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZS5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9idWlsZE9wdGlvblNlbGVjdCgpO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgdGhpcy5wZXJzb25Gb3JtICYmIHRoaXMucGVyc29uRm9ybS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICB0aGlzLnVzZXJHcm91cEZvcm0gJiYgdGhpcy51c2VyR3JvdXBGb3JtLmRpc2FibGUoKTtcclxuICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudFNlYXJjaEZvcm0gJiYgdGhpcy5kZXBhcnRtZW50U2VhcmNoRm9ybS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGVyc29uRm9ybSAmJiB0aGlzLnBlcnNvbkZvcm0uZW5hYmxlKCk7XHJcbiAgICAgICAgdGhpcy51c2VyR3JvdXBGb3JtICYmIHRoaXMudXNlckdyb3VwRm9ybS5lbmFibGUoKTtcclxuICAgICAgICB0aGlzLmRlcGFydG1lbnRTZWFyY2hGb3JtICYmIHRoaXMuZGVwYXJ0bWVudFNlYXJjaEZvcm0uZW5hYmxlKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLm5nVW5zdWJjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLm5nVW5zdWJjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYnVpbGRPcHRpb25TZWxlY3QoKSB7XHJcbiAgICBjb25zdCBvcHRpb25PYmogPSB7XHJcbiAgICAgIGVuYWJsZVNlbGVjdERlcGFydG1lbnQ6IHtcclxuICAgICAgICBkaXNwbGF5TmFtZTogJ0RFUEFSVE1FTlQnLFxyXG4gICAgICAgIHR5cGU6IHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVFxyXG4gICAgICB9LFxyXG4gICAgICBlbmFibGVTZWxlY3RQZXJzb246IHtcclxuICAgICAgICBkaXNwbGF5TmFtZTogJ1BFUlNPTicsXHJcbiAgICAgICAgdHlwZTogdGhpcy5PUFRJT05fRU5VTS5QRVJTT05cclxuICAgICAgfSxcclxuICAgICAgZW5hYmxlU2VsZWN0VXNlckdyb3VwOiB7XHJcbiAgICAgICAgZGlzcGxheU5hbWU6ICdVU0VSX0dST1VQJyxcclxuICAgICAgICB0eXBlOiB0aGlzLk9QVElPTl9FTlVNLlVTRVJfR1JPVVBcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGl0ZW0gaW4gdGhpcy5kaWFsb2dEYXRhKSB7XHJcbiAgICAgIGlmICghIXRoaXMuZGlhbG9nRGF0YVtpdGVtXSAmJiBvcHRpb25PYmpbaXRlbV0pIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb25PYmpbaXRlbV0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggPT09IDEgfHwgdGhpcy5kaWFsb2dEYXRhLnNraXBGaXJzdEFza2luZ1NjcmVlbikge1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZi51cGRhdGVTaXplKHRoaXMuZGlhbG9nRGF0YS5zaXplVXBkYXRlRGVmYXVsdCk7XHJcbiAgICAgIHRoaXMub3B0aW9uU2VsZWN0LnNldFZhbHVlKHRoaXMub3B0aW9uc1swXS50eXBlKTtcclxuICAgICAgY29uc3QgZXZlbnQkID0gbmV3IE1hdFNlbGVjdENoYW5nZShudWxsLCB0aGlzLm9wdGlvbnNbMF0udHlwZSk7XHJcbiAgICAgIHRoaXMub25TZWxlY3Rpb25UeXBlQ2hhbmdlKGV2ZW50JCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbml0UmVzdWx0QWNjZXNzKCkge1xyXG4gICAgdGhpcy5yZXN1bHRBY2Nlc3MgPSBfLmNsb25lRGVlcCh7XHJcbiAgICAgIC4uLnRoaXMuZGlhbG9nRGF0YS5kYXRhLnNlbGVjdGVkRGF0YSxcclxuICAgICAgZGVwYXJ0bWVudHM6IFtdXHJcbiAgICB9IGFzIFFNU1NlbGVjdEFjY2Vzc1Jlc3VsdCk7XHJcbiAgICAvLyBpbml0IGdyb3VwIHNlbGVjdGVkIGRlcGFydG1lbnRcclxuICAgIHRoaXMuX2RlcGFydG1lbnRTZWxlY3RlZCA9IF8uY2xvbmVEZWVwKHRoaXMuZGlhbG9nRGF0YS5kYXRhLnNlbGVjdGVkRGF0YS5kZXBhcnRtZW50cyk7XHJcbiAgICBjb25zdCBncm91cHMgPSBbXTtcclxuICAgIGNvbnN0IHNpbmdsZUl0ZW0gPSBbXTtcclxuXHJcbiAgICB0aGlzLl9kZXBhcnRtZW50U2VsZWN0ZWQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaWYgKGl0ZW0uaXNHcm91cCkge1xyXG4gICAgICAgIGdyb3Vwcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFpdGVtLmdyb3VwSWQpIHtcclxuICAgICAgICBzaW5nbGVJdGVtLnB1c2goaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIXRoaXMuX2RlcGFydG1lbnRTZWxlY3RlZC5zb21lKHggPT4geC5pZCA9PSBpdGVtLmdyb3VwSWQpKSB7XHJcbiAgICAgICAgaXRlbS5ncm91cElkID0gbnVsbDtcclxuICAgICAgICBzaW5nbGVJdGVtLnB1c2goaXRlbSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLl9kZXBhcnRtZW50U2VsZWN0ZWQuZmlsdGVyKGl0ZW0gPT4gaXRlbS5ncm91cElkID09IGdyb3VwLmlkKTtcclxuICAgICAgZ3JvdXAuY2hpbGRyZW4gPSBjaGlsZDtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMgPSBbLi4uZ3JvdXBzLCAuLi5zaW5nbGVJdGVtXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbHRlck9wdGlvblBlcnNvbkNoYW5nZSgpIHtcclxuICAgIC8vIEZpbHRlciBwZXJzb24gYnkgcm9sZXNcclxuICAgIHRoaXMucGVyc29uRm9ybS5nZXQoJ3VzZXJHcm91cEZpbHRlcicpLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpLCBkZWJvdW5jZVRpbWUoNTAwKSlcclxuICAgICAgLnN1YnNjcmliZShrZXl3b3JkID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC51c2VyR3JvdXBzLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWtleXdvcmQpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRTZWFyY2hUZXh0Qm94LnVzZXJHcm91cC5uZXh0KHRoaXMub3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC51c2VyR3JvdXBzKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzdWx0RmlsdGVyID0gdGhpcy5vcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLnVzZXJHcm91cHMuZmlsdGVyKHVzZXJHcm91cCA9PiB1c2VyR3JvdXAubmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQudG9Mb2NhbGVMb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRTZWFyY2hUZXh0Qm94LnVzZXJHcm91cC5uZXh0KHJlc3VsdEZpbHRlcik7XHJcbiAgICAgIH0pO1xyXG4gICAgLy8gRmlsdGVyIHBlcnNvbiBieSBkZXBhcnRtZW50c1xyXG4gICAgdGhpcy5wZXJzb25Gb3JtLmdldCgnZGVwYXJ0bWVudEZpbHRlcicpLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC5kZXBhcnRtZW50cykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc2VhcmNoID0gdGhpcy5wZXJzb25Gb3JtLmdldCgnZGVwYXJ0bWVudEZpbHRlcicpLnZhbHVlO1xyXG4gICAgICAgIGlmICghc2VhcmNoKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC5kZXBhcnRtZW50Lm5leHQodGhpcy5vcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLmRlcGFydG1lbnRzLnNsaWNlKCkpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWFyY2ggPSBzZWFyY2gudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC5kZXBhcnRtZW50Lm5leHQoXHJcbiAgICAgICAgICB0aGlzLm9wdGlvbkZpbHRlclBlcnNvbkRhdGFHbG9iYWwuZGVwYXJ0bWVudHMuZmlsdGVyKHggPT4geC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gpID4gLTEpXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXN1bHRUYWJBY3RpdmUoKSB7XHJcbiAgICBjb25zdCByZXN1bHRPYmogPSB7XHJcbiAgICAgIDA6IHRoaXMucmVzdWx0QWNjZXNzLnBlcnNvbnMsXHJcbiAgICAgIDE6IHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMsXHJcbiAgICAgIDI6IHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzIHx8IHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzRmxhdFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdyZXN1bHRPYmonLCByZXN1bHRPYmpbdGhpcy5vcHRpb25TZWxlY3QudmFsdWVdKTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0T2JqW3RoaXMub3B0aW9uU2VsZWN0LnZhbHVlXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjaGVja0V4aXN0T3B0aW9uU2VsZWN0KG9wdGlvbjogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5vcHRpb25zLmZpbmQoaXRlbSA9PiBpdGVtLnR5cGUgPT09IG9wdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkUGVyc29uRm9ybSgpIHtcclxuICAgIHRoaXMucGVyc29uRm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgdXNlckdyb3VwOiBbXSxcclxuICAgICAgZGVwYXJ0bWVudDogW10sXHJcbiAgICAgIGRlcGFydG1lbnRGaWx0ZXI6IFsnJ10sXHJcbiAgICAgIHJlY3Vyc2l2ZTogW3tcclxuICAgICAgICB2YWx1ZTogZmFsc2UsIGRpc2FibGVkOiB0cnVlXHJcbiAgICAgIH1dLFxyXG4gICAgICBrZXl3b3JkOiBbJyddLFxyXG4gICAgICB1c2VyR3JvdXBGaWx0ZXI6IFsnJ10sXHJcbiAgICAgIGV4Y2x1ZGVkUXVpdERlcGFydG1lbnRJZDogW3RydWVdXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBvbkZpbHRlclBlcnNvbigpIHtcclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMucGVyc29uRm9ybS5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgY29uc3QgZmlsdGVyRGF0YTogRmlsdGVyUGVyc29uTW9kZWwgPSB7XHJcbiAgICAgIGRlcGFydG1lbnRJZDogZm9ybVZhbHVlLmRlcGFydG1lbnQ/LmlkLFxyXG4gICAgICB1c2VyR3JvdXBJZDogZm9ybVZhbHVlLnVzZXJHcm91cD8uaWQsXHJcbiAgICAgIGtleXdvcmQ6IGZvcm1WYWx1ZS5rZXl3b3JkLFxyXG4gICAgICByZWN1cnNpdmU6IGZvcm1WYWx1ZS5yZWN1cnNpdmVcclxuICAgIH07XHJcbiAgICB0aGlzLmdldFNlYXJjaGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuX3Jlc2V0UGFnaW5hdG9yKHRoaXMucGFnaW5nUGVyc29uKTtcclxuICAgIHRoaXMub25TZWFyY2hQZXJzb25FdmVudC5lbWl0KGZpbHRlckRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzZXRQYWdpbmF0b3IocGFnaW5hdG9yOiBRTVNQYWdpbmF0b3JDb21wb25lbnQpIHtcclxuICAgIGlmICghcGFnaW5hdG9yKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBwYWdpbmF0b3IuY2hhbmdlUGFnZSgwKTtcclxuICAgIHBhZ2luYXRvci5yZW5kZXJEaXNwbGF5TnVtYmVyT2ZwYWdlcygpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hQZXJzb25GcmVlVGV4dCgpIHtcclxuICAgIHRoaXMuZ2V0TG9hZGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZ2V0U2VhcmNoaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5vblNlYXJjaFBlcnNvbkZyZWVUZXh0RXZlbnQuZW1pdCh0aGlzLnBlcnNvbkZvcm0uZ2V0KCdrZXl3b3JkJykudmFsdWUpO1xyXG4gICAgdGhpcy5fcmVzZXRQYWdpbmF0b3IodGhpcy5wYWdpbmdQZXJzb24pO1xyXG4gIH1cclxuXHJcbiAgb25GaWx0ZXJVc2VyR3JvdXAoKSB7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmdldFNlYXJjaGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuX3Jlc2V0UGFnaW5hdG9yKHRoaXMucGFnaW5nVXNlckdyb3VwKTtcclxuICAgIHRoaXMub25TZWFyY2hVc2VyR3JvdXBFdmVudC5lbWl0KHRoaXMudXNlckdyb3VwRm9ybS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvbkZpbHRlckRlcGFydG1lbnQoKSB7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmdldFNlYXJjaGluZyQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuX3Jlc2V0UGFnaW5hdG9yKHRoaXMucGFnaW5nRGVwYXJ0bWVudCk7XHJcbiAgICB0aGlzLm9uU2VhcmNoRGVwYXJ0bWVudFBhZ2luZ0V2ZW50LmVtaXQodGhpcy5kZXBhcnRtZW50U2VhcmNoRm9ybS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdEl0ZW0odHlwZTogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSwgaXRlbTogUU1TQWNjZXNzSXRlbSkge1xyXG4gICAgaWYgKCF0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIGl0ZW0pKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBpdGVtLnNlbGVjdGVkID0gIWl0ZW0uc2VsZWN0ZWQ7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLlBFUlNPTjpcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZiAodGhpcy5kaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVQZXJzb24pIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucyA9IGl0ZW0uc2VsZWN0ZWQgPyBbaXRlbV0gOiBbXTtcclxuICAgICAgICAgICAgdGhpcy5wZXJzb25GaWx0ZXJlZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChpdGVtLmlkICE9PSBpdGVtLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGl0ZW0uc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBpbmRleEl0ZW0gPSB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICAgICAgaW5kZXhJdGVtID4gLTEgJiYgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucy5zcGxpY2UoaW5kZXhJdGVtLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5VU0VSX0dST1VQOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVVzZXJHcm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzID0gaXRlbS5zZWxlY3RlZCA/IFtpdGVtXSA6IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJHcm91cEZpbHRlcmVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgIT09IGl0ZW0uaWQpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpdGVtLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMucHVzaChpdGVtKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBpbmRleEl0ZW0gPSB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICAgICAgaW5kZXhJdGVtID4gLTEgJiYgdGhpcy5yZXN1bHRBY2Nlc3MudXNlckdyb3Vwcy5zcGxpY2UoaW5kZXhJdGVtLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5ERVBBUlRNRU5UOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVVzZXJHcm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50c0ZsYXQgPSBpdGVtLnNlbGVjdGVkID8gW2l0ZW1dIDogW107XHJcbiAgICAgICAgICAgIHRoaXMuZGVwYXJ0bWVudEZpbHRlcmVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgIT09IGl0ZW0uaWQpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoaXRlbS5zZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50c0ZsYXQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgaW5kZXhJdGVtID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xyXG4gICAgICAgICAgaW5kZXhJdGVtID4gLTEgJiYgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0LnNwbGljZShpbmRleEl0ZW0sIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlbW92ZUNoaXAodHlwZTogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSwgaXRlbSwgaW5kZXgpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uUEVSU09OOlxyXG4gICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLnBlcnNvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICBpZiAodGhpcy5wZXJzb25GaWx0ZXJlZFtpbmRleF0pIHtcclxuICAgICAgICAgIHRoaXMucGVyc29uRmlsdGVyZWRbaW5kZXhdLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uVVNFUl9HUk9VUDpcclxuICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlckdyb3VwRmlsdGVyZWRbaW5kZXhdKSB7XHJcbiAgICAgICAgICB0aGlzLnVzZXJHcm91cEZpbHRlcmVkW2luZGV4XS5zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLkRFUEFSVE1FTlQ6XHJcbiAgICAgICAgaWYgKCF0aGlzLmRpYWxvZ0RhdGEuaXNEZXBhcnRtZW50UGFnaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5fZGVwYXJ0bWVudFNlbGVjdGVkID0gXy5jbG9uZURlZXAodGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMpO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLnRyZWVEZXBhcnRtZW50KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB0aGlzLnRyZWVEZXBhcnRtZW50Lm9uUmVtb3ZlTm9kZShpdGVtLmlkKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50c0ZsYXQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIGlmICh0aGlzLmRlcGFydG1lbnRGaWx0ZXJlZFtpbmRleF0pIHtcclxuICAgICAgICAgICAgdGhpcy5kZXBhcnRtZW50RmlsdGVyZWRbaW5kZXhdLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25UeXBlQ2hhbmdlKGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UpIHtcclxuICAgIHN3aXRjaCAoZXZlbnQudmFsdWUpIHtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlBFUlNPTjpcclxuICAgICAgICB0aGlzLmJ1aWxkUGVyc29uRm9ybSgpO1xyXG4gICAgICAgIHRoaXMuX2ZpbHRlck9wdGlvblBlcnNvbkNoYW5nZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVDpcclxuICAgICAgICB0aGlzLmRpYWxvZ0RhdGEudHJlZURlcGFydG1lbnRDb25maWcuc2VsZWN0ZWRMaXN0ID0gdGhpcy5zZWxlY3RlZERlcGFydG1lbnRzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kaWFsb2dSZWYudXBkYXRlU2l6ZSh0aGlzLmRpYWxvZ0RhdGEuc2l6ZVVwZGF0ZURlZmF1bHQpO1xyXG4gICAgdGhpcy5vblNlbGVjdE9wdGlvbkNoYW5nZSQubmV4dChldmVudCk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHNldEZvcm1Db250cm9sVmFsdWUoZm9ybUNvbnRyb2xOYW1lczogc3RyaW5nW10sIHZhbHVlcykge1xyXG4gICAgZm9ybUNvbnRyb2xOYW1lcy5mb3JFYWNoKChjb250cm9sTmFtZSwgX2luZGV4KSA9PiB7XHJcbiAgICAgIHRoaXMucGVyc29uRm9ybS5nZXQoY29udHJvbE5hbWUpPy5zZXRWYWx1ZSh2YWx1ZXNbX2luZGV4XSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgaXNDaGVja0FsbCh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlBFUlNPTjpcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lUGVyc29uICYmIHRoaXMucGVyc29uRmlsdGVyZWQubGVuZ3RoICYmIHRoaXMucGVyc29uRmlsdGVyZWQuZXZlcnkoeCA9PiB4LnNlbGVjdGVkKTtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlVTRVJfR1JPVVA6XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVVzZXJHcm91cCAmJiB0aGlzLnVzZXJHcm91cEZpbHRlcmVkLmxlbmd0aCAmJiB0aGlzLnVzZXJHcm91cEZpbHRlcmVkLmV2ZXJ5KHggPT4geC5zZWxlY3RlZCk7XHJcbiAgICAgIGNhc2UgdGhpcy5PUFRJT05fRU5VTS5ERVBBUlRNRU5UOlxyXG4gICAgICAgIHJldHVybiAhdGhpcy5kaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVVc2VyR3JvdXAgJiYgdGhpcy5kZXBhcnRtZW50RmlsdGVyZWQubGVuZ3RoICYmIHRoaXMuZGVwYXJ0bWVudEZpbHRlcmVkLmV2ZXJ5KHggPT4geC5zZWxlY3RlZCk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlZFNlbGVjdEFsbCh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLlBFUlNPTjogcmV0dXJuICF0aGlzLnBlcnNvbkZpbHRlcmVkLmxlbmd0aCB8fCB0aGlzLnBlcnNvbkZpbHRlcmVkLmV2ZXJ5KHggPT4gIXRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkpXHJcbiAgICAgIGNhc2UgT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5VU0VSX0dST1VQOiByZXR1cm4gIXRoaXMudXNlckdyb3VwRmlsdGVyZWQubGVuZ3RoIHx8IHRoaXMudXNlckdyb3VwRmlsdGVyZWQuZXZlcnkoeCA9PiAhdGhpcy5hbGxvd1JlbW92ZSh0eXBlLCB4KSlcclxuICAgICAgY2FzZSBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLkRFUEFSVE1FTlQ6IHJldHVybiAhdGhpcy5kZXBhcnRtZW50RmlsdGVyZWQubGVuZ3RoIHx8IHRoaXMuZGVwYXJ0bWVudEZpbHRlcmVkLmV2ZXJ5KHggPT4gIXRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkpXHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzSW5kZXRlcm1pbmF0ZSh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlBFUlNPTjpcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lUGVyc29uICYmICF0aGlzLmlzQ2hlY2tBbGwodHlwZSkgJiYgdGhpcy5wZXJzb25GaWx0ZXJlZD8uc29tZSh4ID0+IHguc2VsZWN0ZWQpO1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uVVNFUl9HUk9VUDpcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwICYmICF0aGlzLmlzQ2hlY2tBbGwodHlwZSkgJiYgdGhpcy51c2VyR3JvdXBGaWx0ZXJlZD8uc29tZSh4ID0+IHguc2VsZWN0ZWQpO1xyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVDpcclxuICAgICAgICByZXR1cm4gIXRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwICYmICF0aGlzLmlzQ2hlY2tBbGwodHlwZSkgJiYgdGhpcy5kZXBhcnRtZW50RmlsdGVyZWQ/LnNvbWUoeCA9PiB4LnNlbGVjdGVkKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoZWNrQWxsKHR5cGU6IE9wdGlvblNlbGVjdEFjY2Vzc0VudW0sICRldmVudCkge1xyXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZFNlbGVjdEFsbCh0eXBlKSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgJGV2ZW50LmNoZWNrZWQgPSAhJGV2ZW50LmNoZWNrZWQ7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSB0aGlzLk9QVElPTl9FTlVNLlBFUlNPTjoge1xyXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVBlcnNvbikge1xyXG4gICAgICAgICAgJGV2ZW50LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnBlcnNvbkZpbHRlcmVkLmxlbmd0aClcclxuICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5wZXJzb25GaWx0ZXJlZC5maWx0ZXIoeCA9PiB0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpKS5mb3JFYWNoKHggPT4geC5zZWxlY3RlZCA9ICRldmVudC5jaGVja2VkKTtcclxuICAgICAgICBjb25zdCBpZEZpbHRlcmVkID0gdGhpcy5wZXJzb25GaWx0ZXJlZC5tYXAoeCA9PiB4LmlkKTtcclxuICAgICAgICBpZiAoJGV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGlkUGVyc29uU2VsZWN0ZWQgPSB0aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLm1hcCh4ID0+IHguaWQpO1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucyA9IFsuLi50aGlzLnJlc3VsdEFjY2Vzcy5wZXJzb25zLCAuLi50aGlzLnBlcnNvbkZpbHRlcmVkLmZpbHRlcih4ID0+IHRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkgJiYgIWlkUGVyc29uU2VsZWN0ZWQuaW5jbHVkZXMoeC5pZCkpXTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MucGVyc29ucyA9IHRoaXMucmVzdWx0QWNjZXNzLnBlcnNvbnMuZmlsdGVyKHggPT4gIXRoaXMuYWxsb3dSZW1vdmUodHlwZSwgeCkgfHwgIWlkRmlsdGVyZWQuaW5jbHVkZXMoeC5pZCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgdGhpcy5PUFRJT05fRU5VTS5VU0VSX0dST1VQOiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwKSB7XHJcbiAgICAgICAgICAkZXZlbnQuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1c2VyR3JvdXBQYWdpbmcgPSB0aGlzLnVzZXJHcm91cEZpbHRlcmVkO1xyXG4gICAgICAgIHVzZXJHcm91cFBhZ2luZy5maWx0ZXIoeCA9PiB0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpKS5mb3JFYWNoKHggPT4geC5zZWxlY3RlZCA9ICRldmVudC5jaGVja2VkKTtcclxuICAgICAgICBjb25zdCBpZEZpbHRlcmVkID0gdXNlckdyb3VwUGFnaW5nLm1hcCh4ID0+IHguaWQpO1xyXG4gICAgICAgIGlmICgkZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICAgICAgY29uc3QgaWRTZWxlY3RlZCA9IHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMubWFwKHggPT4geC5pZCk7XHJcbiAgICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzID0gWy4uLnRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMsIC4uLnVzZXJHcm91cFBhZ2luZy5maWx0ZXIoeCA9PiB0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpICYmICFpZFNlbGVjdGVkLmluY2x1ZGVzKHguaWQpKV07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLnVzZXJHcm91cHMgPSB0aGlzLnJlc3VsdEFjY2Vzcy51c2VyR3JvdXBzLmZpbHRlcih4ID0+ICF0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpIHx8ICFpZEZpbHRlcmVkLmluY2x1ZGVzKHguaWQpKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVDoge1xyXG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEubW9kZVNlbGVjdE9uZVVzZXJHcm91cCkge1xyXG4gICAgICAgICAgJGV2ZW50LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGVwYXJ0bWVudFBhZ2luZyA9IHRoaXMuZGVwYXJ0bWVudEZpbHRlcmVkO1xyXG4gICAgICAgIGRlcGFydG1lbnRQYWdpbmcuZmlsdGVyKHggPT4gdGhpcy5hbGxvd1JlbW92ZSh0eXBlLCB4KSkuZm9yRWFjaCh4ID0+IHguc2VsZWN0ZWQgPSAkZXZlbnQuY2hlY2tlZCk7XHJcbiAgICAgICAgY29uc3QgaWRGaWx0ZXJlZCA9IGRlcGFydG1lbnRQYWdpbmcubWFwKHggPT4geC5pZCk7XHJcbiAgICAgICAgaWYgKCRldmVudC5jaGVja2VkKSB7XHJcbiAgICAgICAgICBjb25zdCBpZFNlbGVjdGVkID0gdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0Lm1hcCh4ID0+IHguaWQpO1xyXG4gICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0ID0gWy4uLnRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzRmxhdCwgLi4uZGVwYXJ0bWVudFBhZ2luZy5maWx0ZXIoeCA9PiB0aGlzLmFsbG93UmVtb3ZlKHR5cGUsIHgpICYmICFpZFNlbGVjdGVkLmluY2x1ZGVzKHguaWQpKV07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzRmxhdCA9IHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzRmxhdC5maWx0ZXIoeCA9PiAhdGhpcy5hbGxvd1JlbW92ZSh0eXBlLCB4KSB8fCAhaWRGaWx0ZXJlZC5pbmNsdWRlcyh4LmlkKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbk5vZGVEZXBhcnRtZW50Q2hhbmdlKHsgYWRkZWQsIHJlbW92ZWQsIHVwZGF0ZWQgfTogSVNlbGVjdGlvbk5vZGVDaGFuZ2U8UU1TVHJlZU5vZGU+KSB7XHJcbiAgICBpZiAoYWRkZWQubGVuZ3RoKSB7XHJcbiAgICAgIGFkZGVkLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzLnNvbWUoeCA9PiB4LmlkID09PSBpdGVtLmlkKSlcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChyZW1vdmVkLmxlbmd0aCkge1xyXG4gICAgICByZW1vdmVkLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSB4LmlkKTtcclxuICAgICAgICBpZiAoaW5kZXggPCAwKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHVwZGF0ZWQubGVuZ3RoKSB7XHJcbiAgICAgIHVwZGF0ZWQuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT0geC5pZCk7XHJcbiAgICAgICAgaWYgKGluZGV4IDwgMClcclxuICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZGVwYXJ0bWVudHMgPSB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PSB4LmlkKTtcclxuICAgICAgICBpZiAoIWRlcGFydG1lbnRzKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGRlcGFydG1lbnRzLmNoaWxkcmVuID0geC5jaGlsZHJlbjtcclxuICAgICAgICBkZXBhcnRtZW50cy5jaGlsZENvdW50ID0geC5jaGlsZENvdW50O1xyXG5cclxuICAgICAgICBpZiAoZGVwYXJ0bWVudHMuY2hpbGRyZW4ubGVuZ3RoKVxyXG4gICAgICAgICAgZGVwYXJ0bWVudHMuY2hpbGRyZW4uZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSB4LmlkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpXHJcbiAgICAgICAgICAgICAgdGhpcy5yZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoISFpdGVtLmNoaWxkcmVuKVxyXG4gICAgICAgIGl0ZW0uY2hpbGRyZW4gPSBpdGVtLmNoaWxkcmVuLmZpbHRlcigoeCwgaW5kZXgpID0+IGluZGV4ID09PSBpdGVtLmNoaWxkcmVuLmZpbmRJbmRleChfeCA9PiB4LmlkID09PSBfeC5pZCkpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9kZXBhcnRtZW50U2VsZWN0ZWQgPSBfLmNsb25lRGVlcCh0aGlzLnJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50cyk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uU2NvbGxUb05vZGVUcmVlRGVwYXJ0bWVudChub2RlOiBRTVNUcmVlTm9kZSkge1xyXG4gICAgdGhpcy5vcHRpb25TZWxlY3QudmFsdWUgPT09IHRoaXMuT1BUSU9OX0VOVU0uREVQQVJUTUVOVCAmJiB0aGlzLnRyZWVEZXBhcnRtZW50LnNjcm9sbFRvTm9kZShub2RlLmlkKVxyXG4gIH1cclxuXHJcbiAgdHJhY2tCeUZuKGluZGV4LCBpdGVtKSB7XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQZXJzb25GaWx0ZXIoZGF0YTogUU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TQWNjZXNzSXRlbT4pIHtcclxuICAgIHRoaXMuZ2V0UGVyc29uJC5uZXh0KGRhdGEpO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuZ2V0U2VhcmNoaW5nJC5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVVzZXJHcm91cEZpbHRlcihkYXRhOiBRTVNBY2Nlc3NQYWdpbmdNb2RlbDxRTVNBY2Nlc3NJdGVtPikge1xyXG4gICAgdGhpcy5nZXRVc2VyR3JvdXAkLm5leHQoZGF0YSk7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5nZXRTZWFyY2hpbmckLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgb25QYWdpbmF0b3JFdmVudCh2YWw6IFBhZ2VFdmVudCwgdHlwZTogT3B0aW9uU2VsZWN0QWNjZXNzRW51bSkge1xyXG4gICAgaWYgKHRoaXMuZ2V0U2VhcmNoaW5nJC52YWx1ZSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nJC5uZXh0KHRoaXMub3B0aW9uU2VsZWN0LnZhbHVlICE9PSAnJyk7XHJcbiAgICB0aGlzLm9uUGFnaW5nRXZlbnQuZW1pdCh7XHJcbiAgICAgIC4uLnZhbCxcclxuICAgICAgdHlwZTogdHlwZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblJlc3VsdERlcGFydG1lbnRDaGFuZ2UoZXZlbnQ6IFFNU1RyZWVOb2RlW10pIHtcclxuICAgIC8vIHRoaXMucmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSZXN1bHRTZWFyY2hEZXBhcnRtZW50KGRhdGE6IFFNU0FjY2Vzc1BhZ2luZ01vZGVsPFFNU0ZsYXROb2RlVHJlZT4gPSBuZXcgUU1TQWNjZXNzUGFnaW5nTW9kZWw8UU1TRmxhdE5vZGVUcmVlPigpKSB7XHJcbiAgICBpZiAoIXRoaXMudHJlZURlcGFydG1lbnQpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGRhdGEgPSBkYXRhIGFzIFFNU0RlcGFydG1lbnRQYWdpbmdNb2RlbDxRTVNGbGF0Tm9kZVRyZWU+O1xyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5kaXNhYmxlU2VsZWN0ZWRMaXN0KSB7XHJcbiAgICAgIGRhdGEuZGF0YS5mb3JFYWNoKHggPT4geC5kaXNhYmxlZCA9ICF0aGlzLmFsbG93UmVtb3ZlKE9wdGlvblNlbGVjdEFjY2Vzc0VudW0uREVQQVJUTUVOVCwgeCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmVlRGVwYXJ0bWVudC5zZXRSZXN1bHRTZWFyY2goZGF0YSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEZXBhcnRtZW50RmlsdGVyKGRhdGE6IFFNU0FjY2Vzc1BhZ2luZ01vZGVsPFFNU0FjY2Vzc0l0ZW0+KSB7XHJcbiAgICB0aGlzLmdldERlcGFydG1lbnQkLm5leHQoZGF0YSk7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5nZXRTZWFyY2hpbmckLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcblxyXG4gIGdlbmVyYXRlVG9vbHRpcChub2RlOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGE/LmZvcm1hdFRvb2x0aXApXHJcbiAgICAgIHJldHVybiB0aGlzLmRpYWxvZ0RhdGEuZm9ybWF0VG9vbHRpcChub2RlKTtcclxuICAgIHJldHVybiAobm9kZT8uaXNHcm91cCkgPyB0aGlzLmZvcm1hdFN0cmluZyh0aGlzLkxBTkcuVE9PTFRJUF9JTkNMVURFX1NVQl9ERVBBUlRNRU5ULCBub2RlLm5hbWUsIG5vZGUuY2hpbGRyZW4/Lmxlbmd0aC50b1N0cmluZygpKSA6IChgJHtub2RlLm5hbWV9ICR7bm9kZT8uc3ViTmFtZSA/IGAtICgke25vZGUuc3ViTmFtZX0pYCA6ICcnfWApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRTdHJpbmcoLi4ucmVwbGFjZW1lbnRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICBsZXQgcmVzdWx0ID0gYXJndW1lbnRzWzBdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHJlZyA9IG5ldyBSZWdFeHAoYFxcXFx7JHtpfVxcXFx9YCwgJ2dtJyk7XHJcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKHJlZywgYXJndW1lbnRzW2kgKyAxXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgaGFzSXRlbVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVzdWx0QWNjZXNzKS5zb21lKGtleSA9PiAhIXRoaXMucmVzdWx0QWNjZXNzW2tleV0/Lmxlbmd0aClcclxuICB9XHJcblxyXG4gIHVwZGF0ZURlcGFydG1lbnQoZGF0YTogUU1TVHJlZU5vZGVbXSA9IFtdKSB7XHJcbiAgICB0aGlzLmdldExvYWRpbmckLm5leHQoZmFsc2UpO1xyXG5cclxuICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEuZGlzYWJsZVNlbGVjdGVkTGlzdCkge1xyXG4gICAgICBkYXRhLmZvckVhY2goaXRlbSA9PiBpdGVtLmRpc2FibGVkID0gIXRoaXMuYWxsb3dSZW1vdmUoT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5ERVBBUlRNRU5ULCBpdGVtKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpYWxvZ0RhdGEudHJlZURlcGFydG1lbnRDb25maWcudHJlZURhdGEgPSBfLmNsb25lRGVlcChkYXRhKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU9wdGlvblBlcnNvbkZpbHRlcihkZXBhcnRtZW50RmlsdGVyOiBRTVNGbGF0Tm9kZVRyZWVbXSA9IFtdLCB1c2VyR3JvdXBGaWx0ZXI6IFFNU0FjY2Vzc0l0ZW1bXSA9IFtdKSB7XHJcbiAgICB0aGlzLm9wdGlvbkZpbHRlclBlcnNvbkRhdGFHbG9iYWwuZGVwYXJ0bWVudHMgPSBkZXBhcnRtZW50RmlsdGVyO1xyXG4gICAgdGhpcy5vcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLnVzZXJHcm91cHMgPSB1c2VyR3JvdXBGaWx0ZXI7XHJcbiAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC5kZXBhcnRtZW50Lm5leHQoZGVwYXJ0bWVudEZpbHRlcik7XHJcbiAgICB0aGlzLmZpbHRlcmVkU2VhcmNoVGV4dEJveC51c2VyR3JvdXAubmV4dCh1c2VyR3JvdXBGaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFBhZ2VTaXplT3B0aW9uKGRhdGE6IG51bWJlcltdKSB7XHJcbiAgICB0aGlzLlBBR0VfU0laRV9PUFRJT04gPSBkYXRhO1xyXG4gIH1cclxuICBhbGxvd1JlbW92ZSA9ICh0eXBlOiBPcHRpb25TZWxlY3RBY2Nlc3NFbnVtLCBpdGVtOiBhbnkpOiBib29sZWFuID0+IHtcclxuICAgIGlmICghdGhpcy5kaWFsb2dEYXRhLmRpc2FibGVTZWxlY3RlZExpc3QpXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgeyBwZXJzb25zLCBkZXBhcnRtZW50cywgdXNlckdyb3VwcyB9ID0gdGhpcy5kaWFsb2dEYXRhLmRhdGEuc2VsZWN0ZWREYXRhO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgT3B0aW9uU2VsZWN0QWNjZXNzRW51bS5QRVJTT046IHJldHVybiAhcGVyc29ucy5zb21lKHggPT4geC5pZCA9PSBpdGVtLmlkKVxyXG4gICAgICBjYXNlIE9wdGlvblNlbGVjdEFjY2Vzc0VudW0uREVQQVJUTUVOVDogcmV0dXJuICFkZXBhcnRtZW50cy5zb21lKHggPT4geC5pZCA9PSBpdGVtLmlkKVxyXG4gICAgICBjYXNlIE9wdGlvblNlbGVjdEFjY2Vzc0VudW0uVVNFUl9HUk9VUDogcmV0dXJuICF1c2VyR3JvdXBzLnNvbWUoeCA9PiB4LmlkID09IGl0ZW0uaWQpXHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuIiwiPGgzIG1hdC1kaWFsb2ctdGl0bGUgY2xhc3M9XCJtb3JlLWFjdGlvblwiPlxuICB7e2RpYWxvZ0RhdGEudGl0bGVEaWFsb2cgfHwgTEFORy5TRUxFQ1RfQUNDRVNTfX1cbiAgPGJ1dHRvbiBtYXREaWFsb2dDbG9zZSBjbGFzcz1cImNsb3NlLWJ0blwiIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCI+XG4gICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb25zLW91dGxpbmVkXCI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvaDM+XG48bWF0LWRpYWxvZy1jb250ZW50PlxuICA8ZGl2IFtjbGFzcy5hY3RpdmVdPVwib3B0aW9uU2VsZWN0LnZhbHVlICE9PSBudWxsXCIgY2xhc3M9XCJxbXMtZGlhbG9nLWNvbnRlbnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYWNjZXNzLWRpYWxvZy13cmFwZXJcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIm9wdGlvbnMubGVuZ3RoID4gMVwiIHFtcy1mb3JtIHFtcy1zZWxlY3QtaW5wdXQgY2xhc3M9XCJmaWVsZC1zZWxlY3Qtb3B0aW9uIHctMTAwIG1iLTJcIlxuICAgICAgICBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgICA8bWF0LWxhYmVsIFthdHRyLmFyaWEtbGFiZWxdPVwiTEFORy5UWVBFXCIgcW1zLXNlbGVjdC1pbnB1dD57e0xBTkcuVFlQRX19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25UeXBlQ2hhbmdlKCRldmVudClcIiBbZm9ybUNvbnRyb2xdPVwib3B0aW9uU2VsZWN0XCIgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIlxuICAgICAgICAgIGRpc2FibGVPcHRpb25DZW50ZXJpbmcgI3NpbmdsZVNlbGVjdCBwYW5lbENsYXNzPVwicW1zLXNlbGVjdC1wYW5lbFwiIHFtcy1zZWxlY3Q+XG5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zXCIgW3ZhbHVlXT1cIml0ZW0udHlwZVwiPlxuICAgICAgICAgICAge3sgTEFOR1tpdGVtLmRpc3BsYXlOYW1lXSB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxkaXYgY2xhc3M9XCJib2R5LWRpYWxvZy1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1zZWxlY3RlZC1jb250ZW50XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvblNlbGVjdC52YWx1ZSA9PT0gT1BUSU9OX0VOVU0uUEVSU09OXCI+XG4gICAgICAgICAgICA8Zm9ybSAqbmdJZj1cInBlcnNvbkZvcm1cIiBbZm9ybUdyb3VwXT1cInBlcnNvbkZvcm1cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWZpbHRlci1wZXJzb24tb3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwib3B0aW9uRmlsdGVyUGVyc29uRGF0YUdsb2JhbC51c2VyR3JvdXBzLmxlbmd0aFwiIHFtcy1mb3JtIHFtcy1zZWxlY3QtaW5wdXRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgIG1iLTJcIiBhcHBlYXJhbmNlPVwiZmlsbFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBbYXR0ci5hcmlhLWxhYmVsXT1cIkxBTkcuUk9MRVwiIHFtcy1zZWxlY3QtaW5wdXQ+e3tMQU5HLlJPTEV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGFuZWxDbGFzcz1cInFtcy1zZWxlY3QtcGFuZWxcIiBxbXMtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInVzZXJHcm91cFwiXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVPcHRpb25DZW50ZXJpbmc+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAge3twZXJzb25Gb3JtLmNvbnRyb2xzWyd1c2VyR3JvdXAnXS52YWx1ZT8ubmFtZSB8fCAnJ319XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoIGZvcm1Db250cm9sTmFtZT1cInVzZXJHcm91cEZpbHRlclwiIHBsYWNlaG9sZGVyTGFiZWw9XCJ7eyBMQU5HLlJPTEUgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgbm9FbnRyaWVzRm91bmRMYWJlbD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIG1vZGU9XCJkYXJrXCIgY2xhc3M9XCJvcHQtY2hlY2staWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRTZWFyY2hUZXh0Qm94LnVzZXJHcm91cC52YWx1ZVwiIFt2YWx1ZV09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gcW1zLWVsaXBzaWZ5IHBvc2l0aW9uPVwidG9wXCIgbW9kZT1cImRhcmtcIiBjbGFzcz1cInRleHQtb3B0aW9uLWNvbnRlbnRcIj57eyBpdGVtLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY2hlY2staWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBlcnNvbkZvcm0uY29udHJvbHNbJ3VzZXJHcm91cCddLnZhbHVlPy5pZCA9PSBpdGVtLmlkXCI+Y2hlY2s8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbQGluT3V0QW5pbWF0aW9uXSAoY2xpY2spPVwicGVyc29uRm9ybS5nZXQoJ3VzZXJHcm91cCcpLnNldFZhbHVlKCcnKVwiIGNsYXNzPVwicG9pbnRlciBcIiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCIgKm5nSWY9XCJwZXJzb25Gb3JtLmdldCgndXNlckdyb3VwJykudmFsdWUgJiYgIWdldExvYWRpbmckLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJvcHRpb25GaWx0ZXJQZXJzb25EYXRhR2xvYmFsLmRlcGFydG1lbnRzLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIGlucHV0LXNlbGVjdC1vcHRpb24gIG1iLTJcIiBxbXMtZm9ybSBxbXMtc2VsZWN0LWlucHV0PlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBbYXR0ci5hcmlhLWxhYmVsXT1cIkxBTkcuREVQQVJUTUVOVF9VTklUXCI+e3tMQU5HLkRFUEFSVE1FTlRfVU5JVH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwYW5lbENsYXNzPVwicW1zLXNlbGVjdC1wYW5lbFwiIHFtcy1zZWxlY3QgZGlzYWJsZU9wdGlvbkNlbnRlcmluZ1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXBhcnRtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAge3twZXJzb25Gb3JtLmNvbnRyb2xzWydkZXBhcnRtZW50J10udmFsdWU/Lm5hbWUgfHwgJyd9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPG5neC1tYXQtc2VsZWN0LXNlYXJjaCBmb3JtQ29udHJvbE5hbWU9XCJkZXBhcnRtZW50RmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlckxhYmVsXT1cIkxBTkcuREVQQVJUTUVOVF9VTklUXCIgbm9FbnRyaWVzRm91bmRMYWJlbD1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwib3B0LWNoZWNrLWljb25cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZFNlYXJjaFRleHRCb3guZGVwYXJ0bWVudC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBxbXMtZWxpcHNpZnkgbW9kZT1cImRhcmtcIiBwb3NpdGlvbj1cInRvcFwiIGNsYXNzPVwidGV4dC1vcHRpb24tY29udGVudFwiPnt7IGl0ZW0ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjaGVjay1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGVyc29uRm9ybS5jb250cm9sc1snZGVwYXJ0bWVudCddLnZhbHVlPy5pZCA9PSBpdGVtLmlkXCI+Y2hlY2s8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwic2V0Rm9ybUNvbnRyb2xWYWx1ZShbJ3JlY3Vyc2l2ZScsJ2RlcGFydG1lbnQnXSwgW2ZhbHNlLCcnXSlcIiBbQGluT3V0QW5pbWF0aW9uXVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvaW50ZXJcIiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwZXJzb25Gb3JtLmdldCgnZGVwYXJ0bWVudCcpLnZhbHVlICYmICFnZXRMb2FkaW5nJC52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwicGVyc29uRm9ybS5jb250cm9sc1snZGVwYXJ0bWVudCddLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIHNsaWRlLXRvZ2dsZVwiIGZvcm1Db250cm9sTmFtZT1cInJlY3Vyc2l2ZVwiIGNvbG9yPVwiZGVmYXVsdFwiIHFtcy1ncm91cC1vcHRpb25zPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbFwiPnt7TEFORy5JTkNMVURFX1NVQl9ERVBBUlRNRU5UU319PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDAgIG1iLTJcIiBhcHBlYXJhbmNlPVwiZmlsbFwiIHFtcy1mb3JtIHFtcy1zZWFyY2gtZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBbYXR0ci5hcmlhLWxhYmVsXT1cIkxBTkcuU0VBUkNIX1dJVEhfTkFNRVwiXG4gICAgICAgICAgICAgICAgICBxbXMtc2VsZWN0LWlucHV0Pnt7TEFORy5TRUFSQ0hfV0lUSF9OQU1FfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgYXBwZWFyYW5jZT1cIm9mZlwiIGZvcm1Db250cm9sTmFtZT1cImtleXdvcmRcIiB0eXBlPVwidGV4dFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFnZXRMb2FkaW5nJC52YWx1ZVwiIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCIgW0Bpbk91dEFuaW1hdGlvbl1cbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlYXJjaFBlcnNvbkZyZWVUZXh0KClcIiBjbGFzcz1cInBvaW50ZXIgbWUtMVwiIG1hdFN1ZmZpeCBhcmlhLWxhYmVsPVwiU2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeCBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCJnZXRMb2FkaW5nJC52YWx1ZVwiIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgZGlhbWV0ZXI9XCIyMFwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBbQGluT3V0QW5pbWF0aW9uXSAoY2xpY2spPVwicGVyc29uRm9ybS5nZXQoJ2tleXdvcmQnKS5zZXRWYWx1ZSgnJylcIiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIkNsZWFyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGVyc29uRm9ybS5nZXQoJ2tleXdvcmQnKS52YWx1ZSAmJiAhZ2V0TG9hZGluZyQudmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uRmlsdGVyUGVyc29uKClcIiBxbXMtYnRuLW91dGxpbmVkIGNsYXNzPVwidy0xMDAgbXktMVwiPlxuICAgICAgICAgICAgICAgIHt7TEFORy5GSUxURVJ9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8ZGl2IHFtcy1zY3JvbGxiYXI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW0Bpbk91dEFuaW1hdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZ2V0TG9hZGluZyQudmFsdWUgJiYgcGVyc29uRmlsdGVyZWQubGVuZ3RoICYmICFkaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVQZXJzb25cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFNlbGVjdEFsbChPUFRJT05fRU5VTS5QRVJTT04pXCIgI2NoZWNrUGVyc29uIGNsYXNzPVwidy0xMDAgbWItMSBjaGVja2JveC1hbGxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGVyc29uRmlsdGVyZWQubGVuZ3RoICYmIG9uQ2hlY2tBbGwoT1BUSU9OX0VOVU0uUEVSU09OLGNoZWNrUGVyc29uKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQ2hlY2tBbGwoT1BUSU9OX0VOVU0uUEVSU09OKVwiIFtpbmRldGVybWluYXRlXT1cImlzSW5kZXRlcm1pbmF0ZShPUFRJT05fRU5VTS5QRVJTT04pXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJkZWZhdWx0XCIgcW1zLWdyb3VwLW9wdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbCBoZWFkZXItdGl0bGVcIj57e0xBTkcuQ0hPT1NFX0FMTH19ICg8Yj57e3BlcnNvbkZpbHRlcmVkLmxlbmd0aH19PC9iPik8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJteC1hdXRvXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0TG9hZGluZyQudmFsdWU7IHRoZW4gbG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCJwZXJzb25GaWx0ZXJlZC5sZW5ndGggJiYgIWdldExvYWRpbmckLnZhbHVlXCIgW0BsaXN0QW5pbWF0aW9uXVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtLWxpc3Qtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gIG10LTFcIiBbQGluT3V0QW5pbWF0aW9uXSAqbmdGb3I9XCJsZXQgZW1wbG95ZWUgb2YgcGVyc29uRmlsdGVyZWQ7IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lUGVyc29uID9pdGVtV2l0aG91dENoZWNrYm94VGVtcGxhdGUgOiBpdGVtQ2hlY2tib3hUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBlbXBsb3llZSwgdHlwZTogT1BUSU9OX0VOVU0uUEVSU09OfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCIhcGVyc29uRmlsdGVyZWQubGVuZ3RoICYmICFnZXRMb2FkaW5nJC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW0tbGlzdC13cmFwcGVyIG5vLXJlc3VsdFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vUmVzdWx0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibXgtYXV0b1wiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgPHFtcy1wYWdpbmF0b3Igb3ZlcmxheVBhbmVsQ2xhc3M9XCJzZWxlY3QtYWNjZXNzLXBhZ2luYXRvclwiICNwYWdpbmdQZXJzb25cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0UGVyc29uJC52YWx1ZS5sZW5ndGggPiAxMFwiIFtsZW5ndGhdPVwiZ2V0UGVyc29uJC52YWx1ZS5sZW5ndGhcIiBbbnVtSGlkZGVuXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cImdldFBlcnNvbiQudmFsdWUucGFnZVNpemVcIiBbcGFnZVNpemVPcHRpb25zXT1cIlBBR0VfU0laRV9PUFRJT05cIlxuICAgICAgICAgICAgICAgICAgKHBhZ2UpPSdvblBhZ2luYXRvckV2ZW50KCRldmVudCwgT1BUSU9OX0VOVU0uUEVSU09OKScgW3NpemVdPSdQQUdJTkFUSU9OX1NJWkUubWVkaXVtJz5cbiAgICAgICAgICAgICAgICA8L3Ftcy1wYWdpbmF0b3I+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25TZWxlY3QudmFsdWUgPT09IE9QVElPTl9FTlVNLlVTRVJfR1JPVVBcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxmb3JtIChzdWJtaXQpPVwib25GaWx0ZXJVc2VyR3JvdXAoKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInctMTAwICBtYi0yXCIgcW1zLWZvcm0gcW1zLXNlYXJjaC1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgYXJpYS1sYWJlbD1cIlVzZXIgZ3JvdXBcIiBxbXMtc2VsZWN0LWlucHV0Pnt7IExBTkcuU0VBUkNIIH19IHt7IExBTkcuVVNFUl9HUk9VUFxuICAgICAgICAgICAgICAgICAgICB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJ1c2VyR3JvdXBGb3JtXCIgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cIiFnZXRMb2FkaW5nJC52YWx1ZVwiIHR5cGU9XCJzdWJtaXRcIiBxbXMtYnRuLWljb24gY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4IGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyIFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwiZ2V0TG9hZGluZyQudmFsdWVcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgZGlhbWV0ZXI9XCIyMFwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IChjbGljayk9XCJ1c2VyR3JvdXBGb3JtLnNldFZhbHVlKCcnKVwiIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgIDxkaXYgcW1zLXNjcm9sbGJhcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbQGluT3V0QW5pbWF0aW9uXVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFnZXRMb2FkaW5nJC52YWx1ZSAmJiAodXNlckdyb3VwRmlsdGVyZWQubGVuZ3RoICYmICFkaWFsb2dEYXRhLm1vZGVTZWxlY3RPbmVVc2VyR3JvdXApXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRTZWxlY3RBbGwoT1BUSU9OX0VOVU0uVVNFUl9HUk9VUClcIiAjY2hlY2tVc2VyR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMCBjaGVja2JveC1hbGwgbWItMVwiIGNvbG9yPVwiZGVmYXVsdFwiIFtjaGVja2VkXT1cImlzQ2hlY2tBbGwoT1BUSU9OX0VOVU0uVVNFUl9HUk9VUClcIlxuICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJpc0luZGV0ZXJtaW5hdGUoT1BUSU9OX0VOVU0uVVNFUl9HUk9VUClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXNlckdyb3VwRmlsdGVyZWQubGVuZ3RoICYmIG9uQ2hlY2tBbGwoT1BUSU9OX0VOVU0uVVNFUl9HUk9VUCxjaGVja1VzZXJHcm91cClcIlxuICAgICAgICAgICAgICAgICAgICBxbXMtZ3JvdXAtb3B0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsIGhlYWRlci10aXRsZVwiPnt7TEFORy5DSE9PU0VfQUxMfX1cbiAgICAgICAgICAgICAgICAgICAgICAoPGI+e3t1c2VyR3JvdXBGaWx0ZXJlZC5sZW5ndGh9fTwvYj4pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibXgtYXV0b1wiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldExvYWRpbmckLnZhbHVlO3RoZW4gbG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VyR3JvdXBGaWx0ZXJlZC5sZW5ndGggJiYgIWdldExvYWRpbmckLnZhbHVlXCIgW0BsaXN0QW5pbWF0aW9uXSBjbGFzcz1cIml0ZW0tbGlzdC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtAaW5PdXRBbmltYXRpb25dIGNsYXNzPVwiaXRlbSBtdC0xXCIgKm5nRm9yPVwibGV0IHVzZXJHcm91cCBvZiB1c2VyR3JvdXBGaWx0ZXJlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZGlhbG9nRGF0YS5tb2RlU2VsZWN0T25lVXNlckdyb3VwID8gaXRlbVdpdGhvdXRDaGVja2JveFRlbXBsYXRlIDogaXRlbUNoZWNrYm94VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogdXNlckdyb3VwLHR5cGU6IE9QVElPTl9FTlVNLlVTRVJfR1JPVVB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cIiF1c2VyR3JvdXBGaWx0ZXJlZC5sZW5ndGggJiYgIWdldExvYWRpbmckLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbS1saXN0LXdyYXBwZXIgbm8tcmVzdWx0XCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9SZXN1bHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJteC1hdXRvXCI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICA8cW1zLXBhZ2luYXRvciBvdmVybGF5UGFuZWxDbGFzcz1cInNlbGVjdC1hY2Nlc3MtcGFnaW5hdG9yXCIgI3BhZ2luZ1VzZXJHcm91cCBjbGFzcz1cIm15LTFcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRVc2VyR3JvdXAkLnZhbHVlLmxlbmd0aCA+IDEwIFwiIFtsZW5ndGhdPVwiZ2V0VXNlckdyb3VwJC52YWx1ZS5sZW5ndGhcIiBbbnVtSGlkZGVuXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cImdldFVzZXJHcm91cCQudmFsdWUucGFnZVNpemVcIiBbcGFnZVNpemVPcHRpb25zXT1cIlBBR0VfU0laRV9PUFRJT05cIlxuICAgICAgICAgICAgICAgICAgKHBhZ2UpPSdvblBhZ2luYXRvckV2ZW50KCRldmVudCwgT1BUSU9OX0VOVU0uVVNFUl9HUk9VUCknIFtzaXplXT0nUEFHSU5BVElPTl9TSVpFLm1lZGl1bSc+XG4gICAgICAgICAgICAgICAgPC9xbXMtcGFnaW5hdG9yPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb25TZWxlY3QudmFsdWUgPT09IE9QVElPTl9FTlVNLkRFUEFSVE1FTlRcIj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkaWFsb2dEYXRhLmlzRGVwYXJ0bWVudFBhZ2luZ1wiPlxuICAgICAgICAgICAgICA8cW1zLXNlbGVjdC1kZXBhcnRtZW50LXRyZWUgI3RyZWUgW3Jvd3NTa2VsZXRvbl09XCI4XCIgW2NvbmZpZ109XCJkaWFsb2dEYXRhLnRyZWVEZXBhcnRtZW50Q29uZmlnXCJcbiAgICAgICAgICAgICAgICBbbWF4V2lkdGhOb2RlXT1cImRpYWxvZ0RhdGEubWF4V2lkdGhOb2RlXCIgKG9uU2VhcmNoRXZlbnQpPVwib25TZWFyY2hEZXBhcnRtZW50RXZlbnQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZUV2ZW50KT1cIm9uUmVzdWx0RGVwYXJ0bWVudENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uTm9kZUNoYW5nZUV2ZW50KT1cIm9uU2VsZWN0aW9uTm9kZURlcGFydG1lbnRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uUGFnaW5nU2VhcmNoRXZlbnQpPVwib25QYWdpbmF0b3JFdmVudCgkZXZlbnQsIE9QVElPTl9FTlVNLkRFUEFSVE1FTlQpXCI+XG4gICAgICAgICAgICAgIDwvcW1zLXNlbGVjdC1kZXBhcnRtZW50LXRyZWU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpYWxvZ0RhdGEuaXNEZXBhcnRtZW50UGFnaW5nXCI+XG5cbiAgICAgICAgICAgICAgPGZvcm0gKG5nU3VibWl0KT1cIm9uRmlsdGVyRGVwYXJ0bWVudCgpXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidy0xMDAgIG1iLTJcIiBxbXMtZm9ybSBxbXMtc2VhcmNoLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBhcmlhLWxhYmVsPVwiRGVwYXJ0bWVudFwiIHFtcy1zZWxlY3QtaW5wdXQ+e3sgTEFORy5TRUFSQ0ggfX0ge3tMQU5HLkRFUEFSVE1FTlR9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJkZXBhcnRtZW50U2VhcmNoRm9ybVwiIG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCIhZ2V0TG9hZGluZyQudmFsdWVcIiB0eXBlPVwic3VibWl0XCIgcW1zLWJ0bi1pY29uIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXg+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeCBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cImdldExvYWRpbmckLnZhbHVlXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGRpYW1ldGVyPVwiMjBcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwiISFkZXBhcnRtZW50U2VhcmNoRm9ybS52YWx1ZSAmJiAhZ2V0TG9hZGluZyQudmFsdWVcIiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgcW1zLWlucHV0LWNsZWFyPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkZXBhcnRtZW50U2VhcmNoRm9ybS5zZXRWYWx1ZSgnJylcIiBxbXMtYnRuLWljb24gY29sb3I9XCJsaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuXG4gICAgICAgICAgICAgIDxkaXYgcW1zLXNjcm9sbGJhcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cIiFnZXRMb2FkaW5nJC52YWx1ZSAmJiBkZXBhcnRtZW50RmlsdGVyZWQubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRTZWxlY3RBbGwoT1BUSU9OX0VOVU0uREVQQVJUTUVOVClcIiAjY2hlY2tEZXBhcnRtZW50XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgY2hlY2tib3gtYWxsIG1iLTFcIiBjb2xvcj1cImRlZmF1bHRcIiBbY2hlY2tlZF09XCJpc0NoZWNrQWxsKE9QVElPTl9FTlVNLkRFUEFSVE1FTlQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNJbmRldGVybWluYXRlKE9QVElPTl9FTlVNLkRFUEFSVE1FTlQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlcGFydG1lbnRGaWx0ZXJlZC5sZW5ndGggJiYgb25DaGVja0FsbChPUFRJT05fRU5VTS5ERVBBUlRNRU5ULGNoZWNrRGVwYXJ0bWVudClcIlxuICAgICAgICAgICAgICAgICAgICBxbXMtZ3JvdXAtb3B0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsIGhlYWRlci10aXRsZVwiPnt7TEFORy5DSE9PU0VfQUxMfX1cbiAgICAgICAgICAgICAgICAgICAgICAoPGI+e3tkZXBhcnRtZW50RmlsdGVyZWQubGVuZ3RofX08L2I+KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZGl2aWRlciBjbGFzcz1cIm14LWF1dG9cIj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRMb2FkaW5nJC52YWx1ZTt0aGVuIGxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGVwYXJ0bWVudEZpbHRlcmVkLmxlbmd0aCAmJiAhZ2V0TG9hZGluZyQudmFsdWVcIiBbQGxpc3RBbmltYXRpb25dIGNsYXNzPVwiaXRlbS1saXN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW0Bpbk91dEFuaW1hdGlvbl0gY2xhc3M9XCJpdGVtIG10LTFcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkZXBhcnRtZW50RmlsdGVyZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtQ2hlY2tib3hUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBpdGVtLHR5cGU6IE9QVElPTl9FTlVNLkRFUEFSVE1FTlR9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cIiFkZXBhcnRtZW50RmlsdGVyZWQubGVuZ3RoICYmICFnZXRMb2FkaW5nJC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW0tbGlzdC13cmFwcGVyIG5vLXJlc3VsdFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vUmVzdWx0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1kaXZpZGVyIGNsYXNzPVwibXgtYXV0b1wiPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgPHFtcy1wYWdpbmF0b3Igb3ZlcmxheVBhbmVsQ2xhc3M9XCJzZWxlY3QtYWNjZXNzLXBhZ2luYXRvclwiICNwYWdpbmdEZXBhcnRtZW50IGNsYXNzPVwibXktMVwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImdldERlcGFydG1lbnQkLnZhbHVlLmxlbmd0aCA+IDEwIFwiIFtsZW5ndGhdPVwiZ2V0RGVwYXJ0bWVudCQudmFsdWUubGVuZ3RoXCIgW251bUhpZGRlbl09XCIwXCJcbiAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJnZXREZXBhcnRtZW50JC52YWx1ZS5wYWdlU2l6ZVwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwiUEFHRV9TSVpFX09QVElPTlwiXG4gICAgICAgICAgICAgICAgICAocGFnZSk9J29uUGFnaW5hdG9yRXZlbnQoJGV2ZW50LCBPUFRJT05fRU5VTS5ERVBBUlRNRU5UKScgW3NpemVdPSdQQUdJTkFUSU9OX1NJWkUubWVkaXVtJz5cbiAgICAgICAgICAgICAgICA8L3Ftcy1wYWdpbmF0b3I+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwib3B0aW9uU2VsZWN0LnZhbHVlICE9PSBudWxsXCIgY2xhc3M9XCJyZXN1bHQtd3JhcHBlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdC1zZWxlY3RlZC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBbQGluT3V0QW5pbWF0aW9uXSAqbmdJZj1cIihvcHRpb25zLmxlbmd0aCA9PT0gMSkgfHwgKG9wdGlvbnMubGVuZ3RoID4gMSAmJiBvcHRpb25TZWxlY3QudmFsdWUgIT09IG51bGwpXCJcbiAgICAgICAgICBjbGFzcz1cImhlYWRlci10aXRsZSByZXN1bHQtaGVhZGVyXCI+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgZGlhbG9nRGF0YS50aXRsZVJlc3VsdCB8fCBMQU5HLlJFU1VMVFN9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJvcHRpb25zLmxlbmd0aCA9PT0gMSAmJiBoYXNJdGVtU2VsZWN0ZWQoKVwiPlxuICAgICAgICAgICAgICAoe3tnZXRSZXN1bHRUYWJBY3RpdmUoKS5sZW5ndGh9fSlcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdWx0LWJvZHlcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hlY2tFeGlzdE9wdGlvblNlbGVjdChPUFRJT05fRU5VTS5QRVJTT04pXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnM/Lmxlbmd0aCA9PSAxID8gbGlzdENoaXAgOiB2aWV3UmVzdWx0Q29sbGFwc2VcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntkYXRhOnJlc3VsdEFjY2Vzcy5wZXJzb25zLCB0eXBlOk9QVElPTl9FTlVNLlBFUlNPTiwgdGl0bGU6TEFORy5QRVJTT059XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoZWNrRXhpc3RPcHRpb25TZWxlY3QoT1BUSU9OX0VOVU0uVVNFUl9HUk9VUClcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9ucz8ubGVuZ3RoID09IDEgPyBsaXN0Q2hpcCA6IHZpZXdSZXN1bHRDb2xsYXBzZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2RhdGE6cmVzdWx0QWNjZXNzLnVzZXJHcm91cHMsIHR5cGU6T1BUSU9OX0VOVU0uVVNFUl9HUk9VUCwgdGl0bGU6TEFORy5VU0VSX0dST1VQfVwiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja0V4aXN0T3B0aW9uU2VsZWN0KE9QVElPTl9FTlVNLkRFUEFSVE1FTlQpICYmICFkaWFsb2dEYXRhLmlzRGVwYXJ0bWVudFBhZ2luZ1wiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zPy5sZW5ndGggPT0gMSA/IGxpc3RDaGlwIDogdmlld1Jlc3VsdENvbGxhcHNlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ZGF0YTogcmVzdWx0QWNjZXNzLmRlcGFydG1lbnRzIHx8IHJlc3VsdEFjY2Vzcy5kZXBhcnRtZW50c0ZsYXQsIHR5cGU6T1BUSU9OX0VOVU0uREVQQVJUTUVOVCwgdGl0bGU6TEFORy5ERVBBUlRNRU5UfVwiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGVja0V4aXN0T3B0aW9uU2VsZWN0KE9QVElPTl9FTlVNLkRFUEFSVE1FTlQpICYmIGRpYWxvZ0RhdGEuaXNEZXBhcnRtZW50UGFnaW5nXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnM/Lmxlbmd0aCA9PSAxID8gbGlzdENoaXAgOiB2aWV3UmVzdWx0Q29sbGFwc2VcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntkYXRhOiByZXN1bHRBY2Nlc3MuZGVwYXJ0bWVudHNGbGF0LCB0eXBlOk9QVElPTl9FTlVNLkRFUEFSVE1FTlQsIHRpdGxlOkxBTkcuREVQQVJUTUVOVH1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbjwvbWF0LWRpYWxvZy1jb250ZW50PlxuPG1hdC1kaWFsb2ctYWN0aW9ucyBhbGlnbj1cImVuZFwiPlxuICA8bWF0LWRpdmlkZXIgY2xhc3M9XCJ3LTEwMCBtYi0zXCI+PC9tYXQtZGl2aWRlcj5cbiAgPGJ1dHRvbiBjbGFzcz1cIm1lLTJcIiBxbXMtYnRuLXRleHQgbWF0LWRpYWxvZy1jbG9zZT5cbiAgICB7e2RpYWxvZ0RhdGEuY2FuY2VsVGl0bGUgfHwgTEFORy5DQU5DRUx9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiAqbmdJZj1cIm9wdGlvblNlbGVjdC52YWx1ZSAhPT0gbnVsbFwiXG4gICAgW2Rpc2FibGVkXT1cIiFoYXNJdGVtU2VsZWN0ZWQoKSAmJiAhZGlhbG9nRGF0YS50cmVlRGVwYXJ0bWVudENvbmZpZy5jYW5BZGROdWxsUmVzdWx0XCIgY2xhc3M9XCJidG4tYWRkXCJcbiAgICBbY2xhc3MucW1zLWJ0bi1kaXNhYmxlZF09XCIhaGFzSXRlbVNlbGVjdGVkKCkgJiYgIWRpYWxvZ0RhdGEudHJlZURlcGFydG1lbnRDb25maWcuY2FuQWRkTnVsbFJlc3VsdFwiXG4gICAgW21hdC1kaWFsb2ctY2xvc2VdPVwicmVzdWx0QWNjZXNzXCIgcW1zLWJ0bj5cbiAgICA8c3Bhbj57e2RpYWxvZ0RhdGEuY29uZmlybVRpdGxlIHx8IExBTkcuQUREfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG5cbjxuZy10ZW1wbGF0ZSAjbm9SZXN1bHQ+XG4gIDxzdmcgd2lkdGg9XCI4OVwiIGhlaWdodD1cIjEzMFwiIHZpZXdCb3g9XCIwIDAgODkgODhcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICA8cmVjdCB4PVwiMC41XCIgd2lkdGg9XCI4OFwiIGhlaWdodD1cIjg4XCIgcng9XCI0NFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XG4gICAgPHJlY3QgeD1cIjAuNVwiIHdpZHRoPVwiODhcIiBoZWlnaHQ9XCI4OFwiIHJ4PVwiNDRcIiBmaWxsPVwiIzAxNjNCMlwiIGZpbGwtb3BhY2l0eT1cIjAuMTJcIiAvPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTQ0LjUgNTYuNjkzNkw1OC4wOTYgNjQuODk5Nkw1NC40ODggNDkuNDMzNkw2Ni41IDM5LjAyNzZMNTAuNjgyIDM3LjY4NTZMNDQuNSAyMy4wOTk2TDM4LjMxOCAzNy42ODU2TDIyLjUgMzkuMDI3NkwzNC41MTIgNDkuNDMzNkwzMC45MDQgNjQuODk5Nkw0NC41IDU2LjY5MzZaXCJcbiAgICAgIGZpbGw9XCIjMDE2M0IzXCIgLz5cbiAgICA8dGV4dCB4PVwiMTBcIiB5PVwiMTA1XCIgZmlsbD1cIiMwMTYzQjJcIj57e0xBTkcuTk9fUkVTVUxUfX08L3RleHQ+XG4gIDwvc3ZnPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbGlzdENoaXAgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LXR5cGU9XCJ0eXBlXCI+XG4gIDxtYXQtY2hpcC1zZXQgW0Bpbk91dEFuaW1hdGlvbl0gKm5nSWY9XCJkYXRhPy5sZW5ndGhcIiBjbGFzcz1cInBhbmVsX19pdGVtIHFtcy1zY3JvbGxiYXJcIj5cbiAgICA8ZGl2IFtAaW5PdXRBbmltYXRpb25fMl0gKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPG1hdC1jaGlwIChjbGljayk9XCJvblNjb2xsVG9Ob2RlVHJlZURlcGFydG1lbnQoaXRlbSlcIiBbQHVwZGF0ZUl0ZW1BbmltYXRpb25dXG4gICAgICAgICpxbXNDb250ZW50Q2hhbmdlcz1cIml0ZW0uY2hpbGRyZW4/Lmxlbmd0aFwiIGNsYXNzPVwiY2hpcC1pdGVtLXJlc3VsdFwiIHFtcy1jaGlwIFtyZW1vdmFibGVdPVwidHJ1ZVwiPlxuICAgICAgICA8c3BhbiBxbXMtY2hpcC1ib2R5PlxuICAgICAgICAgIDxzcGFuIFtxbXMtdG9vbC10aXBdPVwiZ2VuZXJhdGVUb29sdGlwKGl0ZW0pXCIgcG9zaXRpb249XCJ0b3BcIiBtb2RlPVwiZGFya1wiIGNsYXNzPVwidGV4dC1sYWJlbFwiPlxuICAgICAgICAgICAge3tpdGVtLm5hbWV9fVxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnN1Yk5hbWVcIj4oe3sgaXRlbS5zdWJOYW1lIH19KTwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwLWl0ZW0tY2hpbGRyZW5fX2NvdW50IG1zLTFcIiAqbmdJZj1cIml0ZW0/LmNoaWxkcmVuICYmIGl0ZW0/LmlzR3JvdXBcIj5cbiAgICAgICAgICAgIHt7aXRlbS5jaGlsZHJlbi5sZW5ndGh9fS97e2l0ZW0uY2hpbGRDb3VudH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlICpuZ0lmPVwiYWxsb3dSZW1vdmUodHlwZSwgaXRlbSlcIiAoY2xpY2spPVwib25SZW1vdmVDaGlwKHR5cGUsaXRlbSwgaSlcIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJyZW1vdmUtY2hpcC1pY29uXCI+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJhbGxvd1JlbW92ZSh0eXBlLCBpdGVtKSAmJiBkaWFsb2dEYXRhLmZvcm1hdE1zZ0Rpc2FibGVcIiBwb3NpdGlvbj1cInRvcFwiIG1vZGU9XCJkYXJrXCJcbiAgICAgICAgICAgIFtxbXMtdG9vbC10aXBdPVwiZGlhbG9nRGF0YS5mb3JtYXRNc2dEaXNhYmxlKGl0ZW0pXCIgY2xhc3M9XCJyZW1vdmUtY2hpcC1pY29uXCI+aW5mb19pPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gbWF0Q2hpcFJlbW92ZSAqbmdJZj1cIiFhbGxvd1JlbW92ZSh0eXBlLCBpdGVtKSAmJiBkaWFsb2dEYXRhLmZvcm1hdE1zZ0Rpc2FibGVcIlxuICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZUNoaXAodHlwZSxpdGVtLCBpKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInJlbW92ZS1jaGlwLWljb25cIj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFhbGxvd1JlbW92ZSh0eXBlLCBpdGVtKSAmJiBkaWFsb2dEYXRhLmZvcm1hdE1zZ0Rpc2FibGVcIiBwb3NpdGlvbj1cInRvcFwiIG1vZGU9XCJkYXJrXCJcbiAgICAgICAgICAgIFtxbXMtdG9vbC10aXBdPVwiZGlhbG9nRGF0YS5mb3JtYXRNc2dEaXNhYmxlKGl0ZW0pXCIgY2xhc3M9XCJyZW1vdmUtY2hpcC1pY29uXCI+aW5mb19pPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L21hdC1jaGlwPlxuICAgIDwvZGl2PlxuICA8L21hdC1jaGlwLXNldD5cbjwvbmctdGVtcGxhdGU+XG5cblxuPG5nLXRlbXBsYXRlICN2aWV3UmVzdWx0Q29sbGFwc2UgbGV0LXRpdGxlPVwidGl0bGVcIiBsZXQtZGF0YT1cImRhdGFcIiBsZXQtdHlwZT1cInR5cGVcIj5cbiAgPG1hdC1leHBhbnNpb24tcGFuZWwgcW1zLWV4cGFuc2lvbiBbZXhwYW5kZWRdPVwib3B0aW9uU2VsZWN0LnZhbHVlID09PSB0eXBlXCI+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLWNvbnRlbnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInFtcy1saXN0LXRleHRcIj5cbiAgICAgICAgICA8ZGl2IHFtcy1saW5lIGNvbG9yPVwiZGVmYXVsdC1zdWJ0aXRsZVwiPnt7dGl0bGV9fVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy02MDBcIj5cbiAgICAgICAgICAgICAgKHt7ZGF0YT8ubGVuZ3RofX0pXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RDaGlwXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntkYXRhOiBkYXRhLHR5cGU6IHR5cGV9XCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbVdpdGhvdXRDaGVja2JveFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC10eXBlPVwidHlwZVwiPlxuICA8ZGl2IChjbGljayk9XCJvblNlbGVjdEl0ZW0odHlwZSxpdGVtKVwiIGNsYXNzPVwiaXRlbS13aXRob3V0LWNoZWNrYm94IHctMTAwXCIgW2NsYXNzLmFjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCI+XG4gICAgPGRpdiBjbGFzcz1cIml0ZW0tY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtbGFiZWxcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxhYmVsIGxhYmVsLWl0ZW0gZnMtMTQgXCI+XG4gICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnN1Yk5hbWVcIiBjbGFzcz1cIm1zLTEgc3ViLWxhYmVsXCI+KHt7aXRlbS5zdWJOYW1lfX0pPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8c21hbGwgKm5nSWY9XCJpdGVtLmhlbHBUZXh0XCIgY2xhc3M9XCJ0ZXh0LWhlbHAgcHgtMSBmcy0xMiBzdWItbGFiZWxcIj57eyBpdGVtLmhlbHBUZXh0IH19PC9zbWFsbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaXRlbS1zdGF0ZVwiPlxuICAgICAgPG1hdC1pY29uIFtAaW5PdXRBbmltYXRpb25dICpuZ0lmPVwiaXRlbS5zZWxlY3RlZFwiPmNoZWNrPC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2l0ZW1DaGVja2JveFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC10eXBlPVwidHlwZVwiPlxuICA8bWF0LWNoZWNrYm94IFtkaXNhYmxlZF09XCIhYWxsb3dSZW1vdmUodHlwZSwgaXRlbSlcIiBbY2hlY2tlZF09XCJpdGVtLnNlbGVjdGVkXCIgKGNsaWNrKT1cIm9uU2VsZWN0SXRlbSh0eXBlLGl0ZW0pXCJcbiAgICBjbGFzcz1cInctMTAwXCIgY29sb3I9XCJkZWZhdWx0XCIgcW1zLWdyb3VwLW9wdGlvbnM+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtbGFiZWxcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbCBsYWJlbC1pdGVtIGZzLTE0IFwiPlxuICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zdWJOYW1lXCIgY2xhc3M9XCJtcy0xIHN1Yi1sYWJlbFwiPih7e2l0ZW0uc3ViTmFtZX19KTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8c21hbGwgKm5nSWY9XCJpdGVtLmhlbHBUZXh0XCIgY2xhc3M9XCJ0ZXh0LWhlbHAgcHgtMSBmcy0xMiBzdWItbGFiZWxcIj57eyBpdGVtLmhlbHBUZXh0IH19PC9zbWFsbD5cbiAgPC9tYXQtY2hlY2tib3g+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmc+XG4gIDxkaXYgY2xhc3M9XCJxbXMtbG9hZGluZy1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicW1zLWxvYWRlclwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFyclNrZWxldG9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicW1zLWxvYWRlcl9fd3JhcHBlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWxvYWRlclwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19