ngx-sp-infra 0.1.39 → 0.1.40

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.
@@ -491,7 +491,7 @@ export class ComboboxComponent {
491
491
  useExisting: forwardRef(() => ComboboxComponent),
492
492
  multi: true,
493
493
  },
494
- ], viewQueries: [{ propertyName: "availableOptions", predicate: ["availableOption"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"ngx-dropdown-container\" tabindex=\"0\">\n <button type=\"button\" tabindex=\"-1\" class=\"ngx-dropdown-button\" [ngClass]=\"{ 'ngx-disabled': disabled }\"\n [disabled]=\"disabled\" (click)=\"toggleSelectDropdown()\">\n <span class=\"display-text\">{{ selectedDisplayText }} </span>\n <span class=\"nsdicon-angle-down\"></span>\n </button>\n <div class=\"ngx-dropdown-list-container\" *ngIf=\"toggleDropdown\" [style.maxHeight]=\"config.height\">\n <div class=\"search-container d-flex justify-content-between\" *ngIf=\"config.search\">\n <input (change)=\"changeSearchText($event)\" [style.direction]=\"config.inputDirection\" name=\"search-text\"\n (input)=\"searchTextChanged()\" [(ngModel)]=\"searchText\" tabindex=\"-1\" autocomplete=\"off\" />\n <label [ngClass]=\"{ active: searchText }\">\n <span class=\"nsdicon-search\"></span>\n {{ config.searchPlaceholder }}</label>\n </div>\n <ul class=\"selected-items\">\n <li class=\"d-flex flex-row\" tabindex=\"-1\" *ngFor=\"let selected of selectedItems; let i = index\"\n (click)=\"deselectItem(selected, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\" checked=\"true\">\n <div style=\"margin-top: 2px;\">{{\n config.displayFn\n ? config.displayFn(selected)\n : selected[config.displayKey] || selected\n }}</div>\n </li>\n </ul>\n <hr *ngIf=\"selectedItems.length > 0 && availableItems.length > 0\" />\n <ul class=\"available-items\">\n <li class=\"d-flex flex-row\" #availableOption *ngFor=\"let item of availableItems | filterBy: searchText: config.searchOnKey\n\t\t\t| limitTo: config.limitTo; let i = index\" tabindex=\"-1\"\n [ngClass]=\"{ active: focusedItemIndex == i && !item.disabled, disabled: item.disabled }\"\n (click)=\"selectItem(item, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\">\n <div style=\"margin-top: 2px;\">\n {{ config.displayFn ? config.displayFn(item) : item[config.displayKey] || item }}\n </div>\n </li>\n <li *ngIf=\"showNotFound\">{{ config.noResultsFound }}</li>\n </ul>\n </div>\n</div>", styles: [".ngx-dropdown-container{width:100%;position:relative}.ngx-dropdown-container button{display:inline-block;margin-bottom:0;font-weight:400;line-height:1.42857143;vertical-align:middle;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #ccc;border-radius:4px;color:#333;background-color:#fff;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;text-align:left}.ngx-dropdown-container button span{display:inline;vertical-align:middle}.ngx-dropdown-container button .nsdicon-angle-down{right:5px;position:relative;float:right}.ngx-dropdown-container button .nsdicon-angle-down:before{border-style:solid;border-width:.1em .1em 0 0;content:\"\";display:inline-block;height:10px;position:relative;vertical-align:text-top;width:10px;top:0;transform:rotate(135deg)}.ngx-dropdown-container .ngx-dropdown-button{width:100%;min-height:30px;padding:5px 10px;background-color:#fff}.ngx-dropdown-container .ngx-dropdown-button .display-text{display:inline-block;width:calc(100% - 20px)}.ngx-dropdown-container .ngx-dropdown-list-container{box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:4px;padding-left:10px;padding-right:10px;z-index:999999999;width:100%;background-clip:padding-box;background:white;position:absolute;box-shadow:5px 5px 5px #00000036;overflow-y:auto}.ngx-dropdown-container .ngx-dropdown-list-container .search-container{position:relative;padding-top:10px;margin-top:5px}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:2rem;width:100%;font-size:13px;margin:0;padding:0;box-shadow:none;box-sizing:content-box;transition:all .3s}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus{border-bottom:1px solid #007bff}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus+label{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label{color:#9e9e9e;position:absolute;top:0;left:0;height:100%;font-size:1rem;cursor:text;transition:transform .2s ease-out;transform-origin:0% 100%;text-align:initial;transform:translateY(12px);pointer-events:none}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label.active{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container ul{margin-top:1rem;margin-bottom:1rem;list-style-type:none;padding-left:0}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li{margin-bottom:2px}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li .nsdicon-close{accent-color:#007bff;font-weight:700;font-size:large}.ngx-dropdown-container .ngx-dropdown-list-container ul.available-items li.active{background-color:#337ab7;color:#fff}.ngx-dropdown-container .ngx-dropdown-list-container ul li{font-size:inherit;cursor:pointer;display:block;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:normal}.ngx-dropdown-container .ngx-disabled{pointer-events:none;background-color:#e9ecef;opacity:1;cursor:no-drop}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i3.FilterByPipe, name: "filterBy" }, { kind: "pipe", type: i4.LimitToPipe, name: "limitTo" }] }); }
494
+ ], viewQueries: [{ propertyName: "availableOptions", predicate: ["availableOption"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"ngx-dropdown-container\" tabindex=\"0\">\n <button type=\"button\" tabindex=\"-1\" class=\"ngx-dropdown-button\" [ngClass]=\"{ 'ngx-disabled': disabled }\"\n [disabled]=\"disabled\" (click)=\"toggleSelectDropdown()\">\n <span class=\"display-text\">{{ selectedDisplayText }} </span>\n <span class=\"nsdicon-angle-down\"></span>\n </button>\n <div class=\"ngx-dropdown-list-container scroll-y\" *ngIf=\"toggleDropdown\" [style.maxHeight]=\"config.height\">\n <div class=\"search-container d-flex justify-content-between\" *ngIf=\"config.search\">\n <input (change)=\"changeSearchText($event)\" [style.direction]=\"config.inputDirection\" name=\"search-text\"\n (input)=\"searchTextChanged()\" [(ngModel)]=\"searchText\" tabindex=\"-1\" autocomplete=\"off\" />\n <label [ngClass]=\"{ active: searchText }\">\n <span class=\"nsdicon-search\"></span>\n {{ config.searchPlaceholder }}</label>\n </div>\n <ul class=\"selected-items\">\n <li class=\"d-flex flex-row\" tabindex=\"-1\" *ngFor=\"let selected of selectedItems; let i = index\"\n (click)=\"deselectItem(selected, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\" checked=\"true\">\n <div style=\"margin-top: 2px;\">{{\n config.displayFn\n ? config.displayFn(selected)\n : selected[config.displayKey] || selected\n }}</div>\n </li>\n </ul>\n <hr *ngIf=\"selectedItems.length > 0 && availableItems.length > 0\" />\n <ul class=\"available-items\">\n <li class=\"d-flex flex-row\" #availableOption *ngFor=\"let item of availableItems | filterBy: searchText: config.searchOnKey\n\t\t\t| limitTo: config.limitTo; let i = index\" tabindex=\"-1\"\n [ngClass]=\"{ active: focusedItemIndex == i && !item.disabled, disabled: item.disabled }\"\n (click)=\"selectItem(item, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\">\n <div style=\"margin-top: 2px;\">\n {{ config.displayFn ? config.displayFn(item) : item[config.displayKey] || item }}\n </div>\n </li>\n <li *ngIf=\"showNotFound\">{{ config.noResultsFound }}</li>\n </ul>\n </div>\n</div>\n", styles: [".ngx-dropdown-container{width:100%;position:relative}.ngx-dropdown-container button{display:inline-block;margin-bottom:0;font-weight:400;line-height:1.42857143;vertical-align:middle;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #ccc;border-radius:4px;color:#333;background-color:#fff;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;text-align:left}.ngx-dropdown-container button span{display:inline;vertical-align:middle}.ngx-dropdown-container button .nsdicon-angle-down{right:5px;position:relative;float:right}.ngx-dropdown-container button .nsdicon-angle-down:before{border-style:solid;border-width:.1em .1em 0 0;content:\"\";display:inline-block;height:10px;position:relative;vertical-align:text-top;width:10px;top:0;transform:rotate(135deg)}.ngx-dropdown-container .ngx-dropdown-button{width:100%;min-height:30px;padding:5px 10px;background-color:#fff}.ngx-dropdown-container .ngx-dropdown-button .display-text{display:inline-block;width:calc(100% - 20px)}.ngx-dropdown-container .ngx-dropdown-list-container{box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:4px;padding-left:10px;padding-right:10px;z-index:999999999;width:100%;background-clip:padding-box;background:white;position:absolute;box-shadow:5px 5px 5px #00000036;overflow-y:auto}.ngx-dropdown-container .ngx-dropdown-list-container .search-container{position:relative;padding-top:10px;margin-top:5px}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:2rem;width:100%;font-size:13px;margin:0;padding:0;box-shadow:none;box-sizing:content-box;transition:all .3s}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus{border-bottom:1px solid #007bff}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus+label{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label{color:#9e9e9e;position:absolute;top:0;left:0;height:100%;font-size:1rem;cursor:text;transition:transform .2s ease-out;transform-origin:0% 100%;text-align:initial;transform:translateY(12px);pointer-events:none}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label.active{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container ul{margin-top:1rem;margin-bottom:1rem;list-style-type:none;padding-left:0}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li{margin-bottom:2px}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li .nsdicon-close{accent-color:#007bff;font-weight:700;font-size:large}.ngx-dropdown-container .ngx-dropdown-list-container ul.available-items li.active{background-color:#337ab7;color:#fff}.ngx-dropdown-container .ngx-dropdown-list-container ul li{font-size:inherit;cursor:pointer;display:block;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:normal}.ngx-dropdown-container .ngx-disabled{pointer-events:none;background-color:#e9ecef;opacity:1;cursor:no-drop}.scroll-y{max-width:300px;overflow-y:scroll;overflow-x:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i3.FilterByPipe, name: "filterBy" }, { kind: "pipe", type: i4.LimitToPipe, name: "limitTo" }] }); }
495
495
  }
496
496
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: ComboboxComponent, decorators: [{
497
497
  type: Component,
@@ -501,7 +501,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
501
501
  useExisting: forwardRef(() => ComboboxComponent),
502
502
  multi: true,
503
503
  },
504
- ], template: "<div class=\"ngx-dropdown-container\" tabindex=\"0\">\n <button type=\"button\" tabindex=\"-1\" class=\"ngx-dropdown-button\" [ngClass]=\"{ 'ngx-disabled': disabled }\"\n [disabled]=\"disabled\" (click)=\"toggleSelectDropdown()\">\n <span class=\"display-text\">{{ selectedDisplayText }} </span>\n <span class=\"nsdicon-angle-down\"></span>\n </button>\n <div class=\"ngx-dropdown-list-container\" *ngIf=\"toggleDropdown\" [style.maxHeight]=\"config.height\">\n <div class=\"search-container d-flex justify-content-between\" *ngIf=\"config.search\">\n <input (change)=\"changeSearchText($event)\" [style.direction]=\"config.inputDirection\" name=\"search-text\"\n (input)=\"searchTextChanged()\" [(ngModel)]=\"searchText\" tabindex=\"-1\" autocomplete=\"off\" />\n <label [ngClass]=\"{ active: searchText }\">\n <span class=\"nsdicon-search\"></span>\n {{ config.searchPlaceholder }}</label>\n </div>\n <ul class=\"selected-items\">\n <li class=\"d-flex flex-row\" tabindex=\"-1\" *ngFor=\"let selected of selectedItems; let i = index\"\n (click)=\"deselectItem(selected, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\" checked=\"true\">\n <div style=\"margin-top: 2px;\">{{\n config.displayFn\n ? config.displayFn(selected)\n : selected[config.displayKey] || selected\n }}</div>\n </li>\n </ul>\n <hr *ngIf=\"selectedItems.length > 0 && availableItems.length > 0\" />\n <ul class=\"available-items\">\n <li class=\"d-flex flex-row\" #availableOption *ngFor=\"let item of availableItems | filterBy: searchText: config.searchOnKey\n\t\t\t| limitTo: config.limitTo; let i = index\" tabindex=\"-1\"\n [ngClass]=\"{ active: focusedItemIndex == i && !item.disabled, disabled: item.disabled }\"\n (click)=\"selectItem(item, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\">\n <div style=\"margin-top: 2px;\">\n {{ config.displayFn ? config.displayFn(item) : item[config.displayKey] || item }}\n </div>\n </li>\n <li *ngIf=\"showNotFound\">{{ config.noResultsFound }}</li>\n </ul>\n </div>\n</div>", styles: [".ngx-dropdown-container{width:100%;position:relative}.ngx-dropdown-container button{display:inline-block;margin-bottom:0;font-weight:400;line-height:1.42857143;vertical-align:middle;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #ccc;border-radius:4px;color:#333;background-color:#fff;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;text-align:left}.ngx-dropdown-container button span{display:inline;vertical-align:middle}.ngx-dropdown-container button .nsdicon-angle-down{right:5px;position:relative;float:right}.ngx-dropdown-container button .nsdicon-angle-down:before{border-style:solid;border-width:.1em .1em 0 0;content:\"\";display:inline-block;height:10px;position:relative;vertical-align:text-top;width:10px;top:0;transform:rotate(135deg)}.ngx-dropdown-container .ngx-dropdown-button{width:100%;min-height:30px;padding:5px 10px;background-color:#fff}.ngx-dropdown-container .ngx-dropdown-button .display-text{display:inline-block;width:calc(100% - 20px)}.ngx-dropdown-container .ngx-dropdown-list-container{box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:4px;padding-left:10px;padding-right:10px;z-index:999999999;width:100%;background-clip:padding-box;background:white;position:absolute;box-shadow:5px 5px 5px #00000036;overflow-y:auto}.ngx-dropdown-container .ngx-dropdown-list-container .search-container{position:relative;padding-top:10px;margin-top:5px}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:2rem;width:100%;font-size:13px;margin:0;padding:0;box-shadow:none;box-sizing:content-box;transition:all .3s}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus{border-bottom:1px solid #007bff}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus+label{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label{color:#9e9e9e;position:absolute;top:0;left:0;height:100%;font-size:1rem;cursor:text;transition:transform .2s ease-out;transform-origin:0% 100%;text-align:initial;transform:translateY(12px);pointer-events:none}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label.active{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container ul{margin-top:1rem;margin-bottom:1rem;list-style-type:none;padding-left:0}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li{margin-bottom:2px}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li .nsdicon-close{accent-color:#007bff;font-weight:700;font-size:large}.ngx-dropdown-container .ngx-dropdown-list-container ul.available-items li.active{background-color:#337ab7;color:#fff}.ngx-dropdown-container .ngx-dropdown-list-container ul li{font-size:inherit;cursor:pointer;display:block;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:normal}.ngx-dropdown-container .ngx-disabled{pointer-events:none;background-color:#e9ecef;opacity:1;cursor:no-drop}\n"] }]
504
+ ], template: "<div class=\"ngx-dropdown-container\" tabindex=\"0\">\n <button type=\"button\" tabindex=\"-1\" class=\"ngx-dropdown-button\" [ngClass]=\"{ 'ngx-disabled': disabled }\"\n [disabled]=\"disabled\" (click)=\"toggleSelectDropdown()\">\n <span class=\"display-text\">{{ selectedDisplayText }} </span>\n <span class=\"nsdicon-angle-down\"></span>\n </button>\n <div class=\"ngx-dropdown-list-container scroll-y\" *ngIf=\"toggleDropdown\" [style.maxHeight]=\"config.height\">\n <div class=\"search-container d-flex justify-content-between\" *ngIf=\"config.search\">\n <input (change)=\"changeSearchText($event)\" [style.direction]=\"config.inputDirection\" name=\"search-text\"\n (input)=\"searchTextChanged()\" [(ngModel)]=\"searchText\" tabindex=\"-1\" autocomplete=\"off\" />\n <label [ngClass]=\"{ active: searchText }\">\n <span class=\"nsdicon-search\"></span>\n {{ config.searchPlaceholder }}</label>\n </div>\n <ul class=\"selected-items\">\n <li class=\"d-flex flex-row\" tabindex=\"-1\" *ngFor=\"let selected of selectedItems; let i = index\"\n (click)=\"deselectItem(selected, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\" checked=\"true\">\n <div style=\"margin-top: 2px;\">{{\n config.displayFn\n ? config.displayFn(selected)\n : selected[config.displayKey] || selected\n }}</div>\n </li>\n </ul>\n <hr *ngIf=\"selectedItems.length > 0 && availableItems.length > 0\" />\n <ul class=\"available-items\">\n <li class=\"d-flex flex-row\" #availableOption *ngFor=\"let item of availableItems | filterBy: searchText: config.searchOnKey\n\t\t\t| limitTo: config.limitTo; let i = index\" tabindex=\"-1\"\n [ngClass]=\"{ active: focusedItemIndex == i && !item.disabled, disabled: item.disabled }\"\n (click)=\"selectItem(item, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\">\n <div style=\"margin-top: 2px;\">\n {{ config.displayFn ? config.displayFn(item) : item[config.displayKey] || item }}\n </div>\n </li>\n <li *ngIf=\"showNotFound\">{{ config.noResultsFound }}</li>\n </ul>\n </div>\n</div>\n", styles: [".ngx-dropdown-container{width:100%;position:relative}.ngx-dropdown-container button{display:inline-block;margin-bottom:0;font-weight:400;line-height:1.42857143;vertical-align:middle;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #ccc;border-radius:4px;color:#333;background-color:#fff;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;text-align:left}.ngx-dropdown-container button span{display:inline;vertical-align:middle}.ngx-dropdown-container button .nsdicon-angle-down{right:5px;position:relative;float:right}.ngx-dropdown-container button .nsdicon-angle-down:before{border-style:solid;border-width:.1em .1em 0 0;content:\"\";display:inline-block;height:10px;position:relative;vertical-align:text-top;width:10px;top:0;transform:rotate(135deg)}.ngx-dropdown-container .ngx-dropdown-button{width:100%;min-height:30px;padding:5px 10px;background-color:#fff}.ngx-dropdown-container .ngx-dropdown-button .display-text{display:inline-block;width:calc(100% - 20px)}.ngx-dropdown-container .ngx-dropdown-list-container{box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:4px;padding-left:10px;padding-right:10px;z-index:999999999;width:100%;background-clip:padding-box;background:white;position:absolute;box-shadow:5px 5px 5px #00000036;overflow-y:auto}.ngx-dropdown-container .ngx-dropdown-list-container .search-container{position:relative;padding-top:10px;margin-top:5px}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:2rem;width:100%;font-size:13px;margin:0;padding:0;box-shadow:none;box-sizing:content-box;transition:all .3s}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus{border-bottom:1px solid #007bff}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus+label{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label{color:#9e9e9e;position:absolute;top:0;left:0;height:100%;font-size:1rem;cursor:text;transition:transform .2s ease-out;transform-origin:0% 100%;text-align:initial;transform:translateY(12px);pointer-events:none}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label.active{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container ul{margin-top:1rem;margin-bottom:1rem;list-style-type:none;padding-left:0}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li{margin-bottom:2px}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li .nsdicon-close{accent-color:#007bff;font-weight:700;font-size:large}.ngx-dropdown-container .ngx-dropdown-list-container ul.available-items li.active{background-color:#337ab7;color:#fff}.ngx-dropdown-container .ngx-dropdown-list-container ul li{font-size:inherit;cursor:pointer;display:block;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:normal}.ngx-dropdown-container .ngx-disabled{pointer-events:none;background-color:#e9ecef;opacity:1;cursor:no-drop}.scroll-y{max-width:300px;overflow-y:scroll;overflow-x:hidden}\n"] }]
505
505
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { _value: [{
506
506
  type: Input
507
507
  }], options: [{
@@ -542,4 +542,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
542
542
  type: HostListener,
543
543
  args: ['keydown', ['$event']]
544
544
  }] } });
545
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQVUsS0FBSyxFQUN4QixZQUFZLEVBQ1osTUFBTSxFQUNOLFlBQVksRUFHWixZQUFZLEVBS1osVUFBVSxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBZXRELE1BQU0sT0FBTyxpQkFBaUI7SUFnRzdCLElBQUksS0FBSztRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUcsR0FBRztRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUUsR0FBRyxDQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxZQUNTLEtBQXdCLEVBQ3pCLFdBQXVCO1FBRHRCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3pCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBdEcvQjs7V0FFRztRQUNhLFlBQU8sR0FBUSxFQUFFLENBQUM7UUFFbEM7O1dBRUc7UUFDYSxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBRWpDOztXQUVHO1FBQ2EsYUFBUSxHQUFHLEtBQUssQ0FBQztRQU9qQzs7V0FFRztR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QkFLUyxJQUFJO3NCQUFsQyxZQUFZO3VCQUFFLE1BQU07Z0JBSVcsS0FBSztzQkFBcEMsWUFBWTt1QkFBRSxPQUFPO2dCQVdmLHFCQUFxQjtzQkFEM0IsWUFBWTt1QkFBRSxnQkFBZ0I7Z0JBa0J4Qix3QkFBd0I7c0JBRDlCLFlBQVk7dUJBQUUsa0JBQWtCO2dCQWMxQixtQkFBbUI7c0JBRHpCLFlBQVk7dUJBQUUsU0FBUyxFQUFFLENBQUUsUUFBUSxDQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LCBPbkluaXQsIElucHV0LFxuXHRFdmVudEVtaXR0ZXIsXG5cdE91dHB1dCxcblx0SG9zdExpc3RlbmVyLFxuXHRPbkNoYW5nZXMsXG5cdFNpbXBsZUNoYW5nZXMsXG5cdFZpZXdDaGlsZHJlbixcblx0RWxlbWVudFJlZixcblx0UXVlcnlMaXN0LFxuXHRBZnRlclZpZXdJbml0LFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0Zm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmlsdGVyQnlQaXBlIH0gZnJvbSAnLi9waXBlcy9maWx0ZXItYnkucGlwZSc7XG5cblxuQENvbXBvbmVudCgge1xuXHRzZWxlY3RvcjogJ2FwcC1jb21ib2JveCcsXG5cdHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWyAnLi9jb21ib2JveC5jb21wb25lbnQuc2NzcycgXSxcblx0cHJvdmlkZXJzOiBbXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZiggKCkgPT4gQ29tYm9ib3hDb21wb25lbnQgKSxcblx0XHRcdG11bHRpOiB0cnVlLFxuXHRcdH0sXG5cdF1cbn0gKVxuZXhwb3J0IGNsYXNzIENvbWJvYm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuXG5cdC8qKiB2YWx1ZSBvZiB0aGUgZHJvcGRvd24gKi9cblx0QElucHV0KCkgcHVibGljIF92YWx1ZTogYW55O1xuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHJlcXVpcmVkIGlucHV0c1xuXHQgKi9cblx0QElucHV0KCkgcHVibGljIG9wdGlvbnM6IGFueSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBjb25maWd1cmF0aW9uIG9wdGlvbnNcblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBjb25maWc6IGFueSA9IHt9O1xuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIG11bHRpcGxlIHNlbGVjdGlvbiBvciBzaW5nbGUgc2VsZWN0aW9uIGFsbG93ZWRcblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBtdWx0aXBsZSA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBWYWx1ZVxuXHQgKi9cblx0QElucHV0KCkgcHVibGljIGRpc2FibGVkOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBjaGFuZ2UgZXZlbnQgd2hlbiB2YWx1ZSBjaGFuZ2VzIHRvIHByb3ZpZGUgdXNlciB0byBoYW5kbGUgdGhpbmdzIGluIGNoYW5nZSBldmVudFxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBUaGUgc2VhcmNoIHRleHQgY2hhbmdlIGV2ZW50IGVtaXR0ZXIgZW1pdHRlZCB3aGVuIHVzZXIgdHlwZSBpbiB0aGUgc2VhcmNoIGlucHV0XG5cdCAqL1xuXHRAT3V0cHV0KCkgcHVibGljIHNlYXJjaENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkcm9wZG93biBpcyBvcGVuLlxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyBvcGVuOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIGRyb3Bkb3duIGlzIG9wZW4uXG5cdCAqL1xuXHRAT3V0cHV0KCkgcHVibGljIGNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogVG9vZ2xlIHRoZSBkcm9wZG93biBsaXN0XG5cdCAqL1xuXHRwdWJsaWMgdG9nZ2xlRHJvcGRvd24gPSBmYWxzZTtcblxuXHQvKipcblx0ICogQXZhaWxhYmxlIGl0ZW1zIGZvciBzZWxlY3Rpb25cblx0ICovXG5cdHB1YmxpYyBhdmFpbGFibGVJdGVtczogYW55ID0gW107XG5cblx0LyoqXG5cdCAqIFNlbGVjdGVkIEl0ZW1zXG5cdCAqL1xuXHRwdWJsaWMgc2VsZWN0ZWRJdGVtczogYW55ID0gW107XG5cblx0LyoqXG5cdCAqIFNlbGVjdGlvbiB0ZXh0IHRvIGJlIERpc3BsYXllZFxuXHQgKi9cblx0cHVibGljIHNlbGVjdGVkRGlzcGxheVRleHQgPSAnLSc7XG5cblx0LyoqXG5cdCAqIFNlYXJjaCB0ZXh0XG5cdCAqL1xuXHRwdWJsaWMgc2VhcmNoVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiB2YXJpYWJsZSB0byB0cmFjayBpZiBjbGlja2VkIGluc2lkZSBvciBvdXRzaWRlIG9mIGNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIGNsaWNrZWRJbnNpZGUgPSBmYWxzZTtcblxuXHQvKipcblx0ICogdmFyaWFibGUgdG8gdHJhY2sga2V5cHJlc3MgZXZlbnQgaW5zaWRlIGFuZCBvdXRzaWQgb2YgY29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgaW5zaWRlS2V5UHJlc3MgPSBmYWxzZTtcblxuXHQvKipcblx0ICogdmFyaWFibGUgdG8gdHJhY2sgdGhlIGZvY3VzZWQgaXRlbSB3aGVudXNlciB1c2VzIGFycm93IGtleXMgdG8gc2VsZWN0IGl0ZW1cblx0ICovXG5cdHB1YmxpYyBmb2N1c2VkSXRlbUluZGV4OiBudW1iZXIgfCBudWxsO1xuXG5cdC8qKlxuXHQgKiBlbGVtZW50IHRvIHNob3cgbm90IGZvdW5kIHRleHQgd2hlbiBub3QgaXRtZXMgbWF0Y2ggdGhlIHNlYXJjaFxuXHQgKi9cblxuXHRwdWJsaWMgc2hvd05vdEZvdW5kID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBIb2xkIHRoZSByZWZlcmVuY2UgdG8gYXZhaWxhYmxlIGl0ZW1zIGluIHRoZSBsaXN0IHRvIGZvY3VzIG9uIHRoZSBpdGVtIHdoZW4gc2Nyb2xsaW5nXG5cdCAqL1xuXHRAVmlld0NoaWxkcmVuKCAnYXZhaWxhYmxlT3B0aW9uJyApXG5cdHB1YmxpYyBhdmFpbGFibGVPcHRpb25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cblx0Z2V0IHZhbHVlICgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdmFsdWU7XG5cdH1cblx0c2V0IHZhbHVlICggdmFsICkge1xuXHRcdHRoaXMuX3ZhbHVlID0gdmFsO1xuXHRcdHRoaXMub25DaGFuZ2UoIHZhbCApO1xuXHRcdHRoaXMub25Ub3VjaGVkKCk7XG5cdH1cblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjZHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG5cdFx0cHVibGljIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmXG5cdCkge1xuXHRcdHRoaXMubXVsdGlwbGUgPSBmYWxzZTtcblx0fVxuXG5cdHB1YmxpYyBvbkNoYW5nZTogYW55ID0gKCkgPT4ge1xuXHRcdC8vIGVtcHR5XG5cdH1cblx0cHVibGljIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge1xuXHRcdC8vIGVtcHR5XG5cdH1cblxuXHQvKipcblx0ICogY2xpY2sgbGlzdGVuZXIgZm9yIGhvc3QgaW5zaWRlIHRoaXMgY29tcG9uZW50IGkuZVxuXHQgKiBpZiBtYW55IGluc3RhbmNlcyBhcmUgdGhlcmUsIHRoaXMgZGV0ZWN0cyBpZiBjbGlja2VkIGluc2lkZVxuXHQgKiB0aGlzIGluc3RhbmNlXG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKCAnY2xpY2snIClcblx0cHVibGljIGNsaWNrSW5zaWRlQ29tcG9uZW50ICgpIHtcblx0XHR0aGlzLmNsaWNrZWRJbnNpZGUgPSB0cnVlO1xuXHR9XG5cblx0QEhvc3RMaXN0ZW5lciggJ2JsdXInICkgcHVibGljIGJsdXIgKCkge1xuXHRcdHRoaXMudG9nZ2xlRHJvcGRvd24gPSBmYWxzZTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoICdmb2N1cycgKSBwdWJsaWMgZm9jdXMgKCkge1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCAhdGhpcy5kaXNhYmxlZCApXG5cdFx0e1xuXHRcdFx0dGhpcy50b2dnbGVTZWxlY3REcm9wZG93bigpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogY2xpY2sgaGFuZGxlciBvbiBkb2N1bW5lbnQgdG8gaGlkZSB0aGUgb3BlbiBkcm9wZG93biBpZiBjbGlja2VkIG91dHNpZGVcblx0ICovXG5cdEBIb3N0TGlzdGVuZXIoICdkb2N1bWVudDpjbGljaycgKVxuXHRwdWJsaWMgY2xpY2tPdXRzaWRlQ29tcG9uZW50ICgpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggIXRoaXMuY2xpY2tlZEluc2lkZSApXG5cdFx0e1xuXHRcdFx0dGhpcy50b2dnbGVEcm9wZG93biA9IGZhbHNlO1xuXHRcdFx0dGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuXHRcdFx0Ly8gY2xlYXIgc2Vhcmggb24gY2xvc2Vcblx0XHRcdHRoaXMuc2VhcmNoVGV4dCA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuY2xvc2UuZW1pdCgpO1xuXHRcdH1cblx0XHR0aGlzLmNsaWNrZWRJbnNpZGUgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBjbGljayBoYW5kbGVyIG9uIGRvY3VtbmVudCB0byBoaWRlIHRoZSBvcGVuIGRyb3Bkb3duIGlmIGNsaWNrZWQgb3V0c2lkZVxuXHQgKi9cblx0QEhvc3RMaXN0ZW5lciggJ2RvY3VtZW50OmtleWRvd24nIClcblx0cHVibGljIEtleVByZXNzT3V0c2lkZUNvbXBvbmVudCAoKSB7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICF0aGlzLmluc2lkZUtleVByZXNzIClcblx0XHR7XG5cdFx0XHR0aGlzLnRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cdFx0XHR0aGlzLnJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCk7XG5cdFx0fVxuXHRcdHRoaXMuaW5zaWRlS2V5UHJlc3MgPSBmYWxzZTtcblx0fVxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciBmb3Iga2V5IHVwIGFuZCBkb3duIGV2ZW50IGFuZCBlbnRlciBwcmVzcyBmb3Igc2VsZWN0aW5nIGVsZW1lbnRcblx0ICovXG5cdEBIb3N0TGlzdGVuZXIoICdrZXlkb3duJywgWyAnJGV2ZW50JyBdIClcblx0cHVibGljIGhhbmRsZUtleWJvYXJkRXZlbnQgKCAkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblx0XHR0aGlzLmluc2lkZUtleVByZXNzID0gdHJ1ZTtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggJGV2ZW50LmtleUNvZGUgPT09IDI3IHx8IHRoaXMuZGlzYWJsZWQgKVxuXHRcdHtcblx0XHRcdHRoaXMudG9nZ2xlRHJvcGRvd24gPSBmYWxzZTtcblx0XHRcdHRoaXMuaW5zaWRlS2V5UHJlc3MgPSBmYWxzZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgYXZhT3B0cyA9IHRoaXMuYXZhaWxhYmxlT3B0aW9ucy50b0FycmF5KCk7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICRldmVudC5rZXlDb2RlICE9PSA5ICYmIGF2YU9wdHMubGVuZ3RoID09PSAwICYmICF0aGlzLnRvZ2dsZURyb3Bkb3duIClcblx0XHR7XG5cdFx0XHR0aGlzLnRvZ2dsZURyb3Bkb3duID0gdHJ1ZTtcblx0XHR9XG5cdFx0Ly8gQXJyb3cgRG93blxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCAkZXZlbnQua2V5Q29kZSA9PT0gNDAgJiYgYXZhT3B0cy5sZW5ndGggPiAwIClcblx0XHR7XG5cdFx0XHR0aGlzLm9uQXJyb3dLZXlEb3duKCk7XG5cdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdFx0aWYgKCB0aGlzLmZvY3VzZWRJdGVtSW5kZXghID49IGF2YU9wdHMubGVuZ3RoIClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5mb2N1c2VkSXRlbUluZGV4ID0gMDtcblx0XHRcdH1cblx0XHRcdGF2YU9wdHNbIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCEgXS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHQkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdFx0Ly8gQXJyb3cgVXBcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggJGV2ZW50LmtleUNvZGUgPT09IDM4ICYmIGF2YU9wdHMubGVuZ3RoIClcblx0XHR7XG5cdFx0XHR0aGlzLm9uQXJyb3dLZXlVcCgpO1xuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRcdGlmICggdGhpcy5mb2N1c2VkSXRlbUluZGV4ISA+PSBhdmFPcHRzLmxlbmd0aCApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IGF2YU9wdHMubGVuZ3RoIC0gMTtcblx0XHRcdH1cblx0XHRcdGF2YU9wdHNbIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCEgXS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHQkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdFx0Ly8gRW50ZXJcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggJGV2ZW50LmtleUNvZGUgPT09IDEzICYmIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCAhPT0gbnVsbCApXG5cdFx0e1xuXHRcdFx0Y29uc3QgZmlsdGVyZWRJdGVtcyA9IG5ldyBGaWx0ZXJCeVBpcGUoKS50cmFuc2Zvcm0oXG5cdFx0XHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMsXG5cdFx0XHRcdHRoaXMuc2VhcmNoVGV4dCEsXG5cdFx0XHRcdHRoaXMuY29uZmlnLnNlYXJjaE9uS2V5XG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5zZWxlY3RJdGVtKFxuXHRcdFx0XHRmaWx0ZXJlZEl0ZW1zWyB0aGlzLmZvY3VzZWRJdGVtSW5kZXggXSxcblx0XHRcdFx0dGhpcy5hdmFpbGFibGVJdGVtcy5pbmRleE9mKCBmaWx0ZXJlZEl0ZW1zWyB0aGlzLmZvY3VzZWRJdGVtSW5kZXggXSApXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiAkZXZlbnQua2V5XG5cdFx0XG5cdH1cblxuXHQvKipcblx0ICogQ29tcG9uZW50IG9uSW5pdFxuXHQgKi9cblx0cHVibGljIG5nT25Jbml0ICgpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggdHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgQXJyYXkuaXNBcnJheSggdGhpcy5vcHRpb25zICkgKVxuXHRcdHtcblx0XHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbXG5cdFx0XHRcdC4uLnRoaXMub3B0aW9ucy5zb3J0KCB0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yICksXG5cdFx0XHRdO1xuXHRcdFx0dGhpcy5pbml0RHJvcGRvd25WYWx1ZXNBbmRPcHRpb25zKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIGFmdGVyIHZpZXcgaW5pdCB0byBzdWJzY3JpYmUgdG8gYXZhaWxhYmxlIG9wdGlvbiBjaGFuZ2VzXG5cdCAqL1xuXHRwdWJsaWMgbmdBZnRlclZpZXdJbml0ICgpIHtcblx0XHR0aGlzLmF2YWlsYWJsZU9wdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUoIHRoaXMuc2V0Tm90Rm91bmRTdGF0ZS5iaW5kKCB0aGlzICkgKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlICggZm46IGFueSApIHtcblx0XHR0aGlzLm9uQ2hhbmdlID0gZm47XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQgKCBmbjogYW55ICkge1xuXHRcdHRoaXMub25Ub3VjaGVkID0gZm47XG5cdH1cblxuXHRwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZSAoIGlzRGlzYWJsZWQ6IGJvb2xlYW4gKSB7XG5cdFx0dGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cdH1cblxuXHRwdWJsaWMgd3JpdGVWYWx1ZSAoIHZhbHVlOiBhbnksIGludGVybmFsPzogYm9vbGVhbiApIHtcblx0XHRpZiAoIHZhbHVlIClcblx0XHR7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoIHRoaXMubXVsdGlwbGUgKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZS5sZW5ndGggPiAwIClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRoaXMudmFsdWUgPSB2YWx1ZVsgMCBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRcdGlmICggdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCApXG5cdFx0XHR7XG5cdFx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Vcblx0XHR7XG5cdFx0XHR0aGlzLnZhbHVlID0gW107XG5cdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdFx0aWYgKCAhaW50ZXJuYWwgKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLnJlc2V0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCAhaW50ZXJuYWwgKVxuXHRcdHtcblx0XHRcdHRoaXMucmVzZXQoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgcmVzZXQgKCkge1xuXHRcdHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuXHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbIC4uLnRoaXMub3B0aW9ucy5zb3J0KCB0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yICkgXTtcblx0XHR0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcblx0fVxuXHQvKipcblx0ICogZnVuY3Rpb24gc2V0cyB3aGV0aGVyIHRvIHNob3cgaXRlbXMgbm90IGZvdW5kIHRleHQgb3Igbm90XG5cdCAqL1xuXHRwdWJsaWMgc2V0Tm90Rm91bmRTdGF0ZSAoKSB7XG5cdFx0aWYgKCB0aGlzLmF2YWlsYWJsZU9wdGlvbnMubGVuZ3RoID09PSAwIClcblx0XHR7XG5cdFx0XHR0aGlzLnNob3dOb3RGb3VuZCA9IHRydWU7XG5cdFx0fSBlbHNlXG5cdFx0e1xuXHRcdFx0dGhpcy5zaG93Tm90Rm91bmQgPSBmYWxzZTtcblx0XHR9XG5cdFx0dGhpcy5jZHJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdH1cblx0LyoqXG5cdCAqIENvbXBvbmVudCBvbmNoYWdlIGkuZSB3aGVuIGFueSBvZiB0aGUgaW5wdXQgcHJvcGVydGllcyBjaGFuZ2Vcblx0ICovXG5cdHB1YmxpYyBuZ09uQ2hhbmdlcyAoIGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMgKSB7XG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG5cdFx0Ly8gdGhpcy5zZWFyY2hUZXh0ID0gbnVsbDtcblx0XHR0aGlzLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgfHwgW107XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIGNoYW5nZXNbICdvcHRpb25zJyBdIClcblx0XHR7XG5cdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zID0gW1xuXHRcdFx0XHQuLi50aGlzLm9wdGlvbnMuc29ydCggdGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvciApLFxuXHRcdFx0XTtcblx0XHR9XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIGNoYW5nZXNbICd2YWx1ZScgXSApXG5cdFx0e1xuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRcdGlmIChcblx0XHRcdFx0SlNPTi5zdHJpbmdpZnkoIGNoYW5nZXNbICd2YWx1ZScgXS5jdXJyZW50VmFsdWUgKSA9PT0gSlNPTi5zdHJpbmdpZnkoIFtdICkgfHxcblx0XHRcdFx0Y2hhbmdlc1sgJ3ZhbHVlJyBdLmN1cnJlbnRWYWx1ZSA9PT0gJycgfHxcblx0XHRcdFx0Y2hhbmdlc1sgJ3ZhbHVlJyBdLmN1cnJlbnRWYWx1ZSA9PT0gbnVsbFxuXHRcdFx0KVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zID0gW1xuXHRcdFx0XHRcdC4uLnRoaXMub3B0aW9ucy5zb3J0KCB0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yICksXG5cdFx0XHRcdF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuaW5pdERyb3Bkb3duVmFsdWVzQW5kT3B0aW9ucygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlc2VsY3QgYSBzZWxlY3RlZCBpdGVtc1xuXHQgKiBAcGFyYW0gaXRlbTogIGl0ZW0gdG8gYmUgZGVzZWxlY3RlZFxuXHQgKiBAcGFyYW0gaW5kZXg6ICBpbmRleCBvZiB0aGUgaXRlbVxuXHQgKi9cblx0cHVibGljIGRlc2VsZWN0SXRlbSAoIGl0ZW06IGFueSwgaW5kZXg6IG51bWJlciApIHtcblx0XHR0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaCggKCBlbGVtZW50OiBhbnksIGk6IG51bWJlciApID0+IHtcblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0XHRpZiAoIGl0ZW0gPT09IGVsZW1lbnQgKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdGxldCBzb3J0ZWRJdGVtcyA9IFsgLi4udGhpcy5hdmFpbGFibGVJdGVtcyBdO1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCAhdGhpcy5hdmFpbGFibGVJdGVtcy5pbmNsdWRlcyggaXRlbSApIClcblx0XHR7XG5cdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zLnB1c2goIGl0ZW0gKTtcblx0XHRcdHNvcnRlZEl0ZW1zID0gdGhpcy5hdmFpbGFibGVJdGVtcy5zb3J0KCB0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yICk7XG5cdFx0fVxuXHRcdHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFsgLi4udGhpcy5zZWxlY3RlZEl0ZW1zIF07XG5cdFx0dGhpcy5hdmFpbGFibGVJdGVtcyA9IFsgLi4uc29ydGVkSXRlbXMgXTtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggIUFycmF5LmlzQXJyYXkoIHRoaXMudmFsdWUgKSApXG5cdFx0e1xuXHRcdFx0dGhpcy52YWx1ZSA9IFtdO1xuXHRcdH1cblx0XHR0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuXHRcdHRoaXMucmVzZXRBcnJvd0tleUFjdGl2ZUVsZW1lbnQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZWxlY3QgYW4gaXRlbVxuXHQgKiBAcGFyYW0gaXRlbTogIGl0ZW0gdG8gYmUgc2VsZWN0ZWRcblx0ICogQHBhcmFtIGluZGV4OiAgaW5kZXggb2YgdGhlIGl0ZW1cblx0ICovXG5cdHB1YmxpYyBzZWxlY3RJdGVtICggaXRlbTogc3RyaW5nLCBpbmRleD86IG51bWJlciApIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggIXRoaXMubXVsdGlwbGUgKVxuXHRcdHtcblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0XHRpZiAoIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwIClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5hdmFpbGFibGVJdGVtcy5wdXNoKCB0aGlzLnNlbGVjdGVkSXRlbXNbIDAgXSApO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG5cdFx0XHR0aGlzLnRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5hdmFpbGFibGVJdGVtcy5mb3JFYWNoKCAoIGVsZW1lbnQ6IGFueSwgaTogbnVtYmVyICkgPT4ge1xuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRcdGlmICggaXRlbSA9PT0gZWxlbWVudCApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKCBpdGVtICk7XG5cdFx0XHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIHRoaXMuY29uZmlnLmNsZWFyT25TZWxlY3Rpb24gKVxuXHRcdHtcblx0XHRcdHRoaXMuc2VhcmNoVGV4dCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSBbIC4uLnRoaXMuc2VsZWN0ZWRJdGVtcyBdO1xuXHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbIC4uLnRoaXMuYXZhaWxhYmxlSXRlbXMgXTtcblx0XHR0aGlzLnNlbGVjdGVkSXRlbXMuc29ydCggdGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvciApO1xuXHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMuc29ydCggdGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvciApO1xuXHRcdC8vIHRoaXMuc2VhcmNoVGV4dCA9IG51bGw7XG5cdFx0dGhpcy52YWx1ZUNoYW5nZWQoKTtcblx0XHR0aGlzLnJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICogV2hlbiBzZWxlY3RlZCBpdGVtcyBjaGFuZ2VzIHRyaWdnZXIgdGhlIGNoYWFuZ2UgYmFjayB0byBwYXJlbnRcblx0ICovXG5cdHB1YmxpYyB2YWx1ZUNoYW5nZWQgKCkge1xuXHRcdHRoaXMud3JpdGVWYWx1ZSggdGhpcy5zZWxlY3RlZEl0ZW1zLCB0cnVlICk7XG5cdFx0Ly8gdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuXHRcdHRoaXMuY2hhbmdlLmVtaXQoIHsgdmFsdWU6IHRoaXMudmFsdWUgfSApO1xuXHRcdHRoaXMuc2V0U2VsZWN0ZWREaXNwbGF5VGV4dCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvZ2dsZSB0aGUgZHJvcGRvd25saXN0IG9uL29mZlxuXHQgKi9cblx0cHVibGljIHRvZ2dsZVNlbGVjdERyb3Bkb3duICgpIHtcblx0XHR0aGlzLnRvZ2dsZURyb3Bkb3duID0gIXRoaXMudG9nZ2xlRHJvcGRvd247XG5cdFx0aWYgKCB0aGlzLnRvZ2dsZURyb3Bkb3duIClcblx0XHR7XG5cdFx0XHR0aGlzLm9wZW4uZW1pdCgpO1xuXHRcdH0gZWxzZVxuXHRcdHtcblx0XHRcdHRoaXMuc2VhcmNoVGV4dCA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuY2xvc2UuZW1pdCgpO1xuXHRcdH1cblx0XHR0aGlzLnJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGNoYW5nZSBoYW5kbGVyIGZvciBzZWFyY2ggdGV4dFxuXHQgKi9cblx0cHVibGljIHNlYXJjaFRleHRDaGFuZ2VkICgpIHtcblx0XHR0aGlzLnNlYXJjaENoYW5nZS5lbWl0KCB0aGlzLnNlYXJjaFRleHQgKTtcblx0fVxuXG5cdHB1YmxpYyBjaGFuZ2VTZWFyY2hUZXh0ICggJGV2ZW50OiBhbnkgKSB7XG5cdFx0JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIGluaXRpYWxpemUgdGhlIGNvbmZpZyBhbmQgb3RoZXIgcHJvcGVydGllc1xuXHQgKi9cblx0cHJpdmF0ZSBpbml0RHJvcGRvd25WYWx1ZXNBbmRPcHRpb25zICgpIHtcblx0XHRjb25zdCBjb25maWc6IGFueSA9IHtcblx0XHRcdGRpc3BsYXlLZXk6ICdkZXNjcmlwdGlvbicsXG5cdFx0XHRoZWlnaHQ6ICdhdXRvJyxcblx0XHRcdHNlYXJjaDogZmFsc2UsXG5cdFx0XHRwbGFjZWhvbGRlcjogJy0nLFxuXHRcdFx0c2VhcmNoUGxhY2Vob2xkZXI6ICdQZXNxdWlzYXIgJyxcblx0XHRcdGxpbWl0VG86IDAsXG5cdFx0XHRjdXN0b21Db21wYXJhdG9yOiB1bmRlZmluZWQsXG5cdFx0XHRub1Jlc3VsdHNGb3VuZDogJ05hZGEgZW5jb250cmFkbyEnLFxuXHRcdFx0bW9yZVRleHQ6ICdTZWxlY2lvbmFkb3MnLFxuXHRcdFx0c2VhcmNoT25LZXk6IG51bGwsXG5cdFx0XHRjbGVhck9uU2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdGlucHV0RGlyZWN0aW9uOiAnbHRyJyxcblx0XHR9O1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0aGlzLmNvbmZpZyA9PT0gJ3VuZGVmaW5lZCcgfHwgT2JqZWN0LmtleXMoIHRoaXMuY29uZmlnICkubGVuZ3RoID09PSAwIClcblx0XHR7XG5cdFx0XHR0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnIH07XG5cdFx0fVxuXHRcdGZvciAoIGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyggY29uZmlnICkgKVxuXHRcdHtcblx0XHRcdHRoaXMuY29uZmlnWyBrZXkgXSA9IHRoaXMuY29uZmlnWyBrZXkgXSA/IHRoaXMuY29uZmlnWyBrZXkgXSA6IGNvbmZpZ1sga2V5IF07XG5cdFx0fVxuXHRcdHRoaXMuY29uZmlnID0geyAuLi50aGlzLmNvbmZpZyB9O1xuXHRcdC8vIEFkZGluZyBwbGFjZWhvbGRlciBpbiBjb25maWcgYXMgZGVmYXVsdCBwYXJhbVxuXHRcdHRoaXMuc2VsZWN0ZWREaXNwbGF5VGV4dCA9IHRoaXMuY29uZmlnWyAncGxhY2Vob2xkZXInIF07XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIHRoaXMudmFsdWUgIT09ICcnICYmIHR5cGVvZiB0aGlzLnZhbHVlICE9PSAndW5kZWZpbmVkJyApXG5cdFx0e1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB0aGlzLnZhbHVlICkgKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmICggdGhpcy52YWx1ZSAhPT0gJycgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtc1sgMCBdID0gdGhpcy52YWx1ZTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IFtdO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaCggKCBpdGVtOiBhbnkgKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGluZCA9IHRoaXMuYXZhaWxhYmxlSXRlbXMuZmluZEluZGV4KFxuXHRcdFx0XHRcdCggYUl0ZW06IGFueSApID0+IEpTT04uc3RyaW5naWZ5KCBpdGVtICkgPT09IEpTT04uc3RyaW5naWZ5KCBhSXRlbSApXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICggaW5kICE9PSAtMSApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zLnNwbGljZSggaW5kLCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cdFx0dGhpcy5zZXRTZWxlY3RlZERpc3BsYXlUZXh0KCk7XG5cdH1cblxuXHQvKipcblx0ICogc2V0IHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxuXHQgKi9cblx0cHJpdmF0ZSBzZXRTZWxlY3RlZERpc3BsYXlUZXh0ICgpIHtcblx0XHRsZXQgdGV4dDogc3RyaW5nID0gdGhpcy5zZWxlY3RlZEl0ZW1zWyAwIF07XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIHR5cGVvZiB0aGlzLnNlbGVjdGVkSXRlbXNbIDAgXSA9PT0gJ29iamVjdCcgKVxuXHRcdHtcblx0XHRcdHRleHQgPSB0aGlzLmNvbmZpZy5kaXNwbGF5Rm5cblx0XHRcdFx0PyB0aGlzLmNvbmZpZy5kaXNwbGF5Rm4oIHRoaXMuc2VsZWN0ZWRJdGVtc1sgMCBdIClcblx0XHRcdFx0OiB0aGlzLnNlbGVjdGVkSXRlbXNbIDAgXVsgdGhpcy5jb25maWcuZGlzcGxheUtleSBdO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMubXVsdGlwbGUgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgKVxuXHRcdHtcblx0XHRcdHRoaXMuc2VsZWN0ZWREaXNwbGF5VGV4dCA9XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDFcblx0XHRcdFx0XHQ/IHRleHRcblx0XHRcdFx0XHQ6IHRleHQgK1xuXHRcdFx0XHRcdGAgKyAkeyB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMSB9ICR7IHRoaXMuY29uZmlnLm1vcmVUZXh0IH1gO1xuXHRcdH0gZWxzZVxuXHRcdHtcblx0XHRcdHRoaXMuc2VsZWN0ZWREaXNwbGF5VGV4dCA9XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDAgPyB0aGlzLmNvbmZpZy5wbGFjZWhvbGRlciA6IHRleHQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgZm9yIGFycm93IGtleSB1cCBldmVudCB0aGF0cyBmb2N1c2VzIG9uIGEgaXRlbVxuXHQgKi9cblx0cHJpdmF0ZSBvbkFycm93S2V5VXAgKCkge1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0aGlzLmZvY3VzZWRJdGVtSW5kZXggPT09IDAgKVxuXHRcdHtcblx0XHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IHRoaXMuYXZhaWxhYmxlSXRlbXMubGVuZ3RoIC0gMTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIHRoaXMub25BcnJvd0tleSgpIClcblx0XHR7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXghO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIGZvciBhcnJvdyBrZXkgZG93biBldmVudCB0aGF0cyBmb2N1c2VzIG9uIGEgaXRlbVxuXHQgKi9cblx0cHJpdmF0ZSBvbkFycm93S2V5RG93biAoKSB7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9PT0gdGhpcy5hdmFpbGFibGVJdGVtcy5sZW5ndGggLSAxIClcblx0XHR7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSAwO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggdGhpcy5vbkFycm93S2V5KCkgKVxuXHRcdHtcblx0XHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCErKztcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG9uQXJyb3dLZXkgKCkge1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0aGlzLmZvY3VzZWRJdGVtSW5kZXggPT09IG51bGwgKVxuXHRcdHtcblx0XHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IDA7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIHdpbGwgcmVzZXQgdGhlIGVsZW1lbnQgdGhhdCBpcyBtYXJrZWQgYWN0aXZlIHVzaW5nIGFycm93IGtleXNcblx0ICovXG5cdHByaXZhdGUgcmVzZXRBcnJvd0tleUFjdGl2ZUVsZW1lbnQgKCkge1xuXHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IG51bGw7XG5cdH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJuZ3gtZHJvcGRvd24tY29udGFpbmVyXCIgdGFiaW5kZXg9XCIwXCI+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm5neC1kcm9wZG93bi1idXR0b25cIiBbbmdDbGFzc109XCJ7ICduZ3gtZGlzYWJsZWQnOiBkaXNhYmxlZCB9XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAoY2xpY2spPVwidG9nZ2xlU2VsZWN0RHJvcGRvd24oKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZGlzcGxheS10ZXh0XCI+e3sgc2VsZWN0ZWREaXNwbGF5VGV4dCB9fSA8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJuc2RpY29uLWFuZ2xlLWRvd25cIj48L3NwYW4+XG4gIDwvYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwibmd4LWRyb3Bkb3duLWxpc3QtY29udGFpbmVyXCIgKm5nSWY9XCJ0b2dnbGVEcm9wZG93blwiIFtzdHlsZS5tYXhIZWlnaHRdPVwiY29uZmlnLmhlaWdodFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiICpuZ0lmPVwiY29uZmlnLnNlYXJjaFwiPlxuICAgICAgPGlucHV0IChjaGFuZ2UpPVwiY2hhbmdlU2VhcmNoVGV4dCgkZXZlbnQpXCIgW3N0eWxlLmRpcmVjdGlvbl09XCJjb25maWcuaW5wdXREaXJlY3Rpb25cIiBuYW1lPVwic2VhcmNoLXRleHRcIlxuICAgICAgICAoaW5wdXQpPVwic2VhcmNoVGV4dENoYW5nZWQoKVwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIHRhYmluZGV4PVwiLTFcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxuICAgICAgPGxhYmVsIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBzZWFyY2hUZXh0IH1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuc2RpY29uLXNlYXJjaFwiPjwvc3Bhbj5cbiAgICAgICAge3sgY29uZmlnLnNlYXJjaFBsYWNlaG9sZGVyIH19PC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8dWwgY2xhc3M9XCJzZWxlY3RlZC1pdGVtc1wiPlxuICAgICAgPGxpIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93XCIgdGFiaW5kZXg9XCItMVwiICpuZ0Zvcj1cImxldCBzZWxlY3RlZCBvZiBzZWxlY3RlZEl0ZW1zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgKGNsaWNrKT1cImRlc2VsZWN0SXRlbShzZWxlY3RlZCwgaSlcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjayBuc2RpY29uLWNsb3NlIG1lLTJcIiBjaGVja2VkPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMnB4O1wiPnt7XG4gICAgICAgICAgY29uZmlnLmRpc3BsYXlGblxuICAgICAgICAgID8gY29uZmlnLmRpc3BsYXlGbihzZWxlY3RlZClcbiAgICAgICAgICA6IHNlbGVjdGVkW2NvbmZpZy5kaXNwbGF5S2V5XSB8fCBzZWxlY3RlZFxuICAgICAgICAgIH19PC9kaXY+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gICAgPGhyICpuZ0lmPVwic2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwICYmIGF2YWlsYWJsZUl0ZW1zLmxlbmd0aCA+IDBcIiAvPlxuICAgIDx1bCBjbGFzcz1cImF2YWlsYWJsZS1pdGVtc1wiPlxuICAgICAgPGxpIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93XCIgI2F2YWlsYWJsZU9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhdmFpbGFibGVJdGVtcyB8IGZpbHRlckJ5OiBzZWFyY2hUZXh0OiBjb25maWcuc2VhcmNoT25LZXlcblx0XHRcdHwgbGltaXRUbzogY29uZmlnLmxpbWl0VG87IGxldCBpID0gaW5kZXhcIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGZvY3VzZWRJdGVtSW5kZXggPT0gaSAmJiAhaXRlbS5kaXNhYmxlZCwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfVwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RJdGVtKGl0ZW0sIGkpXCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2sgbnNkaWNvbi1jbG9zZSBtZS0yXCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAycHg7XCI+XG4gICAgICAgICAge3sgY29uZmlnLmRpc3BsYXlGbiA/IGNvbmZpZy5kaXNwbGF5Rm4oaXRlbSkgOiBpdGVtW2NvbmZpZy5kaXNwbGF5S2V5XSB8fCBpdGVtIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICAgIDxsaSAqbmdJZj1cInNob3dOb3RGb3VuZFwiPnt7IGNvbmZpZy5ub1Jlc3VsdHNGb3VuZCB9fTwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
545
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQVUsS0FBSyxFQUN4QixZQUFZLEVBQ1osTUFBTSxFQUNOLFlBQVksRUFHWixZQUFZLEVBS1osVUFBVSxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7O0FBZXRELE1BQU0sT0FBTyxpQkFBaUI7SUFnRzdCLElBQUksS0FBSztRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUcsR0FBRztRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUUsR0FBRyxDQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxZQUNTLEtBQXdCLEVBQ3pCLFdBQXVCO1FBRHRCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3pCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBdEcvQjs7V0FFRztRQUNhLFlBQU8sR0FBUSxFQUFFLENBQUM7UUFFbEM7O1dBRUc7UUFDYSxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBRWpDOztXQUVHO1FBQ2EsYUFBUSxHQUFHLEtBQUssQ0FBQztRQU9qQzs7V0FFRztR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QkFLUyxJQUFJO3NCQUFsQyxZQUFZO3VCQUFFLE1BQU07Z0JBSVcsS0FBSztzQkFBcEMsWUFBWTt1QkFBRSxPQUFPO2dCQVdmLHFCQUFxQjtzQkFEM0IsWUFBWTt1QkFBRSxnQkFBZ0I7Z0JBa0J4Qix3QkFBd0I7c0JBRDlCLFlBQVk7dUJBQUUsa0JBQWtCO2dCQWMxQixtQkFBbUI7c0JBRHpCLFlBQVk7dUJBQUUsU0FBUyxFQUFFLENBQUUsUUFBUSxDQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LCBPbkluaXQsIElucHV0LFxuXHRFdmVudEVtaXR0ZXIsXG5cdE91dHB1dCxcblx0SG9zdExpc3RlbmVyLFxuXHRPbkNoYW5nZXMsXG5cdFNpbXBsZUNoYW5nZXMsXG5cdFZpZXdDaGlsZHJlbixcblx0RWxlbWVudFJlZixcblx0UXVlcnlMaXN0LFxuXHRBZnRlclZpZXdJbml0LFxuXHRDaGFuZ2VEZXRlY3RvclJlZixcblx0Zm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmlsdGVyQnlQaXBlIH0gZnJvbSAnLi9waXBlcy9maWx0ZXItYnkucGlwZSc7XG5cblxuQENvbXBvbmVudCgge1xuXHRzZWxlY3RvcjogJ2FwcC1jb21ib2JveCcsXG5cdHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWyAnLi9jb21ib2JveC5jb21wb25lbnQuc2NzcycgXSxcblx0cHJvdmlkZXJzOiBbXG5cdFx0e1xuXHRcdFx0cHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG5cdFx0XHR1c2VFeGlzdGluZzogZm9yd2FyZFJlZiggKCkgPT4gQ29tYm9ib3hDb21wb25lbnQgKSxcblx0XHRcdG11bHRpOiB0cnVlLFxuXHRcdH0sXG5cdF1cbn0gKVxuZXhwb3J0IGNsYXNzIENvbWJvYm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuXG5cdC8qKiB2YWx1ZSBvZiB0aGUgZHJvcGRvd24gKi9cblx0QElucHV0KCkgcHVibGljIF92YWx1ZTogYW55O1xuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHJlcXVpcmVkIGlucHV0c1xuXHQgKi9cblx0QElucHV0KCkgcHVibGljIG9wdGlvbnM6IGFueSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBjb25maWd1cmF0aW9uIG9wdGlvbnNcblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBjb25maWc6IGFueSA9IHt9O1xuXG5cdC8qKlxuXHQgKiBXaGV0aGVyIG11bHRpcGxlIHNlbGVjdGlvbiBvciBzaW5nbGUgc2VsZWN0aW9uIGFsbG93ZWRcblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBtdWx0aXBsZSA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBWYWx1ZVxuXHQgKi9cblx0QElucHV0KCkgcHVibGljIGRpc2FibGVkOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBjaGFuZ2UgZXZlbnQgd2hlbiB2YWx1ZSBjaGFuZ2VzIHRvIHByb3ZpZGUgdXNlciB0byBoYW5kbGUgdGhpbmdzIGluIGNoYW5nZSBldmVudFxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBUaGUgc2VhcmNoIHRleHQgY2hhbmdlIGV2ZW50IGVtaXR0ZXIgZW1pdHRlZCB3aGVuIHVzZXIgdHlwZSBpbiB0aGUgc2VhcmNoIGlucHV0XG5cdCAqL1xuXHRAT3V0cHV0KCkgcHVibGljIHNlYXJjaENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkcm9wZG93biBpcyBvcGVuLlxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyBvcGVuOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIGRyb3Bkb3duIGlzIG9wZW4uXG5cdCAqL1xuXHRAT3V0cHV0KCkgcHVibGljIGNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogVG9vZ2xlIHRoZSBkcm9wZG93biBsaXN0XG5cdCAqL1xuXHRwdWJsaWMgdG9nZ2xlRHJvcGRvd24gPSBmYWxzZTtcblxuXHQvKipcblx0ICogQXZhaWxhYmxlIGl0ZW1zIGZvciBzZWxlY3Rpb25cblx0ICovXG5cdHB1YmxpYyBhdmFpbGFibGVJdGVtczogYW55ID0gW107XG5cblx0LyoqXG5cdCAqIFNlbGVjdGVkIEl0ZW1zXG5cdCAqL1xuXHRwdWJsaWMgc2VsZWN0ZWRJdGVtczogYW55ID0gW107XG5cblx0LyoqXG5cdCAqIFNlbGVjdGlvbiB0ZXh0IHRvIGJlIERpc3BsYXllZFxuXHQgKi9cblx0cHVibGljIHNlbGVjdGVkRGlzcGxheVRleHQgPSAnLSc7XG5cblx0LyoqXG5cdCAqIFNlYXJjaCB0ZXh0XG5cdCAqL1xuXHRwdWJsaWMgc2VhcmNoVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiB2YXJpYWJsZSB0byB0cmFjayBpZiBjbGlja2VkIGluc2lkZSBvciBvdXRzaWRlIG9mIGNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIGNsaWNrZWRJbnNpZGUgPSBmYWxzZTtcblxuXHQvKipcblx0ICogdmFyaWFibGUgdG8gdHJhY2sga2V5cHJlc3MgZXZlbnQgaW5zaWRlIGFuZCBvdXRzaWQgb2YgY29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgaW5zaWRlS2V5UHJlc3MgPSBmYWxzZTtcblxuXHQvKipcblx0ICogdmFyaWFibGUgdG8gdHJhY2sgdGhlIGZvY3VzZWQgaXRlbSB3aGVudXNlciB1c2VzIGFycm93IGtleXMgdG8gc2VsZWN0IGl0ZW1cblx0ICovXG5cdHB1YmxpYyBmb2N1c2VkSXRlbUluZGV4OiBudW1iZXIgfCBudWxsO1xuXG5cdC8qKlxuXHQgKiBlbGVtZW50IHRvIHNob3cgbm90IGZvdW5kIHRleHQgd2hlbiBub3QgaXRtZXMgbWF0Y2ggdGhlIHNlYXJjaFxuXHQgKi9cblxuXHRwdWJsaWMgc2hvd05vdEZvdW5kID0gZmFsc2U7XG5cdC8qKlxuXHQgKiBIb2xkIHRoZSByZWZlcmVuY2UgdG8gYXZhaWxhYmxlIGl0ZW1zIGluIHRoZSBsaXN0IHRvIGZvY3VzIG9uIHRoZSBpdGVtIHdoZW4gc2Nyb2xsaW5nXG5cdCAqL1xuXHRAVmlld0NoaWxkcmVuKCAnYXZhaWxhYmxlT3B0aW9uJyApXG5cdHB1YmxpYyBhdmFpbGFibGVPcHRpb25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cblx0Z2V0IHZhbHVlICgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdmFsdWU7XG5cdH1cblx0c2V0IHZhbHVlICggdmFsICkge1xuXHRcdHRoaXMuX3ZhbHVlID0gdmFsO1xuXHRcdHRoaXMub25DaGFuZ2UoIHZhbCApO1xuXHRcdHRoaXMub25Ub3VjaGVkKCk7XG5cdH1cblxuXHRjb25zdHJ1Y3RvciAoXG5cdFx0cHJpdmF0ZSBjZHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG5cdFx0cHVibGljIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmXG5cdCkge1xuXHRcdHRoaXMubXVsdGlwbGUgPSBmYWxzZTtcblx0fVxuXG5cdHB1YmxpYyBvbkNoYW5nZTogYW55ID0gKCkgPT4ge1xuXHRcdC8vIGVtcHR5XG5cdH1cblx0cHVibGljIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge1xuXHRcdC8vIGVtcHR5XG5cdH1cblxuXHQvKipcblx0ICogY2xpY2sgbGlzdGVuZXIgZm9yIGhvc3QgaW5zaWRlIHRoaXMgY29tcG9uZW50IGkuZVxuXHQgKiBpZiBtYW55IGluc3RhbmNlcyBhcmUgdGhlcmUsIHRoaXMgZGV0ZWN0cyBpZiBjbGlja2VkIGluc2lkZVxuXHQgKiB0aGlzIGluc3RhbmNlXG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKCAnY2xpY2snIClcblx0cHVibGljIGNsaWNrSW5zaWRlQ29tcG9uZW50ICgpIHtcblx0XHR0aGlzLmNsaWNrZWRJbnNpZGUgPSB0cnVlO1xuXHR9XG5cblx0QEhvc3RMaXN0ZW5lciggJ2JsdXInICkgcHVibGljIGJsdXIgKCkge1xuXHRcdHRoaXMudG9nZ2xlRHJvcGRvd24gPSBmYWxzZTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoICdmb2N1cycgKSBwdWJsaWMgZm9jdXMgKCkge1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCAhdGhpcy5kaXNhYmxlZCApXG5cdFx0e1xuXHRcdFx0dGhpcy50b2dnbGVTZWxlY3REcm9wZG93bigpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogY2xpY2sgaGFuZGxlciBvbiBkb2N1bW5lbnQgdG8gaGlkZSB0aGUgb3BlbiBkcm9wZG93biBpZiBjbGlja2VkIG91dHNpZGVcblx0ICovXG5cdEBIb3N0TGlzdGVuZXIoICdkb2N1bWVudDpjbGljaycgKVxuXHRwdWJsaWMgY2xpY2tPdXRzaWRlQ29tcG9uZW50ICgpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggIXRoaXMuY2xpY2tlZEluc2lkZSApXG5cdFx0e1xuXHRcdFx0dGhpcy50b2dnbGVEcm9wZG93biA9IGZhbHNlO1xuXHRcdFx0dGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuXHRcdFx0Ly8gY2xlYXIgc2Vhcmggb24gY2xvc2Vcblx0XHRcdHRoaXMuc2VhcmNoVGV4dCA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuY2xvc2UuZW1pdCgpO1xuXHRcdH1cblx0XHR0aGlzLmNsaWNrZWRJbnNpZGUgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBjbGljayBoYW5kbGVyIG9uIGRvY3VtbmVudCB0byBoaWRlIHRoZSBvcGVuIGRyb3Bkb3duIGlmIGNsaWNrZWQgb3V0c2lkZVxuXHQgKi9cblx0QEhvc3RMaXN0ZW5lciggJ2RvY3VtZW50OmtleWRvd24nIClcblx0cHVibGljIEtleVByZXNzT3V0c2lkZUNvbXBvbmVudCAoKSB7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICF0aGlzLmluc2lkZUtleVByZXNzIClcblx0XHR7XG5cdFx0XHR0aGlzLnRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cdFx0XHR0aGlzLnJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCk7XG5cdFx0fVxuXHRcdHRoaXMuaW5zaWRlS2V5UHJlc3MgPSBmYWxzZTtcblx0fVxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciBmb3Iga2V5IHVwIGFuZCBkb3duIGV2ZW50IGFuZCBlbnRlciBwcmVzcyBmb3Igc2VsZWN0aW5nIGVsZW1lbnRcblx0ICovXG5cdEBIb3N0TGlzdGVuZXIoICdrZXlkb3duJywgWyAnJGV2ZW50JyBdIClcblx0cHVibGljIGhhbmRsZUtleWJvYXJkRXZlbnQgKCAkZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcblx0XHR0aGlzLmluc2lkZUtleVByZXNzID0gdHJ1ZTtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggJGV2ZW50LmtleUNvZGUgPT09IDI3IHx8IHRoaXMuZGlzYWJsZWQgKVxuXHRcdHtcblx0XHRcdHRoaXMudG9nZ2xlRHJvcGRvd24gPSBmYWxzZTtcblx0XHRcdHRoaXMuaW5zaWRlS2V5UHJlc3MgPSBmYWxzZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgYXZhT3B0cyA9IHRoaXMuYXZhaWxhYmxlT3B0aW9ucy50b0FycmF5KCk7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICRldmVudC5rZXlDb2RlICE9PSA5ICYmIGF2YU9wdHMubGVuZ3RoID09PSAwICYmICF0aGlzLnRvZ2dsZURyb3Bkb3duIClcblx0XHR7XG5cdFx0XHR0aGlzLnRvZ2dsZURyb3Bkb3duID0gdHJ1ZTtcblx0XHR9XG5cdFx0Ly8gQXJyb3cgRG93blxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCAkZXZlbnQua2V5Q29kZSA9PT0gNDAgJiYgYXZhT3B0cy5sZW5ndGggPiAwIClcblx0XHR7XG5cdFx0XHR0aGlzLm9uQXJyb3dLZXlEb3duKCk7XG5cdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdFx0aWYgKCB0aGlzLmZvY3VzZWRJdGVtSW5kZXghID49IGF2YU9wdHMubGVuZ3RoIClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5mb2N1c2VkSXRlbUluZGV4ID0gMDtcblx0XHRcdH1cblx0XHRcdGF2YU9wdHNbIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCEgXS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHQkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdFx0Ly8gQXJyb3cgVXBcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggJGV2ZW50LmtleUNvZGUgPT09IDM4ICYmIGF2YU9wdHMubGVuZ3RoIClcblx0XHR7XG5cdFx0XHR0aGlzLm9uQXJyb3dLZXlVcCgpO1xuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRcdGlmICggdGhpcy5mb2N1c2VkSXRlbUluZGV4ISA+PSBhdmFPcHRzLmxlbmd0aCApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IGF2YU9wdHMubGVuZ3RoIC0gMTtcblx0XHRcdH1cblx0XHRcdGF2YU9wdHNbIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCEgXS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHQkZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdFx0Ly8gRW50ZXJcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggJGV2ZW50LmtleUNvZGUgPT09IDEzICYmIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCAhPT0gbnVsbCApXG5cdFx0e1xuXHRcdFx0Y29uc3QgZmlsdGVyZWRJdGVtcyA9IG5ldyBGaWx0ZXJCeVBpcGUoKS50cmFuc2Zvcm0oXG5cdFx0XHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMsXG5cdFx0XHRcdHRoaXMuc2VhcmNoVGV4dCEsXG5cdFx0XHRcdHRoaXMuY29uZmlnLnNlYXJjaE9uS2V5XG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5zZWxlY3RJdGVtKFxuXHRcdFx0XHRmaWx0ZXJlZEl0ZW1zWyB0aGlzLmZvY3VzZWRJdGVtSW5kZXggXSxcblx0XHRcdFx0dGhpcy5hdmFpbGFibGVJdGVtcy5pbmRleE9mKCBmaWx0ZXJlZEl0ZW1zWyB0aGlzLmZvY3VzZWRJdGVtSW5kZXggXSApXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiAkZXZlbnQua2V5XG5cdFx0XG5cdH1cblxuXHQvKipcblx0ICogQ29tcG9uZW50IG9uSW5pdFxuXHQgKi9cblx0cHVibGljIG5nT25Jbml0ICgpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggdHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiYgQXJyYXkuaXNBcnJheSggdGhpcy5vcHRpb25zICkgKVxuXHRcdHtcblx0XHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbXG5cdFx0XHRcdC4uLnRoaXMub3B0aW9ucy5zb3J0KCB0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yICksXG5cdFx0XHRdO1xuXHRcdFx0dGhpcy5pbml0RHJvcGRvd25WYWx1ZXNBbmRPcHRpb25zKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIGFmdGVyIHZpZXcgaW5pdCB0byBzdWJzY3JpYmUgdG8gYXZhaWxhYmxlIG9wdGlvbiBjaGFuZ2VzXG5cdCAqL1xuXHRwdWJsaWMgbmdBZnRlclZpZXdJbml0ICgpIHtcblx0XHR0aGlzLmF2YWlsYWJsZU9wdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUoIHRoaXMuc2V0Tm90Rm91bmRTdGF0ZS5iaW5kKCB0aGlzICkgKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlICggZm46IGFueSApIHtcblx0XHR0aGlzLm9uQ2hhbmdlID0gZm47XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQgKCBmbjogYW55ICkge1xuXHRcdHRoaXMub25Ub3VjaGVkID0gZm47XG5cdH1cblxuXHRwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZSAoIGlzRGlzYWJsZWQ6IGJvb2xlYW4gKSB7XG5cdFx0dGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG5cdH1cblxuXHRwdWJsaWMgd3JpdGVWYWx1ZSAoIHZhbHVlOiBhbnksIGludGVybmFsPzogYm9vbGVhbiApIHtcblx0XHRpZiAoIHZhbHVlIClcblx0XHR7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoIHRoaXMubXVsdGlwbGUgKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZS5sZW5ndGggPiAwIClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRoaXMudmFsdWUgPSB2YWx1ZVsgMCBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRcdGlmICggdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCApXG5cdFx0XHR7XG5cdFx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcblx0XHRcdH1cblx0XHR9IGVsc2Vcblx0XHR7XG5cdFx0XHR0aGlzLnZhbHVlID0gW107XG5cdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdFx0aWYgKCAhaW50ZXJuYWwgKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLnJlc2V0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCAhaW50ZXJuYWwgKVxuXHRcdHtcblx0XHRcdHRoaXMucmVzZXQoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgcmVzZXQgKCkge1xuXHRcdHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuXHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbIC4uLnRoaXMub3B0aW9ucy5zb3J0KCB0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yICkgXTtcblx0XHR0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcblx0fVxuXHQvKipcblx0ICogZnVuY3Rpb24gc2V0cyB3aGV0aGVyIHRvIHNob3cgaXRlbXMgbm90IGZvdW5kIHRleHQgb3Igbm90XG5cdCAqL1xuXHRwdWJsaWMgc2V0Tm90Rm91bmRTdGF0ZSAoKSB7XG5cdFx0aWYgKCB0aGlzLmF2YWlsYWJsZU9wdGlvbnMubGVuZ3RoID09PSAwIClcblx0XHR7XG5cdFx0XHR0aGlzLnNob3dOb3RGb3VuZCA9IHRydWU7XG5cdFx0fSBlbHNlXG5cdFx0e1xuXHRcdFx0dGhpcy5zaG93Tm90Rm91bmQgPSBmYWxzZTtcblx0XHR9XG5cdFx0dGhpcy5jZHJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cdH1cblx0LyoqXG5cdCAqIENvbXBvbmVudCBvbmNoYWdlIGkuZSB3aGVuIGFueSBvZiB0aGUgaW5wdXQgcHJvcGVydGllcyBjaGFuZ2Vcblx0ICovXG5cdHB1YmxpYyBuZ09uQ2hhbmdlcyAoIGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMgKSB7XG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG5cdFx0Ly8gdGhpcy5zZWFyY2hUZXh0ID0gbnVsbDtcblx0XHR0aGlzLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgfHwgW107XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIGNoYW5nZXNbICdvcHRpb25zJyBdIClcblx0XHR7XG5cdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zID0gW1xuXHRcdFx0XHQuLi50aGlzLm9wdGlvbnMuc29ydCggdGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvciApLFxuXHRcdFx0XTtcblx0XHR9XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIGNoYW5nZXNbICd2YWx1ZScgXSApXG5cdFx0e1xuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRcdGlmIChcblx0XHRcdFx0SlNPTi5zdHJpbmdpZnkoIGNoYW5nZXNbICd2YWx1ZScgXS5jdXJyZW50VmFsdWUgKSA9PT0gSlNPTi5zdHJpbmdpZnkoIFtdICkgfHxcblx0XHRcdFx0Y2hhbmdlc1sgJ3ZhbHVlJyBdLmN1cnJlbnRWYWx1ZSA9PT0gJycgfHxcblx0XHRcdFx0Y2hhbmdlc1sgJ3ZhbHVlJyBdLmN1cnJlbnRWYWx1ZSA9PT0gbnVsbFxuXHRcdFx0KVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zID0gW1xuXHRcdFx0XHRcdC4uLnRoaXMub3B0aW9ucy5zb3J0KCB0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yICksXG5cdFx0XHRcdF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuaW5pdERyb3Bkb3duVmFsdWVzQW5kT3B0aW9ucygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlc2VsY3QgYSBzZWxlY3RlZCBpdGVtc1xuXHQgKiBAcGFyYW0gaXRlbTogIGl0ZW0gdG8gYmUgZGVzZWxlY3RlZFxuXHQgKiBAcGFyYW0gaW5kZXg6ICBpbmRleCBvZiB0aGUgaXRlbVxuXHQgKi9cblx0cHVibGljIGRlc2VsZWN0SXRlbSAoIGl0ZW06IGFueSwgaW5kZXg6IG51bWJlciApIHtcblx0XHR0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaCggKCBlbGVtZW50OiBhbnksIGk6IG51bWJlciApID0+IHtcblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0XHRpZiAoIGl0ZW0gPT09IGVsZW1lbnQgKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdGxldCBzb3J0ZWRJdGVtcyA9IFsgLi4udGhpcy5hdmFpbGFibGVJdGVtcyBdO1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCAhdGhpcy5hdmFpbGFibGVJdGVtcy5pbmNsdWRlcyggaXRlbSApIClcblx0XHR7XG5cdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zLnB1c2goIGl0ZW0gKTtcblx0XHRcdHNvcnRlZEl0ZW1zID0gdGhpcy5hdmFpbGFibGVJdGVtcy5zb3J0KCB0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yICk7XG5cdFx0fVxuXHRcdHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFsgLi4udGhpcy5zZWxlY3RlZEl0ZW1zIF07XG5cdFx0dGhpcy5hdmFpbGFibGVJdGVtcyA9IFsgLi4uc29ydGVkSXRlbXMgXTtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggIUFycmF5LmlzQXJyYXkoIHRoaXMudmFsdWUgKSApXG5cdFx0e1xuXHRcdFx0dGhpcy52YWx1ZSA9IFtdO1xuXHRcdH1cblx0XHR0aGlzLnZhbHVlQ2hhbmdlZCgpO1xuXHRcdHRoaXMucmVzZXRBcnJvd0tleUFjdGl2ZUVsZW1lbnQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZWxlY3QgYW4gaXRlbVxuXHQgKiBAcGFyYW0gaXRlbTogIGl0ZW0gdG8gYmUgc2VsZWN0ZWRcblx0ICogQHBhcmFtIGluZGV4OiAgaW5kZXggb2YgdGhlIGl0ZW1cblx0ICovXG5cdHB1YmxpYyBzZWxlY3RJdGVtICggaXRlbTogc3RyaW5nLCBpbmRleD86IG51bWJlciApIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggIXRoaXMubXVsdGlwbGUgKVxuXHRcdHtcblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0XHRpZiAoIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwIClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5hdmFpbGFibGVJdGVtcy5wdXNoKCB0aGlzLnNlbGVjdGVkSXRlbXNbIDAgXSApO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG5cdFx0XHR0aGlzLnRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5hdmFpbGFibGVJdGVtcy5mb3JFYWNoKCAoIGVsZW1lbnQ6IGFueSwgaTogbnVtYmVyICkgPT4ge1xuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRcdGlmICggaXRlbSA9PT0gZWxlbWVudCApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKCBpdGVtICk7XG5cdFx0XHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIHRoaXMuY29uZmlnLmNsZWFyT25TZWxlY3Rpb24gKVxuXHRcdHtcblx0XHRcdHRoaXMuc2VhcmNoVGV4dCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSBbIC4uLnRoaXMuc2VsZWN0ZWRJdGVtcyBdO1xuXHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbIC4uLnRoaXMuYXZhaWxhYmxlSXRlbXMgXTtcblx0XHR0aGlzLnNlbGVjdGVkSXRlbXMuc29ydCggdGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvciApO1xuXHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMuc29ydCggdGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvciApO1xuXHRcdC8vIHRoaXMuc2VhcmNoVGV4dCA9IG51bGw7XG5cdFx0dGhpcy52YWx1ZUNoYW5nZWQoKTtcblx0XHR0aGlzLnJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICogV2hlbiBzZWxlY3RlZCBpdGVtcyBjaGFuZ2VzIHRyaWdnZXIgdGhlIGNoYWFuZ2UgYmFjayB0byBwYXJlbnRcblx0ICovXG5cdHB1YmxpYyB2YWx1ZUNoYW5nZWQgKCkge1xuXHRcdHRoaXMud3JpdGVWYWx1ZSggdGhpcy5zZWxlY3RlZEl0ZW1zLCB0cnVlICk7XG5cdFx0Ly8gdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuXHRcdHRoaXMuY2hhbmdlLmVtaXQoIHsgdmFsdWU6IHRoaXMudmFsdWUgfSApO1xuXHRcdHRoaXMuc2V0U2VsZWN0ZWREaXNwbGF5VGV4dCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvZ2dsZSB0aGUgZHJvcGRvd25saXN0IG9uL29mZlxuXHQgKi9cblx0cHVibGljIHRvZ2dsZVNlbGVjdERyb3Bkb3duICgpIHtcblx0XHR0aGlzLnRvZ2dsZURyb3Bkb3duID0gIXRoaXMudG9nZ2xlRHJvcGRvd247XG5cdFx0aWYgKCB0aGlzLnRvZ2dsZURyb3Bkb3duIClcblx0XHR7XG5cdFx0XHR0aGlzLm9wZW4uZW1pdCgpO1xuXHRcdH0gZWxzZVxuXHRcdHtcblx0XHRcdHRoaXMuc2VhcmNoVGV4dCA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuY2xvc2UuZW1pdCgpO1xuXHRcdH1cblx0XHR0aGlzLnJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGNoYW5nZSBoYW5kbGVyIGZvciBzZWFyY2ggdGV4dFxuXHQgKi9cblx0cHVibGljIHNlYXJjaFRleHRDaGFuZ2VkICgpIHtcblx0XHR0aGlzLnNlYXJjaENoYW5nZS5lbWl0KCB0aGlzLnNlYXJjaFRleHQgKTtcblx0fVxuXG5cdHB1YmxpYyBjaGFuZ2VTZWFyY2hUZXh0ICggJGV2ZW50OiBhbnkgKSB7XG5cdFx0JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIGluaXRpYWxpemUgdGhlIGNvbmZpZyBhbmQgb3RoZXIgcHJvcGVydGllc1xuXHQgKi9cblx0cHJpdmF0ZSBpbml0RHJvcGRvd25WYWx1ZXNBbmRPcHRpb25zICgpIHtcblx0XHRjb25zdCBjb25maWc6IGFueSA9IHtcblx0XHRcdGRpc3BsYXlLZXk6ICdkZXNjcmlwdGlvbicsXG5cdFx0XHRoZWlnaHQ6ICdhdXRvJyxcblx0XHRcdHNlYXJjaDogZmFsc2UsXG5cdFx0XHRwbGFjZWhvbGRlcjogJy0nLFxuXHRcdFx0c2VhcmNoUGxhY2Vob2xkZXI6ICdQZXNxdWlzYXIgJyxcblx0XHRcdGxpbWl0VG86IDAsXG5cdFx0XHRjdXN0b21Db21wYXJhdG9yOiB1bmRlZmluZWQsXG5cdFx0XHRub1Jlc3VsdHNGb3VuZDogJ05hZGEgZW5jb250cmFkbyEnLFxuXHRcdFx0bW9yZVRleHQ6ICdTZWxlY2lvbmFkb3MnLFxuXHRcdFx0c2VhcmNoT25LZXk6IG51bGwsXG5cdFx0XHRjbGVhck9uU2VsZWN0aW9uOiBmYWxzZSxcblx0XHRcdGlucHV0RGlyZWN0aW9uOiAnbHRyJyxcblx0XHR9O1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0aGlzLmNvbmZpZyA9PT0gJ3VuZGVmaW5lZCcgfHwgT2JqZWN0LmtleXMoIHRoaXMuY29uZmlnICkubGVuZ3RoID09PSAwIClcblx0XHR7XG5cdFx0XHR0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnIH07XG5cdFx0fVxuXHRcdGZvciAoIGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyggY29uZmlnICkgKVxuXHRcdHtcblx0XHRcdHRoaXMuY29uZmlnWyBrZXkgXSA9IHRoaXMuY29uZmlnWyBrZXkgXSA/IHRoaXMuY29uZmlnWyBrZXkgXSA6IGNvbmZpZ1sga2V5IF07XG5cdFx0fVxuXHRcdHRoaXMuY29uZmlnID0geyAuLi50aGlzLmNvbmZpZyB9O1xuXHRcdC8vIEFkZGluZyBwbGFjZWhvbGRlciBpbiBjb25maWcgYXMgZGVmYXVsdCBwYXJhbVxuXHRcdHRoaXMuc2VsZWN0ZWREaXNwbGF5VGV4dCA9IHRoaXMuY29uZmlnWyAncGxhY2Vob2xkZXInIF07XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIHRoaXMudmFsdWUgIT09ICcnICYmIHR5cGVvZiB0aGlzLnZhbHVlICE9PSAndW5kZWZpbmVkJyApXG5cdFx0e1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB0aGlzLnZhbHVlICkgKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnZhbHVlO1xuXHRcdFx0fSBlbHNlIGlmICggdGhpcy52YWx1ZSAhPT0gJycgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtc1sgMCBdID0gdGhpcy52YWx1ZTtcblx0XHRcdH0gZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IFtdO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaCggKCBpdGVtOiBhbnkgKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGluZCA9IHRoaXMuYXZhaWxhYmxlSXRlbXMuZmluZEluZGV4KFxuXHRcdFx0XHRcdCggYUl0ZW06IGFueSApID0+IEpTT04uc3RyaW5naWZ5KCBpdGVtICkgPT09IEpTT04uc3RyaW5naWZ5KCBhSXRlbSApXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmICggaW5kICE9PSAtMSApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zLnNwbGljZSggaW5kLCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cdFx0dGhpcy5zZXRTZWxlY3RlZERpc3BsYXlUZXh0KCk7XG5cdH1cblxuXHQvKipcblx0ICogc2V0IHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxuXHQgKi9cblx0cHJpdmF0ZSBzZXRTZWxlY3RlZERpc3BsYXlUZXh0ICgpIHtcblx0XHRsZXQgdGV4dDogc3RyaW5nID0gdGhpcy5zZWxlY3RlZEl0ZW1zWyAwIF07XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIHR5cGVvZiB0aGlzLnNlbGVjdGVkSXRlbXNbIDAgXSA9PT0gJ29iamVjdCcgKVxuXHRcdHtcblx0XHRcdHRleHQgPSB0aGlzLmNvbmZpZy5kaXNwbGF5Rm5cblx0XHRcdFx0PyB0aGlzLmNvbmZpZy5kaXNwbGF5Rm4oIHRoaXMuc2VsZWN0ZWRJdGVtc1sgMCBdIClcblx0XHRcdFx0OiB0aGlzLnNlbGVjdGVkSXRlbXNbIDAgXVsgdGhpcy5jb25maWcuZGlzcGxheUtleSBdO1xuXHRcdH1cblx0XHRpZiAoIHRoaXMubXVsdGlwbGUgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgKVxuXHRcdHtcblx0XHRcdHRoaXMuc2VsZWN0ZWREaXNwbGF5VGV4dCA9XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDFcblx0XHRcdFx0XHQ/IHRleHRcblx0XHRcdFx0XHQ6IHRleHQgK1xuXHRcdFx0XHRcdGAgKyAkeyB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMSB9ICR7IHRoaXMuY29uZmlnLm1vcmVUZXh0IH1gO1xuXHRcdH0gZWxzZVxuXHRcdHtcblx0XHRcdHRoaXMuc2VsZWN0ZWREaXNwbGF5VGV4dCA9XG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDAgPyB0aGlzLmNvbmZpZy5wbGFjZWhvbGRlciA6IHRleHQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgZm9yIGFycm93IGtleSB1cCBldmVudCB0aGF0cyBmb2N1c2VzIG9uIGEgaXRlbVxuXHQgKi9cblx0cHJpdmF0ZSBvbkFycm93S2V5VXAgKCkge1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0aGlzLmZvY3VzZWRJdGVtSW5kZXggPT09IDAgKVxuXHRcdHtcblx0XHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IHRoaXMuYXZhaWxhYmxlSXRlbXMubGVuZ3RoIC0gMTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIHRoaXMub25BcnJvd0tleSgpIClcblx0XHR7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXghO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIGZvciBhcnJvdyBrZXkgZG93biBldmVudCB0aGF0cyBmb2N1c2VzIG9uIGEgaXRlbVxuXHQgKi9cblx0cHJpdmF0ZSBvbkFycm93S2V5RG93biAoKSB7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9PT0gdGhpcy5hdmFpbGFibGVJdGVtcy5sZW5ndGggLSAxIClcblx0XHR7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSAwO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggdGhpcy5vbkFycm93S2V5KCkgKVxuXHRcdHtcblx0XHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCErKztcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG9uQXJyb3dLZXkgKCkge1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0aGlzLmZvY3VzZWRJdGVtSW5kZXggPT09IG51bGwgKVxuXHRcdHtcblx0XHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IDA7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIHdpbGwgcmVzZXQgdGhlIGVsZW1lbnQgdGhhdCBpcyBtYXJrZWQgYWN0aXZlIHVzaW5nIGFycm93IGtleXNcblx0ICovXG5cdHByaXZhdGUgcmVzZXRBcnJvd0tleUFjdGl2ZUVsZW1lbnQgKCkge1xuXHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IG51bGw7XG5cdH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJuZ3gtZHJvcGRvd24tY29udGFpbmVyXCIgdGFiaW5kZXg9XCIwXCI+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm5neC1kcm9wZG93bi1idXR0b25cIiBbbmdDbGFzc109XCJ7ICduZ3gtZGlzYWJsZWQnOiBkaXNhYmxlZCB9XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAoY2xpY2spPVwidG9nZ2xlU2VsZWN0RHJvcGRvd24oKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZGlzcGxheS10ZXh0XCI+e3sgc2VsZWN0ZWREaXNwbGF5VGV4dCB9fSA8L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJuc2RpY29uLWFuZ2xlLWRvd25cIj48L3NwYW4+XG4gIDwvYnV0dG9uPlxuICA8ZGl2IGNsYXNzPVwibmd4LWRyb3Bkb3duLWxpc3QtY29udGFpbmVyIHNjcm9sbC15XCIgKm5nSWY9XCJ0b2dnbGVEcm9wZG93blwiIFtzdHlsZS5tYXhIZWlnaHRdPVwiY29uZmlnLmhlaWdodFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtY29udGFpbmVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiICpuZ0lmPVwiY29uZmlnLnNlYXJjaFwiPlxuICAgICAgPGlucHV0IChjaGFuZ2UpPVwiY2hhbmdlU2VhcmNoVGV4dCgkZXZlbnQpXCIgW3N0eWxlLmRpcmVjdGlvbl09XCJjb25maWcuaW5wdXREaXJlY3Rpb25cIiBuYW1lPVwic2VhcmNoLXRleHRcIlxuICAgICAgICAoaW5wdXQpPVwic2VhcmNoVGV4dENoYW5nZWQoKVwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIHRhYmluZGV4PVwiLTFcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxuICAgICAgPGxhYmVsIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBzZWFyY2hUZXh0IH1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJuc2RpY29uLXNlYXJjaFwiPjwvc3Bhbj5cbiAgICAgICAge3sgY29uZmlnLnNlYXJjaFBsYWNlaG9sZGVyIH19PC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8dWwgY2xhc3M9XCJzZWxlY3RlZC1pdGVtc1wiPlxuICAgICAgPGxpIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93XCIgdGFiaW5kZXg9XCItMVwiICpuZ0Zvcj1cImxldCBzZWxlY3RlZCBvZiBzZWxlY3RlZEl0ZW1zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgKGNsaWNrKT1cImRlc2VsZWN0SXRlbShzZWxlY3RlZCwgaSlcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjayBuc2RpY29uLWNsb3NlIG1lLTJcIiBjaGVja2VkPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMnB4O1wiPnt7XG4gICAgICAgICAgY29uZmlnLmRpc3BsYXlGblxuICAgICAgICAgID8gY29uZmlnLmRpc3BsYXlGbihzZWxlY3RlZClcbiAgICAgICAgICA6IHNlbGVjdGVkW2NvbmZpZy5kaXNwbGF5S2V5XSB8fCBzZWxlY3RlZFxuICAgICAgICAgIH19PC9kaXY+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gICAgPGhyICpuZ0lmPVwic2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwICYmIGF2YWlsYWJsZUl0ZW1zLmxlbmd0aCA+IDBcIiAvPlxuICAgIDx1bCBjbGFzcz1cImF2YWlsYWJsZS1pdGVtc1wiPlxuICAgICAgPGxpIGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93XCIgI2F2YWlsYWJsZU9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhdmFpbGFibGVJdGVtcyB8IGZpbHRlckJ5OiBzZWFyY2hUZXh0OiBjb25maWcuc2VhcmNoT25LZXlcblx0XHRcdHwgbGltaXRUbzogY29uZmlnLmxpbWl0VG87IGxldCBpID0gaW5kZXhcIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGZvY3VzZWRJdGVtSW5kZXggPT0gaSAmJiAhaXRlbS5kaXNhYmxlZCwgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfVwiXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RJdGVtKGl0ZW0sIGkpXCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2sgbnNkaWNvbi1jbG9zZSBtZS0yXCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAycHg7XCI+XG4gICAgICAgICAge3sgY29uZmlnLmRpc3BsYXlGbiA/IGNvbmZpZy5kaXNwbGF5Rm4oaXRlbSkgOiBpdGVtW2NvbmZpZy5kaXNwbGF5S2V5XSB8fCBpdGVtIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICAgIDxsaSAqbmdJZj1cInNob3dOb3RGb3VuZFwiPnt7IGNvbmZpZy5ub1Jlc3VsdHNGb3VuZCB9fTwvbGk+XG4gICAgPC91bD5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -822,7 +822,7 @@ class ComboboxComponent {
822
822
  useExisting: forwardRef(() => ComboboxComponent),
823
823
  multi: true,
824
824
  },
825
- ], viewQueries: [{ propertyName: "availableOptions", predicate: ["availableOption"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"ngx-dropdown-container\" tabindex=\"0\">\n <button type=\"button\" tabindex=\"-1\" class=\"ngx-dropdown-button\" [ngClass]=\"{ 'ngx-disabled': disabled }\"\n [disabled]=\"disabled\" (click)=\"toggleSelectDropdown()\">\n <span class=\"display-text\">{{ selectedDisplayText }} </span>\n <span class=\"nsdicon-angle-down\"></span>\n </button>\n <div class=\"ngx-dropdown-list-container\" *ngIf=\"toggleDropdown\" [style.maxHeight]=\"config.height\">\n <div class=\"search-container d-flex justify-content-between\" *ngIf=\"config.search\">\n <input (change)=\"changeSearchText($event)\" [style.direction]=\"config.inputDirection\" name=\"search-text\"\n (input)=\"searchTextChanged()\" [(ngModel)]=\"searchText\" tabindex=\"-1\" autocomplete=\"off\" />\n <label [ngClass]=\"{ active: searchText }\">\n <span class=\"nsdicon-search\"></span>\n {{ config.searchPlaceholder }}</label>\n </div>\n <ul class=\"selected-items\">\n <li class=\"d-flex flex-row\" tabindex=\"-1\" *ngFor=\"let selected of selectedItems; let i = index\"\n (click)=\"deselectItem(selected, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\" checked=\"true\">\n <div style=\"margin-top: 2px;\">{{\n config.displayFn\n ? config.displayFn(selected)\n : selected[config.displayKey] || selected\n }}</div>\n </li>\n </ul>\n <hr *ngIf=\"selectedItems.length > 0 && availableItems.length > 0\" />\n <ul class=\"available-items\">\n <li class=\"d-flex flex-row\" #availableOption *ngFor=\"let item of availableItems | filterBy: searchText: config.searchOnKey\n\t\t\t| limitTo: config.limitTo; let i = index\" tabindex=\"-1\"\n [ngClass]=\"{ active: focusedItemIndex == i && !item.disabled, disabled: item.disabled }\"\n (click)=\"selectItem(item, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\">\n <div style=\"margin-top: 2px;\">\n {{ config.displayFn ? config.displayFn(item) : item[config.displayKey] || item }}\n </div>\n </li>\n <li *ngIf=\"showNotFound\">{{ config.noResultsFound }}</li>\n </ul>\n </div>\n</div>", styles: [".ngx-dropdown-container{width:100%;position:relative}.ngx-dropdown-container button{display:inline-block;margin-bottom:0;font-weight:400;line-height:1.42857143;vertical-align:middle;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #ccc;border-radius:4px;color:#333;background-color:#fff;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;text-align:left}.ngx-dropdown-container button span{display:inline;vertical-align:middle}.ngx-dropdown-container button .nsdicon-angle-down{right:5px;position:relative;float:right}.ngx-dropdown-container button .nsdicon-angle-down:before{border-style:solid;border-width:.1em .1em 0 0;content:\"\";display:inline-block;height:10px;position:relative;vertical-align:text-top;width:10px;top:0;transform:rotate(135deg)}.ngx-dropdown-container .ngx-dropdown-button{width:100%;min-height:30px;padding:5px 10px;background-color:#fff}.ngx-dropdown-container .ngx-dropdown-button .display-text{display:inline-block;width:calc(100% - 20px)}.ngx-dropdown-container .ngx-dropdown-list-container{box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:4px;padding-left:10px;padding-right:10px;z-index:999999999;width:100%;background-clip:padding-box;background:white;position:absolute;box-shadow:5px 5px 5px #00000036;overflow-y:auto}.ngx-dropdown-container .ngx-dropdown-list-container .search-container{position:relative;padding-top:10px;margin-top:5px}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:2rem;width:100%;font-size:13px;margin:0;padding:0;box-shadow:none;box-sizing:content-box;transition:all .3s}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus{border-bottom:1px solid #007bff}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus+label{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label{color:#9e9e9e;position:absolute;top:0;left:0;height:100%;font-size:1rem;cursor:text;transition:transform .2s ease-out;transform-origin:0% 100%;text-align:initial;transform:translateY(12px);pointer-events:none}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label.active{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container ul{margin-top:1rem;margin-bottom:1rem;list-style-type:none;padding-left:0}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li{margin-bottom:2px}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li .nsdicon-close{accent-color:#007bff;font-weight:700;font-size:large}.ngx-dropdown-container .ngx-dropdown-list-container ul.available-items li.active{background-color:#337ab7;color:#fff}.ngx-dropdown-container .ngx-dropdown-list-container ul li{font-size:inherit;cursor:pointer;display:block;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:normal}.ngx-dropdown-container .ngx-disabled{pointer-events:none;background-color:#e9ecef;opacity:1;cursor:no-drop}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: FilterByPipe, name: "filterBy" }, { kind: "pipe", type: LimitToPipe, name: "limitTo" }] }); }
825
+ ], viewQueries: [{ propertyName: "availableOptions", predicate: ["availableOption"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"ngx-dropdown-container\" tabindex=\"0\">\n <button type=\"button\" tabindex=\"-1\" class=\"ngx-dropdown-button\" [ngClass]=\"{ 'ngx-disabled': disabled }\"\n [disabled]=\"disabled\" (click)=\"toggleSelectDropdown()\">\n <span class=\"display-text\">{{ selectedDisplayText }} </span>\n <span class=\"nsdicon-angle-down\"></span>\n </button>\n <div class=\"ngx-dropdown-list-container scroll-y\" *ngIf=\"toggleDropdown\" [style.maxHeight]=\"config.height\">\n <div class=\"search-container d-flex justify-content-between\" *ngIf=\"config.search\">\n <input (change)=\"changeSearchText($event)\" [style.direction]=\"config.inputDirection\" name=\"search-text\"\n (input)=\"searchTextChanged()\" [(ngModel)]=\"searchText\" tabindex=\"-1\" autocomplete=\"off\" />\n <label [ngClass]=\"{ active: searchText }\">\n <span class=\"nsdicon-search\"></span>\n {{ config.searchPlaceholder }}</label>\n </div>\n <ul class=\"selected-items\">\n <li class=\"d-flex flex-row\" tabindex=\"-1\" *ngFor=\"let selected of selectedItems; let i = index\"\n (click)=\"deselectItem(selected, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\" checked=\"true\">\n <div style=\"margin-top: 2px;\">{{\n config.displayFn\n ? config.displayFn(selected)\n : selected[config.displayKey] || selected\n }}</div>\n </li>\n </ul>\n <hr *ngIf=\"selectedItems.length > 0 && availableItems.length > 0\" />\n <ul class=\"available-items\">\n <li class=\"d-flex flex-row\" #availableOption *ngFor=\"let item of availableItems | filterBy: searchText: config.searchOnKey\n\t\t\t| limitTo: config.limitTo; let i = index\" tabindex=\"-1\"\n [ngClass]=\"{ active: focusedItemIndex == i && !item.disabled, disabled: item.disabled }\"\n (click)=\"selectItem(item, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\">\n <div style=\"margin-top: 2px;\">\n {{ config.displayFn ? config.displayFn(item) : item[config.displayKey] || item }}\n </div>\n </li>\n <li *ngIf=\"showNotFound\">{{ config.noResultsFound }}</li>\n </ul>\n </div>\n</div>\n", styles: [".ngx-dropdown-container{width:100%;position:relative}.ngx-dropdown-container button{display:inline-block;margin-bottom:0;font-weight:400;line-height:1.42857143;vertical-align:middle;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #ccc;border-radius:4px;color:#333;background-color:#fff;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;text-align:left}.ngx-dropdown-container button span{display:inline;vertical-align:middle}.ngx-dropdown-container button .nsdicon-angle-down{right:5px;position:relative;float:right}.ngx-dropdown-container button .nsdicon-angle-down:before{border-style:solid;border-width:.1em .1em 0 0;content:\"\";display:inline-block;height:10px;position:relative;vertical-align:text-top;width:10px;top:0;transform:rotate(135deg)}.ngx-dropdown-container .ngx-dropdown-button{width:100%;min-height:30px;padding:5px 10px;background-color:#fff}.ngx-dropdown-container .ngx-dropdown-button .display-text{display:inline-block;width:calc(100% - 20px)}.ngx-dropdown-container .ngx-dropdown-list-container{box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:4px;padding-left:10px;padding-right:10px;z-index:999999999;width:100%;background-clip:padding-box;background:white;position:absolute;box-shadow:5px 5px 5px #00000036;overflow-y:auto}.ngx-dropdown-container .ngx-dropdown-list-container .search-container{position:relative;padding-top:10px;margin-top:5px}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:2rem;width:100%;font-size:13px;margin:0;padding:0;box-shadow:none;box-sizing:content-box;transition:all .3s}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus{border-bottom:1px solid #007bff}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus+label{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label{color:#9e9e9e;position:absolute;top:0;left:0;height:100%;font-size:1rem;cursor:text;transition:transform .2s ease-out;transform-origin:0% 100%;text-align:initial;transform:translateY(12px);pointer-events:none}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label.active{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container ul{margin-top:1rem;margin-bottom:1rem;list-style-type:none;padding-left:0}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li{margin-bottom:2px}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li .nsdicon-close{accent-color:#007bff;font-weight:700;font-size:large}.ngx-dropdown-container .ngx-dropdown-list-container ul.available-items li.active{background-color:#337ab7;color:#fff}.ngx-dropdown-container .ngx-dropdown-list-container ul li{font-size:inherit;cursor:pointer;display:block;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:normal}.ngx-dropdown-container .ngx-disabled{pointer-events:none;background-color:#e9ecef;opacity:1;cursor:no-drop}.scroll-y{max-width:300px;overflow-y:scroll;overflow-x:hidden}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: FilterByPipe, name: "filterBy" }, { kind: "pipe", type: LimitToPipe, name: "limitTo" }] }); }
826
826
  }
827
827
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: ComboboxComponent, decorators: [{
828
828
  type: Component,
@@ -832,7 +832,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
832
832
  useExisting: forwardRef(() => ComboboxComponent),
833
833
  multi: true,
834
834
  },
835
- ], template: "<div class=\"ngx-dropdown-container\" tabindex=\"0\">\n <button type=\"button\" tabindex=\"-1\" class=\"ngx-dropdown-button\" [ngClass]=\"{ 'ngx-disabled': disabled }\"\n [disabled]=\"disabled\" (click)=\"toggleSelectDropdown()\">\n <span class=\"display-text\">{{ selectedDisplayText }} </span>\n <span class=\"nsdicon-angle-down\"></span>\n </button>\n <div class=\"ngx-dropdown-list-container\" *ngIf=\"toggleDropdown\" [style.maxHeight]=\"config.height\">\n <div class=\"search-container d-flex justify-content-between\" *ngIf=\"config.search\">\n <input (change)=\"changeSearchText($event)\" [style.direction]=\"config.inputDirection\" name=\"search-text\"\n (input)=\"searchTextChanged()\" [(ngModel)]=\"searchText\" tabindex=\"-1\" autocomplete=\"off\" />\n <label [ngClass]=\"{ active: searchText }\">\n <span class=\"nsdicon-search\"></span>\n {{ config.searchPlaceholder }}</label>\n </div>\n <ul class=\"selected-items\">\n <li class=\"d-flex flex-row\" tabindex=\"-1\" *ngFor=\"let selected of selectedItems; let i = index\"\n (click)=\"deselectItem(selected, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\" checked=\"true\">\n <div style=\"margin-top: 2px;\">{{\n config.displayFn\n ? config.displayFn(selected)\n : selected[config.displayKey] || selected\n }}</div>\n </li>\n </ul>\n <hr *ngIf=\"selectedItems.length > 0 && availableItems.length > 0\" />\n <ul class=\"available-items\">\n <li class=\"d-flex flex-row\" #availableOption *ngFor=\"let item of availableItems | filterBy: searchText: config.searchOnKey\n\t\t\t| limitTo: config.limitTo; let i = index\" tabindex=\"-1\"\n [ngClass]=\"{ active: focusedItemIndex == i && !item.disabled, disabled: item.disabled }\"\n (click)=\"selectItem(item, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\">\n <div style=\"margin-top: 2px;\">\n {{ config.displayFn ? config.displayFn(item) : item[config.displayKey] || item }}\n </div>\n </li>\n <li *ngIf=\"showNotFound\">{{ config.noResultsFound }}</li>\n </ul>\n </div>\n</div>", styles: [".ngx-dropdown-container{width:100%;position:relative}.ngx-dropdown-container button{display:inline-block;margin-bottom:0;font-weight:400;line-height:1.42857143;vertical-align:middle;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #ccc;border-radius:4px;color:#333;background-color:#fff;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;text-align:left}.ngx-dropdown-container button span{display:inline;vertical-align:middle}.ngx-dropdown-container button .nsdicon-angle-down{right:5px;position:relative;float:right}.ngx-dropdown-container button .nsdicon-angle-down:before{border-style:solid;border-width:.1em .1em 0 0;content:\"\";display:inline-block;height:10px;position:relative;vertical-align:text-top;width:10px;top:0;transform:rotate(135deg)}.ngx-dropdown-container .ngx-dropdown-button{width:100%;min-height:30px;padding:5px 10px;background-color:#fff}.ngx-dropdown-container .ngx-dropdown-button .display-text{display:inline-block;width:calc(100% - 20px)}.ngx-dropdown-container .ngx-dropdown-list-container{box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:4px;padding-left:10px;padding-right:10px;z-index:999999999;width:100%;background-clip:padding-box;background:white;position:absolute;box-shadow:5px 5px 5px #00000036;overflow-y:auto}.ngx-dropdown-container .ngx-dropdown-list-container .search-container{position:relative;padding-top:10px;margin-top:5px}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:2rem;width:100%;font-size:13px;margin:0;padding:0;box-shadow:none;box-sizing:content-box;transition:all .3s}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus{border-bottom:1px solid #007bff}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus+label{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label{color:#9e9e9e;position:absolute;top:0;left:0;height:100%;font-size:1rem;cursor:text;transition:transform .2s ease-out;transform-origin:0% 100%;text-align:initial;transform:translateY(12px);pointer-events:none}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label.active{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container ul{margin-top:1rem;margin-bottom:1rem;list-style-type:none;padding-left:0}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li{margin-bottom:2px}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li .nsdicon-close{accent-color:#007bff;font-weight:700;font-size:large}.ngx-dropdown-container .ngx-dropdown-list-container ul.available-items li.active{background-color:#337ab7;color:#fff}.ngx-dropdown-container .ngx-dropdown-list-container ul li{font-size:inherit;cursor:pointer;display:block;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:normal}.ngx-dropdown-container .ngx-disabled{pointer-events:none;background-color:#e9ecef;opacity:1;cursor:no-drop}\n"] }]
835
+ ], template: "<div class=\"ngx-dropdown-container\" tabindex=\"0\">\n <button type=\"button\" tabindex=\"-1\" class=\"ngx-dropdown-button\" [ngClass]=\"{ 'ngx-disabled': disabled }\"\n [disabled]=\"disabled\" (click)=\"toggleSelectDropdown()\">\n <span class=\"display-text\">{{ selectedDisplayText }} </span>\n <span class=\"nsdicon-angle-down\"></span>\n </button>\n <div class=\"ngx-dropdown-list-container scroll-y\" *ngIf=\"toggleDropdown\" [style.maxHeight]=\"config.height\">\n <div class=\"search-container d-flex justify-content-between\" *ngIf=\"config.search\">\n <input (change)=\"changeSearchText($event)\" [style.direction]=\"config.inputDirection\" name=\"search-text\"\n (input)=\"searchTextChanged()\" [(ngModel)]=\"searchText\" tabindex=\"-1\" autocomplete=\"off\" />\n <label [ngClass]=\"{ active: searchText }\">\n <span class=\"nsdicon-search\"></span>\n {{ config.searchPlaceholder }}</label>\n </div>\n <ul class=\"selected-items\">\n <li class=\"d-flex flex-row\" tabindex=\"-1\" *ngFor=\"let selected of selectedItems; let i = index\"\n (click)=\"deselectItem(selected, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\" checked=\"true\">\n <div style=\"margin-top: 2px;\">{{\n config.displayFn\n ? config.displayFn(selected)\n : selected[config.displayKey] || selected\n }}</div>\n </li>\n </ul>\n <hr *ngIf=\"selectedItems.length > 0 && availableItems.length > 0\" />\n <ul class=\"available-items\">\n <li class=\"d-flex flex-row\" #availableOption *ngFor=\"let item of availableItems | filterBy: searchText: config.searchOnKey\n\t\t\t| limitTo: config.limitTo; let i = index\" tabindex=\"-1\"\n [ngClass]=\"{ active: focusedItemIndex == i && !item.disabled, disabled: item.disabled }\"\n (click)=\"selectItem(item, i)\">\n <input type=\"checkbox\" class=\"form-check nsdicon-close me-2\">\n <div style=\"margin-top: 2px;\">\n {{ config.displayFn ? config.displayFn(item) : item[config.displayKey] || item }}\n </div>\n </li>\n <li *ngIf=\"showNotFound\">{{ config.noResultsFound }}</li>\n </ul>\n </div>\n</div>\n", styles: [".ngx-dropdown-container{width:100%;position:relative}.ngx-dropdown-container button{display:inline-block;margin-bottom:0;font-weight:400;line-height:1.42857143;vertical-align:middle;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #ccc;border-radius:4px;color:#333;background-color:#fff;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;text-align:left}.ngx-dropdown-container button span{display:inline;vertical-align:middle}.ngx-dropdown-container button .nsdicon-angle-down{right:5px;position:relative;float:right}.ngx-dropdown-container button .nsdicon-angle-down:before{border-style:solid;border-width:.1em .1em 0 0;content:\"\";display:inline-block;height:10px;position:relative;vertical-align:text-top;width:10px;top:0;transform:rotate(135deg)}.ngx-dropdown-container .ngx-dropdown-button{width:100%;min-height:30px;padding:5px 10px;background-color:#fff}.ngx-dropdown-container .ngx-dropdown-button .display-text{display:inline-block;width:calc(100% - 20px)}.ngx-dropdown-container .ngx-dropdown-list-container{box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:4px;padding-left:10px;padding-right:10px;z-index:999999999;width:100%;background-clip:padding-box;background:white;position:absolute;box-shadow:5px 5px 5px #00000036;overflow-y:auto}.ngx-dropdown-container .ngx-dropdown-list-container .search-container{position:relative;padding-top:10px;margin-top:5px}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:2rem;width:100%;font-size:13px;margin:0;padding:0;box-shadow:none;box-sizing:content-box;transition:all .3s}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus{border-bottom:1px solid #007bff}.ngx-dropdown-container .ngx-dropdown-list-container .search-container input:focus+label{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label{color:#9e9e9e;position:absolute;top:0;left:0;height:100%;font-size:1rem;cursor:text;transition:transform .2s ease-out;transform-origin:0% 100%;text-align:initial;transform:translateY(12px);pointer-events:none}.ngx-dropdown-container .ngx-dropdown-list-container .search-container label.active{transform:translateY(-2px) scale(.8);transform-origin:0 0}.ngx-dropdown-container .ngx-dropdown-list-container ul{margin-top:1rem;margin-bottom:1rem;list-style-type:none;padding-left:0}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li{margin-bottom:2px}.ngx-dropdown-container .ngx-dropdown-list-container ul.selected-items li .nsdicon-close{accent-color:#007bff;font-weight:700;font-size:large}.ngx-dropdown-container .ngx-dropdown-list-container ul.available-items li.active{background-color:#337ab7;color:#fff}.ngx-dropdown-container .ngx-dropdown-list-container ul li{font-size:inherit;cursor:pointer;display:block;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:normal}.ngx-dropdown-container .ngx-disabled{pointer-events:none;background-color:#e9ecef;opacity:1;cursor:no-drop}.scroll-y{max-width:300px;overflow-y:scroll;overflow-x:hidden}\n"] }]
836
836
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { _value: [{
837
837
  type: Input
838
838
  }], options: [{