ng-jvx-multiselect 18.0.5 → 18.0.6

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.
@@ -551,7 +551,7 @@ export class NgJvxMultiselectComponent {
551
551
  // useExisting: forwardRef(() => NgJvxMultiselectComponent),
552
552
  // multi: true,
553
553
  // }
554
- ], queries: [{ propertyName: "optionsTemplate", first: true, predicate: NgJvxOptionsTemplateDirective, descendants: true }, { propertyName: "selectionTemplate", first: true, predicate: NgJvxSelectionTemplateDirective, descendants: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: NgJvxGroupHeaderDirective, descendants: true }], viewQueries: [{ propertyName: "jvxMultiselect", first: true, predicate: ["jvxMultiselect"], descendants: true, static: true }, { propertyName: "valueContainer", first: true, predicate: ["valueContainer"], descendants: true, static: true }, { propertyName: "selectionContainer", first: true, predicate: ["selectionContainer"], descendants: true }, { propertyName: "trigger", first: true, predicate: MenuTriggerDirective, descendants: true, static: true }, { propertyName: "scrollbar", first: true, predicate: ["scrollbar"], descendants: true }, { propertyName: "multiContainer", first: true, predicate: ["multiContainer"], descendants: true }, { propertyName: "placeholderContainer", first: true, predicate: ["placeholderContainer"], descendants: true }, { propertyName: "optionComp", predicate: NgJvxOptionComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"ng-jvx-multiselect\" [ngClass]=\"{'disabled': disabled, 'has-errors': hasErrors}\" #jvxMultiselect>\r\n <!-- START MENU -->\r\n <div [libMenuTriggerFor]=\"menuRef\" (onMenuOpen)=\"onMenuOpen()\" (menuOpened)=\"onMenuOpened()\"\r\n #trigger\r\n (onMenuClose)=\"onMenuClose()\" (menuClosed)=\"onMenuClosed()\"\r\n >\r\n <lib-panel #menuRef [class]=\"['jvx-multiselect-panel', panelClass].join(' ')\" [formGroup]=\"form\"\r\n [yPosition]=\"yPosition\">\r\n @if (closeButton) {\r\n <div class=\"closeMenuButton\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"menu-list-container\"\r\n #menuLIstContainer\r\n [ngStyle]=\"{'overflow-y': 'hidden', 'width': listContainerSize.width, 'min-width.px': 112, 'max-height': '260px', 'height': listContainerSize.height, 'min-height': listContainerSize.minHeight}\">\r\n\r\n <div class=\"search-input-container\" *ngIf=\"!!searchInput\" (click)=\"onSearchInputClick($event)\">\r\n <input type=\"text\" [placeholder]=\"searchLabel\" [ngModel]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"\r\n [ngJvxFocus]=\"isOpen\"\r\n (input)=\"onSearchValueChange($event)\"/>\r\n </div>\r\n <div\r\n [ngStyle]=\"{height: searchInput && selectionContainer.clientHeight > 220 || selectionContainer.clientHeight > 260? 260 - (searchInput? 40 : 0) + 'px': 'auto'}\">\r\n <ng-scrollbar style=\"width: 100%\"\r\n smoothScroll\r\n [visibility]=\"'hover'\"\r\n [appearance]=\"'compact'\"\r\n [sensorDisabled]=\"isLoading\"\r\n [autoHeightDisabled]=\"false\" #scrollbar>\r\n <div #selectionContainer (click)=\"onCLickOnMenu($event)\">\r\n <div #selection\r\n *ngIf=\"showList\"\r\n [ngStyle]=\"{'padding': 0, 'width': listContainerSize.width, 'min-width.px': 112}\"\r\n ngDefaultControl\r\n formControlName=\"selectionValue\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"!!groupBy\">\r\n <ng-container *ngFor=\"let opt of orderedOptions\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"groupHeaderTemplate? groupHeaderTemplate.template: defaultGroupHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: opt}\"></ng-container>\r\n\r\n <ng-jvx-option *ngFor=\"let option of opt.options\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!groupBy || groupBy.length === 0\">\r\n <ng-jvx-option *ngFor=\"let option of selectableOptions\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n </div>\r\n\r\n </div>\r\n <div class=\"menu-footer\">\r\n <ng-content select=\"[ng-jvx-footer]\"></ng-content>\r\n </div>\r\n\r\n </lib-panel>\r\n </div>\r\n <!-- END MENU -->\r\n <!-- START INPUT -->\r\n <div [ngClass]=\"{'ng-jvx-multiselect-value-container': true, 'is-open': isOpen}\"\r\n (click)=\"clickOnMenuTrigger($event)\"\r\n #valueContainer>\r\n @if (value.length === 0) {\r\n <div class=\"ng-jvx-multiselect__placeholder\" #placeholderContainer>\r\n <ng-content select=\"[placeholder]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-value multi-value-container\" *ngIf=\"multi\" #multiContainer>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultMultiSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: value}\"></ng-container>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value single-value-container\" *ngIf=\"!multi\">\r\n <div *ngFor=\"let val of value\" style=\"width: 100%;\">\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: val}\"></ng-container>\r\n </div>\r\n </div>\r\n @if (clearable && value.length > 0) {\r\n <div class=\"ng-jvx-multiselect__remove-button\" (click)=\"clear($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-arrow\">\r\n @if (!isLoading) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z\"></path>\r\n </svg>\r\n } @else {\r\n <div class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- END INPUT -->\r\n</div>\r\n<ng-template #defaultTemplate let-option>\r\n <div style=\"height: 100%; display: flex; align-items: center\">\r\n <div style=\"max-width: 100%;\r\n padding-inline: .3rem;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\">{{ option[itemText] }}\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectionTemplate let-value>\r\n {{ value[itemText] }}\r\n</ng-template>\r\n\r\n<ng-template #defaultMultiSelectionTemplate let-value>\r\n <div style=\"display: flex; gap: 0.3rem; flex-wrap: wrap;\">\r\n @for (val of value; track val[itemValue]) {\r\n <lib-chip class=\"ng-jvx-multiselect-chip\" [disabled]=\"this.disabled\" (removed)=\"deselect(val)\">\r\n {{ val[itemText] }}\r\n </lib-chip>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultGroupHeaderTemplate let-opt>\r\n <div style=\"padding-inline: 15px\"><strong>{{ opt.group }}</strong></div>\r\n</ng-template>\r\n", styles: ["ng-jvx-multiselect{display:flex;align-items:center;width:100%}ng-jvx-multiselect .ng-jvx-multiselect{width:100%;display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container{width:100%;display:flex;cursor:pointer;position:relative;justify-content:space-between;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__placeholder{height:100%;display:flex;align-items:center;position:absolute}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-value{flex:1 1 100%;max-width:calc(100% - 28px);display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__remove-button{display:flex;height:100%;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow{width:24px;padding-right:4px;display:flex;align-items:center;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow svg{transition:transform .3s ease-in-out}@keyframes lds-ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring{display:inline-block;position:relative;width:24px;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div{box-sizing:border-box;display:block;position:absolute;width:6px;height:16px;margin:4px;border:2px solid;border-radius:50%;animation:lds-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--jvx-multiselect-accent) transparent transparent transparent}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(1){animation-delay:-.45s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(2){animation-delay:-.3s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(3){animation-delay:-.15s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container.is-open .ng-jvx-multiselect-arrow svg{transform:rotate(180deg)}ng-jvx-multiselect .ng-jvx-multiselect.disabled{pointer-events:none}ng-jvx-multiselect .ng-jvx-multiselect.disabled .ng-jvx-multiselect-arrow svg{opacity:.3}ng-jvx-multiselect .ng-jvx-multiselect.has-errors{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.single-value-container{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.multi-value-container{width:100%}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-arrow svg{color:red}.menu-list-container{max-height:300px;display:flex;flex-direction:column}.menu-footer{max-height:30px;overflow:hidden}.cdk-overlay-pane .closeMenuButton{height:22px;width:22px;background-color:var(--jvx-multiselect-primary);position:absolute;top:-11px;right:11px;border-radius:100%;cursor:pointer;color:#fff;z-index:10}.cdk-overlay-pane .closeMenuButton svg{fill:var(--jvx-multiselect-on-primary);font-size:15px;height:100%;width:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.NgScrollbar, selector: "ng-scrollbar", inputs: ["disabled", "sensorDisabled", "pointerEventsDisabled", "viewportPropagateMouseMove", "autoHeightDisabled", "autoWidthDisabled", "viewClass", "trackClass", "thumbClass", "minThumbSize", "trackClickScrollDuration", "pointerEventsMethod", "track", "visibility", "appearance", "position", "sensorDebounce", "scrollAuditTime"], outputs: ["updated"], exportAs: ["ngScrollbar"] }, { kind: "directive", type: i5.SmoothScroll, selector: "[smoothScroll], [smooth-scroll]", exportAs: ["smoothScroll"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.PanelComponent, selector: "lib-panel", inputs: ["trigger", "yPosition"], outputs: ["onClose", "onClosed", "onOpened"] }, { kind: "component", type: i7.ChipComponent, selector: "lib-chip", inputs: ["disabled"], outputs: ["removed"] }, { kind: "directive", type: i8.MenuTriggerDirective, selector: "[lib-menu-trigger-for], [libMenuTriggerFor]", inputs: ["libMenuTriggerFor"], outputs: ["closed", "onMenuOpen", "menuOpened", "onMenuClose", "menuClosed"] }, { kind: "component", type: i9.NgJvxOptionComponent, selector: "ng-jvx-option", inputs: ["value", "disabled", "isSelected"], outputs: ["clickOnOption"] }, { kind: "directive", type: i10.NgJvxFocusDirective, selector: "[ngJvxFocus]", inputs: ["ngJvxFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
554
+ ], queries: [{ propertyName: "optionsTemplate", first: true, predicate: NgJvxOptionsTemplateDirective, descendants: true }, { propertyName: "selectionTemplate", first: true, predicate: NgJvxSelectionTemplateDirective, descendants: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: NgJvxGroupHeaderDirective, descendants: true }], viewQueries: [{ propertyName: "jvxMultiselect", first: true, predicate: ["jvxMultiselect"], descendants: true, static: true }, { propertyName: "valueContainer", first: true, predicate: ["valueContainer"], descendants: true, static: true }, { propertyName: "selectionContainer", first: true, predicate: ["selectionContainer"], descendants: true }, { propertyName: "trigger", first: true, predicate: MenuTriggerDirective, descendants: true, static: true }, { propertyName: "scrollbar", first: true, predicate: ["scrollbar"], descendants: true }, { propertyName: "multiContainer", first: true, predicate: ["multiContainer"], descendants: true }, { propertyName: "placeholderContainer", first: true, predicate: ["placeholderContainer"], descendants: true }, { propertyName: "optionComp", predicate: NgJvxOptionComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"ng-jvx-multiselect\" [ngClass]=\"{'disabled': disabled, 'has-errors': hasErrors}\" #jvxMultiselect>\r\n <!-- START MENU -->\r\n <div [libMenuTriggerFor]=\"menuRef\" (onMenuOpen)=\"onMenuOpen()\" (menuOpened)=\"onMenuOpened()\"\r\n #trigger\r\n (onMenuClose)=\"onMenuClose()\" (menuClosed)=\"onMenuClosed()\"\r\n >\r\n <lib-panel #menuRef [class]=\"['jvx-multiselect-panel', panelClass].join(' ')\" [formGroup]=\"form\"\r\n [yPosition]=\"yPosition\">\r\n @if (closeButton) {\r\n <div class=\"closeMenuButton\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"menu-list-container\"\r\n #menuLIstContainer\r\n [ngStyle]=\"{'overflow-y': 'hidden', 'width': listContainerSize.width, 'min-width.px': 112, 'max-height': '260px', 'height': listContainerSize.height, 'min-height': listContainerSize.minHeight}\">\r\n\r\n <div class=\"search-input-container\" *ngIf=\"!!searchInput\" (click)=\"onSearchInputClick($event)\">\r\n <input type=\"text\" [placeholder]=\"searchLabel\" [ngModel]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"\r\n [ngJvxFocus]=\"isOpen\"\r\n (input)=\"onSearchValueChange($event)\"/>\r\n </div>\r\n <div\r\n [ngStyle]=\"{height: searchInput && selectionContainer.clientHeight > 220 || selectionContainer.clientHeight > 260? 260 - (searchInput? 40 : 0) + 'px': 'auto'}\">\r\n <ng-scrollbar style=\"width: 100%\"\r\n smoothScroll\r\n [visibility]=\"'hover'\"\r\n [appearance]=\"'compact'\"\r\n [sensorDisabled]=\"isLoading\"\r\n [autoHeightDisabled]=\"false\" #scrollbar>\r\n <div #selectionContainer (click)=\"onCLickOnMenu($event)\">\r\n <div #selection\r\n *ngIf=\"showList\"\r\n [ngStyle]=\"{'padding': 0, 'width': listContainerSize.width, 'min-width.px': 112}\"\r\n ngDefaultControl\r\n formControlName=\"selectionValue\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"!!groupBy\">\r\n <ng-container *ngFor=\"let opt of orderedOptions\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"groupHeaderTemplate? groupHeaderTemplate.template: defaultGroupHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: opt}\"></ng-container>\r\n\r\n <ng-jvx-option *ngFor=\"let option of opt.options\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!groupBy || groupBy.length === 0\">\r\n <ng-jvx-option *ngFor=\"let option of selectableOptions\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n </div>\r\n\r\n </div>\r\n <div class=\"menu-footer\">\r\n <ng-content select=\"[ng-jvx-footer]\"></ng-content>\r\n </div>\r\n\r\n </lib-panel>\r\n </div>\r\n <!-- END MENU -->\r\n <!-- START INPUT -->\r\n <div [ngClass]=\"{'ng-jvx-multiselect-value-container': true, 'is-open': isOpen}\"\r\n (click)=\"clickOnMenuTrigger($event)\"\r\n #valueContainer>\r\n @if (value.length === 0) {\r\n <div class=\"ng-jvx-multiselect__placeholder\" #placeholderContainer>\r\n <ng-content select=\"[placeholder]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-value multi-value-container\" *ngIf=\"multi\" #multiContainer>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultMultiSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: value}\"></ng-container>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value single-value-container\" *ngIf=\"!multi\">\r\n <div *ngFor=\"let val of value\" style=\"width: 100%;\">\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: val}\"></ng-container>\r\n </div>\r\n </div>\r\n @if (clearable && value.length > 0) {\r\n <div class=\"ng-jvx-multiselect__remove-button\" (click)=\"clear($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-arrow\">\r\n @if (!isLoading) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z\"></path>\r\n </svg>\r\n } @else {\r\n <div class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- END INPUT -->\r\n</div>\r\n<ng-template #defaultTemplate let-option>\r\n <div style=\"min-height: 48px; height: 100%; display: flex; align-items: center\">\r\n <div style=\"max-width: 100%;\r\n padding-inline: .3rem;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\">{{ option[itemText] }}\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectionTemplate let-value>\r\n {{ value[itemText] }}\r\n</ng-template>\r\n\r\n<ng-template #defaultMultiSelectionTemplate let-value>\r\n <div style=\"display: flex; gap: 0.3rem; flex-wrap: wrap;\">\r\n @for (val of value; track val[itemValue]) {\r\n <lib-chip class=\"ng-jvx-multiselect-chip\" [disabled]=\"this.disabled\" (removed)=\"deselect(val)\">\r\n {{ val[itemText] }}\r\n </lib-chip>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultGroupHeaderTemplate let-opt>\r\n <div style=\"padding-inline: 15px\"><strong>{{ opt.group }}</strong></div>\r\n</ng-template>\r\n", styles: ["ng-jvx-multiselect{display:flex;align-items:center;width:100%}ng-jvx-multiselect .ng-jvx-multiselect{width:100%;display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container{width:100%;display:flex;cursor:pointer;position:relative;justify-content:space-between;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__placeholder{height:100%;display:flex;align-items:center;position:absolute}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-value{flex:1 1 100%;max-width:calc(100% - 28px);display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__remove-button{display:flex;height:100%;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow{width:24px;padding-right:4px;display:flex;align-items:center;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow svg{transition:transform .3s ease-in-out}@keyframes lds-ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring{display:inline-block;position:relative;width:24px;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div{box-sizing:border-box;display:block;position:absolute;width:6px;height:16px;margin:4px;border:2px solid;border-radius:50%;animation:lds-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--jvx-multiselect-accent) transparent transparent transparent}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(1){animation-delay:-.45s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(2){animation-delay:-.3s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(3){animation-delay:-.15s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container.is-open .ng-jvx-multiselect-arrow svg{transform:rotate(180deg)}ng-jvx-multiselect .ng-jvx-multiselect.disabled{pointer-events:none}ng-jvx-multiselect .ng-jvx-multiselect.disabled .ng-jvx-multiselect-arrow svg{opacity:.3}ng-jvx-multiselect .ng-jvx-multiselect.has-errors{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.single-value-container{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.multi-value-container{width:100%}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-arrow svg{color:red}.menu-list-container{max-height:300px;display:flex;flex-direction:column}.menu-footer{max-height:30px;overflow:hidden}.cdk-overlay-pane .closeMenuButton{height:22px;width:22px;background-color:var(--jvx-multiselect-primary);position:absolute;top:-11px;right:11px;border-radius:100%;cursor:pointer;color:#fff;z-index:10}.cdk-overlay-pane .closeMenuButton svg{fill:var(--jvx-multiselect-on-primary);font-size:15px;height:100%;width:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.NgScrollbar, selector: "ng-scrollbar", inputs: ["disabled", "sensorDisabled", "pointerEventsDisabled", "viewportPropagateMouseMove", "autoHeightDisabled", "autoWidthDisabled", "viewClass", "trackClass", "thumbClass", "minThumbSize", "trackClickScrollDuration", "pointerEventsMethod", "track", "visibility", "appearance", "position", "sensorDebounce", "scrollAuditTime"], outputs: ["updated"], exportAs: ["ngScrollbar"] }, { kind: "directive", type: i5.SmoothScroll, selector: "[smoothScroll], [smooth-scroll]", exportAs: ["smoothScroll"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.PanelComponent, selector: "lib-panel", inputs: ["trigger", "yPosition"], outputs: ["onClose", "onClosed", "onOpened"] }, { kind: "component", type: i7.ChipComponent, selector: "lib-chip", inputs: ["disabled"], outputs: ["removed"] }, { kind: "directive", type: i8.MenuTriggerDirective, selector: "[lib-menu-trigger-for], [libMenuTriggerFor]", inputs: ["libMenuTriggerFor"], outputs: ["closed", "onMenuOpen", "menuOpened", "onMenuClose", "menuClosed"] }, { kind: "component", type: i9.NgJvxOptionComponent, selector: "ng-jvx-option", inputs: ["value", "disabled", "isSelected"], outputs: ["clickOnOption"] }, { kind: "directive", type: i10.NgJvxFocusDirective, selector: "[ngJvxFocus]", inputs: ["ngJvxFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
555
555
  }
556
556
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgJvxMultiselectComponent, decorators: [{
557
557
  type: Component,
@@ -561,7 +561,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
561
561
  // useExisting: forwardRef(() => NgJvxMultiselectComponent),
562
562
  // multi: true,
563
563
  // }
564
- ], template: "<div class=\"ng-jvx-multiselect\" [ngClass]=\"{'disabled': disabled, 'has-errors': hasErrors}\" #jvxMultiselect>\r\n <!-- START MENU -->\r\n <div [libMenuTriggerFor]=\"menuRef\" (onMenuOpen)=\"onMenuOpen()\" (menuOpened)=\"onMenuOpened()\"\r\n #trigger\r\n (onMenuClose)=\"onMenuClose()\" (menuClosed)=\"onMenuClosed()\"\r\n >\r\n <lib-panel #menuRef [class]=\"['jvx-multiselect-panel', panelClass].join(' ')\" [formGroup]=\"form\"\r\n [yPosition]=\"yPosition\">\r\n @if (closeButton) {\r\n <div class=\"closeMenuButton\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"menu-list-container\"\r\n #menuLIstContainer\r\n [ngStyle]=\"{'overflow-y': 'hidden', 'width': listContainerSize.width, 'min-width.px': 112, 'max-height': '260px', 'height': listContainerSize.height, 'min-height': listContainerSize.minHeight}\">\r\n\r\n <div class=\"search-input-container\" *ngIf=\"!!searchInput\" (click)=\"onSearchInputClick($event)\">\r\n <input type=\"text\" [placeholder]=\"searchLabel\" [ngModel]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"\r\n [ngJvxFocus]=\"isOpen\"\r\n (input)=\"onSearchValueChange($event)\"/>\r\n </div>\r\n <div\r\n [ngStyle]=\"{height: searchInput && selectionContainer.clientHeight > 220 || selectionContainer.clientHeight > 260? 260 - (searchInput? 40 : 0) + 'px': 'auto'}\">\r\n <ng-scrollbar style=\"width: 100%\"\r\n smoothScroll\r\n [visibility]=\"'hover'\"\r\n [appearance]=\"'compact'\"\r\n [sensorDisabled]=\"isLoading\"\r\n [autoHeightDisabled]=\"false\" #scrollbar>\r\n <div #selectionContainer (click)=\"onCLickOnMenu($event)\">\r\n <div #selection\r\n *ngIf=\"showList\"\r\n [ngStyle]=\"{'padding': 0, 'width': listContainerSize.width, 'min-width.px': 112}\"\r\n ngDefaultControl\r\n formControlName=\"selectionValue\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"!!groupBy\">\r\n <ng-container *ngFor=\"let opt of orderedOptions\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"groupHeaderTemplate? groupHeaderTemplate.template: defaultGroupHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: opt}\"></ng-container>\r\n\r\n <ng-jvx-option *ngFor=\"let option of opt.options\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!groupBy || groupBy.length === 0\">\r\n <ng-jvx-option *ngFor=\"let option of selectableOptions\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n </div>\r\n\r\n </div>\r\n <div class=\"menu-footer\">\r\n <ng-content select=\"[ng-jvx-footer]\"></ng-content>\r\n </div>\r\n\r\n </lib-panel>\r\n </div>\r\n <!-- END MENU -->\r\n <!-- START INPUT -->\r\n <div [ngClass]=\"{'ng-jvx-multiselect-value-container': true, 'is-open': isOpen}\"\r\n (click)=\"clickOnMenuTrigger($event)\"\r\n #valueContainer>\r\n @if (value.length === 0) {\r\n <div class=\"ng-jvx-multiselect__placeholder\" #placeholderContainer>\r\n <ng-content select=\"[placeholder]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-value multi-value-container\" *ngIf=\"multi\" #multiContainer>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultMultiSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: value}\"></ng-container>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value single-value-container\" *ngIf=\"!multi\">\r\n <div *ngFor=\"let val of value\" style=\"width: 100%;\">\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: val}\"></ng-container>\r\n </div>\r\n </div>\r\n @if (clearable && value.length > 0) {\r\n <div class=\"ng-jvx-multiselect__remove-button\" (click)=\"clear($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-arrow\">\r\n @if (!isLoading) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z\"></path>\r\n </svg>\r\n } @else {\r\n <div class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- END INPUT -->\r\n</div>\r\n<ng-template #defaultTemplate let-option>\r\n <div style=\"height: 100%; display: flex; align-items: center\">\r\n <div style=\"max-width: 100%;\r\n padding-inline: .3rem;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\">{{ option[itemText] }}\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectionTemplate let-value>\r\n {{ value[itemText] }}\r\n</ng-template>\r\n\r\n<ng-template #defaultMultiSelectionTemplate let-value>\r\n <div style=\"display: flex; gap: 0.3rem; flex-wrap: wrap;\">\r\n @for (val of value; track val[itemValue]) {\r\n <lib-chip class=\"ng-jvx-multiselect-chip\" [disabled]=\"this.disabled\" (removed)=\"deselect(val)\">\r\n {{ val[itemText] }}\r\n </lib-chip>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultGroupHeaderTemplate let-opt>\r\n <div style=\"padding-inline: 15px\"><strong>{{ opt.group }}</strong></div>\r\n</ng-template>\r\n", styles: ["ng-jvx-multiselect{display:flex;align-items:center;width:100%}ng-jvx-multiselect .ng-jvx-multiselect{width:100%;display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container{width:100%;display:flex;cursor:pointer;position:relative;justify-content:space-between;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__placeholder{height:100%;display:flex;align-items:center;position:absolute}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-value{flex:1 1 100%;max-width:calc(100% - 28px);display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__remove-button{display:flex;height:100%;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow{width:24px;padding-right:4px;display:flex;align-items:center;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow svg{transition:transform .3s ease-in-out}@keyframes lds-ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring{display:inline-block;position:relative;width:24px;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div{box-sizing:border-box;display:block;position:absolute;width:6px;height:16px;margin:4px;border:2px solid;border-radius:50%;animation:lds-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--jvx-multiselect-accent) transparent transparent transparent}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(1){animation-delay:-.45s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(2){animation-delay:-.3s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(3){animation-delay:-.15s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container.is-open .ng-jvx-multiselect-arrow svg{transform:rotate(180deg)}ng-jvx-multiselect .ng-jvx-multiselect.disabled{pointer-events:none}ng-jvx-multiselect .ng-jvx-multiselect.disabled .ng-jvx-multiselect-arrow svg{opacity:.3}ng-jvx-multiselect .ng-jvx-multiselect.has-errors{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.single-value-container{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.multi-value-container{width:100%}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-arrow svg{color:red}.menu-list-container{max-height:300px;display:flex;flex-direction:column}.menu-footer{max-height:30px;overflow:hidden}.cdk-overlay-pane .closeMenuButton{height:22px;width:22px;background-color:var(--jvx-multiselect-primary);position:absolute;top:-11px;right:11px;border-radius:100%;cursor:pointer;color:#fff;z-index:10}.cdk-overlay-pane .closeMenuButton svg{fill:var(--jvx-multiselect-on-primary);font-size:15px;height:100%;width:100%}\n"] }]
564
+ ], template: "<div class=\"ng-jvx-multiselect\" [ngClass]=\"{'disabled': disabled, 'has-errors': hasErrors}\" #jvxMultiselect>\r\n <!-- START MENU -->\r\n <div [libMenuTriggerFor]=\"menuRef\" (onMenuOpen)=\"onMenuOpen()\" (menuOpened)=\"onMenuOpened()\"\r\n #trigger\r\n (onMenuClose)=\"onMenuClose()\" (menuClosed)=\"onMenuClosed()\"\r\n >\r\n <lib-panel #menuRef [class]=\"['jvx-multiselect-panel', panelClass].join(' ')\" [formGroup]=\"form\"\r\n [yPosition]=\"yPosition\">\r\n @if (closeButton) {\r\n <div class=\"closeMenuButton\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"menu-list-container\"\r\n #menuLIstContainer\r\n [ngStyle]=\"{'overflow-y': 'hidden', 'width': listContainerSize.width, 'min-width.px': 112, 'max-height': '260px', 'height': listContainerSize.height, 'min-height': listContainerSize.minHeight}\">\r\n\r\n <div class=\"search-input-container\" *ngIf=\"!!searchInput\" (click)=\"onSearchInputClick($event)\">\r\n <input type=\"text\" [placeholder]=\"searchLabel\" [ngModel]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"\r\n [ngJvxFocus]=\"isOpen\"\r\n (input)=\"onSearchValueChange($event)\"/>\r\n </div>\r\n <div\r\n [ngStyle]=\"{height: searchInput && selectionContainer.clientHeight > 220 || selectionContainer.clientHeight > 260? 260 - (searchInput? 40 : 0) + 'px': 'auto'}\">\r\n <ng-scrollbar style=\"width: 100%\"\r\n smoothScroll\r\n [visibility]=\"'hover'\"\r\n [appearance]=\"'compact'\"\r\n [sensorDisabled]=\"isLoading\"\r\n [autoHeightDisabled]=\"false\" #scrollbar>\r\n <div #selectionContainer (click)=\"onCLickOnMenu($event)\">\r\n <div #selection\r\n *ngIf=\"showList\"\r\n [ngStyle]=\"{'padding': 0, 'width': listContainerSize.width, 'min-width.px': 112}\"\r\n ngDefaultControl\r\n formControlName=\"selectionValue\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"!!groupBy\">\r\n <ng-container *ngFor=\"let opt of orderedOptions\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"groupHeaderTemplate? groupHeaderTemplate.template: defaultGroupHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: opt}\"></ng-container>\r\n\r\n <ng-jvx-option *ngFor=\"let option of opt.options\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!groupBy || groupBy.length === 0\">\r\n <ng-jvx-option *ngFor=\"let option of selectableOptions\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n </div>\r\n\r\n </div>\r\n <div class=\"menu-footer\">\r\n <ng-content select=\"[ng-jvx-footer]\"></ng-content>\r\n </div>\r\n\r\n </lib-panel>\r\n </div>\r\n <!-- END MENU -->\r\n <!-- START INPUT -->\r\n <div [ngClass]=\"{'ng-jvx-multiselect-value-container': true, 'is-open': isOpen}\"\r\n (click)=\"clickOnMenuTrigger($event)\"\r\n #valueContainer>\r\n @if (value.length === 0) {\r\n <div class=\"ng-jvx-multiselect__placeholder\" #placeholderContainer>\r\n <ng-content select=\"[placeholder]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-value multi-value-container\" *ngIf=\"multi\" #multiContainer>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultMultiSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: value}\"></ng-container>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value single-value-container\" *ngIf=\"!multi\">\r\n <div *ngFor=\"let val of value\" style=\"width: 100%;\">\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: val}\"></ng-container>\r\n </div>\r\n </div>\r\n @if (clearable && value.length > 0) {\r\n <div class=\"ng-jvx-multiselect__remove-button\" (click)=\"clear($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-arrow\">\r\n @if (!isLoading) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z\"></path>\r\n </svg>\r\n } @else {\r\n <div class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- END INPUT -->\r\n</div>\r\n<ng-template #defaultTemplate let-option>\r\n <div style=\"min-height: 48px; height: 100%; display: flex; align-items: center\">\r\n <div style=\"max-width: 100%;\r\n padding-inline: .3rem;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\">{{ option[itemText] }}\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectionTemplate let-value>\r\n {{ value[itemText] }}\r\n</ng-template>\r\n\r\n<ng-template #defaultMultiSelectionTemplate let-value>\r\n <div style=\"display: flex; gap: 0.3rem; flex-wrap: wrap;\">\r\n @for (val of value; track val[itemValue]) {\r\n <lib-chip class=\"ng-jvx-multiselect-chip\" [disabled]=\"this.disabled\" (removed)=\"deselect(val)\">\r\n {{ val[itemText] }}\r\n </lib-chip>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultGroupHeaderTemplate let-opt>\r\n <div style=\"padding-inline: 15px\"><strong>{{ opt.group }}</strong></div>\r\n</ng-template>\r\n", styles: ["ng-jvx-multiselect{display:flex;align-items:center;width:100%}ng-jvx-multiselect .ng-jvx-multiselect{width:100%;display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container{width:100%;display:flex;cursor:pointer;position:relative;justify-content:space-between;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__placeholder{height:100%;display:flex;align-items:center;position:absolute}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-value{flex:1 1 100%;max-width:calc(100% - 28px);display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__remove-button{display:flex;height:100%;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow{width:24px;padding-right:4px;display:flex;align-items:center;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow svg{transition:transform .3s ease-in-out}@keyframes lds-ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring{display:inline-block;position:relative;width:24px;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div{box-sizing:border-box;display:block;position:absolute;width:6px;height:16px;margin:4px;border:2px solid;border-radius:50%;animation:lds-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--jvx-multiselect-accent) transparent transparent transparent}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(1){animation-delay:-.45s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(2){animation-delay:-.3s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(3){animation-delay:-.15s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container.is-open .ng-jvx-multiselect-arrow svg{transform:rotate(180deg)}ng-jvx-multiselect .ng-jvx-multiselect.disabled{pointer-events:none}ng-jvx-multiselect .ng-jvx-multiselect.disabled .ng-jvx-multiselect-arrow svg{opacity:.3}ng-jvx-multiselect .ng-jvx-multiselect.has-errors{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.single-value-container{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.multi-value-container{width:100%}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-arrow svg{color:red}.menu-list-container{max-height:300px;display:flex;flex-direction:column}.menu-footer{max-height:30px;overflow:hidden}.cdk-overlay-pane .closeMenuButton{height:22px;width:22px;background-color:var(--jvx-multiselect-primary);position:absolute;top:-11px;right:11px;border-radius:100%;cursor:pointer;color:#fff;z-index:10}.cdk-overlay-pane .closeMenuButton svg{fill:var(--jvx-multiselect-on-primary);font-size:15px;height:100%;width:100%}\n"] }]
565
565
  }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.NgJvxMultiselectService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.NgControl, decorators: [{
566
566
  type: Optional
567
567
  }, {
@@ -671,4 +671,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
671
671
  }], scrollEnd: [{
672
672
  type: Output
673
673
  }] } });
674
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctanZ4LW11bHRpc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWp2eC1tdWx0aXNlbGVjdC9zcmMvbGliL25nLWp2eC1tdWx0aXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1qdngtbXVsdGlzZWxlY3Qvc3JjL2xpYi9uZy1qdngtbXVsdGlzZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFFWixXQUFXLEVBQ1gsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sSUFBSSxFQUVKLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQzdGLE9BQU8sRUFBc0Qsa0JBQWtCLEVBQW1CLE1BQU0sZ0JBQWdCLENBQUM7QUFDekgsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFN0UsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRWpELE9BQU8sRUFBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEgsT0FBTyxFQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVoRyxPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUNqRyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxP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QVc7c0JBQW5CLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRU8sS0FBSztzQkFBakIsS0FBSztnQkFjRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdGLFFBQVE7c0JBRFgsS0FBSztnQkFjRixRQUFRO3NCQURYLEtBQUs7Z0JBWUYsUUFBUTtzQkFEWCxLQUFLO2dCQXdCSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGQsIERvQ2hlY2ssXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFNlbGYsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdKdnhPcHRpb25zVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy9uZy1qdngtb3B0aW9ucy10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wsIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7TmdKdnhPcHRpb25Db21wb25lbnR9IGZyb20gJy4vbmctanZ4LW9wdGlvbi9uZy1qdngtb3B0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TmdKdnhNdWx0aXNlbGVjdFNlcnZpY2V9IGZyb20gJy4vbmctanZ4LW11bHRpc2VsZWN0LnNlcnZpY2UnO1xyXG5pbXBvcnQge0h0dHBIZWFkZXJzfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7TmdTY3JvbGxiYXJ9IGZyb20gJ25neC1zY3JvbGxiYXInO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCwgdGhyb3R0bGVUaW1lfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgZnJvbUV2ZW50LCBub29wLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGltZXJ9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge05nSnZ4TXVsdGlPcHRpb25NYXBwZXIsIE5nSnZ4T3B0aW9uTWFwcGVyfSBmcm9tICcuL2ludGVyZmFjZXMvbmctanZ4LW9wdGlvbi1tYXBwZXInO1xyXG5pbXBvcnQge05nSnZ4U2VsZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy9uZy1qdngtc2VsZWN0aW9uLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQge05nSnZ4R3JvdXBIZWFkZXJEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy9uZy1qdngtZ3JvdXAtaGVhZGVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7TmdKdnhTZWFyY2hNYXBwZXJ9IGZyb20gJy4vaW50ZXJmYWNlcy9uZy1qdngtc2VhcmNoLW1hcHBlcic7XHJcbmltcG9ydCB7TmdKdnhHcm91cCwgTmdKdnhHcm91cE1hcHBlcn0gZnJvbSAnLi9pbnRlcmZhY2VzL25nLWp2eC1ncm91cC1tYXBwZXInO1xyXG5pbXBvcnQge01lbnVUcmlnZ2VyRGlyZWN0aXZlfSBmcm9tICcuL3BhbmVsL21lbnUtdHJpZ2dlci9tZW51LXRyaWdnZXIuZGlyZWN0aXZlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ25nLWp2eC1tdWx0aXNlbGVjdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25nLWp2eC1tdWx0aXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbmctanZ4LW11bHRpc2VsZWN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIC8vIHtcclxuICAgIC8vICAgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCxcclxuICAgIC8vICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmdKdnhNdWx0aXNlbGVjdENvbXBvbmVudCksXHJcbiAgICAvLyAgIG11bHRpOiB0cnVlLFxyXG4gICAgLy8gfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5nSnZ4TXVsdGlzZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIERvQ2hlY2ssIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICBzdGF0aWMgbmV4dElkID0gMDtcclxuICBASG9zdEJpbmRpbmcoKSBpZCA9IGBqdngtbXVsdGlzZWxlY3QtJHtOZ0p2eE11bHRpc2VsZWN0Q29tcG9uZW50Lm5leHRJZCsrfWA7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZmxvYXRpbmcnKVxyXG4gIGdldCBzaG91bGRMYWJlbEZsb2F0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA+IDAgfHwgISF0aGlzLmlzUGxhY2Vob2xkZXJBY3RpdmU7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdqdnhNdWx0aXNlbGVjdCcsIHtzdGF0aWM6IHRydWV9KSBqdnhNdWx0aXNlbGVjdDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd2YWx1ZUNvbnRhaW5lcicsIHtzdGF0aWM6IHRydWV9KSB2YWx1ZUNvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdzZWxlY3Rpb25Db250YWluZXInLCB7c3RhdGljOiBmYWxzZX0pIHNlbGVjdGlvbkNvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuICAvLyBAVmlld0NoaWxkKCdzZWxlY3Rpb24nLCB7c3RhdGljOiB0cnVlfSkgc2VsZWN0aW9uOiBNYXRTZWxlY3Rpb25MaXN0O1xyXG4gIEBWaWV3Q2hpbGQoTWVudVRyaWdnZXJEaXJlY3RpdmUsIHtzdGF0aWM6IHRydWV9KSB0cmlnZ2VyOiBNZW51VHJpZ2dlckRpcmVjdGl2ZTtcclxuICBAVmlld0NoaWxkKCdzY3JvbGxiYXInLCB7c3RhdGljOiBmYWxzZX0pIHNjcm9sbGJhcjogTmdTY3JvbGxiYXI7XHJcbiAgQFZpZXdDaGlsZCgnbXVsdGlDb250YWluZXInLCB7c3RhdGljOiBmYWxzZX0pIG11bHRpQ29udGFpbmVyOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3BsYWNlaG9sZGVyQ29udGFpbmVyJywge3N0YXRpYzogZmFsc2V9KSBwbGFjZWhvbGRlckNvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkcmVuKE5nSnZ4T3B0aW9uQ29tcG9uZW50KSBvcHRpb25Db21wOiBRdWVyeUxpc3Q8TmdKdnhPcHRpb25Db21wb25lbnQ+O1xyXG4gIEBDb250ZW50Q2hpbGQoTmdKdnhPcHRpb25zVGVtcGxhdGVEaXJlY3RpdmUpIG9wdGlvbnNUZW1wbGF0ZTogTmdKdnhPcHRpb25zVGVtcGxhdGVEaXJlY3RpdmUgfCBudWxsID0gbnVsbDtcclxuICBAQ29udGVudENoaWxkKE5nSnZ4U2VsZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmUpIHNlbGVjdGlvblRlbXBsYXRlOiBOZ0p2eFNlbGVjdGlvblRlbXBsYXRlRGlyZWN0aXZlIHwgbnVsbCA9IG51bGw7XHJcbiAgQENvbnRlbnRDaGlsZChOZ0p2eEdyb3VwSGVhZGVyRGlyZWN0aXZlKSBncm91cEhlYWRlclRlbXBsYXRlOiBOZ0p2eEdyb3VwSGVhZGVyRGlyZWN0aXZlIHwgbnVsbCA9IG51bGw7XHJcbiAgLy8gQENvbnRlbnRDaGlsZChOZ0p2eE9wdGlvbkNvbXBvbmVudCkgb3B0aW9uQ29tcDogTmdKdnhPcHRpb25Db21wb25lbnQ7XHJcbiAgLy8gQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZikgb3B0aW9uc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgb3B0aW9uczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBtdWx0aSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVybCA9ICcnO1xyXG4gIEBJbnB1dCgpIHJlcXVlc3RUeXBlOiAnZ2V0JyB8ICdwb3N0JyA9ICdnZXQnO1xyXG4gIEBJbnB1dCgpIGl0ZW1WYWx1ZSA9ICd2YWx1ZSc7XHJcbiAgQElucHV0KCkgaXRlbVRleHQgPSAndGV4dCc7XHJcbiAgQElucHV0KCkgaWdub3JlUGFnaW5hdGlvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNsb3NlT25DbGljayA9IHRydWU7XHJcbiAgQElucHV0KCkgaGFzRXJyb3JzID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VhcmNoTW9kZTogbnVsbCB8ICdzZXJ2ZXInIHwgJ2NsaWVudCcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHNlYXJjaElucHV0ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VhcmNoTGFiZWwgPSAnc2VhcmNoJztcclxuICBASW5wdXQoKSBsaXN0UHJvcCA9ICcnO1xyXG4gIEBJbnB1dCgpIHRvdGFsUm93c1Byb3AgPSAnJztcclxuICBASW5wdXQoKSBwYW5lbENsYXNzID0gJyc7XHJcbiAgQElucHV0KCkgc2VhcmNoUHJvcCA9ICdzZWFyY2gnO1xyXG4gIEBJbnB1dCgpIGNsb3NlQnV0dG9uID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWFwcGVyOiBOZ0p2eE9wdGlvbk1hcHBlcjxhbnk+ID0ge1xyXG4gICAgbWFwT3B0aW9uKHNvdXJjZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIG9mKHNvdXJjZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBASW5wdXQoKSBtdWx0aU1hcHBlcjogTmdKdnhNdWx0aU9wdGlvbk1hcHBlcjxhbnk+ID0ge1xyXG4gICAgbWFwT3B0aW9ucyhzb3VyY2U6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIG9mKHNvdXJjZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBASW5wdXQoKSBzZWFyY2hNYXBwZXI6IE5nSnZ4U2VhcmNoTWFwcGVyPGFueT4gPSB7XHJcbiAgICBtYXBTZWFyY2g6IChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgICByZXR1cm4gb2Yob3B0aW9ucy5maWx0ZXIobyA9PiBvW3RoaXMuaXRlbVRleHRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzb3VyY2UudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSkpO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgQElucHV0KCkgZ3JvdXBCeTogTmdKdnhHcm91cE1hcHBlcjxhbnk+IHwgc3RyaW5nIHwgbnVsbDtcclxuXHJcbiAgQElucHV0KCkgc2V0IHZhbHVlKHZhbHVlOiBhbnlbXSkge1xyXG4gICAgdGhpcy5wVmFsdWUgPSB2YWx1ZSA/PyBbXTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdzZWxlY3Rpb25WYWx1ZScpLnNldFZhbHVlKHRoaXMucFZhbHVlLm1hcCh2ID0+IHZbdGhpcy5pdGVtVmFsdWVdKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdzZWxlY3Rpb25WYWx1ZScpLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcblxyXG4gIGdldCB2YWx1ZSgpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wVmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSByZXF1ZXN0SGVhZGVyczogSHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgcmVxdWlyZWQocmVxKSB7XHJcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShyZXEpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcclxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLnBhcnRzLmRpc2FibGUoKSA6IHRoaXMucGFydHMuZW5hYmxlKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuaW50UGFnZVNpemU7XHJcbiAgfVxyXG5cclxuICBzZXQgcGFnZVNpemUodmFsOiBudW1iZXIpIHtcclxuICAgIGlmICh2YWwgPCAxNSkge1xyXG4gICAgICB0aGlzLmludFBhZ2VTaXplID0gMTU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludFBhZ2VTaXplID0gdmFsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcclxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICBnZXQgZXJyb3JTdGF0ZSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm5nQ29udHJvbC5pbnZhbGlkICYmIHRoaXMubmdDb250cm9sLnRvdWNoZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG4gIEBPdXRwdXQoKSBqdnhNdWx0aXNlbGVjdE9wZW46IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkganZ4TXVsdGlzZWxlY3RPcGVuZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkganZ4TXVsdGlzZWxlY3RDbG9zZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBqdnhNdWx0aXNlbGVjdENsb3NlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBzY3JvbGxFbmQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHVibGljIGNvbnRyb2xUeXBlID0gJ25nLWp2eC1tdWx0aXNlbGVjdCc7XHJcbiAgcHVibGljIGRvY3VtZW50ID0gZG9jdW1lbnQ7XHJcbiAgcHVibGljIHdpbmRvdyA9IHdpbmRvdztcclxuICBwdWJsaWMgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93TGlzdCA9IHRydWU7XHJcbiAgcHVibGljIGFzeW5jT3B0aW9uczogYW55ID0gW107XHJcbiAgcHVibGljIHNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgcHVibGljIG9yZGVyZWRPcHRpb25zOiB7IGdyb3VwOiBhbnksIG9wdGlvbnM6IGFueVtdIH1bXSA9IFtdO1xyXG4gIHB1YmxpYyBzZWFyY2hWYWx1ZSA9ICcnO1xyXG4gIHB1YmxpYyB5UG9zaXRpb246ICdhYm92ZScgfCAnYmVsb3cnID0gJ2Fib3ZlJztcclxuICBwdWJsaWMgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwdWJsaWMgY3VycmVudFBhZ2UgPSAwO1xyXG4gIHB1YmxpYyBsaXN0Q29udGFpbmVyU2l6ZTogeyBoZWlnaHQ6IHN0cmluZywgbWluSGVpZ2h0OiBzdHJpbmcsIHdpZHRoOiBzdHJpbmcgfSA9IHtoZWlnaHQ6ICdhdXRvJywgbWluSGVpZ2h0OiAnMCcsIHdpZHRoOiAnMTAwJSd9O1xyXG4gIHB1YmxpYyBwYXJ0czogVW50eXBlZEZvcm1Hcm91cDtcclxuXHJcbiAgcHVibGljIHRvdWNoZWQgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgcHVibGljIGZvY3VzZWQgPSBmYWxzZTtcclxuICBwdWJsaWMgbXVsdGlDb250YWluZXJXaWR0aCA9IDEwMDtcclxuICBwcml2YXRlIGlzUGxhY2Vob2xkZXJBY3RpdmVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJpdmF0ZSBpc1BsYWNlaG9sZGVyQWN0aXZlID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzZWFyY2hWYWx1ZVN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgcHJpdmF0ZSBzZWFyY2hWYWx1ZSQgPSB0aGlzLnNlYXJjaFZhbHVlU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICBwcml2YXRlIHBWYWx1ZTogYW55W10gPSBbXTtcclxuICBwcml2YXRlIHNob3VsZExvYWRNb3JlID0gdHJ1ZTtcclxuICBwcml2YXRlIHVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IHRoaXMudW5zdWJzY3JpYmUuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJpdmF0ZSBpbnRQYWdlU2l6ZSA9IDE1O1xyXG4gIHB1YmxpYyBvblRvdWNoZWQgPSAoKSA9PiB7XHJcbiAgfTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlciwgcHJpdmF0ZSBzZXJ2aWNlOiBOZ0p2eE11bHRpc2VsZWN0U2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsIGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIpIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nXHJcbiAgICAgIC8vIHRoZSBwcm92aWRlcnMpIHRvIGF2b2lkIHJ1bm5pbmcgaW50byBhIGNpcmN1bGFyIGltcG9ydC5cclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzUGxhY2Vob2xkZXJBY3RpdmVTdWJqZWN0LnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpLCBkZWJvdW5jZVRpbWUoMCkpLnN1YnNjcmliZSgodikgPT4ge1xyXG4gICAgICB0aGlzLmlzUGxhY2Vob2xkZXJBY3RpdmUgPSB2O1xyXG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFydHMgPSBmYi5ncm91cCh7XHJcbiAgICAgIGFyZWE6ICcnLFxyXG4gICAgICBleGNoYW5nZTogJycsXHJcbiAgICAgIHN1YnNjcmliZXI6ICcnLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgc2VsZWN0aW9uVmFsdWU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wodGhpcy5zZWxlY3Rpb25WYWx1ZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1BsYWNlaG9sZGVyQWN0aXZlU3ViamVjdC5uZXh0KHRoaXMucGxhY2Vob2xkZXJDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lmhhc0NoaWxkTm9kZXMoKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2UkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcbiAgICAvLyB0aGlzLnNldFNlbGVjdGFibGVPcHRpb25zKHRoaXMub3B0aW9ucykuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucyA9IFsuLi50aGlzLm9wdGlvbnNdO1xyXG4gICAgdGhpcy51cGRhdGVPcmRlcmVkT3B0aW9ucyh0aGlzLnNlbGVjdGFibGVPcHRpb25zKS5zdWJzY3JpYmUobm9vcCk7XHJcbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSksIGRlYm91bmNlVGltZSgxMDApLCBtYXAoKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5saXN0Q29udGFpbmVyU2l6ZS53aWR0aCA9IHRoaXMuanZ4TXVsdGlzZWxlY3QubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCArICdweCc7XHJcblxyXG4gICAgfSksIHN3aXRjaE1hcCgoKSA9PiB0aW1lcigxMDApKSwgdGFwKCgpID0+IHtcclxuICAgICAgdGhpcy5tdWx0aUNvbnRhaW5lcldpZHRoID0gdGhpcy5tdWx0aUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPz8gMTAwO1xyXG4gICAgICB0aGlzLnlQb3NpdGlvbiA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuanZ4TXVsdGlzZWxlY3QubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/LnRvcCA8IDI2MCA/ICdhYm92ZScgOiAnYmVsb3cnO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSkpLnN1YnNjcmliZShub29wKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSwgZGVib3VuY2VUaW1lKDMwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGN1cnIgPT09IHRoaXMuc2VhcmNoVmFsdWU7XHJcbiAgICAgIH0pLCBzd2l0Y2hNYXAoKHZhbDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hNb2RlID09PSAnY2xpZW50Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbGllbnRTZWFyY2goKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51cmwgJiYgdGhpcy51cmwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJTZWFyY2goKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICkuc3Vic2NyaWJlKCh2YWw6IGFueVtdKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xpZW50U2VhcmNoKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICBpZiAodGhpcy51cmwgJiYgdGhpcy51cmwubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMudXBkYXRlT3JkZXJlZE9wdGlvbnModGhpcy5zZWxlY3RhYmxlT3B0aW9ucykuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgICB0aGlzLnNob3VsZExvYWRNb3JlID0gdHJ1ZTtcclxuICAgICAgb2JzID0gdGhpcy5nZXRMaXN0KCkucGlwZShtYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGVPcHRpb25zO1xyXG4gICAgICB9KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYnMgPSBvZih0aGlzLm9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9icy5waXBlKHN3aXRjaE1hcCgodmFsKSA9PiB0aGlzLnNlYXJjaE1hcHBlci5tYXBTZWFyY2godGhpcy5zZWFyY2hWYWx1ZSwgdmFsKSksIHN3aXRjaE1hcCgocmVzKSA9PiB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMuc2V0U2VsZWN0YWJsZU9wdGlvbnMocmVzKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucy5wdXNoKC4uLnJlcyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JkZXJlZE9wdGlvbnModGhpcy5zZWxlY3RhYmxlT3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RhYmxlT3B0aW9ucyhvcHRpb25zOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8YW55PltdID0gb3B0aW9ucy5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xyXG4gICAgICBhY2MucHVzaCh0aGlzLm1hcHBlci5tYXBPcHRpb24oY3VycikpO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwgW10pO1xyXG5cclxuICAgIC8vIHRoaXMubWFwcGVyLm1hcE9wdGlvbihvcHRpb24pO1xyXG5cclxuICAgIHJldHVybiBmb3JrSm9pbihbLi4ub2JzXSkucGlwZShzd2l0Y2hNYXAoKHZhbCkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zLnB1c2goLi4udmFsKTtcclxuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JkZXJlZE9wdGlvbnModGhpcy5zZWxlY3RhYmxlT3B0aW9ucyk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlcnZlclNlYXJjaCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5zaG91bGRMb2FkTW9yZSA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgICB0aGlzLnNob3VsZExvYWRNb3JlID0gdHJ1ZTtcclxuICAgIHJldHVybiB0aGlzLmdldExpc3QoKTtcclxuICB9XHJcblxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRpbWVyKDApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMubGlzdENvbnRhaW5lclNpemUud2lkdGggPSB0aGlzLmp2eE11bHRpc2VsZWN0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKyAncHgnO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2Nyb2xsYmFyKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsYmFyLnNjcm9sbGVkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKChlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLm9uU2Nyb2xsZWQoZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGltZXIoMCkucGlwZSh0YXAoKCkgPT4ge1xyXG4gICAgICB0aGlzLm11bHRpQ29udGFpbmVyV2lkdGggPSB0aGlzLm11bHRpQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAxMDA7XHJcbiAgICAgIHRoaXMueVBvc2l0aW9uID0gd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5qdnhNdWx0aXNlbGVjdC5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8udG9wIDwgMjYwID8gJ2Fib3ZlJyA6ICdiZWxvdyc7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KSkuc3Vic2NyaWJlKG5vb3ApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMub3B0aW9ucykge1xyXG4gICAgICAvLyB0aGlzLnNldFNlbGVjdGFibGVPcHRpb25zKHRoaXMub3B0aW9ucykuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gWy4uLnRoaXMub3B0aW9uc107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IHNlbGVjdGlvblZhbHVlKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLnZhbHVlLm1hcCgodikgPT4ge1xyXG4gICAgICByZXR1cm4gdlt0aGlzLml0ZW1WYWx1ZV07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG4gPSB0aGlzLnBhcnRzLnZhbHVlO1xyXG4gICAgcmV0dXJuICFuLmFyZWEgJiYgIW4uZXhjaGFuZ2UgJiYgIW4uc3Vic2NyaWJlciAmJiAhdGhpcy5pc1BsYWNlaG9sZGVyQWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgb25DTGlja09uTWVudShlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tdWx0aSB8fCB0aGlzLmNsb3NlT25DbGljayA9PT0gZmFsc2UpIHtcclxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHByb3BhZ2F0ZUNoYW5nZShfOiBhbnkpOiBhbnkge1xyXG4gIH1cclxuXHJcbiAgLy8gdGhpcyBpcyB0aGUgaW5pdGlhbCB2YWx1ZSBzZXQgdG8gdGhlIGNvbXBvbmVudFxyXG4gIHB1YmxpYyB3cml0ZVZhbHVlKG9iajogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSBvYmo7XHJcbiAgfVxyXG5cclxuICAvLyByZWdpc3RlcnMgJ2ZuJyB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiBjaGFuZ2VzIGFyZSBtYWRlXHJcbiAgLy8gdGhpcyBpcyBob3cgd2UgZW1pdCB0aGUgY2hhbmdlcyBiYWNrIHRvIHRoZSBmb3JtXHJcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShlOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIG9uQ2hhbmdlKGU6IE1hdFNlbGVjdGlvbkxpc3RDaGFuZ2UpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgdmFscyA9IGUuc291cmNlLnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZC5tYXAobyA9PiBvLnZhbHVlKTtcclxuICAgIHZhbHMgPSB0aGlzLnNlbGVjdGFibGVPcHRpb25zLmZpbHRlcihvID0+IHZhbHMuaW5jbHVkZXMob1t0aGlzLml0ZW1WYWx1ZV0pKTtcclxuICAgIGNvbnN0IHNlbGVjdGFibGVJZHMgPSB0aGlzLnNlbGVjdGFibGVPcHRpb25zLm1hcChzID0+IHNbdGhpcy5pdGVtVmFsdWVdKTtcclxuICAgIGlmICh0aGlzLm11bHRpKSB7XHJcbiAgICAgIC8vIGlmIHNlYXJjaCBpcyBhY3RpdmUsIHByb2JhYmx5IHNvbWUgb2YgdGhlIGFscmVhZHkgc2VsZWN0ZWQgdmFsdWVzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHNlbGVjdGFibGUgb3B0aW9ucyxcclxuICAgICAgLy8gc28gd2UgaGF2ZSB0byBwdXNoIHRoZW0gaW4gdGhlIHNlbGVjdGVkIHZhbHVlcyBvZiB0aGUgbGlzdDtcclxuICAgICAgZm9yIChjb25zdCB2IG9mIHRoaXMudmFsdWUpIHtcclxuICAgICAgICBpZiAoIXNlbGVjdGFibGVJZHMuaW5jbHVkZXModlt0aGlzLml0ZW1WYWx1ZV0pKSB7XHJcbiAgICAgICAgICB2YWxzID0gW3YsIC4uLnZhbHNdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFscy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIHJldHVybiB0eXBlb2YgYVt0aGlzLml0ZW1WYWx1ZV0gPT09ICdzdHJpbmcnID9cclxuICAgICAgICBhW3RoaXMuaXRlbVZhbHVlXS5sb2NhbGVDb21wYXJlKGJbdGhpcy5pdGVtVmFsdWVdKSA6IGFbdGhpcy5pdGVtVmFsdWVdIC0gYlt0aGlzLml0ZW1WYWx1ZV07XHJcbiAgICB9KTtcclxuICAgIHRoaXMudmFsdWUgPSBbLi4udmFsc107XHJcbiAgICB0aGlzLmZvcm0uZ2V0KCdzZWxlY3Rpb25WYWx1ZScpLnNldFZhbHVlKHRoaXMudmFsdWUubWFwKHYgPT4gdlt0aGlzLml0ZW1WYWx1ZV0pKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25Gb2N1c0luKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZm9jdXNlZCkge1xyXG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzT3V0KGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgRWxlbWVudCkpIHtcclxuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTWVudU9wZW4oKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5qdnhNdWx0aXNlbGVjdE9wZW4uZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25NZW51Q2xvc2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5qdnhNdWx0aXNlbGVjdENsb3NlLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGRlc2VsZWN0KHZhbDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUuZmlsdGVyKHYgPT4gdlt0aGlzLml0ZW1WYWx1ZV0gIT09IHZhbFt0aGlzLml0ZW1WYWx1ZV0pXTtcclxuICAgIC8vIHRoaXMudmFsdWUuc3BsaWNlKHRoaXMudmFsdWUuZmluZEluZGV4KHYgPT4gdlt0aGlzLml0ZW1WYWx1ZV0gPT09IHZhbFt0aGlzLml0ZW1WYWx1ZV0pLCAxKTtcclxuICAgIHRoaXMuZm9ybS5nZXQoJ3NlbGVjdGlvblZhbHVlJykuc2V0VmFsdWUodGhpcy52YWx1ZS5tYXAobSA9PiBtLnZhbHVlKSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGlvbkNvbnRhaW5lclNpemUoKTogdm9pZCB7XHJcbiAgICB0aW1lcigwKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Db250YWluZXIpIHtcclxuICAgICAgICB0aGlzLmxpc3RDb250YWluZXJTaXplLmhlaWdodCA9IHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMjYwID8gJzI2MHB4JyA6ICdhdXRvJztcclxuICAgICAgICB0aGlzLmxpc3RDb250YWluZXJTaXplLm1pbkhlaWdodCA9IHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IDw9IDI2MCA/XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCArICdweCcgOiAnMjYwcHgnO1xyXG4gICAgICAgIHRoaXMubGlzdENvbnRhaW5lclNpemUud2lkdGggPSB0aGlzLmp2eE11bHRpc2VsZWN0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKyAncHgnO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbGlja09uTWVudVRyaWdnZXIoZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuc2hvd0xpc3QgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zaG91bGRMb2FkTW9yZSA9IHRydWU7XHJcbiAgICAgIHRpbWVyKDApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93TGlzdCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMudXJsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZU9yZGVyZWRPcHRpb25zKHRoaXMuc2VsZWN0YWJsZU9wdGlvbnMpO1xyXG4gICAgICAgICAgdGhpcy5nZXRMaXN0KCkuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25Db250YWluZXJTaXplKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRyaWdnZXIub3Blbk1lbnUoKTtcclxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uQ29udGFpbmVyU2l6ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExpc3QoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0TGlzdCh7XHJcbiAgICAgIHVybDogdGhpcy51cmwsXHJcbiAgICAgIHJlcXVlc3RUeXBlOiB0aGlzLnJlcXVlc3RUeXBlLFxyXG4gICAgICBkYXRhOiB7fSxcclxuICAgICAgY3VycmVudFBhZ2U6ICsrdGhpcy5jdXJyZW50UGFnZSxcclxuICAgICAgaWdub3JlUGFnaW5hdGlvbjogdGhpcy5pZ25vcmVQYWdpbmF0aW9uLFxyXG4gICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcclxuICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFZhbHVlLFxyXG4gICAgICBzZWFyY2hQcm9wOiB0aGlzLnNlYXJjaFByb3AsXHJcbiAgICAgIHBhZ2VTaXplOiB0aGlzLmludFBhZ2VTaXplXHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBtYXAoKHZhbCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB2YWwgPz8gW107XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKHZhbCkgPT4gdGhpcy5tdWx0aU1hcHBlci5tYXBPcHRpb25zKHZhbCkpLCBzd2l0Y2hNYXAoKHZhbCkgPT4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gW107XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxpc3RQcm9wLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHJlc3VsdCA9IFsuLi4odmFsW3RoaXMubGlzdFByb3BdID8/IFtdKV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc3VsdCA9IFsuLi52YWxdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuc2hvdWxkTG9hZE1vcmUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdPcHRpb25zID0gW107XHJcblxyXG4gICAgICAgICAgZm9yIChjb25zdCBvcHQgb2YgcmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld09wdGlvbiA9IHRoaXMubWFwcGVyLm1hcE9wdGlvbihvcHQpO1xyXG4gICAgICAgICAgICBuZXdPcHRpb25zLnB1c2gobmV3T3B0aW9uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmb3JrSm9pbihuZXdPcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLCBzd2l0Y2hNYXAoKGZpblZhbDogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucy5wdXNoKC4uLmZpblZhbCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JkZXJlZE9wdGlvbnModGhpcy5zZWxlY3RhYmxlT3B0aW9ucyk7XHJcbiAgICAgIH0pLCBtYXAoKHZhbCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyLm9wZW5NZW51KCk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25Db250YWluZXJTaXplKCk7XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgfSksIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgb25TY3JvbGxlZChlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChlLnRhcmdldC5zY3JvbGxUb3AgKyAyMjAgKyAoKHRoaXMuc2VhcmNoSW5wdXQgPyAwIDogMSkgKiA0MCkgPT09IHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICYmICF0aGlzLmlzTG9hZGluZykge1xyXG4gICAgICB0aGlzLnNjcm9sbEVuZC5lbWl0KCk7XHJcbiAgICAgIGlmICh0aGlzLnVybCAmJiB0aGlzLnVybC5sZW5ndGggPiAwICYmICF0aGlzLmlnbm9yZVBhZ2luYXRpb24gJiYgdGhpcy5zaG91bGRMb2FkTW9yZSkge1xyXG4gICAgICAgIHRoaXMuZ2V0TGlzdCgpLnN1YnNjcmliZShub29wKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25NZW51T3BlbmVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5qdnhNdWx0aXNlbGVjdE9wZW5lZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvbk1lbnVDbG9zZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoKCF0aGlzLnVybCB8fCB0aGlzLnVybC5sZW5ndGggPT09IDApICYmIHRoaXMuc2VhcmNoTW9kZSA9PT0gJ2NsaWVudCcpIHtcclxuICAgICAgdGhpcy5zZWFyY2hWYWx1ZVN1YmplY3QubmV4dCgnJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5qdnhNdWx0aXNlbGVjdENsb3NlZC5lbWl0KCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hJbnB1dENsaWNrKGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaFZhbHVlQ2hhbmdlKGU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hWYWx1ZVN1YmplY3QubmV4dChlLnRhcmdldC52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBjbGVhcihlOiBFdmVudCk6IHZvaWQge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgIHRoaXMuZm9ybS5nZXQoJ3NlbGVjdGlvblZhbHVlJykuc2V0VmFsdWUodGhpcy52YWx1ZS5tYXAodiA9PiB2W3RoaXMuaXRlbVZhbHVlXSkpO1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udHJvbEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxyXG4gICAgICAucXVlcnlTZWxlY3RvcignLm5nLWp2eC1tdWx0aXNlbGVjdCcpO1xyXG4gICAgY29udHJvbEVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgaWRzLmpvaW4oJyAnKSk7XHJcbiAgfVxyXG5cclxuICBvbkNvbnRhaW5lckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICAvLyBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdpbnB1dCcpIHtcclxuICAgIC8vICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKS5mb2N1cygpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgc3RhdGVDaGFuZ2UkKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZUNoYW5nZXMuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVPcmRlcmVkT3B0aW9ucyhvcHRpb25zKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGxldCBvYnMgPSBvZihvcHRpb25zKTtcclxuICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcclxuICAgICAgdGhpcy5vcmRlcmVkT3B0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgICBjb25zdCBvYnNBcnIgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ncm91cEJ5ICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgb2JzQXJyLnB1c2godGhpcy5ncm91cEJ5Lm1hcEdyb3VwKG9wdGlvbikpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvYnNBcnIucHVzaChvZih7Z3JvdXA6IG9wdGlvblt0aGlzLmdyb3VwQnldLCBvcHRpb259IGFzIE5nSnZ4R3JvdXA8YW55PikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBvYnMgPSBmb3JrSm9pbihvYnNBcnIpLnBpcGUobWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IFsuLi5uZXcgU2V0KHJlcy5tYXAoaXRlbSA9PiBpdGVtLmdyb3VwKSldO1xyXG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgZ3JvdXBzKSB7XHJcbiAgICAgICAgICB0aGlzLm9yZGVyZWRPcHRpb25zLnB1c2goe1xyXG4gICAgICAgICAgICBncm91cCxcclxuICAgICAgICAgICAgb3B0aW9uczogcmVzLmZpbHRlcihyID0+IHIuZ3JvdXAgPT09IGdyb3VwKS5tYXAobyA9PiBvLm9wdGlvbilcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5vcmRlcmVkT3B0aW9ucztcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9icztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZU1lbnUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRyaWdnZXIuY2xvc2VNZW51KCk7XHJcbiAgfVxyXG5cclxuICBpc09wdGlvblNlbGVjdGVkKG9wdGlvbjogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnc2VsZWN0aW9uVmFsdWUnKS52YWx1ZS5pbmNsdWRlcyhvcHRpb25bdGhpcy5pdGVtVmFsdWVdKTtcclxuICB9XHJcblxyXG4gIGNsaWNrT25PcHRpb24ob3B0aW9uOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uKSkge1xyXG4gICAgICB0aGlzLmRlc2VsZWN0KG9wdGlvbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdChvcHRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0KG9wdGlvbjogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubXVsdGkpIHtcclxuICAgICAgdGhpcy5mb3JtLmdldCgnc2VsZWN0aW9uVmFsdWUnKS5yZXNldChbXSk7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMudmFsdWUucHVzaChvcHRpb24pO1xyXG5cclxuICAgIHRoaXMudmFsdWUuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICByZXR1cm4gdHlwZW9mIGFbdGhpcy5pdGVtVmFsdWVdID09PSAnc3RyaW5nJyA/XHJcbiAgICAgICAgYVt0aGlzLml0ZW1WYWx1ZV0ubG9jYWxlQ29tcGFyZShiW3RoaXMuaXRlbVZhbHVlXSkgOiBhW3RoaXMuaXRlbVZhbHVlXSAtIGJbdGhpcy5pdGVtVmFsdWVdO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCB2YWwgPSB0aGlzLmZvcm0uZ2V0KCdzZWxlY3Rpb25WYWx1ZScpLnZhbHVlLmNvbmNhdChbb3B0aW9uW3RoaXMuaXRlbVZhbHVlXV0pO1xyXG4gICAgdmFsLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgcmV0dXJuIHR5cGVvZiBhW3RoaXMuaXRlbVZhbHVlXSA9PT0gJ3N0cmluZycgP1xyXG4gICAgICAgIGFbdGhpcy5pdGVtVmFsdWVdLmxvY2FsZUNvbXBhcmUoYlt0aGlzLml0ZW1WYWx1ZV0pIDogYVt0aGlzLml0ZW1WYWx1ZV0gLSBiW3RoaXMuaXRlbVZhbHVlXTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtLmdldCgnc2VsZWN0aW9uVmFsdWUnKS5zZXRWYWx1ZSh2YWwpO1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5mb3JtLmdldCgnc2VsZWN0aW9uVmFsdWUnKS52YWx1ZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJuZy1qdngtbXVsdGlzZWxlY3RcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzogZGlzYWJsZWQsICdoYXMtZXJyb3JzJzogaGFzRXJyb3JzfVwiICNqdnhNdWx0aXNlbGVjdD5cclxuICA8IS0tIFNUQVJUIE1FTlUgLS0+XHJcbiAgPGRpdiBbbGliTWVudVRyaWdnZXJGb3JdPVwibWVudVJlZlwiIChvbk1lbnVPcGVuKT1cIm9uTWVudU9wZW4oKVwiIChtZW51T3BlbmVkKT1cIm9uTWVudU9wZW5lZCgpXCJcclxuICAgICAgICN0cmlnZ2VyXHJcbiAgICAgICAob25NZW51Q2xvc2UpPVwib25NZW51Q2xvc2UoKVwiIChtZW51Q2xvc2VkKT1cIm9uTWVudUNsb3NlZCgpXCJcclxuICA+XHJcbiAgICA8bGliLXBhbmVsICNtZW51UmVmIFtjbGFzc109XCJbJ2p2eC1tdWx0aXNlbGVjdC1wYW5lbCcsIHBhbmVsQ2xhc3NdLmpvaW4oJyAnKVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiXHJcbiAgICAgICAgICAgICAgIFt5UG9zaXRpb25dPVwieVBvc2l0aW9uXCI+XHJcbiAgICAgIEBpZiAoY2xvc2VCdXR0b24pIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2VNZW51QnV0dG9uXCI+XHJcbiAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDI1NiAyNTZcIj5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTIwNS42NiwxOTQuMzRhOCw4LDAsMCwxLTExLjMyLDExLjMyTDEyOCwxMzkuMzEsNjEuNjYsMjA1LjY2YTgsOCwwLDAsMS0xMS4zMi0xMS4zMkwxMTYuNjksMTI4LDUwLjM0LDYxLjY2QTgsOCwwLDAsMSw2MS42Niw1MC4zNEwxMjgsMTE2LjY5bDY2LjM0LTY2LjM1YTgsOCwwLDAsMSwxMS4zMiwxMS4zMkwxMzkuMzEsMTI4WlwiPjwvcGF0aD5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWxpc3QtY29udGFpbmVyXCJcclxuICAgICAgICAgICAjbWVudUxJc3RDb250YWluZXJcclxuICAgICAgICAgICBbbmdTdHlsZV09XCJ7J292ZXJmbG93LXknOiAnaGlkZGVuJywgJ3dpZHRoJzogbGlzdENvbnRhaW5lclNpemUud2lkdGgsICdtaW4td2lkdGgucHgnOiAxMTIsICdtYXgtaGVpZ2h0JzogJzI2MHB4JywgJ2hlaWdodCc6IGxpc3RDb250YWluZXJTaXplLmhlaWdodCwgJ21pbi1oZWlnaHQnOiBsaXN0Q29udGFpbmVyU2l6ZS5taW5IZWlnaHR9XCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCIhIXNlYXJjaElucHV0XCIgKGNsaWNrKT1cIm9uU2VhcmNoSW5wdXRDbGljaygkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwic2VhcmNoTGFiZWxcIiBbbmdNb2RlbF09XCJzZWFyY2hWYWx1ZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgIFtuZ0p2eEZvY3VzXT1cImlzT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uU2VhcmNoVmFsdWVDaGFuZ2UoJGV2ZW50KVwiLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7aGVpZ2h0OiBzZWFyY2hJbnB1dCAmJiBzZWxlY3Rpb25Db250YWluZXIuY2xpZW50SGVpZ2h0ID4gMjIwIHx8IHNlbGVjdGlvbkNvbnRhaW5lci5jbGllbnRIZWlnaHQgPiAyNjA/IDI2MCAtIChzZWFyY2hJbnB1dD8gNDAgOiAwKSArICdweCc6ICdhdXRvJ31cIj5cclxuICAgICAgICAgIDxuZy1zY3JvbGxiYXIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtb290aFNjcm9sbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmlzaWJpbGl0eV09XCInaG92ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiJ2NvbXBhY3QnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbnNvckRpc2FibGVkXT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvSGVpZ2h0RGlzYWJsZWRdPVwiZmFsc2VcIiAjc2Nyb2xsYmFyPlxyXG4gICAgICAgICAgICA8ZGl2ICNzZWxlY3Rpb25Db250YWluZXIgKGNsaWNrKT1cIm9uQ0xpY2tPbk1lbnUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgI3NlbGVjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93TGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J3BhZGRpbmcnOiAwLCAnd2lkdGgnOiBsaXN0Q29udGFpbmVyU2l6ZS53aWR0aCwgJ21pbi13aWR0aC5weCc6IDExMn1cIlxyXG4gICAgICAgICAgICAgICAgICAgbmdEZWZhdWx0Q29udHJvbFxyXG4gICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0aW9uVmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIWdyb3VwQnlcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0IG9mIG9yZGVyZWRPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ3JvdXBIZWFkZXJUZW1wbGF0ZT8gZ3JvdXBIZWFkZXJUZW1wbGF0ZS50ZW1wbGF0ZTogZGVmYXVsdEdyb3VwSGVhZGVyVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdH1cIj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWp2eC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHQub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25baXRlbVZhbHVlXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzU2VsZWN0ZWRdPVwiaXNPcHRpb25TZWxlY3RlZChvcHRpb24pXCIgKGNsaWNrKT1cImNsaWNrT25PcHRpb24ob3B0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogb3B0aW9ufVwiPjwvbmctY29udGFpbmVyPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5nLWp2eC1vcHRpb24td3JhcHBlclwiIHN0eWxlPVwibWluLWhlaWdodDo0OHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uc1RlbXBsYXRlPyBvcHRpb25zVGVtcGxhdGUudGVtcGxhdGUgOiBkZWZhdWx0VGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBvcHRpb259XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWp2eC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3VwQnkgfHwgZ3JvdXBCeS5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWp2eC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzZWxlY3RhYmxlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25baXRlbVZhbHVlXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1NlbGVjdGVkXT1cImlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uKVwiIChjbGljayk9XCJjbGlja09uT3B0aW9uKG9wdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmctanZ4LW9wdGlvbi13cmFwcGVyXCIgc3R5bGU9XCJtaW4taGVpZ2h0OjQ4cHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uc1RlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdGlvbn1cIj48L25nLWNvbnRhaW5lcj4tLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uc1RlbXBsYXRlPyBvcHRpb25zVGVtcGxhdGUudGVtcGxhdGUgOiBkZWZhdWx0VGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogb3B0aW9ufVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWp2eC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXNjcm9sbGJhcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVudS1mb290ZXJcIj5cclxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmctanZ4LWZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvbGliLXBhbmVsPlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gRU5EIE1FTlUgLS0+XHJcbiAgPCEtLSBTVEFSVCBJTlBVVCAtLT5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnbmctanZ4LW11bHRpc2VsZWN0LXZhbHVlLWNvbnRhaW5lcic6IHRydWUsICdpcy1vcGVuJzogaXNPcGVufVwiXHJcbiAgICAgICAoY2xpY2spPVwiY2xpY2tPbk1lbnVUcmlnZ2VyKCRldmVudClcIlxyXG4gICAgICAgI3ZhbHVlQ29udGFpbmVyPlxyXG4gICAgQGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgPGRpdiBjbGFzcz1cIm5nLWp2eC1tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXJcIiAjcGxhY2Vob2xkZXJDb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3BsYWNlaG9sZGVyXVwiPjwvbmctY29udGVudD5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICA8ZGl2IGNsYXNzPVwibmctanZ4LW11bHRpc2VsZWN0LXZhbHVlIG11bHRpLXZhbHVlLWNvbnRhaW5lclwiICpuZ0lmPVwibXVsdGlcIiAjbXVsdGlDb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdGlvblRlbXBsYXRlPyBzZWxlY3Rpb25UZW1wbGF0ZS50ZW1wbGF0ZSA6IGRlZmF1bHRNdWx0aVNlbGVjdGlvblRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogdmFsdWV9XCI+PC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJuZy1qdngtbXVsdGlzZWxlY3QtdmFsdWUgc2luZ2xlLXZhbHVlLWNvbnRhaW5lclwiICpuZ0lmPVwiIW11bHRpXCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHZhbCBvZiB2YWx1ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3Rpb25UZW1wbGF0ZT8gc2VsZWN0aW9uVGVtcGxhdGUudGVtcGxhdGUgOiBkZWZhdWx0U2VsZWN0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IHZhbH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZiAoY2xlYXJhYmxlICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgPGRpdiBjbGFzcz1cIm5nLWp2eC1tdWx0aXNlbGVjdF9fcmVtb3ZlLWJ1dHRvblwiIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgZmlsbD1cIiMwMDAwMDBcIiB2aWV3Qm94PVwiMCAwIDI1NiAyNTZcIj5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMjA1LjY2LDE5NC4zNGE4LDgsMCwwLDEtMTEuMzIsMTEuMzJMMTI4LDEzOS4zMSw2MS42NiwyMDUuNjZhOCw4LDAsMCwxLTExLjMyLTExLjMyTDExNi42OSwxMjgsNTAuMzQsNjEuNjZBOCw4LDAsMCwxLDYxLjY2LDUwLjM0TDEyOCwxMTYuNjlsNjYuMzQtNjYuMzVhOCw4LDAsMCwxLDExLjMyLDExLjMyTDEzOS4zMSwxMjhaXCI+PC9wYXRoPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIDxkaXYgY2xhc3M9XCJuZy1qdngtbXVsdGlzZWxlY3QtYXJyb3dcIj5cclxuICAgICAgQGlmICghaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIiMwMDAwMDBcIiB2aWV3Qm94PVwiMCAwIDI1NiAyNTZcIj5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMjEzLjY2LDEwMS42NmwtODAsODBhOCw4LDAsMCwxLTExLjMyLDBsLTgwLTgwQTgsOCwwLDAsMSw1My42Niw5MC4zNEwxMjgsMTY0LjY5bDc0LjM0LTc0LjM1YTgsOCwwLDAsMSwxMS4zMiwxMS4zMlpcIj48L3BhdGg+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZHMtcmluZ1wiPlxyXG4gICAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBFTkQgSU5QVVQgLS0+XHJcbjwvZGl2PlxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZSBsZXQtb3B0aW9uPlxyXG4gIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXJcIj5cclxuICAgIDxkaXYgc3R5bGU9XCJtYXgtd2lkdGg6IDEwMCU7XHJcbiAgcGFkZGluZy1pbmxpbmU6IC4zcmVtO1xyXG4gICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcIj57eyBvcHRpb25baXRlbVRleHRdIH19XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNlbGVjdGlvblRlbXBsYXRlIGxldC12YWx1ZT5cclxuICB7eyB2YWx1ZVtpdGVtVGV4dF0gfX1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE11bHRpU2VsZWN0aW9uVGVtcGxhdGUgbGV0LXZhbHVlPlxyXG4gIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDAuM3JlbTsgZmxleC13cmFwOiB3cmFwO1wiPlxyXG4gICAgQGZvciAodmFsIG9mIHZhbHVlOyB0cmFjayB2YWxbaXRlbVZhbHVlXSkge1xyXG4gICAgICA8bGliLWNoaXAgY2xhc3M9XCJuZy1qdngtbXVsdGlzZWxlY3QtY2hpcFwiIFtkaXNhYmxlZF09XCJ0aGlzLmRpc2FibGVkXCIgKHJlbW92ZWQpPVwiZGVzZWxlY3QodmFsKVwiPlxyXG4gICAgICAgIHt7IHZhbFtpdGVtVGV4dF0gfX1cclxuICAgICAgPC9saWItY2hpcD5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JvdXBIZWFkZXJUZW1wbGF0ZSBsZXQtb3B0PlxyXG4gIDxkaXYgc3R5bGU9XCJwYWRkaW5nLWlubGluZTogMTVweFwiPjxzdHJvbmc+e3sgb3B0Lmdyb3VwIH19PC9zdHJvbmc+PC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
674
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctanZ4LW11bHRpc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWp2eC1tdWx0aXNlbGVjdC9zcmMvbGliL25nLWp2eC1tdWx0aXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1qdngtbXVsdGlzZWxlY3Qvc3JjL2xpYi9uZy1qdngtbXVsdGlzZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUVaLFlBQVksRUFFWixXQUFXLEVBQ1gsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBRU4sSUFBSSxFQUVKLFNBQVMsRUFDVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQzdGLE9BQU8sRUFBc0Qsa0JBQWtCLEVBQW1CLE1BQU0sZ0JBQWdCLENBQUM7QUFDekgsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFN0UsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRWpELE9BQU8sRUFBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEgsT0FBTyxFQUFDLGVBQWUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVoRyxPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUNqRyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUdyRixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBaUJqRixNQUFNLE9BQU8seUJBQXlCO2FBRTdCLFdBQU0sR0FBRyxDQUFDLEFBQUosQ0FBSztJQUdsQixJQUNJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQzVGLENBQUM7SUFtREQsSUFBYSxLQUFLLENBQUMsS0FBWTtRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEYsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFJRCxJQUNJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLEdBQUc7UUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUtELElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFDSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxHQUFXO1FBQ3RCLElBQUksR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDeEIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUtELElBQUksVUFBVTtRQUNaLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMzQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQzFELENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQTRDRCxZQUFvQixXQUErQixFQUFVLE9BQWdDLEVBQ3pFLFVBQXNCLEVBQ3RCLGlCQUFvQyxFQUNqQixTQUFvQixFQUFFLEVBQXNCO1FBSC9ELGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ3pFLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBcks1QyxPQUFFLEdBQUcsbUJBQW1CLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFnQi9CLG9CQUFlLEdBQXlDLElBQUksQ0FBQztRQUMzRCxzQkFBaUIsR0FBMkMsSUFBSSxDQUFDO1FBQ3ZFLHdCQUFtQixHQUFxQyxJQUFJLENBQUM7UUFDdEcsd0VBQXdFO1FBQ3hFLDhFQUE4RTtRQUNyRSxZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLFVBQUssR0FBRyxLQUFLLENBQUM7UUFDZCxRQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1QsZ0JBQVcsR0FBbUIsS0FBSyxDQUFDO1FBQ3BDLGNBQVMsR0FBRyxPQUFPLENBQUM7UUFDcEIsYUFBUSxHQUFHLE1BQU0sQ0FBQztRQUNsQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUNsQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGVBQVUsR0FBK0IsSUFBSSxDQUFDO1FBQzlDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGdCQUFXLEdBQUcsUUFBUSxDQUFDO1FBQ3ZCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGVBQVUsR0FBRyxRQUFRLENBQUM7UUFDdEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsV0FBTSxHQUEyQjtZQUN4QyxTQUFTLENBQUMsTUFBVztnQkFDbkIsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEIsQ0FBQztTQUNGLENBQUM7UUFDTyxnQkFBVyxHQUFnQztZQUNsRCxVQUFVLENBQUMsTUFBYTtnQkFDdEIsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEIsQ0FBQztTQUNGLENBQUM7UUFDTyxpQkFBWSxHQUEyQjtZQUM5QyxTQUFTLEVBQUUsQ0FBQyxNQUFjLEVBQUUsT0FBYyxFQUFtQixFQUFFO2dCQUM3RCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RILENBQUM7U0FDRixDQUFDO1FBaUJPLG1CQUFjLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFZekQseUNBQXlDO1FBQ2pDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUEwQjFCLHlDQUF5QztRQUNqQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBVWhCLGdCQUFXLEdBQXdCLElBQUksWUFBWSxFQUFTLENBQUM7UUFDN0QsdUJBQWtCLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDbEUseUJBQW9CLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDcEUsd0JBQW1CLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDbkUseUJBQW9CLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDcEUsY0FBUyxHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTVELGdCQUFXLEdBQUcsb0JBQW9CLENBQUM7UUFDbkMsYUFBUSxHQUFHLFFBQVEsQ0FBQztRQUNwQixXQUFNLEdBQUcsTUFBTSxDQUFDO1FBRWhCLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFDaEIsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFDdkIsc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLG1CQUFjLEdBQXFDLEVBQUUsQ0FBQztRQUN0RCxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixjQUFTLEdBQXNCLE9BQU8sQ0FBQztRQUN2QyxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDbkMsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsc0JBQWlCLEdBQXlELEVBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQztRQUcxSCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBR2hCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsd0JBQW1CLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLCtCQUEwQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1Qix1QkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBQzNDLGlCQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RELFdBQU0sR0FBVSxFQUFFLENBQUM7UUFDbkIsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2xDLGlCQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvQyxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNsQixjQUFTLEdBQUcsR0FBRyxFQUFFO1FBQ3hCLENBQUMsQ0FBQztRQU9BLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMzQix3REFBd0Q7WUFDeEQsMERBQTBEO1lBQzFELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUN0QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2pHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNwQixJQUFJLEVBQUUsRUFBRTtZQUNSLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLEVBQUU7U0FDZixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2pDLGNBQWMsRUFBRSxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDNUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUNILDJEQUEyRDtRQUMzRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDeEYsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFN0YsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDeEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLFdBQVcsSUFBSSxHQUFHLENBQUM7WUFDbEYsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLHFCQUFxQixFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDaEksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3ZHLE9BQU8sSUFBSSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbkMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDckIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNqQyxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM3QixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0IsQ0FBQztRQUNILENBQUMsQ0FDRixDQUNGLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBVSxFQUFFLEVBQUU7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxHQUFvQixDQUFDO1FBQ3pCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDakMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7YUFBTSxDQUFDO1lBQ04sR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN0Ryx5Q0FBeUM7WUFDekMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxPQUFjO1FBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQXNCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDMUQsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVAsaUNBQWlDO1FBRWpDLE9BQU8sUUFBUSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDcEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUdELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGVBQWU7UUFDYixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDdEYsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUM5RSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNyQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUUsV0FBVyxJQUFJLEdBQUcsQ0FBQztZQUNsRixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNoSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQiwyREFBMkQ7WUFDM0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFHRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzFCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMzQixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQzlFLENBQUM7SUFFRCxhQUFhLENBQUMsQ0FBYTtRQUN6QixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUM5QyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFHTyxlQUFlLENBQUMsQ0FBTTtJQUM5QixDQUFDO0lBRUQsaURBQWlEO0lBQzFDLFVBQVUsQ0FBQyxHQUFVO1FBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCwwREFBMEQ7SUFDMUQsbURBQW1EO0lBQzVDLGdCQUFnQixDQUFDLEVBQU87UUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxDQUFNO1FBQ2IsOENBQThDO1FBRTlDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0QsSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZixnSEFBZ0g7WUFDaEgsOERBQThEO1lBQzlELEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDakIsT0FBTyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9GLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFHRCxTQUFTLENBQUMsS0FBaUI7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWlCO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGFBQXdCLENBQUMsRUFBRSxDQUFDO1lBQzVFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBRW5CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQVE7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEYsOEZBQThGO1FBQzlGLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3RCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDNUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsQ0FBQztvQkFDNUYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN0RixDQUFDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLENBQWE7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUMzQixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFFbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7Z0JBRW5DLENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztnQkFDbkMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxPQUFPO1FBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUMxQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsSUFBSSxFQUFFLEVBQUU7WUFDUixXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVztZQUMvQixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDeEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVztTQUMzQixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ1YsT0FBTyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN0RSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDZCxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDcEIsQ0FBQztZQUVELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO2dCQUV0QixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDN0MsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDN0IsQ0FBQztnQkFDRCxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUNqQyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDWCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBTTtRQUNmLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsWUFBWTtlQUNsSCxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNyRixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDekUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxDQUFhO1FBQzlCLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsbUJBQW1CLENBQUMsQ0FBTTtRQUN4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxDQUFRO1FBQ1osQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQWE7UUFDN0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhO2FBQ2pELGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3hDLGNBQWMsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFpQjtRQUNoQyxxRUFBcUU7UUFDckUsa0VBQWtFO1FBQ2xFLElBQUk7SUFDTixDQUFDO0lBRUQsSUFBWSxZQUFZO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBTztRQUMxQixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNsQixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUM3QixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDckMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQW9CLENBQUMsQ0FBQyxDQUFDO2dCQUM1RSxDQUFDO1lBQ0gsQ0FBQztZQUNELEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUMzQyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO3dCQUN2QixLQUFLO3dCQUNMLE9BQU8sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO3FCQUMvRCxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTSxTQUFTO1FBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBVztRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFXO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsTUFBVztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QixPQUFPLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQztnQkFDNUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0YsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2hCLE9BQU8sT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JELENBQUM7K0dBL2xCVSx5QkFBeUI7bUdBQXpCLHlCQUF5Qiw0aENBUnpCO1FBQ1QsSUFBSTtRQUNKLGtDQUFrQztRQUNsQyw4REFBOEQ7UUFDOUQsaUJBQWlCO1FBQ2pCLElBQUk7U0FDTCx1RUFxQmEsNkJBQTZCLG9GQUM3QiwrQkFBK0Isc0ZBQy9CLHlCQUF5QixzYUFQNUIsb0JBQW9CLHlYQUlqQixvQkFBb0IscUVDeEVwQyxnZ1FBMkpBOzs0RkRyR2EseUJBQXlCO2tCQWZyQyxTQUFTOytCQUVFLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO29CQUNULElBQUk7b0JBQ0osa0NBQWtDO29CQUNsQyw4REFBOEQ7b0JBQzlELGlCQUFpQjtvQkFDakIsSUFBSTtxQkFDTDs7MEJBMEtZLFFBQVE7OzBCQUFJLElBQUk7MEVBcktkLEVBQUU7c0JBQWhCLFdBQVc7Z0JBR1IsZ0JBQWdCO3NCQURuQixXQUFXO3VCQUFDLGdCQUFnQjtnQkFLZ0IsY0FBYztzQkFBMUQsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ0UsY0FBYztzQkFBMUQsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBQ08sa0JBQWtCO3NCQUFuRSxTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFFQyxPQUFPO3NCQUF2RCxTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFDTixTQUFTO3NCQUFqRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7Z0JBQ08sY0FBYztzQkFBM0QsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7Z0JBQ1Esb0JBQW9CO3NCQUF2RSxTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFDZCxVQUFVO3NCQUE3QyxZQUFZO3VCQUFDLG9CQUFvQjtnQkFDVyxlQUFlO3NCQUEzRCxZQUFZO3VCQUFDLDZCQUE2QjtnQkFDSSxpQkFBaUI7c0JBQS9ELFlBQVk7dUJBQUMsK0JBQStCO2dCQUNKLG1CQUFtQjtzQkFBM0QsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBRzlCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRU8sS0FBSztzQkFBakIsS0FBSztnQkFjRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdGLFFBQVE7c0JBRFgsS0FBSztnQkFjRixRQUFRO3NCQURYLEtBQUs7Z0JBWUYsUUFBUTtzQkFEWCxLQUFLO2dCQXdCSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGQsIERvQ2hlY2ssXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFNlbGYsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdKdnhPcHRpb25zVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy9uZy1qdngtb3B0aW9ucy10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wsIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7TmdKdnhPcHRpb25Db21wb25lbnR9IGZyb20gJy4vbmctanZ4LW9wdGlvbi9uZy1qdngtb3B0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TmdKdnhNdWx0aXNlbGVjdFNlcnZpY2V9IGZyb20gJy4vbmctanZ4LW11bHRpc2VsZWN0LnNlcnZpY2UnO1xyXG5pbXBvcnQge0h0dHBIZWFkZXJzfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7TmdTY3JvbGxiYXJ9IGZyb20gJ25neC1zY3JvbGxiYXInO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCwgdGhyb3R0bGVUaW1lfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgZnJvbUV2ZW50LCBub29wLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGltZXJ9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge05nSnZ4TXVsdGlPcHRpb25NYXBwZXIsIE5nSnZ4T3B0aW9uTWFwcGVyfSBmcm9tICcuL2ludGVyZmFjZXMvbmctanZ4LW9wdGlvbi1tYXBwZXInO1xyXG5pbXBvcnQge05nSnZ4U2VsZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy9uZy1qdngtc2VsZWN0aW9uLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQge05nSnZ4R3JvdXBIZWFkZXJEaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy9uZy1qdngtZ3JvdXAtaGVhZGVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7TmdKdnhTZWFyY2hNYXBwZXJ9IGZyb20gJy4vaW50ZXJmYWNlcy9uZy1qdngtc2VhcmNoLW1hcHBlcic7XHJcbmltcG9ydCB7TmdKdnhHcm91cCwgTmdKdnhHcm91cE1hcHBlcn0gZnJvbSAnLi9pbnRlcmZhY2VzL25nLWp2eC1ncm91cC1tYXBwZXInO1xyXG5pbXBvcnQge01lbnVUcmlnZ2VyRGlyZWN0aXZlfSBmcm9tICcuL3BhbmVsL21lbnUtdHJpZ2dlci9tZW51LXRyaWdnZXIuZGlyZWN0aXZlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ25nLWp2eC1tdWx0aXNlbGVjdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25nLWp2eC1tdWx0aXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbmctanZ4LW11bHRpc2VsZWN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIC8vIHtcclxuICAgIC8vICAgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCxcclxuICAgIC8vICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmdKdnhNdWx0aXNlbGVjdENvbXBvbmVudCksXHJcbiAgICAvLyAgIG11bHRpOiB0cnVlLFxyXG4gICAgLy8gfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5nSnZ4TXVsdGlzZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIERvQ2hlY2ssIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICBzdGF0aWMgbmV4dElkID0gMDtcclxuICBASG9zdEJpbmRpbmcoKSBpZCA9IGBqdngtbXVsdGlzZWxlY3QtJHtOZ0p2eE11bHRpc2VsZWN0Q29tcG9uZW50Lm5leHRJZCsrfWA7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZmxvYXRpbmcnKVxyXG4gIGdldCBzaG91bGRMYWJlbEZsb2F0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eSB8fCB0aGlzLnZhbHVlLmxlbmd0aCA+IDAgfHwgISF0aGlzLmlzUGxhY2Vob2xkZXJBY3RpdmU7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdqdnhNdWx0aXNlbGVjdCcsIHtzdGF0aWM6IHRydWV9KSBqdnhNdWx0aXNlbGVjdDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCd2YWx1ZUNvbnRhaW5lcicsIHtzdGF0aWM6IHRydWV9KSB2YWx1ZUNvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdzZWxlY3Rpb25Db250YWluZXInLCB7c3RhdGljOiBmYWxzZX0pIHNlbGVjdGlvbkNvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuICAvLyBAVmlld0NoaWxkKCdzZWxlY3Rpb24nLCB7c3RhdGljOiB0cnVlfSkgc2VsZWN0aW9uOiBNYXRTZWxlY3Rpb25MaXN0O1xyXG4gIEBWaWV3Q2hpbGQoTWVudVRyaWdnZXJEaXJlY3RpdmUsIHtzdGF0aWM6IHRydWV9KSB0cmlnZ2VyOiBNZW51VHJpZ2dlckRpcmVjdGl2ZTtcclxuICBAVmlld0NoaWxkKCdzY3JvbGxiYXInLCB7c3RhdGljOiBmYWxzZX0pIHNjcm9sbGJhcjogTmdTY3JvbGxiYXI7XHJcbiAgQFZpZXdDaGlsZCgnbXVsdGlDb250YWluZXInLCB7c3RhdGljOiBmYWxzZX0pIG11bHRpQ29udGFpbmVyOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3BsYWNlaG9sZGVyQ29udGFpbmVyJywge3N0YXRpYzogZmFsc2V9KSBwbGFjZWhvbGRlckNvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkcmVuKE5nSnZ4T3B0aW9uQ29tcG9uZW50KSBvcHRpb25Db21wOiBRdWVyeUxpc3Q8TmdKdnhPcHRpb25Db21wb25lbnQ+O1xyXG4gIEBDb250ZW50Q2hpbGQoTmdKdnhPcHRpb25zVGVtcGxhdGVEaXJlY3RpdmUpIG9wdGlvbnNUZW1wbGF0ZTogTmdKdnhPcHRpb25zVGVtcGxhdGVEaXJlY3RpdmUgfCBudWxsID0gbnVsbDtcclxuICBAQ29udGVudENoaWxkKE5nSnZ4U2VsZWN0aW9uVGVtcGxhdGVEaXJlY3RpdmUpIHNlbGVjdGlvblRlbXBsYXRlOiBOZ0p2eFNlbGVjdGlvblRlbXBsYXRlRGlyZWN0aXZlIHwgbnVsbCA9IG51bGw7XHJcbiAgQENvbnRlbnRDaGlsZChOZ0p2eEdyb3VwSGVhZGVyRGlyZWN0aXZlKSBncm91cEhlYWRlclRlbXBsYXRlOiBOZ0p2eEdyb3VwSGVhZGVyRGlyZWN0aXZlIHwgbnVsbCA9IG51bGw7XHJcbiAgLy8gQENvbnRlbnRDaGlsZChOZ0p2eE9wdGlvbkNvbXBvbmVudCkgb3B0aW9uQ29tcDogTmdKdnhPcHRpb25Db21wb25lbnQ7XHJcbiAgLy8gQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZikgb3B0aW9uc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KCkgb3B0aW9uczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBtdWx0aSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVybCA9ICcnO1xyXG4gIEBJbnB1dCgpIHJlcXVlc3RUeXBlOiAnZ2V0JyB8ICdwb3N0JyA9ICdnZXQnO1xyXG4gIEBJbnB1dCgpIGl0ZW1WYWx1ZSA9ICd2YWx1ZSc7XHJcbiAgQElucHV0KCkgaXRlbVRleHQgPSAndGV4dCc7XHJcbiAgQElucHV0KCkgaWdub3JlUGFnaW5hdGlvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNsb3NlT25DbGljayA9IHRydWU7XHJcbiAgQElucHV0KCkgaGFzRXJyb3JzID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VhcmNoTW9kZTogbnVsbCB8ICdzZXJ2ZXInIHwgJ2NsaWVudCcgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHNlYXJjaElucHV0ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VhcmNoTGFiZWwgPSAnc2VhcmNoJztcclxuICBASW5wdXQoKSBsaXN0UHJvcCA9ICcnO1xyXG4gIEBJbnB1dCgpIHRvdGFsUm93c1Byb3AgPSAnJztcclxuICBASW5wdXQoKSBwYW5lbENsYXNzID0gJyc7XHJcbiAgQElucHV0KCkgc2VhcmNoUHJvcCA9ICdzZWFyY2gnO1xyXG4gIEBJbnB1dCgpIGNsb3NlQnV0dG9uID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbWFwcGVyOiBOZ0p2eE9wdGlvbk1hcHBlcjxhbnk+ID0ge1xyXG4gICAgbWFwT3B0aW9uKHNvdXJjZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIG9mKHNvdXJjZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBASW5wdXQoKSBtdWx0aU1hcHBlcjogTmdKdnhNdWx0aU9wdGlvbk1hcHBlcjxhbnk+ID0ge1xyXG4gICAgbWFwT3B0aW9ucyhzb3VyY2U6IGFueVtdKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIG9mKHNvdXJjZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBASW5wdXQoKSBzZWFyY2hNYXBwZXI6IE5nSnZ4U2VhcmNoTWFwcGVyPGFueT4gPSB7XHJcbiAgICBtYXBTZWFyY2g6IChzb3VyY2U6IHN0cmluZywgb3B0aW9uczogYW55W10pOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgICByZXR1cm4gb2Yob3B0aW9ucy5maWx0ZXIobyA9PiBvW3RoaXMuaXRlbVRleHRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzb3VyY2UudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKSkpO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgQElucHV0KCkgZ3JvdXBCeTogTmdKdnhHcm91cE1hcHBlcjxhbnk+IHwgc3RyaW5nIHwgbnVsbDtcclxuXHJcbiAgQElucHV0KCkgc2V0IHZhbHVlKHZhbHVlOiBhbnlbXSkge1xyXG4gICAgdGhpcy5wVmFsdWUgPSB2YWx1ZSA/PyBbXTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdzZWxlY3Rpb25WYWx1ZScpLnNldFZhbHVlKHRoaXMucFZhbHVlLm1hcCh2ID0+IHZbdGhpcy5pdGVtVmFsdWVdKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm0uZ2V0KCdzZWxlY3Rpb25WYWx1ZScpLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICB9XHJcblxyXG4gIGdldCB2YWx1ZSgpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5wVmFsdWU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSByZXF1ZXN0SGVhZGVyczogSHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgcmVxdWlyZWQocmVxKSB7XHJcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShyZXEpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcclxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLnBhcnRzLmRpc2FibGUoKSA6IHRoaXMucGFydHMuZW5hYmxlKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuaW50UGFnZVNpemU7XHJcbiAgfVxyXG5cclxuICBzZXQgcGFnZVNpemUodmFsOiBudW1iZXIpIHtcclxuICAgIGlmICh2YWwgPCAxNSkge1xyXG4gICAgICB0aGlzLmludFBhZ2VTaXplID0gMTU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludFBhZ2VTaXplID0gdmFsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcclxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICBnZXQgZXJyb3JTdGF0ZSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm5nQ29udHJvbC5pbnZhbGlkICYmIHRoaXMubmdDb250cm9sLnRvdWNoZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG4gIEBPdXRwdXQoKSBqdnhNdWx0aXNlbGVjdE9wZW46IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkganZ4TXVsdGlzZWxlY3RPcGVuZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkganZ4TXVsdGlzZWxlY3RDbG9zZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBqdnhNdWx0aXNlbGVjdENsb3NlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKSBzY3JvbGxFbmQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHVibGljIGNvbnRyb2xUeXBlID0gJ25nLWp2eC1tdWx0aXNlbGVjdCc7XHJcbiAgcHVibGljIGRvY3VtZW50ID0gZG9jdW1lbnQ7XHJcbiAgcHVibGljIHdpbmRvdyA9IHdpbmRvdztcclxuICBwdWJsaWMgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzTG9hZGluZyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93TGlzdCA9IHRydWU7XHJcbiAgcHVibGljIGFzeW5jT3B0aW9uczogYW55ID0gW107XHJcbiAgcHVibGljIHNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgcHVibGljIG9yZGVyZWRPcHRpb25zOiB7IGdyb3VwOiBhbnksIG9wdGlvbnM6IGFueVtdIH1bXSA9IFtdO1xyXG4gIHB1YmxpYyBzZWFyY2hWYWx1ZSA9ICcnO1xyXG4gIHB1YmxpYyB5UG9zaXRpb246ICdhYm92ZScgfCAnYmVsb3cnID0gJ2Fib3ZlJztcclxuICBwdWJsaWMgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwdWJsaWMgY3VycmVudFBhZ2UgPSAwO1xyXG4gIHB1YmxpYyBsaXN0Q29udGFpbmVyU2l6ZTogeyBoZWlnaHQ6IHN0cmluZywgbWluSGVpZ2h0OiBzdHJpbmcsIHdpZHRoOiBzdHJpbmcgfSA9IHtoZWlnaHQ6ICdhdXRvJywgbWluSGVpZ2h0OiAnMCcsIHdpZHRoOiAnMTAwJSd9O1xyXG4gIHB1YmxpYyBwYXJ0czogVW50eXBlZEZvcm1Hcm91cDtcclxuXHJcbiAgcHVibGljIHRvdWNoZWQgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgcHVibGljIGZvY3VzZWQgPSBmYWxzZTtcclxuICBwdWJsaWMgbXVsdGlDb250YWluZXJXaWR0aCA9IDEwMDtcclxuICBwcml2YXRlIGlzUGxhY2Vob2xkZXJBY3RpdmVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHJpdmF0ZSBpc1BsYWNlaG9sZGVyQWN0aXZlID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzZWFyY2hWYWx1ZVN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgcHJpdmF0ZSBzZWFyY2hWYWx1ZSQgPSB0aGlzLnNlYXJjaFZhbHVlU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICBwcml2YXRlIHBWYWx1ZTogYW55W10gPSBbXTtcclxuICBwcml2YXRlIHNob3VsZExvYWRNb3JlID0gdHJ1ZTtcclxuICBwcml2YXRlIHVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IHRoaXMudW5zdWJzY3JpYmUuYXNPYnNlcnZhYmxlKCk7XHJcbiAgcHJpdmF0ZSBpbnRQYWdlU2l6ZSA9IDE1O1xyXG4gIHB1YmxpYyBvblRvdWNoZWQgPSAoKSA9PiB7XHJcbiAgfTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlciwgcHJpdmF0ZSBzZXJ2aWNlOiBOZ0p2eE11bHRpc2VsZWN0U2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsIGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIpIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nXHJcbiAgICAgIC8vIHRoZSBwcm92aWRlcnMpIHRvIGF2b2lkIHJ1bm5pbmcgaW50byBhIGNpcmN1bGFyIGltcG9ydC5cclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzUGxhY2Vob2xkZXJBY3RpdmVTdWJqZWN0LnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpLCBkZWJvdW5jZVRpbWUoMCkpLnN1YnNjcmliZSgodikgPT4ge1xyXG4gICAgICB0aGlzLmlzUGxhY2Vob2xkZXJBY3RpdmUgPSB2O1xyXG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFydHMgPSBmYi5ncm91cCh7XHJcbiAgICAgIGFyZWE6ICcnLFxyXG4gICAgICBleGNoYW5nZTogJycsXHJcbiAgICAgIHN1YnNjcmliZXI6ICcnLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgc2VsZWN0aW9uVmFsdWU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wodGhpcy5zZWxlY3Rpb25WYWx1ZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1BsYWNlaG9sZGVyQWN0aXZlU3ViamVjdC5uZXh0KHRoaXMucGxhY2Vob2xkZXJDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/Lmhhc0NoaWxkTm9kZXMoKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2UkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcbiAgICAvLyB0aGlzLnNldFNlbGVjdGFibGVPcHRpb25zKHRoaXMub3B0aW9ucykuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucyA9IFsuLi50aGlzLm9wdGlvbnNdO1xyXG4gICAgdGhpcy51cGRhdGVPcmRlcmVkT3B0aW9ucyh0aGlzLnNlbGVjdGFibGVPcHRpb25zKS5zdWJzY3JpYmUobm9vcCk7XHJcbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSksIGRlYm91bmNlVGltZSgxMDApLCBtYXAoKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5saXN0Q29udGFpbmVyU2l6ZS53aWR0aCA9IHRoaXMuanZ4TXVsdGlzZWxlY3QubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCArICdweCc7XHJcblxyXG4gICAgfSksIHN3aXRjaE1hcCgoKSA9PiB0aW1lcigxMDApKSwgdGFwKCgpID0+IHtcclxuICAgICAgdGhpcy5tdWx0aUNvbnRhaW5lcldpZHRoID0gdGhpcy5tdWx0aUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8ub2Zmc2V0V2lkdGggPz8gMTAwO1xyXG4gICAgICB0aGlzLnlQb3NpdGlvbiA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuanZ4TXVsdGlzZWxlY3QubmF0aXZlRWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/LnRvcCA8IDI2MCA/ICdhYm92ZScgOiAnYmVsb3cnO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSkpLnN1YnNjcmliZShub29wKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSwgZGVib3VuY2VUaW1lKDMwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGN1cnIgPT09IHRoaXMuc2VhcmNoVmFsdWU7XHJcbiAgICAgIH0pLCBzd2l0Y2hNYXAoKHZhbDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gdmFsO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hNb2RlID09PSAnY2xpZW50Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbGllbnRTZWFyY2goKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51cmwgJiYgdGhpcy51cmwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJTZWFyY2goKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgICkuc3Vic2NyaWJlKCh2YWw6IGFueVtdKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xpZW50U2VhcmNoKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICBpZiAodGhpcy51cmwgJiYgdGhpcy51cmwubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMudXBkYXRlT3JkZXJlZE9wdGlvbnModGhpcy5zZWxlY3RhYmxlT3B0aW9ucykuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgICB0aGlzLnNob3VsZExvYWRNb3JlID0gdHJ1ZTtcclxuICAgICAgb2JzID0gdGhpcy5nZXRMaXN0KCkucGlwZShtYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGVPcHRpb25zO1xyXG4gICAgICB9KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvYnMgPSBvZih0aGlzLm9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9icy5waXBlKHN3aXRjaE1hcCgodmFsKSA9PiB0aGlzLnNlYXJjaE1hcHBlci5tYXBTZWFyY2godGhpcy5zZWFyY2hWYWx1ZSwgdmFsKSksIHN3aXRjaE1hcCgocmVzKSA9PiB7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMuc2V0U2VsZWN0YWJsZU9wdGlvbnMocmVzKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucy5wdXNoKC4uLnJlcyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JkZXJlZE9wdGlvbnModGhpcy5zZWxlY3RhYmxlT3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RhYmxlT3B0aW9ucyhvcHRpb25zOiBhbnlbXSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8YW55PltdID0gb3B0aW9ucy5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xyXG4gICAgICBhY2MucHVzaCh0aGlzLm1hcHBlci5tYXBPcHRpb24oY3VycikpO1xyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwgW10pO1xyXG5cclxuICAgIC8vIHRoaXMubWFwcGVyLm1hcE9wdGlvbihvcHRpb24pO1xyXG5cclxuICAgIHJldHVybiBmb3JrSm9pbihbLi4ub2JzXSkucGlwZShzd2l0Y2hNYXAoKHZhbCkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zLnB1c2goLi4udmFsKTtcclxuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JkZXJlZE9wdGlvbnModGhpcy5zZWxlY3RhYmxlT3B0aW9ucyk7XHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlcnZlclNlYXJjaCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5zaG91bGRMb2FkTW9yZSA9IHRydWU7XHJcbiAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gW107XHJcbiAgICB0aGlzLnNob3VsZExvYWRNb3JlID0gdHJ1ZTtcclxuICAgIHJldHVybiB0aGlzLmdldExpc3QoKTtcclxuICB9XHJcblxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRpbWVyKDApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMubGlzdENvbnRhaW5lclNpemUud2lkdGggPSB0aGlzLmp2eE11bHRpc2VsZWN0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKyAncHgnO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2Nyb2xsYmFyKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsYmFyLnNjcm9sbGVkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKChlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLm9uU2Nyb2xsZWQoZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGltZXIoMCkucGlwZSh0YXAoKCkgPT4ge1xyXG4gICAgICB0aGlzLm11bHRpQ29udGFpbmVyV2lkdGggPSB0aGlzLm11bHRpQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5vZmZzZXRXaWR0aCA/PyAxMDA7XHJcbiAgICAgIHRoaXMueVBvc2l0aW9uID0gd2luZG93LmlubmVySGVpZ2h0IC0gdGhpcy5qdnhNdWx0aXNlbGVjdC5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8udG9wIDwgMjYwID8gJ2Fib3ZlJyA6ICdiZWxvdyc7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KSkuc3Vic2NyaWJlKG5vb3ApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMub3B0aW9ucykge1xyXG4gICAgICAvLyB0aGlzLnNldFNlbGVjdGFibGVPcHRpb25zKHRoaXMub3B0aW9ucykuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zID0gWy4uLnRoaXMub3B0aW9uc107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IHNlbGVjdGlvblZhbHVlKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLnZhbHVlLm1hcCgodikgPT4ge1xyXG4gICAgICByZXR1cm4gdlt0aGlzLml0ZW1WYWx1ZV07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBlbXB0eSgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG4gPSB0aGlzLnBhcnRzLnZhbHVlO1xyXG4gICAgcmV0dXJuICFuLmFyZWEgJiYgIW4uZXhjaGFuZ2UgJiYgIW4uc3Vic2NyaWJlciAmJiAhdGhpcy5pc1BsYWNlaG9sZGVyQWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgb25DTGlja09uTWVudShlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tdWx0aSB8fCB0aGlzLmNsb3NlT25DbGljayA9PT0gZmFsc2UpIHtcclxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHByb3BhZ2F0ZUNoYW5nZShfOiBhbnkpOiBhbnkge1xyXG4gIH1cclxuXHJcbiAgLy8gdGhpcyBpcyB0aGUgaW5pdGlhbCB2YWx1ZSBzZXQgdG8gdGhlIGNvbXBvbmVudFxyXG4gIHB1YmxpYyB3cml0ZVZhbHVlKG9iajogYW55W10pOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSBvYmo7XHJcbiAgfVxyXG5cclxuICAvLyByZWdpc3RlcnMgJ2ZuJyB0aGF0IHdpbGwgYmUgZmlyZWQgd2hlbiBjaGFuZ2VzIGFyZSBtYWRlXHJcbiAgLy8gdGhpcyBpcyBob3cgd2UgZW1pdCB0aGUgY2hhbmdlcyBiYWNrIHRvIHRoZSBmb3JtXHJcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShlOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vIG9uQ2hhbmdlKGU6IE1hdFNlbGVjdGlvbkxpc3RDaGFuZ2UpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgdmFscyA9IGUuc291cmNlLnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZC5tYXAobyA9PiBvLnZhbHVlKTtcclxuICAgIHZhbHMgPSB0aGlzLnNlbGVjdGFibGVPcHRpb25zLmZpbHRlcihvID0+IHZhbHMuaW5jbHVkZXMob1t0aGlzLml0ZW1WYWx1ZV0pKTtcclxuICAgIGNvbnN0IHNlbGVjdGFibGVJZHMgPSB0aGlzLnNlbGVjdGFibGVPcHRpb25zLm1hcChzID0+IHNbdGhpcy5pdGVtVmFsdWVdKTtcclxuICAgIGlmICh0aGlzLm11bHRpKSB7XHJcbiAgICAgIC8vIGlmIHNlYXJjaCBpcyBhY3RpdmUsIHByb2JhYmx5IHNvbWUgb2YgdGhlIGFscmVhZHkgc2VsZWN0ZWQgdmFsdWVzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHNlbGVjdGFibGUgb3B0aW9ucyxcclxuICAgICAgLy8gc28gd2UgaGF2ZSB0byBwdXNoIHRoZW0gaW4gdGhlIHNlbGVjdGVkIHZhbHVlcyBvZiB0aGUgbGlzdDtcclxuICAgICAgZm9yIChjb25zdCB2IG9mIHRoaXMudmFsdWUpIHtcclxuICAgICAgICBpZiAoIXNlbGVjdGFibGVJZHMuaW5jbHVkZXModlt0aGlzLml0ZW1WYWx1ZV0pKSB7XHJcbiAgICAgICAgICB2YWxzID0gW3YsIC4uLnZhbHNdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFscy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIHJldHVybiB0eXBlb2YgYVt0aGlzLml0ZW1WYWx1ZV0gPT09ICdzdHJpbmcnID9cclxuICAgICAgICBhW3RoaXMuaXRlbVZhbHVlXS5sb2NhbGVDb21wYXJlKGJbdGhpcy5pdGVtVmFsdWVdKSA6IGFbdGhpcy5pdGVtVmFsdWVdIC0gYlt0aGlzLml0ZW1WYWx1ZV07XHJcbiAgICB9KTtcclxuICAgIHRoaXMudmFsdWUgPSBbLi4udmFsc107XHJcbiAgICB0aGlzLmZvcm0uZ2V0KCdzZWxlY3Rpb25WYWx1ZScpLnNldFZhbHVlKHRoaXMudmFsdWUubWFwKHYgPT4gdlt0aGlzLml0ZW1WYWx1ZV0pKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25Gb2N1c0luKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZm9jdXNlZCkge1xyXG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzT3V0KGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgRWxlbWVudCkpIHtcclxuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTWVudU9wZW4oKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5qdnhNdWx0aXNlbGVjdE9wZW4uZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25NZW51Q2xvc2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5qdnhNdWx0aXNlbGVjdENsb3NlLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIGRlc2VsZWN0KHZhbDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUuZmlsdGVyKHYgPT4gdlt0aGlzLml0ZW1WYWx1ZV0gIT09IHZhbFt0aGlzLml0ZW1WYWx1ZV0pXTtcclxuICAgIC8vIHRoaXMudmFsdWUuc3BsaWNlKHRoaXMudmFsdWUuZmluZEluZGV4KHYgPT4gdlt0aGlzLml0ZW1WYWx1ZV0gPT09IHZhbFt0aGlzLml0ZW1WYWx1ZV0pLCAxKTtcclxuICAgIHRoaXMuZm9ybS5nZXQoJ3NlbGVjdGlvblZhbHVlJykuc2V0VmFsdWUodGhpcy52YWx1ZS5tYXAobSA9PiBtLnZhbHVlKSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGlvbkNvbnRhaW5lclNpemUoKTogdm9pZCB7XHJcbiAgICB0aW1lcigwKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Db250YWluZXIpIHtcclxuICAgICAgICB0aGlzLmxpc3RDb250YWluZXJTaXplLmhlaWdodCA9IHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMjYwID8gJzI2MHB4JyA6ICdhdXRvJztcclxuICAgICAgICB0aGlzLmxpc3RDb250YWluZXJTaXplLm1pbkhlaWdodCA9IHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IDw9IDI2MCA/XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCArICdweCcgOiAnMjYwcHgnO1xyXG4gICAgICAgIHRoaXMubGlzdENvbnRhaW5lclNpemUud2lkdGggPSB0aGlzLmp2eE11bHRpc2VsZWN0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKyAncHgnO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbGlja09uTWVudVRyaWdnZXIoZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuc2hvd0xpc3QgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zaG91bGRMb2FkTW9yZSA9IHRydWU7XHJcbiAgICAgIHRpbWVyKDApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93TGlzdCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMudXJsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGFibGVPcHRpb25zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZU9yZGVyZWRPcHRpb25zKHRoaXMuc2VsZWN0YWJsZU9wdGlvbnMpO1xyXG4gICAgICAgICAgdGhpcy5nZXRMaXN0KCkuc3Vic2NyaWJlKG5vb3ApO1xyXG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25Db250YWluZXJTaXplKCk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRyaWdnZXIub3Blbk1lbnUoKTtcclxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uQ29udGFpbmVyU2l6ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldExpc3QoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0TGlzdCh7XHJcbiAgICAgIHVybDogdGhpcy51cmwsXHJcbiAgICAgIHJlcXVlc3RUeXBlOiB0aGlzLnJlcXVlc3RUeXBlLFxyXG4gICAgICBkYXRhOiB7fSxcclxuICAgICAgY3VycmVudFBhZ2U6ICsrdGhpcy5jdXJyZW50UGFnZSxcclxuICAgICAgaWdub3JlUGFnaW5hdGlvbjogdGhpcy5pZ25vcmVQYWdpbmF0aW9uLFxyXG4gICAgICByZXF1ZXN0SGVhZGVyczogdGhpcy5yZXF1ZXN0SGVhZGVycyxcclxuICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFZhbHVlLFxyXG4gICAgICBzZWFyY2hQcm9wOiB0aGlzLnNlYXJjaFByb3AsXHJcbiAgICAgIHBhZ2VTaXplOiB0aGlzLmludFBhZ2VTaXplXHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBtYXAoKHZhbCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB2YWwgPz8gW107XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKHZhbCkgPT4gdGhpcy5tdWx0aU1hcHBlci5tYXBPcHRpb25zKHZhbCkpLCBzd2l0Y2hNYXAoKHZhbCkgPT4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcclxuICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgcmVzdWx0ID0gW107XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmxpc3RQcm9wLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHJlc3VsdCA9IFsuLi4odmFsW3RoaXMubGlzdFByb3BdID8/IFtdKV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJlc3VsdCA9IFsuLi52YWxdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuc2hvdWxkTG9hZE1vcmUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdPcHRpb25zID0gW107XHJcblxyXG4gICAgICAgICAgZm9yIChjb25zdCBvcHQgb2YgcmVzdWx0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld09wdGlvbiA9IHRoaXMubWFwcGVyLm1hcE9wdGlvbihvcHQpO1xyXG4gICAgICAgICAgICBuZXdPcHRpb25zLnB1c2gobmV3T3B0aW9uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBmb3JrSm9pbihuZXdPcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLCBzd2l0Y2hNYXAoKGZpblZhbDogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlT3B0aW9ucy5wdXNoKC4uLmZpblZhbCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JkZXJlZE9wdGlvbnModGhpcy5zZWxlY3RhYmxlT3B0aW9ucyk7XHJcbiAgICAgIH0pLCBtYXAoKHZhbCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50cmlnZ2VyLm9wZW5NZW51KCk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb25Db250YWluZXJTaXplKCk7XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgfSksIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgb25TY3JvbGxlZChlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChlLnRhcmdldC5zY3JvbGxUb3AgKyAyMjAgKyAoKHRoaXMuc2VhcmNoSW5wdXQgPyAwIDogMSkgKiA0MCkgPT09IHRoaXMuc2VsZWN0aW9uQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICYmICF0aGlzLmlzTG9hZGluZykge1xyXG4gICAgICB0aGlzLnNjcm9sbEVuZC5lbWl0KCk7XHJcbiAgICAgIGlmICh0aGlzLnVybCAmJiB0aGlzLnVybC5sZW5ndGggPiAwICYmICF0aGlzLmlnbm9yZVBhZ2luYXRpb24gJiYgdGhpcy5zaG91bGRMb2FkTW9yZSkge1xyXG4gICAgICAgIHRoaXMuZ2V0TGlzdCgpLnN1YnNjcmliZShub29wKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25NZW51T3BlbmVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5qdnhNdWx0aXNlbGVjdE9wZW5lZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvbk1lbnVDbG9zZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoKCF0aGlzLnVybCB8fCB0aGlzLnVybC5sZW5ndGggPT09IDApICYmIHRoaXMuc2VhcmNoTW9kZSA9PT0gJ2NsaWVudCcpIHtcclxuICAgICAgdGhpcy5zZWFyY2hWYWx1ZVN1YmplY3QubmV4dCgnJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5qdnhNdWx0aXNlbGVjdENsb3NlZC5lbWl0KCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hJbnB1dENsaWNrKGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaFZhbHVlQ2hhbmdlKGU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hWYWx1ZVN1YmplY3QubmV4dChlLnRhcmdldC52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBjbGVhcihlOiBFdmVudCk6IHZvaWQge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgIHRoaXMuZm9ybS5nZXQoJ3NlbGVjdGlvblZhbHVlJykuc2V0VmFsdWUodGhpcy52YWx1ZS5tYXAodiA9PiB2W3RoaXMuaXRlbVZhbHVlXSkpO1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udHJvbEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxyXG4gICAgICAucXVlcnlTZWxlY3RvcignLm5nLWp2eC1tdWx0aXNlbGVjdCcpO1xyXG4gICAgY29udHJvbEVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgaWRzLmpvaW4oJyAnKSk7XHJcbiAgfVxyXG5cclxuICBvbkNvbnRhaW5lckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICAvLyBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdpbnB1dCcpIHtcclxuICAgIC8vICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQnKS5mb2N1cygpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgc3RhdGVDaGFuZ2UkKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZUNoYW5nZXMuYXNPYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVPcmRlcmVkT3B0aW9ucyhvcHRpb25zKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGxldCBvYnMgPSBvZihvcHRpb25zKTtcclxuICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcclxuICAgICAgdGhpcy5vcmRlcmVkT3B0aW9ucy5sZW5ndGggPSAwO1xyXG4gICAgICBjb25zdCBvYnNBcnIgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ncm91cEJ5ICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgb2JzQXJyLnB1c2godGhpcy5ncm91cEJ5Lm1hcEdyb3VwKG9wdGlvbikpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvYnNBcnIucHVzaChvZih7Z3JvdXA6IG9wdGlvblt0aGlzLmdyb3VwQnldLCBvcHRpb259IGFzIE5nSnZ4R3JvdXA8YW55PikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBvYnMgPSBmb3JrSm9pbihvYnNBcnIpLnBpcGUobWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IFsuLi5uZXcgU2V0KHJlcy5tYXAoaXRlbSA9PiBpdGVtLmdyb3VwKSldO1xyXG4gICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgZ3JvdXBzKSB7XHJcbiAgICAgICAgICB0aGlzLm9yZGVyZWRPcHRpb25zLnB1c2goe1xyXG4gICAgICAgICAgICBncm91cCxcclxuICAgICAgICAgICAgb3B0aW9uczogcmVzLmZpbHRlcihyID0+IHIuZ3JvdXAgPT09IGdyb3VwKS5tYXAobyA9PiBvLm9wdGlvbilcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5vcmRlcmVkT3B0aW9ucztcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9icztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZU1lbnUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRyaWdnZXIuY2xvc2VNZW51KCk7XHJcbiAgfVxyXG5cclxuICBpc09wdGlvblNlbGVjdGVkKG9wdGlvbjogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnc2VsZWN0aW9uVmFsdWUnKS52YWx1ZS5pbmNsdWRlcyhvcHRpb25bdGhpcy5pdGVtVmFsdWVdKTtcclxuICB9XHJcblxyXG4gIGNsaWNrT25PcHRpb24ob3B0aW9uOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uKSkge1xyXG4gICAgICB0aGlzLmRlc2VsZWN0KG9wdGlvbik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdChvcHRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0KG9wdGlvbjogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubXVsdGkpIHtcclxuICAgICAgdGhpcy5mb3JtLmdldCgnc2VsZWN0aW9uVmFsdWUnKS5yZXNldChbXSk7XHJcbiAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMudmFsdWUucHVzaChvcHRpb24pO1xyXG5cclxuICAgIHRoaXMudmFsdWUuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICByZXR1cm4gdHlwZW9mIGFbdGhpcy5pdGVtVmFsdWVdID09PSAnc3RyaW5nJyA/XHJcbiAgICAgICAgYVt0aGlzLml0ZW1WYWx1ZV0ubG9jYWxlQ29tcGFyZShiW3RoaXMuaXRlbVZhbHVlXSkgOiBhW3RoaXMuaXRlbVZhbHVlXSAtIGJbdGhpcy5pdGVtVmFsdWVdO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCB2YWwgPSB0aGlzLmZvcm0uZ2V0KCdzZWxlY3Rpb25WYWx1ZScpLnZhbHVlLmNvbmNhdChbb3B0aW9uW3RoaXMuaXRlbVZhbHVlXV0pO1xyXG4gICAgdmFsLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgcmV0dXJuIHR5cGVvZiBhW3RoaXMuaXRlbVZhbHVlXSA9PT0gJ3N0cmluZycgP1xyXG4gICAgICAgIGFbdGhpcy5pdGVtVmFsdWVdLmxvY2FsZUNvbXBhcmUoYlt0aGlzLml0ZW1WYWx1ZV0pIDogYVt0aGlzLml0ZW1WYWx1ZV0gLSBiW3RoaXMuaXRlbVZhbHVlXTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtLmdldCgnc2VsZWN0aW9uVmFsdWUnKS5zZXRWYWx1ZSh2YWwpO1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5mb3JtLmdldCgnc2VsZWN0aW9uVmFsdWUnKS52YWx1ZSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJuZy1qdngtbXVsdGlzZWxlY3RcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzogZGlzYWJsZWQsICdoYXMtZXJyb3JzJzogaGFzRXJyb3JzfVwiICNqdnhNdWx0aXNlbGVjdD5cclxuICA8IS0tIFNUQVJUIE1FTlUgLS0+XHJcbiAgPGRpdiBbbGliTWVudVRyaWdnZXJGb3JdPVwibWVudVJlZlwiIChvbk1lbnVPcGVuKT1cIm9uTWVudU9wZW4oKVwiIChtZW51T3BlbmVkKT1cIm9uTWVudU9wZW5lZCgpXCJcclxuICAgICAgICN0cmlnZ2VyXHJcbiAgICAgICAob25NZW51Q2xvc2UpPVwib25NZW51Q2xvc2UoKVwiIChtZW51Q2xvc2VkKT1cIm9uTWVudUNsb3NlZCgpXCJcclxuICA+XHJcbiAgICA8bGliLXBhbmVsICNtZW51UmVmIFtjbGFzc109XCJbJ2p2eC1tdWx0aXNlbGVjdC1wYW5lbCcsIHBhbmVsQ2xhc3NdLmpvaW4oJyAnKVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiXHJcbiAgICAgICAgICAgICAgIFt5UG9zaXRpb25dPVwieVBvc2l0aW9uXCI+XHJcbiAgICAgIEBpZiAoY2xvc2VCdXR0b24pIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2VNZW51QnV0dG9uXCI+XHJcbiAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDI1NiAyNTZcIj5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTIwNS42NiwxOTQuMzRhOCw4LDAsMCwxLTExLjMyLDExLjMyTDEyOCwxMzkuMzEsNjEuNjYsMjA1LjY2YTgsOCwwLDAsMS0xMS4zMi0xMS4zMkwxMTYuNjksMTI4LDUwLjM0LDYxLjY2QTgsOCwwLDAsMSw2MS42Niw1MC4zNEwxMjgsMTE2LjY5bDY2LjM0LTY2LjM1YTgsOCwwLDAsMSwxMS4zMiwxMS4zMkwxMzkuMzEsMTI4WlwiPjwvcGF0aD5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWxpc3QtY29udGFpbmVyXCJcclxuICAgICAgICAgICAjbWVudUxJc3RDb250YWluZXJcclxuICAgICAgICAgICBbbmdTdHlsZV09XCJ7J292ZXJmbG93LXknOiAnaGlkZGVuJywgJ3dpZHRoJzogbGlzdENvbnRhaW5lclNpemUud2lkdGgsICdtaW4td2lkdGgucHgnOiAxMTIsICdtYXgtaGVpZ2h0JzogJzI2MHB4JywgJ2hlaWdodCc6IGxpc3RDb250YWluZXJTaXplLmhlaWdodCwgJ21pbi1oZWlnaHQnOiBsaXN0Q29udGFpbmVyU2l6ZS5taW5IZWlnaHR9XCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCIhIXNlYXJjaElucHV0XCIgKGNsaWNrKT1cIm9uU2VhcmNoSW5wdXRDbGljaygkZXZlbnQpXCI+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwic2VhcmNoTGFiZWxcIiBbbmdNb2RlbF09XCJzZWFyY2hWYWx1ZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgIFtuZ0p2eEZvY3VzXT1cImlzT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uU2VhcmNoVmFsdWVDaGFuZ2UoJGV2ZW50KVwiLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJ7aGVpZ2h0OiBzZWFyY2hJbnB1dCAmJiBzZWxlY3Rpb25Db250YWluZXIuY2xpZW50SGVpZ2h0ID4gMjIwIHx8IHNlbGVjdGlvbkNvbnRhaW5lci5jbGllbnRIZWlnaHQgPiAyNjA/IDI2MCAtIChzZWFyY2hJbnB1dD8gNDAgOiAwKSArICdweCc6ICdhdXRvJ31cIj5cclxuICAgICAgICAgIDxuZy1zY3JvbGxiYXIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtb290aFNjcm9sbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmlzaWJpbGl0eV09XCInaG92ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiJ2NvbXBhY3QnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbnNvckRpc2FibGVkXT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvSGVpZ2h0RGlzYWJsZWRdPVwiZmFsc2VcIiAjc2Nyb2xsYmFyPlxyXG4gICAgICAgICAgICA8ZGl2ICNzZWxlY3Rpb25Db250YWluZXIgKGNsaWNrKT1cIm9uQ0xpY2tPbk1lbnUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgI3NlbGVjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93TGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J3BhZGRpbmcnOiAwLCAnd2lkdGgnOiBsaXN0Q29udGFpbmVyU2l6ZS53aWR0aCwgJ21pbi13aWR0aC5weCc6IDExMn1cIlxyXG4gICAgICAgICAgICAgICAgICAgbmdEZWZhdWx0Q29udHJvbFxyXG4gICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0aW9uVmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIWdyb3VwQnlcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0IG9mIG9yZGVyZWRPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ3JvdXBIZWFkZXJUZW1wbGF0ZT8gZ3JvdXBIZWFkZXJUZW1wbGF0ZS50ZW1wbGF0ZTogZGVmYXVsdEdyb3VwSGVhZGVyVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdH1cIj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWp2eC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHQub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25baXRlbVZhbHVlXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzU2VsZWN0ZWRdPVwiaXNPcHRpb25TZWxlY3RlZChvcHRpb24pXCIgKGNsaWNrKT1cImNsaWNrT25PcHRpb24ob3B0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogb3B0aW9ufVwiPjwvbmctY29udGFpbmVyPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5nLWp2eC1vcHRpb24td3JhcHBlclwiIHN0eWxlPVwibWluLWhlaWdodDo0OHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uc1RlbXBsYXRlPyBvcHRpb25zVGVtcGxhdGUudGVtcGxhdGUgOiBkZWZhdWx0VGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBvcHRpb259XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWp2eC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3VwQnkgfHwgZ3JvdXBCeS5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWp2eC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzZWxlY3RhYmxlT3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25baXRlbVZhbHVlXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1NlbGVjdGVkXT1cImlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uKVwiIChjbGljayk9XCJjbGlja09uT3B0aW9uKG9wdGlvbilcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmctanZ4LW9wdGlvbi13cmFwcGVyXCIgc3R5bGU9XCJtaW4taGVpZ2h0OjQ4cHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uc1RlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdGlvbn1cIj48L25nLWNvbnRhaW5lcj4tLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uc1RlbXBsYXRlPyBvcHRpb25zVGVtcGxhdGUudGVtcGxhdGUgOiBkZWZhdWx0VGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogb3B0aW9ufVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWp2eC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXNjcm9sbGJhcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVudS1mb290ZXJcIj5cclxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmctanZ4LWZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvbGliLXBhbmVsPlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gRU5EIE1FTlUgLS0+XHJcbiAgPCEtLSBTVEFSVCBJTlBVVCAtLT5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnbmctanZ4LW11bHRpc2VsZWN0LXZhbHVlLWNvbnRhaW5lcic6IHRydWUsICdpcy1vcGVuJzogaXNPcGVufVwiXHJcbiAgICAgICAoY2xpY2spPVwiY2xpY2tPbk1lbnVUcmlnZ2VyKCRldmVudClcIlxyXG4gICAgICAgI3ZhbHVlQ29udGFpbmVyPlxyXG4gICAgQGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgPGRpdiBjbGFzcz1cIm5nLWp2eC1tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXJcIiAjcGxhY2Vob2xkZXJDb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3BsYWNlaG9sZGVyXVwiPjwvbmctY29udGVudD5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgICA8ZGl2IGNsYXNzPVwibmctanZ4LW11bHRpc2VsZWN0LXZhbHVlIG11bHRpLXZhbHVlLWNvbnRhaW5lclwiICpuZ0lmPVwibXVsdGlcIiAjbXVsdGlDb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdGlvblRlbXBsYXRlPyBzZWxlY3Rpb25UZW1wbGF0ZS50ZW1wbGF0ZSA6IGRlZmF1bHRNdWx0aVNlbGVjdGlvblRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogdmFsdWV9XCI+PC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJuZy1qdngtbXVsdGlzZWxlY3QtdmFsdWUgc2luZ2xlLXZhbHVlLWNvbnRhaW5lclwiICpuZ0lmPVwiIW11bHRpXCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHZhbCBvZiB2YWx1ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3Rpb25UZW1wbGF0ZT8gc2VsZWN0aW9uVGVtcGxhdGUudGVtcGxhdGUgOiBkZWZhdWx0U2VsZWN0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IHZhbH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZiAoY2xlYXJhYmxlICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgPGRpdiBjbGFzcz1cIm5nLWp2eC1tdWx0aXNlbGVjdF9fcmVtb3ZlLWJ1dHRvblwiIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgZmlsbD1cIiMwMDAwMDBcIiB2aWV3Qm94PVwiMCAwIDI1NiAyNTZcIj5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMjA1LjY2LDE5NC4zNGE4LDgsMCwwLDEtMTEuMzIsMTEuMzJMMTI4LDEzOS4zMSw2MS42NiwyMDUuNjZhOCw4LDAsMCwxLTExLjMyLTExLjMyTDExNi42OSwxMjgsNTAuMzQsNjEuNjZBOCw4LDAsMCwxLDYxLjY2LDUwLjM0TDEyOCwxMTYuNjlsNjYuMzQtNjYuMzVhOCw4LDAsMCwxLDExLjMyLDExLjMyTDEzOS4zMSwxMjhaXCI+PC9wYXRoPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIDxkaXYgY2xhc3M9XCJuZy1qdngtbXVsdGlzZWxlY3QtYXJyb3dcIj5cclxuICAgICAgQGlmICghaXNMb2FkaW5nKSB7XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cIiMwMDAwMDBcIiB2aWV3Qm94PVwiMCAwIDI1NiAyNTZcIj5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMjEzLjY2LDEwMS42NmwtODAsODBhOCw4LDAsMCwxLTExLjMyLDBsLTgwLTgwQTgsOCwwLDAsMSw1My42Niw5MC4zNEwxMjgsMTY0LjY5bDc0LjM0LTc0LjM1YTgsOCwwLDAsMSwxMS4zMiwxMS4zMlpcIj48L3BhdGg+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZHMtcmluZ1wiPlxyXG4gICAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2PjwvZGl2PlxyXG4gICAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBFTkQgSU5QVVQgLS0+XHJcbjwvZGl2PlxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZSBsZXQtb3B0aW9uPlxyXG4gIDxkaXYgc3R5bGU9XCJtaW4taGVpZ2h0OiA0OHB4OyBoZWlnaHQ6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXJcIj5cclxuICAgIDxkaXYgc3R5bGU9XCJtYXgtd2lkdGg6IDEwMCU7XHJcbiAgcGFkZGluZy1pbmxpbmU6IC4zcmVtO1xyXG4gICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcIj57eyBvcHRpb25baXRlbVRleHRdIH19XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNlbGVjdGlvblRlbXBsYXRlIGxldC12YWx1ZT5cclxuICB7eyB2YWx1ZVtpdGVtVGV4dF0gfX1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE11bHRpU2VsZWN0aW9uVGVtcGxhdGUgbGV0LXZhbHVlPlxyXG4gIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDAuM3JlbTsgZmxleC13cmFwOiB3cmFwO1wiPlxyXG4gICAgQGZvciAodmFsIG9mIHZhbHVlOyB0cmFjayB2YWxbaXRlbVZhbHVlXSkge1xyXG4gICAgICA8bGliLWNoaXAgY2xhc3M9XCJuZy1qdngtbXVsdGlzZWxlY3QtY2hpcFwiIFtkaXNhYmxlZF09XCJ0aGlzLmRpc2FibGVkXCIgKHJlbW92ZWQpPVwiZGVzZWxlY3QodmFsKVwiPlxyXG4gICAgICAgIHt7IHZhbFtpdGVtVGV4dF0gfX1cclxuICAgICAgPC9saWItY2hpcD5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JvdXBIZWFkZXJUZW1wbGF0ZSBsZXQtb3B0PlxyXG4gIDxkaXYgc3R5bGU9XCJwYWRkaW5nLWlubGluZTogMTVweFwiPjxzdHJvbmc+e3sgb3B0Lmdyb3VwIH19PC9zdHJvbmc+PC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -968,7 +968,7 @@ class NgJvxMultiselectComponent {
968
968
  // useExisting: forwardRef(() => NgJvxMultiselectComponent),
969
969
  // multi: true,
970
970
  // }
971
- ], queries: [{ propertyName: "optionsTemplate", first: true, predicate: NgJvxOptionsTemplateDirective, descendants: true }, { propertyName: "selectionTemplate", first: true, predicate: NgJvxSelectionTemplateDirective, descendants: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: NgJvxGroupHeaderDirective, descendants: true }], viewQueries: [{ propertyName: "jvxMultiselect", first: true, predicate: ["jvxMultiselect"], descendants: true, static: true }, { propertyName: "valueContainer", first: true, predicate: ["valueContainer"], descendants: true, static: true }, { propertyName: "selectionContainer", first: true, predicate: ["selectionContainer"], descendants: true }, { propertyName: "trigger", first: true, predicate: MenuTriggerDirective, descendants: true, static: true }, { propertyName: "scrollbar", first: true, predicate: ["scrollbar"], descendants: true }, { propertyName: "multiContainer", first: true, predicate: ["multiContainer"], descendants: true }, { propertyName: "placeholderContainer", first: true, predicate: ["placeholderContainer"], descendants: true }, { propertyName: "optionComp", predicate: NgJvxOptionComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"ng-jvx-multiselect\" [ngClass]=\"{'disabled': disabled, 'has-errors': hasErrors}\" #jvxMultiselect>\r\n <!-- START MENU -->\r\n <div [libMenuTriggerFor]=\"menuRef\" (onMenuOpen)=\"onMenuOpen()\" (menuOpened)=\"onMenuOpened()\"\r\n #trigger\r\n (onMenuClose)=\"onMenuClose()\" (menuClosed)=\"onMenuClosed()\"\r\n >\r\n <lib-panel #menuRef [class]=\"['jvx-multiselect-panel', panelClass].join(' ')\" [formGroup]=\"form\"\r\n [yPosition]=\"yPosition\">\r\n @if (closeButton) {\r\n <div class=\"closeMenuButton\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"menu-list-container\"\r\n #menuLIstContainer\r\n [ngStyle]=\"{'overflow-y': 'hidden', 'width': listContainerSize.width, 'min-width.px': 112, 'max-height': '260px', 'height': listContainerSize.height, 'min-height': listContainerSize.minHeight}\">\r\n\r\n <div class=\"search-input-container\" *ngIf=\"!!searchInput\" (click)=\"onSearchInputClick($event)\">\r\n <input type=\"text\" [placeholder]=\"searchLabel\" [ngModel]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"\r\n [ngJvxFocus]=\"isOpen\"\r\n (input)=\"onSearchValueChange($event)\"/>\r\n </div>\r\n <div\r\n [ngStyle]=\"{height: searchInput && selectionContainer.clientHeight > 220 || selectionContainer.clientHeight > 260? 260 - (searchInput? 40 : 0) + 'px': 'auto'}\">\r\n <ng-scrollbar style=\"width: 100%\"\r\n smoothScroll\r\n [visibility]=\"'hover'\"\r\n [appearance]=\"'compact'\"\r\n [sensorDisabled]=\"isLoading\"\r\n [autoHeightDisabled]=\"false\" #scrollbar>\r\n <div #selectionContainer (click)=\"onCLickOnMenu($event)\">\r\n <div #selection\r\n *ngIf=\"showList\"\r\n [ngStyle]=\"{'padding': 0, 'width': listContainerSize.width, 'min-width.px': 112}\"\r\n ngDefaultControl\r\n formControlName=\"selectionValue\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"!!groupBy\">\r\n <ng-container *ngFor=\"let opt of orderedOptions\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"groupHeaderTemplate? groupHeaderTemplate.template: defaultGroupHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: opt}\"></ng-container>\r\n\r\n <ng-jvx-option *ngFor=\"let option of opt.options\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!groupBy || groupBy.length === 0\">\r\n <ng-jvx-option *ngFor=\"let option of selectableOptions\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n </div>\r\n\r\n </div>\r\n <div class=\"menu-footer\">\r\n <ng-content select=\"[ng-jvx-footer]\"></ng-content>\r\n </div>\r\n\r\n </lib-panel>\r\n </div>\r\n <!-- END MENU -->\r\n <!-- START INPUT -->\r\n <div [ngClass]=\"{'ng-jvx-multiselect-value-container': true, 'is-open': isOpen}\"\r\n (click)=\"clickOnMenuTrigger($event)\"\r\n #valueContainer>\r\n @if (value.length === 0) {\r\n <div class=\"ng-jvx-multiselect__placeholder\" #placeholderContainer>\r\n <ng-content select=\"[placeholder]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-value multi-value-container\" *ngIf=\"multi\" #multiContainer>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultMultiSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: value}\"></ng-container>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value single-value-container\" *ngIf=\"!multi\">\r\n <div *ngFor=\"let val of value\" style=\"width: 100%;\">\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: val}\"></ng-container>\r\n </div>\r\n </div>\r\n @if (clearable && value.length > 0) {\r\n <div class=\"ng-jvx-multiselect__remove-button\" (click)=\"clear($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-arrow\">\r\n @if (!isLoading) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z\"></path>\r\n </svg>\r\n } @else {\r\n <div class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- END INPUT -->\r\n</div>\r\n<ng-template #defaultTemplate let-option>\r\n <div style=\"height: 100%; display: flex; align-items: center\">\r\n <div style=\"max-width: 100%;\r\n padding-inline: .3rem;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\">{{ option[itemText] }}\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectionTemplate let-value>\r\n {{ value[itemText] }}\r\n</ng-template>\r\n\r\n<ng-template #defaultMultiSelectionTemplate let-value>\r\n <div style=\"display: flex; gap: 0.3rem; flex-wrap: wrap;\">\r\n @for (val of value; track val[itemValue]) {\r\n <lib-chip class=\"ng-jvx-multiselect-chip\" [disabled]=\"this.disabled\" (removed)=\"deselect(val)\">\r\n {{ val[itemText] }}\r\n </lib-chip>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultGroupHeaderTemplate let-opt>\r\n <div style=\"padding-inline: 15px\"><strong>{{ opt.group }}</strong></div>\r\n</ng-template>\r\n", styles: ["ng-jvx-multiselect{display:flex;align-items:center;width:100%}ng-jvx-multiselect .ng-jvx-multiselect{width:100%;display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container{width:100%;display:flex;cursor:pointer;position:relative;justify-content:space-between;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__placeholder{height:100%;display:flex;align-items:center;position:absolute}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-value{flex:1 1 100%;max-width:calc(100% - 28px);display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__remove-button{display:flex;height:100%;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow{width:24px;padding-right:4px;display:flex;align-items:center;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow svg{transition:transform .3s ease-in-out}@keyframes lds-ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring{display:inline-block;position:relative;width:24px;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div{box-sizing:border-box;display:block;position:absolute;width:6px;height:16px;margin:4px;border:2px solid;border-radius:50%;animation:lds-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--jvx-multiselect-accent) transparent transparent transparent}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(1){animation-delay:-.45s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(2){animation-delay:-.3s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(3){animation-delay:-.15s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container.is-open .ng-jvx-multiselect-arrow svg{transform:rotate(180deg)}ng-jvx-multiselect .ng-jvx-multiselect.disabled{pointer-events:none}ng-jvx-multiselect .ng-jvx-multiselect.disabled .ng-jvx-multiselect-arrow svg{opacity:.3}ng-jvx-multiselect .ng-jvx-multiselect.has-errors{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.single-value-container{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.multi-value-container{width:100%}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-arrow svg{color:red}.menu-list-container{max-height:300px;display:flex;flex-direction:column}.menu-footer{max-height:30px;overflow:hidden}.cdk-overlay-pane .closeMenuButton{height:22px;width:22px;background-color:var(--jvx-multiselect-primary);position:absolute;top:-11px;right:11px;border-radius:100%;cursor:pointer;color:#fff;z-index:10}.cdk-overlay-pane .closeMenuButton svg{fill:var(--jvx-multiselect-on-primary);font-size:15px;height:100%;width:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$2.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: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.NgScrollbar, selector: "ng-scrollbar", inputs: ["disabled", "sensorDisabled", "pointerEventsDisabled", "viewportPropagateMouseMove", "autoHeightDisabled", "autoWidthDisabled", "viewClass", "trackClass", "thumbClass", "minThumbSize", "trackClickScrollDuration", "pointerEventsMethod", "track", "visibility", "appearance", "position", "sensorDebounce", "scrollAuditTime"], outputs: ["updated"], exportAs: ["ngScrollbar"] }, { kind: "directive", type: i5.SmoothScroll, selector: "[smoothScroll], [smooth-scroll]", exportAs: ["smoothScroll"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PanelComponent, selector: "lib-panel", inputs: ["trigger", "yPosition"], outputs: ["onClose", "onClosed", "onOpened"] }, { kind: "component", type: ChipComponent, selector: "lib-chip", inputs: ["disabled"], outputs: ["removed"] }, { kind: "directive", type: MenuTriggerDirective, selector: "[lib-menu-trigger-for], [libMenuTriggerFor]", inputs: ["libMenuTriggerFor"], outputs: ["closed", "onMenuOpen", "menuOpened", "onMenuClose", "menuClosed"] }, { kind: "component", type: NgJvxOptionComponent, selector: "ng-jvx-option", inputs: ["value", "disabled", "isSelected"], outputs: ["clickOnOption"] }, { kind: "directive", type: NgJvxFocusDirective, selector: "[ngJvxFocus]", inputs: ["ngJvxFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
971
+ ], queries: [{ propertyName: "optionsTemplate", first: true, predicate: NgJvxOptionsTemplateDirective, descendants: true }, { propertyName: "selectionTemplate", first: true, predicate: NgJvxSelectionTemplateDirective, descendants: true }, { propertyName: "groupHeaderTemplate", first: true, predicate: NgJvxGroupHeaderDirective, descendants: true }], viewQueries: [{ propertyName: "jvxMultiselect", first: true, predicate: ["jvxMultiselect"], descendants: true, static: true }, { propertyName: "valueContainer", first: true, predicate: ["valueContainer"], descendants: true, static: true }, { propertyName: "selectionContainer", first: true, predicate: ["selectionContainer"], descendants: true }, { propertyName: "trigger", first: true, predicate: MenuTriggerDirective, descendants: true, static: true }, { propertyName: "scrollbar", first: true, predicate: ["scrollbar"], descendants: true }, { propertyName: "multiContainer", first: true, predicate: ["multiContainer"], descendants: true }, { propertyName: "placeholderContainer", first: true, predicate: ["placeholderContainer"], descendants: true }, { propertyName: "optionComp", predicate: NgJvxOptionComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"ng-jvx-multiselect\" [ngClass]=\"{'disabled': disabled, 'has-errors': hasErrors}\" #jvxMultiselect>\r\n <!-- START MENU -->\r\n <div [libMenuTriggerFor]=\"menuRef\" (onMenuOpen)=\"onMenuOpen()\" (menuOpened)=\"onMenuOpened()\"\r\n #trigger\r\n (onMenuClose)=\"onMenuClose()\" (menuClosed)=\"onMenuClosed()\"\r\n >\r\n <lib-panel #menuRef [class]=\"['jvx-multiselect-panel', panelClass].join(' ')\" [formGroup]=\"form\"\r\n [yPosition]=\"yPosition\">\r\n @if (closeButton) {\r\n <div class=\"closeMenuButton\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"menu-list-container\"\r\n #menuLIstContainer\r\n [ngStyle]=\"{'overflow-y': 'hidden', 'width': listContainerSize.width, 'min-width.px': 112, 'max-height': '260px', 'height': listContainerSize.height, 'min-height': listContainerSize.minHeight}\">\r\n\r\n <div class=\"search-input-container\" *ngIf=\"!!searchInput\" (click)=\"onSearchInputClick($event)\">\r\n <input type=\"text\" [placeholder]=\"searchLabel\" [ngModel]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"\r\n [ngJvxFocus]=\"isOpen\"\r\n (input)=\"onSearchValueChange($event)\"/>\r\n </div>\r\n <div\r\n [ngStyle]=\"{height: searchInput && selectionContainer.clientHeight > 220 || selectionContainer.clientHeight > 260? 260 - (searchInput? 40 : 0) + 'px': 'auto'}\">\r\n <ng-scrollbar style=\"width: 100%\"\r\n smoothScroll\r\n [visibility]=\"'hover'\"\r\n [appearance]=\"'compact'\"\r\n [sensorDisabled]=\"isLoading\"\r\n [autoHeightDisabled]=\"false\" #scrollbar>\r\n <div #selectionContainer (click)=\"onCLickOnMenu($event)\">\r\n <div #selection\r\n *ngIf=\"showList\"\r\n [ngStyle]=\"{'padding': 0, 'width': listContainerSize.width, 'min-width.px': 112}\"\r\n ngDefaultControl\r\n formControlName=\"selectionValue\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"!!groupBy\">\r\n <ng-container *ngFor=\"let opt of orderedOptions\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"groupHeaderTemplate? groupHeaderTemplate.template: defaultGroupHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: opt}\"></ng-container>\r\n\r\n <ng-jvx-option *ngFor=\"let option of opt.options\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!groupBy || groupBy.length === 0\">\r\n <ng-jvx-option *ngFor=\"let option of selectableOptions\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n </div>\r\n\r\n </div>\r\n <div class=\"menu-footer\">\r\n <ng-content select=\"[ng-jvx-footer]\"></ng-content>\r\n </div>\r\n\r\n </lib-panel>\r\n </div>\r\n <!-- END MENU -->\r\n <!-- START INPUT -->\r\n <div [ngClass]=\"{'ng-jvx-multiselect-value-container': true, 'is-open': isOpen}\"\r\n (click)=\"clickOnMenuTrigger($event)\"\r\n #valueContainer>\r\n @if (value.length === 0) {\r\n <div class=\"ng-jvx-multiselect__placeholder\" #placeholderContainer>\r\n <ng-content select=\"[placeholder]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-value multi-value-container\" *ngIf=\"multi\" #multiContainer>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultMultiSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: value}\"></ng-container>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value single-value-container\" *ngIf=\"!multi\">\r\n <div *ngFor=\"let val of value\" style=\"width: 100%;\">\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: val}\"></ng-container>\r\n </div>\r\n </div>\r\n @if (clearable && value.length > 0) {\r\n <div class=\"ng-jvx-multiselect__remove-button\" (click)=\"clear($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-arrow\">\r\n @if (!isLoading) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z\"></path>\r\n </svg>\r\n } @else {\r\n <div class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- END INPUT -->\r\n</div>\r\n<ng-template #defaultTemplate let-option>\r\n <div style=\"min-height: 48px; height: 100%; display: flex; align-items: center\">\r\n <div style=\"max-width: 100%;\r\n padding-inline: .3rem;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\">{{ option[itemText] }}\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectionTemplate let-value>\r\n {{ value[itemText] }}\r\n</ng-template>\r\n\r\n<ng-template #defaultMultiSelectionTemplate let-value>\r\n <div style=\"display: flex; gap: 0.3rem; flex-wrap: wrap;\">\r\n @for (val of value; track val[itemValue]) {\r\n <lib-chip class=\"ng-jvx-multiselect-chip\" [disabled]=\"this.disabled\" (removed)=\"deselect(val)\">\r\n {{ val[itemText] }}\r\n </lib-chip>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultGroupHeaderTemplate let-opt>\r\n <div style=\"padding-inline: 15px\"><strong>{{ opt.group }}</strong></div>\r\n</ng-template>\r\n", styles: ["ng-jvx-multiselect{display:flex;align-items:center;width:100%}ng-jvx-multiselect .ng-jvx-multiselect{width:100%;display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container{width:100%;display:flex;cursor:pointer;position:relative;justify-content:space-between;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__placeholder{height:100%;display:flex;align-items:center;position:absolute}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-value{flex:1 1 100%;max-width:calc(100% - 28px);display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__remove-button{display:flex;height:100%;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow{width:24px;padding-right:4px;display:flex;align-items:center;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow svg{transition:transform .3s ease-in-out}@keyframes lds-ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring{display:inline-block;position:relative;width:24px;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div{box-sizing:border-box;display:block;position:absolute;width:6px;height:16px;margin:4px;border:2px solid;border-radius:50%;animation:lds-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--jvx-multiselect-accent) transparent transparent transparent}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(1){animation-delay:-.45s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(2){animation-delay:-.3s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(3){animation-delay:-.15s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container.is-open .ng-jvx-multiselect-arrow svg{transform:rotate(180deg)}ng-jvx-multiselect .ng-jvx-multiselect.disabled{pointer-events:none}ng-jvx-multiselect .ng-jvx-multiselect.disabled .ng-jvx-multiselect-arrow svg{opacity:.3}ng-jvx-multiselect .ng-jvx-multiselect.has-errors{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.single-value-container{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.multi-value-container{width:100%}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-arrow svg{color:red}.menu-list-container{max-height:300px;display:flex;flex-direction:column}.menu-footer{max-height:30px;overflow:hidden}.cdk-overlay-pane .closeMenuButton{height:22px;width:22px;background-color:var(--jvx-multiselect-primary);position:absolute;top:-11px;right:11px;border-radius:100%;cursor:pointer;color:#fff;z-index:10}.cdk-overlay-pane .closeMenuButton svg{fill:var(--jvx-multiselect-on-primary);font-size:15px;height:100%;width:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1$2.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: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.NgScrollbar, selector: "ng-scrollbar", inputs: ["disabled", "sensorDisabled", "pointerEventsDisabled", "viewportPropagateMouseMove", "autoHeightDisabled", "autoWidthDisabled", "viewClass", "trackClass", "thumbClass", "minThumbSize", "trackClickScrollDuration", "pointerEventsMethod", "track", "visibility", "appearance", "position", "sensorDebounce", "scrollAuditTime"], outputs: ["updated"], exportAs: ["ngScrollbar"] }, { kind: "directive", type: i5.SmoothScroll, selector: "[smoothScroll], [smooth-scroll]", exportAs: ["smoothScroll"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PanelComponent, selector: "lib-panel", inputs: ["trigger", "yPosition"], outputs: ["onClose", "onClosed", "onOpened"] }, { kind: "component", type: ChipComponent, selector: "lib-chip", inputs: ["disabled"], outputs: ["removed"] }, { kind: "directive", type: MenuTriggerDirective, selector: "[lib-menu-trigger-for], [libMenuTriggerFor]", inputs: ["libMenuTriggerFor"], outputs: ["closed", "onMenuOpen", "menuOpened", "onMenuClose", "menuClosed"] }, { kind: "component", type: NgJvxOptionComponent, selector: "ng-jvx-option", inputs: ["value", "disabled", "isSelected"], outputs: ["clickOnOption"] }, { kind: "directive", type: NgJvxFocusDirective, selector: "[ngJvxFocus]", inputs: ["ngJvxFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
972
972
  }
973
973
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgJvxMultiselectComponent, decorators: [{
974
974
  type: Component,
@@ -978,7 +978,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
978
978
  // useExisting: forwardRef(() => NgJvxMultiselectComponent),
979
979
  // multi: true,
980
980
  // }
981
- ], template: "<div class=\"ng-jvx-multiselect\" [ngClass]=\"{'disabled': disabled, 'has-errors': hasErrors}\" #jvxMultiselect>\r\n <!-- START MENU -->\r\n <div [libMenuTriggerFor]=\"menuRef\" (onMenuOpen)=\"onMenuOpen()\" (menuOpened)=\"onMenuOpened()\"\r\n #trigger\r\n (onMenuClose)=\"onMenuClose()\" (menuClosed)=\"onMenuClosed()\"\r\n >\r\n <lib-panel #menuRef [class]=\"['jvx-multiselect-panel', panelClass].join(' ')\" [formGroup]=\"form\"\r\n [yPosition]=\"yPosition\">\r\n @if (closeButton) {\r\n <div class=\"closeMenuButton\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"menu-list-container\"\r\n #menuLIstContainer\r\n [ngStyle]=\"{'overflow-y': 'hidden', 'width': listContainerSize.width, 'min-width.px': 112, 'max-height': '260px', 'height': listContainerSize.height, 'min-height': listContainerSize.minHeight}\">\r\n\r\n <div class=\"search-input-container\" *ngIf=\"!!searchInput\" (click)=\"onSearchInputClick($event)\">\r\n <input type=\"text\" [placeholder]=\"searchLabel\" [ngModel]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"\r\n [ngJvxFocus]=\"isOpen\"\r\n (input)=\"onSearchValueChange($event)\"/>\r\n </div>\r\n <div\r\n [ngStyle]=\"{height: searchInput && selectionContainer.clientHeight > 220 || selectionContainer.clientHeight > 260? 260 - (searchInput? 40 : 0) + 'px': 'auto'}\">\r\n <ng-scrollbar style=\"width: 100%\"\r\n smoothScroll\r\n [visibility]=\"'hover'\"\r\n [appearance]=\"'compact'\"\r\n [sensorDisabled]=\"isLoading\"\r\n [autoHeightDisabled]=\"false\" #scrollbar>\r\n <div #selectionContainer (click)=\"onCLickOnMenu($event)\">\r\n <div #selection\r\n *ngIf=\"showList\"\r\n [ngStyle]=\"{'padding': 0, 'width': listContainerSize.width, 'min-width.px': 112}\"\r\n ngDefaultControl\r\n formControlName=\"selectionValue\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"!!groupBy\">\r\n <ng-container *ngFor=\"let opt of orderedOptions\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"groupHeaderTemplate? groupHeaderTemplate.template: defaultGroupHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: opt}\"></ng-container>\r\n\r\n <ng-jvx-option *ngFor=\"let option of opt.options\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!groupBy || groupBy.length === 0\">\r\n <ng-jvx-option *ngFor=\"let option of selectableOptions\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n </div>\r\n\r\n </div>\r\n <div class=\"menu-footer\">\r\n <ng-content select=\"[ng-jvx-footer]\"></ng-content>\r\n </div>\r\n\r\n </lib-panel>\r\n </div>\r\n <!-- END MENU -->\r\n <!-- START INPUT -->\r\n <div [ngClass]=\"{'ng-jvx-multiselect-value-container': true, 'is-open': isOpen}\"\r\n (click)=\"clickOnMenuTrigger($event)\"\r\n #valueContainer>\r\n @if (value.length === 0) {\r\n <div class=\"ng-jvx-multiselect__placeholder\" #placeholderContainer>\r\n <ng-content select=\"[placeholder]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-value multi-value-container\" *ngIf=\"multi\" #multiContainer>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultMultiSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: value}\"></ng-container>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value single-value-container\" *ngIf=\"!multi\">\r\n <div *ngFor=\"let val of value\" style=\"width: 100%;\">\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: val}\"></ng-container>\r\n </div>\r\n </div>\r\n @if (clearable && value.length > 0) {\r\n <div class=\"ng-jvx-multiselect__remove-button\" (click)=\"clear($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-arrow\">\r\n @if (!isLoading) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z\"></path>\r\n </svg>\r\n } @else {\r\n <div class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- END INPUT -->\r\n</div>\r\n<ng-template #defaultTemplate let-option>\r\n <div style=\"height: 100%; display: flex; align-items: center\">\r\n <div style=\"max-width: 100%;\r\n padding-inline: .3rem;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\">{{ option[itemText] }}\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectionTemplate let-value>\r\n {{ value[itemText] }}\r\n</ng-template>\r\n\r\n<ng-template #defaultMultiSelectionTemplate let-value>\r\n <div style=\"display: flex; gap: 0.3rem; flex-wrap: wrap;\">\r\n @for (val of value; track val[itemValue]) {\r\n <lib-chip class=\"ng-jvx-multiselect-chip\" [disabled]=\"this.disabled\" (removed)=\"deselect(val)\">\r\n {{ val[itemText] }}\r\n </lib-chip>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultGroupHeaderTemplate let-opt>\r\n <div style=\"padding-inline: 15px\"><strong>{{ opt.group }}</strong></div>\r\n</ng-template>\r\n", styles: ["ng-jvx-multiselect{display:flex;align-items:center;width:100%}ng-jvx-multiselect .ng-jvx-multiselect{width:100%;display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container{width:100%;display:flex;cursor:pointer;position:relative;justify-content:space-between;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__placeholder{height:100%;display:flex;align-items:center;position:absolute}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-value{flex:1 1 100%;max-width:calc(100% - 28px);display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__remove-button{display:flex;height:100%;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow{width:24px;padding-right:4px;display:flex;align-items:center;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow svg{transition:transform .3s ease-in-out}@keyframes lds-ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring{display:inline-block;position:relative;width:24px;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div{box-sizing:border-box;display:block;position:absolute;width:6px;height:16px;margin:4px;border:2px solid;border-radius:50%;animation:lds-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--jvx-multiselect-accent) transparent transparent transparent}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(1){animation-delay:-.45s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(2){animation-delay:-.3s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(3){animation-delay:-.15s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container.is-open .ng-jvx-multiselect-arrow svg{transform:rotate(180deg)}ng-jvx-multiselect .ng-jvx-multiselect.disabled{pointer-events:none}ng-jvx-multiselect .ng-jvx-multiselect.disabled .ng-jvx-multiselect-arrow svg{opacity:.3}ng-jvx-multiselect .ng-jvx-multiselect.has-errors{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.single-value-container{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.multi-value-container{width:100%}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-arrow svg{color:red}.menu-list-container{max-height:300px;display:flex;flex-direction:column}.menu-footer{max-height:30px;overflow:hidden}.cdk-overlay-pane .closeMenuButton{height:22px;width:22px;background-color:var(--jvx-multiselect-primary);position:absolute;top:-11px;right:11px;border-radius:100%;cursor:pointer;color:#fff;z-index:10}.cdk-overlay-pane .closeMenuButton svg{fill:var(--jvx-multiselect-on-primary);font-size:15px;height:100%;width:100%}\n"] }]
981
+ ], template: "<div class=\"ng-jvx-multiselect\" [ngClass]=\"{'disabled': disabled, 'has-errors': hasErrors}\" #jvxMultiselect>\r\n <!-- START MENU -->\r\n <div [libMenuTriggerFor]=\"menuRef\" (onMenuOpen)=\"onMenuOpen()\" (menuOpened)=\"onMenuOpened()\"\r\n #trigger\r\n (onMenuClose)=\"onMenuClose()\" (menuClosed)=\"onMenuClosed()\"\r\n >\r\n <lib-panel #menuRef [class]=\"['jvx-multiselect-panel', panelClass].join(' ')\" [formGroup]=\"form\"\r\n [yPosition]=\"yPosition\">\r\n @if (closeButton) {\r\n <div class=\"closeMenuButton\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"menu-list-container\"\r\n #menuLIstContainer\r\n [ngStyle]=\"{'overflow-y': 'hidden', 'width': listContainerSize.width, 'min-width.px': 112, 'max-height': '260px', 'height': listContainerSize.height, 'min-height': listContainerSize.minHeight}\">\r\n\r\n <div class=\"search-input-container\" *ngIf=\"!!searchInput\" (click)=\"onSearchInputClick($event)\">\r\n <input type=\"text\" [placeholder]=\"searchLabel\" [ngModel]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"\r\n [ngJvxFocus]=\"isOpen\"\r\n (input)=\"onSearchValueChange($event)\"/>\r\n </div>\r\n <div\r\n [ngStyle]=\"{height: searchInput && selectionContainer.clientHeight > 220 || selectionContainer.clientHeight > 260? 260 - (searchInput? 40 : 0) + 'px': 'auto'}\">\r\n <ng-scrollbar style=\"width: 100%\"\r\n smoothScroll\r\n [visibility]=\"'hover'\"\r\n [appearance]=\"'compact'\"\r\n [sensorDisabled]=\"isLoading\"\r\n [autoHeightDisabled]=\"false\" #scrollbar>\r\n <div #selectionContainer (click)=\"onCLickOnMenu($event)\">\r\n <div #selection\r\n *ngIf=\"showList\"\r\n [ngStyle]=\"{'padding': 0, 'width': listContainerSize.width, 'min-width.px': 112}\"\r\n ngDefaultControl\r\n formControlName=\"selectionValue\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"!!groupBy\">\r\n <ng-container *ngFor=\"let opt of orderedOptions\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"groupHeaderTemplate? groupHeaderTemplate.template: defaultGroupHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: opt}\"></ng-container>\r\n\r\n <ng-jvx-option *ngFor=\"let option of opt.options\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!groupBy || groupBy.length === 0\">\r\n <ng-jvx-option *ngFor=\"let option of selectableOptions\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n </div>\r\n\r\n </div>\r\n <div class=\"menu-footer\">\r\n <ng-content select=\"[ng-jvx-footer]\"></ng-content>\r\n </div>\r\n\r\n </lib-panel>\r\n </div>\r\n <!-- END MENU -->\r\n <!-- START INPUT -->\r\n <div [ngClass]=\"{'ng-jvx-multiselect-value-container': true, 'is-open': isOpen}\"\r\n (click)=\"clickOnMenuTrigger($event)\"\r\n #valueContainer>\r\n @if (value.length === 0) {\r\n <div class=\"ng-jvx-multiselect__placeholder\" #placeholderContainer>\r\n <ng-content select=\"[placeholder]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-value multi-value-container\" *ngIf=\"multi\" #multiContainer>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultMultiSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: value}\"></ng-container>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value single-value-container\" *ngIf=\"!multi\">\r\n <div *ngFor=\"let val of value\" style=\"width: 100%;\">\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: val}\"></ng-container>\r\n </div>\r\n </div>\r\n @if (clearable && value.length > 0) {\r\n <div class=\"ng-jvx-multiselect__remove-button\" (click)=\"clear($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-arrow\">\r\n @if (!isLoading) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z\"></path>\r\n </svg>\r\n } @else {\r\n <div class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- END INPUT -->\r\n</div>\r\n<ng-template #defaultTemplate let-option>\r\n <div style=\"min-height: 48px; height: 100%; display: flex; align-items: center\">\r\n <div style=\"max-width: 100%;\r\n padding-inline: .3rem;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\">{{ option[itemText] }}\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectionTemplate let-value>\r\n {{ value[itemText] }}\r\n</ng-template>\r\n\r\n<ng-template #defaultMultiSelectionTemplate let-value>\r\n <div style=\"display: flex; gap: 0.3rem; flex-wrap: wrap;\">\r\n @for (val of value; track val[itemValue]) {\r\n <lib-chip class=\"ng-jvx-multiselect-chip\" [disabled]=\"this.disabled\" (removed)=\"deselect(val)\">\r\n {{ val[itemText] }}\r\n </lib-chip>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultGroupHeaderTemplate let-opt>\r\n <div style=\"padding-inline: 15px\"><strong>{{ opt.group }}</strong></div>\r\n</ng-template>\r\n", styles: ["ng-jvx-multiselect{display:flex;align-items:center;width:100%}ng-jvx-multiselect .ng-jvx-multiselect{width:100%;display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container{width:100%;display:flex;cursor:pointer;position:relative;justify-content:space-between;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__placeholder{height:100%;display:flex;align-items:center;position:absolute}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-value{flex:1 1 100%;max-width:calc(100% - 28px);display:flex;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect__remove-button{display:flex;height:100%;align-items:center}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow{width:24px;padding-right:4px;display:flex;align-items:center;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow svg{transition:transform .3s ease-in-out}@keyframes lds-ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring{display:inline-block;position:relative;width:24px;height:24px}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div{box-sizing:border-box;display:block;position:absolute;width:6px;height:16px;margin:4px;border:2px solid;border-radius:50%;animation:lds-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border-color:var(--jvx-multiselect-accent) transparent transparent transparent}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(1){animation-delay:-.45s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(2){animation-delay:-.3s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container .ng-jvx-multiselect-arrow .lds-ring div:nth-child(3){animation-delay:-.15s}ng-jvx-multiselect .ng-jvx-multiselect .ng-jvx-multiselect-value-container.is-open .ng-jvx-multiselect-arrow svg{transform:rotate(180deg)}ng-jvx-multiselect .ng-jvx-multiselect.disabled{pointer-events:none}ng-jvx-multiselect .ng-jvx-multiselect.disabled .ng-jvx-multiselect-arrow svg{opacity:.3}ng-jvx-multiselect .ng-jvx-multiselect.has-errors{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.single-value-container{color:red}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-value.multi-value-container{width:100%}ng-jvx-multiselect .ng-jvx-multiselect.has-errors .ng-jvx-multiselect-arrow svg{color:red}.menu-list-container{max-height:300px;display:flex;flex-direction:column}.menu-footer{max-height:30px;overflow:hidden}.cdk-overlay-pane .closeMenuButton{height:22px;width:22px;background-color:var(--jvx-multiselect-primary);position:absolute;top:-11px;right:11px;border-radius:100%;cursor:pointer;color:#fff;z-index:10}.cdk-overlay-pane .closeMenuButton svg{fill:var(--jvx-multiselect-on-primary);font-size:15px;height:100%;width:100%}\n"] }]
982
982
  }], ctorParameters: () => [{ type: i1$2.UntypedFormBuilder }, { type: NgJvxMultiselectService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$2.NgControl, decorators: [{
983
983
  type: Optional
984
984
  }, {
@@ -1 +1 @@
1
- {"version":3,"file":"ng-jvx-multiselect.mjs","sources":["../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-option/ng-jvx-option.component.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-option/ng-jvx-option.component.html","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-options-template.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-selection-template.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-group-header.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-disabled-option.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/utils.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.service.ts","../../../projects/ng-jvx-multiselect/src/lib/panel/menu-trigger/menu-trigger.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/panel/panel.component.ts","../../../projects/ng-jvx-multiselect/src/lib/panel/panel.component.html","../../../projects/ng-jvx-multiselect/src/lib/chiplist/chip/chip.component.ts","../../../projects/ng-jvx-multiselect/src/lib/chiplist/chip/chip.component.html","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-focus.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.component.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.component.html","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.module.ts","../../../projects/ng-jvx-multiselect/src/public-api.ts","../../../projects/ng-jvx-multiselect/src/ng-jvx-multiselect.ts"],"sourcesContent":["import {Component, DoCheck, EventEmitter, input, Input, OnInit, Output, ViewChild, ViewEncapsulation} from '@angular/core';\r\n\r\n@Component({\r\n // tslint:disable-next-line:component-selector\r\n selector: 'ng-jvx-option',\r\n templateUrl: './ng-jvx-option.component.html',\r\n styleUrls: ['./ng-jvx-option.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class NgJvxOptionComponent {\r\n @Output() clickOnOption = new EventEmitter<any>();\r\n value = input<any>();\r\n disabled = input<boolean>(false);\r\n isSelected = input<boolean>(false);\r\n\r\n constructor() {\r\n }\r\n\r\n}\r\n","<div class=\"option\" [ngClass]=\"{'ng-jvx-option': true, 'ng-jvx-single-selected-option': isSelected()}\" #listOption\r\n(click)=\"clickOnOption.emit()\">\r\n <div class=\"option-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div class=\"list-option-background\"></div>\r\n</div>\r\n","import {Directive, ElementRef, HostListener, Input, TemplateRef, ViewContainerRef} from '@angular/core';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxOptionsTemplate]'\r\n})\r\nexport class NgJvxOptionsTemplateDirective {\r\n\r\n constructor(\r\n private el: ElementRef,\r\n public template: TemplateRef<any>,\r\n private vcRef: ViewContainerRef) {\r\n }\r\n\r\n\r\n\r\n @Input() set ngJvxOptionsTemplateOf(source: Array<any[]>) {\r\n for (const item of source) {\r\n this.vcRef.createEmbeddedView(this.template, {$implicit: item});\r\n }\r\n }\r\n\r\n}\r\n","import {Directive, Input, TemplateRef, ViewContainerRef} from '@angular/core';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxSelectionTemplate]'\r\n})\r\nexport class NgJvxSelectionTemplateDirective {\r\n\r\n constructor(\r\n public template: TemplateRef<any>,\r\n private vcRef: ViewContainerRef) {\r\n }\r\n\r\n @Input() set ngJvxSelectionTemplateOf(source: Array<any[]>) {\r\n for (const item of source) {\r\n this.vcRef.createEmbeddedView(this.template, {$implicit: item});\r\n }\r\n }\r\n\r\n}\r\n","import {Directive, Input, TemplateRef, ViewContainerRef} from '@angular/core';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxGroupHeader]'\r\n})\r\nexport class NgJvxGroupHeaderDirective {\r\n\r\n constructor(\r\n public template: TemplateRef<any>,\r\n private vcRef: ViewContainerRef) {\r\n }\r\n\r\n @Input() set ngJvxGroupHeaderOf(source: Array<any[]>) {\r\n for (const item of source) {\r\n this.vcRef.createEmbeddedView(this.template, {$implicit: item});\r\n }\r\n }\r\n\r\n\r\n}\r\n","import {Directive, ElementRef, HostListener, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {fromEvent, Subject} from 'rxjs';\r\nimport {takeUntil} from 'rxjs/operators';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxDisabledOption]'\r\n})\r\nexport class NgJvxDisabledOptionDirective implements OnInit, OnDestroy {\r\n private isDisabled = false;\r\n private originalOpacity = 1;\r\n\r\n private unsubs = new Subject<void>();\r\n private restore = new Subject<void>();\r\n\r\n @Input() set ngJvxDisabledOption(source: boolean) {\r\n this.isDisabled = source;\r\n if (this.isDisabled) {\r\n this.el.nativeElement.style.opacity = this.originalOpacity ? this.originalOpacity / 2 : 0.5;\r\n fromEvent(this.el.nativeElement, 'click').pipe(takeUntil(this.restore), takeUntil(this.unsubs)).subscribe((e: MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n } else {\r\n this.el.nativeElement.style.opacity = this.originalOpacity;\r\n this.restore.next();\r\n }\r\n }\r\n\r\n constructor(\r\n private el: ElementRef) {\r\n this.originalOpacity = el.nativeElement.style.opacity;\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubs.next();\r\n this.unsubs.complete();\r\n }\r\n}\r\n","import { HttpContext, HttpContextToken } from '@angular/common/http';\r\n\r\nexport const JVXMULTISELECT = new HttpContextToken<boolean>(() => false);\r\nexport const setJvxCall = (): any => new HttpContext().set(JVXMULTISELECT, true);\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport {setJvxCall} from './utils';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgJvxMultiselectService {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getList({\r\n url,\r\n ignorePagination = false,\r\n currentPage,\r\n pageSize,\r\n requestType = 'get',\r\n requestHeaders,\r\n search,\r\n searchProp = 'search',\r\n data\r\n }: {\r\n url: string, ignorePagination: boolean,\r\n currentPage: number,\r\n pageSize: number,\r\n requestType: 'get' | 'post',\r\n requestHeaders: any,\r\n search?: string,\r\n searchProp?: string,\r\n data: any\r\n }): Observable<any> {\r\n let params = new HttpParams();\r\n if (search && search.length > 0) {\r\n params = params.set(searchProp, search);\r\n }\r\n if (!ignorePagination) {\r\n params = params.set('page', currentPage.toString())\r\n .set('size', pageSize.toString());\r\n }\r\n const options = {\r\n mode: 'no-cors', // cors\r\n headers: requestHeaders,\r\n context: setJvxCall(),\r\n // withCredentials: true,\r\n // credentials: 'same-origin', // cache: 'default',\r\n data,\r\n params\r\n };\r\n if (requestType === 'get') {\r\n return this.http.get(url, options);\r\n } else {\r\n return this.http.post(url, options);\r\n }\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n} from '@angular/core';\r\nimport {Overlay} from '@angular/cdk/overlay';\r\nimport {fromEvent, noop, Subject, takeUntil, tap} from 'rxjs';\r\nimport {PanelComponent} from '../panel.component';\r\n\r\n@Directive({\r\n selector: '[lib-menu-trigger-for], [libMenuTriggerFor]'\r\n})\r\nexport class MenuTriggerDirective implements OnDestroy, AfterViewInit {\r\n private unsubscribe = new Subject<void>();\r\n\r\n @Output() closed = new EventEmitter<void>();\r\n @Output() onMenuOpen = new EventEmitter<void>();\r\n @Output() menuOpened = new EventEmitter<void>();\r\n @Output() onMenuClose = new EventEmitter<void>();\r\n @Output() menuClosed = new EventEmitter<void>();\r\n\r\n /** References the menu instance that the trigger is associated with. */\r\n get menu(): PanelComponent | null {\r\n return this._menu;\r\n }\r\n\r\n @Input()\r\n set libMenuTriggerFor(menu: PanelComponent | null) {\r\n this._menu = menu;\r\n }\r\n\r\n // tslint:disable-next-line:variable-name\r\n private _menu: PanelComponent | null = null;\r\n\r\n\r\n constructor(private el: ElementRef, private overlay: Overlay) {\r\n fromEvent(this.el.nativeElement, 'click')\r\n .pipe(\r\n takeUntil(this.unsubscribe),\r\n tap(() => {\r\n if (this.menu) {\r\n this.openMenu();\r\n }\r\n })\r\n )\r\n .subscribe(noop);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.menu) {\r\n this.menu.onOpened.pipe(takeUntil(this.unsubscribe)).subscribe(() => {\r\n this.menuOpened.emit();\r\n });\r\n this.menu.onClose.pipe(takeUntil(this.unsubscribe)).subscribe(() => {\r\n this.onMenuClose.emit();\r\n });\r\n this.menu.onClosed.pipe(takeUntil(this.unsubscribe)).subscribe(() => {\r\n this.menuClosed.emit();\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n closeMenu(): void {\r\n this.menu.close();\r\n }\r\n\r\n openMenu(): void {\r\n this.menu.trigger = this.el;\r\n this.menu.open();\r\n this.onMenuOpen.emit();\r\n this.menu.open();\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n input,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n signal,\r\n TemplateRef,\r\n ViewChild,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {CdkConnectedOverlay} from '@angular/cdk/overlay';\r\nimport {fromEvent, Subject, timer} from 'rxjs';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {animate, style, transition, trigger} from '@angular/animations';\r\n\r\n@Component({\r\n selector: 'lib-panel',\r\n standalone: true,\r\n imports: [\r\n CdkConnectedOverlay\r\n ],\r\n templateUrl: './panel.component.html',\r\n styleUrl: './panel.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [\r\n trigger('animation', [\r\n transition(':enter', [\r\n style({\r\n opacity: 0,\r\n transform: 'scaleY(0.8)',\r\n transformOrigin: 'top',\r\n }),\r\n animate(\r\n '0.08s ease-in-out',\r\n style({\r\n opacity: 1,\r\n transform: 'scaleY(1)',\r\n transformOrigin: 'top',\r\n })\r\n ),\r\n ]),\r\n transition(':leave', [\r\n style({\r\n opacity: 1,\r\n transform: 'scaleY(1)',\r\n transformOrigin: 'top'\r\n }),\r\n animate(\r\n '.08s ease-in-out',\r\n style({\r\n opacity: 0,\r\n transform: 'scaleY(0.8)',\r\n transformOrigin: 'top'\r\n })\r\n ),\r\n ]),\r\n ]),\r\n ]\r\n})\r\nexport class PanelComponent implements OnDestroy {\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Accessors\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Refs\r\n // -----------------------------------------------------------------------------------------------------\r\n @ViewChild('menuTemplate', { static: true })\r\n menuTemplate!: TemplateRef<any>;\r\n\r\n protected isOpen = signal(false);\r\n private unsubscribe = new Subject<void>();\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Inputs\r\n // -----------------------------------------------------------------------------------------------------\r\n @Input() trigger!: ElementRef<any>;\r\n @Input() yPosition: 'above' | 'below' = 'above';\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Outputs\r\n // -----------------------------------------------------------------------------------------------------\r\n @Output() onClose = new EventEmitter<void>();\r\n @Output() onClosed = new EventEmitter<void>();\r\n @Output() onOpened = new EventEmitter<void>();\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ lifecycle Hooks\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n constructor() {\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(() => {\r\n this.close();\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public Methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n open(): void {\r\n this.isOpen.set(true);\r\n timer(800).subscribe(() => {\r\n this.onOpened.emit();\r\n });\r\n }\r\n\r\n close(): void {\r\n this.isOpen.set(false);\r\n this.onClose.emit();\r\n timer(800).subscribe(() => {\r\n this.onClosed.emit();\r\n });\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ protected Methods\r\n // -----------------------------------------------------------------------------------------------------\r\n protected clickOnMenu(): void {\r\n this.close();\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Private Methods\r\n // -----------------------------------------------------------------------------------------------------\r\n}\r\n","<ng-template #menuTemplate cdkConnectedOverlay\r\n (backdropClick)=\"close()\"\r\n [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayDisposeOnNavigation]=\"true\"\r\n [cdkConnectedOverlayHasBackdrop]=\"true\"\r\n [cdkConnectedOverlayDisableClose]=\"false\"\r\n [cdkConnectedOverlayBackdropClass]=\"'ng-jvx-panel-overlay'\"\r\n [cdkConnectedOverlayOpen]=\"isOpen()\">\r\n <div class=\"ng-jvx-panel\" [@animation]=\"isOpen()\" (click)=\"clickOnMenu()\">\r\n <ng-content></ng-content>\r\n </div>\r\n</ng-template>\r\n","import {Component, EventEmitter, input, Input, Output, ViewEncapsulation} from '@angular/core';\r\nimport {NgClass} from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-chip',\r\n standalone: true,\r\n imports: [\r\n NgClass\r\n ],\r\n templateUrl: './chip.component.html',\r\n styleUrl: './chip.component.scss',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class ChipComponent {\r\n @Output() removed = new EventEmitter();\r\n\r\n disabled = input<boolean>(false);\r\n\r\n clickOnRemove(e: MouseEvent): void {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if (!this.disabled()) {\r\n this.removed.emit();\r\n }\r\n }\r\n}\r\n","<div [ngClass]=\"{disabled: disabled()}\"><span class=\"chip-text\">\r\n <ng-content></ng-content>\r\n</span>\r\n <svg class=\"remove-button\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" fill=\"currentColor\" viewBox=\"0 0 256 256\" (click)=\"clickOnRemove($event)\"><path\r\n d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm37.66,130.34a8,8,0,0,1-11.32,11.32L128,139.31l-26.34,26.35a8,8,0,0,1-11.32-11.32L116.69,128,90.34,101.66a8,8,0,0,1,11.32-11.32L128,116.69l26.34-26.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path></svg>\r\n\r\n</div>\r\n","import {AfterContentInit, Directive, ElementRef, Input, OnChanges, OnInit, SimpleChanges} from '@angular/core';\r\nimport {timer} from 'rxjs';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxFocus]'\r\n})\r\nexport class NgJvxFocusDirective implements OnInit, OnChanges {\r\n @Input() ngJvxFocus: boolean;\r\n\r\n constructor(private el: ElementRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.ngJvxFocus) {\r\n this.el.nativeElement.focus();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.hasOwnProperty('ngJvxFocus') && changes.ngJvxFocus.currentValue === true) {\r\n this.el.nativeElement.focus();\r\n }\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild, DoCheck,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostBinding,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n QueryList,\r\n Self,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewChildren,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {NgJvxOptionsTemplateDirective} from './directives/ng-jvx-options-template.directive';\r\nimport {ControlValueAccessor, NgControl, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup} from '@angular/forms';\r\nimport {NgJvxOptionComponent} from './ng-jvx-option/ng-jvx-option.component';\r\nimport {NgJvxMultiselectService} from './ng-jvx-multiselect.service';\r\nimport {HttpHeaders} from '@angular/common/http';\r\nimport {NgScrollbar} from 'ngx-scrollbar';\r\nimport {debounceTime, distinctUntilChanged, map, switchMap, takeUntil, tap, throttleTime} from 'rxjs/operators';\r\nimport {BehaviorSubject, forkJoin, fromEvent, noop, Observable, of, Subject, timer} from 'rxjs';\r\nimport {NgJvxMultiOptionMapper, NgJvxOptionMapper} from './interfaces/ng-jvx-option-mapper';\r\nimport {NgJvxSelectionTemplateDirective} from './directives/ng-jvx-selection-template.directive';\r\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\r\nimport {NgJvxGroupHeaderDirective} from './directives/ng-jvx-group-header.directive';\r\nimport {NgJvxSearchMapper} from './interfaces/ng-jvx-search-mapper';\r\nimport {NgJvxGroup, NgJvxGroupMapper} from './interfaces/ng-jvx-group-mapper';\r\nimport {MenuTriggerDirective} from './panel/menu-trigger/menu-trigger.directive';\r\n\r\n@Component({\r\n // tslint:disable-next-line:component-selector\r\n selector: 'ng-jvx-multiselect',\r\n templateUrl: './ng-jvx-multiselect.component.html',\r\n styleUrls: ['./ng-jvx-multiselect.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [\r\n // {\r\n // provide: MatFormFieldControl,\r\n // useExisting: forwardRef(() => NgJvxMultiselectComponent),\r\n // multi: true,\r\n // }\r\n ]\r\n})\r\nexport class NgJvxMultiselectComponent implements OnInit, DoCheck, OnDestroy, AfterViewInit, OnChanges,\r\n ControlValueAccessor {\r\n static nextId = 0;\r\n @HostBinding() id = `jvx-multiselect-${NgJvxMultiselectComponent.nextId++}`;\r\n\r\n @HostBinding('class.floating')\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty || this.value.length > 0 || !!this.isPlaceholderActive;\r\n }\r\n\r\n @ViewChild('jvxMultiselect', {static: true}) jvxMultiselect: ElementRef;\r\n @ViewChild('valueContainer', {static: true}) valueContainer: ElementRef;\r\n @ViewChild('selectionContainer', {static: false}) selectionContainer: ElementRef;\r\n // @ViewChild('selection', {static: true}) selection: MatSelectionList;\r\n @ViewChild(MenuTriggerDirective, {static: true}) trigger: MenuTriggerDirective;\r\n @ViewChild('scrollbar', {static: false}) scrollbar: NgScrollbar;\r\n @ViewChild('multiContainer', {static: false}) multiContainer: ElementRef;\r\n @ViewChild('placeholderContainer', {static: false}) placeholderContainer: ElementRef;\r\n @ViewChildren(NgJvxOptionComponent) optionComp: QueryList<NgJvxOptionComponent>;\r\n @ContentChild(NgJvxOptionsTemplateDirective) optionsTemplate: NgJvxOptionsTemplateDirective | null = null;\r\n @ContentChild(NgJvxSelectionTemplateDirective) selectionTemplate: NgJvxSelectionTemplateDirective | null = null;\r\n @ContentChild(NgJvxGroupHeaderDirective) groupHeaderTemplate: NgJvxGroupHeaderDirective | null = null;\r\n // @ContentChild(NgJvxOptionComponent) optionComp: NgJvxOptionComponent;\r\n // @ContentChild(TemplateRef) optionsTemplate: TemplateRef<any> | null = null;\r\n @Input() options: any[] = [];\r\n @Input() multi = false;\r\n @Input() url = '';\r\n @Input() requestType: 'get' | 'post' = 'get';\r\n @Input() itemValue = 'value';\r\n @Input() itemText = 'text';\r\n @Input() ignorePagination = false;\r\n @Input() clearable = false;\r\n @Input() closeOnClick = true;\r\n @Input() hasErrors = false;\r\n @Input() searchMode: null | 'server' | 'client' = null;\r\n @Input() searchInput = false;\r\n @Input() searchLabel = 'search';\r\n @Input() listProp = '';\r\n @Input() totalRowsProp = '';\r\n @Input() panelClass = '';\r\n @Input() searchProp = 'search';\r\n @Input() closeButton = false;\r\n @Input() mapper: NgJvxOptionMapper<any> = {\r\n mapOption(source: any): Observable<any> {\r\n return of(source);\r\n }\r\n };\r\n @Input() multiMapper: NgJvxMultiOptionMapper<any> = {\r\n mapOptions(source: any[]): Observable<any> {\r\n return of(source);\r\n }\r\n };\r\n @Input() searchMapper: NgJvxSearchMapper<any> = {\r\n mapSearch: (source: string, options: any[]): Observable<any> => {\r\n return of(options.filter(o => o[this.itemText].toString().toLowerCase().includes(source.toString().toLowerCase())));\r\n }\r\n };\r\n @Input() groupBy: NgJvxGroupMapper<any> | string | null;\r\n\r\n @Input() set value(value: any[]) {\r\n this.pValue = value ?? [];\r\n if (value) {\r\n this.form.get('selectionValue').setValue(this.pValue.map(v => v[this.itemValue]));\r\n } else {\r\n this.form.get('selectionValue').setValue(value);\r\n }\r\n this.stateChanges.next();\r\n }\r\n\r\n get value(): any[] {\r\n return this.pValue;\r\n }\r\n\r\n @Input() requestHeaders: HttpHeaders = new HttpHeaders();\r\n\r\n @Input()\r\n get required(): boolean {\r\n return this._required;\r\n }\r\n\r\n set required(req) {\r\n this._required = coerceBooleanProperty(req);\r\n this.stateChanges.next();\r\n }\r\n\r\n // tslint:disable-next-line:variable-name\r\n private _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n this._disabled ? this.parts.disable() : this.parts.enable();\r\n this.stateChanges.next();\r\n }\r\n\r\n @Input()\r\n get pageSize(): number {\r\n return this.intPageSize;\r\n }\r\n\r\n set pageSize(val: number) {\r\n if (val < 15) {\r\n this.intPageSize = 15;\r\n } else {\r\n this.intPageSize = val;\r\n }\r\n }\r\n\r\n // tslint:disable-next-line:variable-name\r\n private _disabled = false;\r\n\r\n get errorState(): boolean {\r\n if (this.ngControl != null) {\r\n return this.ngControl.invalid && this.ngControl.touched;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n @Output() valueChange: EventEmitter<any[]> = new EventEmitter<any[]>();\r\n @Output() jvxMultiselectOpen: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() jvxMultiselectOpened: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() jvxMultiselectClose: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() jvxMultiselectClosed: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() scrollEnd: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n public controlType = 'ng-jvx-multiselect';\r\n public document = document;\r\n public window = window;\r\n public form: UntypedFormGroup;\r\n public isOpen = false;\r\n public isLoading = false;\r\n public showList = true;\r\n public asyncOptions: any = [];\r\n public selectableOptions = [];\r\n public orderedOptions: { group: any, options: any[] }[] = [];\r\n public searchValue = '';\r\n public yPosition: 'above' | 'below' = 'above';\r\n public stateChanges = new Subject<void>();\r\n public currentPage = 0;\r\n public listContainerSize: { height: string, minHeight: string, width: string } = {height: 'auto', minHeight: '0', width: '100%'};\r\n public parts: UntypedFormGroup;\r\n\r\n public touched = false;\r\n\r\n public placeholder: string;\r\n public focused = false;\r\n public multiContainerWidth = 100;\r\n private isPlaceholderActiveSubject = new BehaviorSubject<boolean>(false);\r\n private isPlaceholderActive = false;\r\n private searchValueSubject = new Subject<string>();\r\n private searchValue$ = this.searchValueSubject.asObservable();\r\n private pValue: any[] = [];\r\n private shouldLoadMore = true;\r\n private unsubscribe = new Subject<void>();\r\n private unsubscribe$ = this.unsubscribe.asObservable();\r\n private intPageSize = 15;\r\n public onTouched = () => {\r\n };\r\n\r\n\r\n constructor(private formBuilder: UntypedFormBuilder, private service: NgJvxMultiselectService,\r\n private elementRef: ElementRef,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n @Optional() @Self() public ngControl: NgControl, fb: UntypedFormBuilder) {\r\n if (this.ngControl != null) {\r\n // Setting the value accessor directly (instead of using\r\n // the providers) to avoid running into a circular import.\r\n this.ngControl.valueAccessor = this;\r\n }\r\n this.isPlaceholderActiveSubject.pipe(takeUntil(this.unsubscribe), debounceTime(0)).subscribe((v) => {\r\n this.isPlaceholderActive = v;\r\n this.stateChanges.next();\r\n });\r\n this.parts = fb.group({\r\n area: '',\r\n exchange: '',\r\n subscriber: '',\r\n });\r\n this.form = this.formBuilder.group({\r\n selectionValue: new UntypedFormControl(this.selectionValue)\r\n });\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.isPlaceholderActiveSubject.next(this.placeholderContainer?.nativeElement?.hasChildNodes());\r\n }\r\n\r\n ngOnInit(): void {\r\n this.stateChange$.pipe(takeUntil(this.unsubscribe)).subscribe(() => {\r\n this.changeDetectorRef.markForCheck();\r\n });\r\n // this.setSelectableOptions(this.options).subscribe(noop);\r\n this.selectableOptions = [...this.options];\r\n this.updateOrderedOptions(this.selectableOptions).subscribe(noop);\r\n fromEvent(window, 'resize').pipe(takeUntil(this.unsubscribe), debounceTime(100), map(() => {\r\n return this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';\r\n\r\n }), switchMap(() => timer(100)), tap(() => {\r\n this.multiContainerWidth = this.multiContainer?.nativeElement?.offsetWidth ?? 100;\r\n this.yPosition = window.innerHeight - this.jvxMultiselect.nativeElement?.getBoundingClientRect()?.top < 260 ? 'above' : 'below';\r\n this.changeDetectorRef.markForCheck();\r\n })).subscribe(noop);\r\n\r\n this.searchValue$.pipe(takeUntil(this.unsubscribe), debounceTime(300), distinctUntilChanged((prev, curr) => {\r\n return curr === this.searchValue;\r\n }), switchMap((val: string) => {\r\n this.searchValue = val;\r\n this.currentPage = 0;\r\n if (this.searchMode === 'client') {\r\n return this.clientSearch();\r\n } else if (this.url && this.url.length > 0) {\r\n return this.serverSearch();\r\n }\r\n }\r\n )\r\n ).subscribe((val: any[]) => {\r\n this.changeDetectorRef.markForCheck();\r\n });\r\n }\r\n\r\n private clientSearch(): Observable<any> {\r\n let obs: Observable<any>;\r\n if (this.url && this.url.length > 0) {\r\n this.selectableOptions = [];\r\n this.updateOrderedOptions(this.selectableOptions).subscribe(noop);\r\n this.shouldLoadMore = true;\r\n obs = this.getList().pipe(map(() => {\r\n return this.selectableOptions;\r\n }));\r\n } else {\r\n obs = of(this.options);\r\n }\r\n return obs.pipe(switchMap((val) => this.searchMapper.mapSearch(this.searchValue, val)), switchMap((res) => {\r\n // return this.setSelectableOptions(res);\r\n this.selectableOptions = [];\r\n this.selectableOptions.push(...res);\r\n return this.updateOrderedOptions(this.selectableOptions);\r\n }\r\n ));\r\n }\r\n\r\n private setSelectableOptions(options: any[]): Observable<any> {\r\n this.selectableOptions = [];\r\n const obs: Observable<any>[] = options.reduce((acc, curr) => {\r\n acc.push(this.mapper.mapOption(curr));\r\n return acc;\r\n }, []);\r\n\r\n // this.mapper.mapOption(option);\r\n\r\n return forkJoin([...obs]).pipe(switchMap((val) => {\r\n this.selectableOptions.push(...val);\r\n return this.updateOrderedOptions(this.selectableOptions);\r\n }));\r\n }\r\n\r\n private serverSearch(): Observable<any> {\r\n this.shouldLoadMore = true;\r\n this.selectableOptions = [];\r\n this.shouldLoadMore = true;\r\n return this.getList();\r\n }\r\n\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.stateChanges.complete();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n timer(0).subscribe(() => {\r\n this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';\r\n });\r\n\r\n if (this.scrollbar) {\r\n this.scrollbar.scrolled.pipe(takeUntil(this.unsubscribe$)).subscribe((e: any) => {\r\n this.onScrolled(e);\r\n });\r\n }\r\n timer(0).pipe(tap(() => {\r\n this.multiContainerWidth = this.multiContainer?.nativeElement?.offsetWidth ?? 100;\r\n this.yPosition = window.innerHeight - this.jvxMultiselect.nativeElement?.getBoundingClientRect()?.top < 260 ? 'above' : 'below';\r\n this.changeDetectorRef.markForCheck();\r\n })).subscribe(noop);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.options) {\r\n // this.setSelectableOptions(this.options).subscribe(noop);\r\n this.selectableOptions = [...this.options];\r\n }\r\n }\r\n\r\n\r\n get selectionValue(): any[] {\r\n return this.value.map((v) => {\r\n return v[this.itemValue];\r\n });\r\n }\r\n\r\n get empty(): boolean {\r\n const n = this.parts.value;\r\n return !n.area && !n.exchange && !n.subscriber && !this.isPlaceholderActive;\r\n }\r\n\r\n onCLickOnMenu(e: MouseEvent): void {\r\n if (this.multi || this.closeOnClick === false) {\r\n e.stopPropagation();\r\n }\r\n }\r\n\r\n\r\n private propagateChange(_: any): any {\r\n }\r\n\r\n // this is the initial value set to the component\r\n public writeValue(obj: any[]): void {\r\n this.value = obj;\r\n }\r\n\r\n // registers 'fn' that will be fired when changes are made\r\n // this is how we emit the changes back to the form\r\n public registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n onChange(e: any): void {\r\n // onChange(e: MatSelectionListChange): void {\r\n\r\n let vals = e.source.selectedOptions.selected.map(o => o.value);\r\n vals = this.selectableOptions.filter(o => vals.includes(o[this.itemValue]));\r\n const selectableIds = this.selectableOptions.map(s => s[this.itemValue]);\r\n if (this.multi) {\r\n // if search is active, probably some of the already selected values are not included in the selectable options,\r\n // so we have to push them in the selected values of the list;\r\n for (const v of this.value) {\r\n if (!selectableIds.includes(v[this.itemValue])) {\r\n vals = [v, ...vals];\r\n }\r\n }\r\n }\r\n vals.sort((a, b) => {\r\n return typeof a[this.itemValue] === 'string' ?\r\n a[this.itemValue].localeCompare(b[this.itemValue]) : a[this.itemValue] - b[this.itemValue];\r\n });\r\n this.value = [...vals];\r\n this.form.get('selectionValue').setValue(this.value.map(v => v[this.itemValue]));\r\n\r\n this.valueChange.emit(this.value);\r\n this.propagateChange(this.value);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n\r\n onFocusIn(event: FocusEvent): void {\r\n if (!this.focused) {\r\n this.focused = true;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n onFocusOut(event: FocusEvent): void {\r\n if (!this.elementRef.nativeElement.contains(event.relatedTarget as Element)) {\r\n this.touched = true;\r\n this.focused = false;\r\n this.onTouched();\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n onMenuOpen(): void {\r\n this.isOpen = true;\r\n\r\n this.jvxMultiselectOpen.emit();\r\n }\r\n\r\n onMenuClose(): void {\r\n this.isOpen = false;\r\n this.jvxMultiselectClose.emit();\r\n }\r\n\r\n deselect(val: any): void {\r\n this.value = [...this.value.filter(v => v[this.itemValue] !== val[this.itemValue])];\r\n // this.value.splice(this.value.findIndex(v => v[this.itemValue] === val[this.itemValue]), 1);\r\n this.form.get('selectionValue').setValue(this.value.map(m => m.value));\r\n this.valueChange.emit(this.value);\r\n this.propagateChange(this.value);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n private setSelectionContainerSize(): void {\r\n timer(0).subscribe(() => {\r\n if (this.selectionContainer) {\r\n this.listContainerSize.height = this.selectionContainer.nativeElement.offsetHeight > 260 ? '260px' : 'auto';\r\n this.listContainerSize.minHeight = this.selectionContainer.nativeElement.offsetHeight <= 260 ?\r\n this.selectionContainer.nativeElement.offsetHeight + 'px' : '260px';\r\n this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';\r\n }\r\n this.changeDetectorRef.detectChanges();\r\n });\r\n }\r\n\r\n clickOnMenuTrigger(e: MouseEvent): void {\r\n if (!this.disabled) {\r\n this.showList = false;\r\n this.shouldLoadMore = true;\r\n timer(0).subscribe(() => {\r\n this.showList = true;\r\n if (this.url.length > 0) {\r\n e.preventDefault();\r\n\r\n this.selectableOptions.length = 0;\r\n this.updateOrderedOptions(this.selectableOptions);\r\n this.getList().subscribe(noop);\r\n this.setSelectionContainerSize();\r\n\r\n } else {\r\n this.trigger.openMenu();\r\n this.setSelectionContainerSize();\r\n }\r\n });\r\n }\r\n }\r\n\r\n private getList(): Observable<any> {\r\n this.isLoading = true;\r\n return this.service.getList({\r\n url: this.url,\r\n requestType: this.requestType,\r\n data: {},\r\n currentPage: ++this.currentPage,\r\n ignorePagination: this.ignorePagination,\r\n requestHeaders: this.requestHeaders,\r\n search: this.searchValue,\r\n searchProp: this.searchProp,\r\n pageSize: this.intPageSize\r\n }).pipe(\r\n map((val) => {\r\n return val ?? [];\r\n }),\r\n switchMap((val) => this.multiMapper.mapOptions(val)), switchMap((val) => {\r\n let result = [];\r\n if (!val) {\r\n result = [];\r\n } else if (this.listProp.length > 0) {\r\n result = [...(val[this.listProp] ?? [])];\r\n } else {\r\n result = [...val];\r\n }\r\n\r\n if (result.length === 0) {\r\n this.shouldLoadMore = false;\r\n this.isLoading = false;\r\n return of([]);\r\n } else {\r\n const newOptions = [];\r\n\r\n for (const opt of result) {\r\n const newOption = this.mapper.mapOption(opt);\r\n newOptions.push(newOption);\r\n }\r\n return forkJoin(newOptions);\r\n }\r\n }), switchMap((finVal: any) => {\r\n this.selectableOptions.push(...finVal);\r\n return this.updateOrderedOptions(this.selectableOptions);\r\n }), map((val) => {\r\n this.isLoading = false;\r\n this.trigger.openMenu();\r\n this.setSelectionContainerSize();\r\n return val;\r\n }), tap(() => {\r\n this.changeDetectorRef.markForCheck();\r\n }));\r\n }\r\n\r\n onScrolled(e: any): void {\r\n if (e.target.scrollTop + 220 + ((this.searchInput ? 0 : 1) * 40) === this.selectionContainer.nativeElement.offsetHeight\r\n && !this.isLoading) {\r\n this.scrollEnd.emit();\r\n if (this.url && this.url.length > 0 && !this.ignorePagination && this.shouldLoadMore) {\r\n this.getList().subscribe(noop);\r\n }\r\n }\r\n }\r\n\r\n onMenuOpened(): void {\r\n this.jvxMultiselectOpened.emit();\r\n }\r\n\r\n onMenuClosed(): void {\r\n if ((!this.url || this.url.length === 0) && this.searchMode === 'client') {\r\n this.searchValueSubject.next('');\r\n } else {\r\n this.searchValue = '';\r\n this.currentPage = 0;\r\n }\r\n this.jvxMultiselectClosed.emit();\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n onSearchInputClick(e: MouseEvent): void {\r\n e.stopPropagation();\r\n }\r\n\r\n onSearchValueChange(e: any): void {\r\n this.searchValueSubject.next(e.target.value);\r\n }\r\n\r\n clear(e: Event): void {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n this.value = [];\r\n this.form.get('selectionValue').setValue(this.value.map(v => v[this.itemValue]));\r\n this.propagateChange(this.value);\r\n this.valueChange.emit(this.value);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n const controlElement = this.elementRef.nativeElement\r\n .querySelector('.ng-jvx-multiselect');\r\n controlElement.setAttribute('aria-describedby', ids.join(' '));\r\n }\r\n\r\n onContainerClick(event: MouseEvent): void {\r\n // if ((event.target as Element).tagName.toLowerCase() !== 'input') {\r\n // this.elementRef.nativeElement.querySelector('input').focus();\r\n // }\r\n }\r\n\r\n private get stateChange$(): Observable<any> {\r\n return this.stateChanges.asObservable();\r\n }\r\n\r\n updateOrderedOptions(options): Observable<any> {\r\n let obs = of(options);\r\n if (this.groupBy) {\r\n this.orderedOptions.length = 0;\r\n const obsArr = [];\r\n for (const option of options) {\r\n if (typeof this.groupBy !== 'string') {\r\n obsArr.push(this.groupBy.mapGroup(option));\r\n } else {\r\n obsArr.push(of({group: option[this.groupBy], option} as NgJvxGroup<any>));\r\n }\r\n }\r\n obs = forkJoin(obsArr).pipe(map((res: any) => {\r\n const groups = [...new Set(res.map(item => item.group))];\r\n for (const group of groups) {\r\n this.orderedOptions.push({\r\n group,\r\n options: res.filter(r => r.group === group).map(o => o.option)\r\n });\r\n }\r\n return this.orderedOptions;\r\n }));\r\n }\r\n return obs;\r\n }\r\n\r\n public closeMenu(): void {\r\n this.trigger.closeMenu();\r\n }\r\n\r\n isOptionSelected(option: any): boolean {\r\n return this.form.get('selectionValue').value.includes(option[this.itemValue]);\r\n }\r\n\r\n clickOnOption(option: any): void {\r\n if (this.isOptionSelected(option)) {\r\n this.deselect(option);\r\n } else {\r\n this.select(option);\r\n }\r\n }\r\n\r\n select(option: any): void {\r\n if (!this.multi) {\r\n this.form.get('selectionValue').reset([]);\r\n this.value = [];\r\n }\r\n this.value.push(option);\r\n\r\n this.value.sort((a, b) => {\r\n return typeof a[this.itemValue] === 'string' ?\r\n a[this.itemValue].localeCompare(b[this.itemValue]) : a[this.itemValue] - b[this.itemValue];\r\n });\r\n const val = this.form.get('selectionValue').value.concat([option[this.itemValue]]);\r\n val.sort((a, b) => {\r\n return typeof a[this.itemValue] === 'string' ?\r\n a[this.itemValue].localeCompare(b[this.itemValue]) : a[this.itemValue] - b[this.itemValue];\r\n });\r\n this.form.get('selectionValue').setValue(val);\r\n this.propagateChange(this.value);\r\n this.valueChange.emit(this.value);\r\n this.changeDetectorRef.markForCheck();\r\n console.log(this.form.get('selectionValue').value);\r\n }\r\n}\r\n","<div class=\"ng-jvx-multiselect\" [ngClass]=\"{'disabled': disabled, 'has-errors': hasErrors}\" #jvxMultiselect>\r\n <!-- START MENU -->\r\n <div [libMenuTriggerFor]=\"menuRef\" (onMenuOpen)=\"onMenuOpen()\" (menuOpened)=\"onMenuOpened()\"\r\n #trigger\r\n (onMenuClose)=\"onMenuClose()\" (menuClosed)=\"onMenuClosed()\"\r\n >\r\n <lib-panel #menuRef [class]=\"['jvx-multiselect-panel', panelClass].join(' ')\" [formGroup]=\"form\"\r\n [yPosition]=\"yPosition\">\r\n @if (closeButton) {\r\n <div class=\"closeMenuButton\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"menu-list-container\"\r\n #menuLIstContainer\r\n [ngStyle]=\"{'overflow-y': 'hidden', 'width': listContainerSize.width, 'min-width.px': 112, 'max-height': '260px', 'height': listContainerSize.height, 'min-height': listContainerSize.minHeight}\">\r\n\r\n <div class=\"search-input-container\" *ngIf=\"!!searchInput\" (click)=\"onSearchInputClick($event)\">\r\n <input type=\"text\" [placeholder]=\"searchLabel\" [ngModel]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"\r\n [ngJvxFocus]=\"isOpen\"\r\n (input)=\"onSearchValueChange($event)\"/>\r\n </div>\r\n <div\r\n [ngStyle]=\"{height: searchInput && selectionContainer.clientHeight > 220 || selectionContainer.clientHeight > 260? 260 - (searchInput? 40 : 0) + 'px': 'auto'}\">\r\n <ng-scrollbar style=\"width: 100%\"\r\n smoothScroll\r\n [visibility]=\"'hover'\"\r\n [appearance]=\"'compact'\"\r\n [sensorDisabled]=\"isLoading\"\r\n [autoHeightDisabled]=\"false\" #scrollbar>\r\n <div #selectionContainer (click)=\"onCLickOnMenu($event)\">\r\n <div #selection\r\n *ngIf=\"showList\"\r\n [ngStyle]=\"{'padding': 0, 'width': listContainerSize.width, 'min-width.px': 112}\"\r\n ngDefaultControl\r\n formControlName=\"selectionValue\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"!!groupBy\">\r\n <ng-container *ngFor=\"let opt of orderedOptions\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"groupHeaderTemplate? groupHeaderTemplate.template: defaultGroupHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: opt}\"></ng-container>\r\n\r\n <ng-jvx-option *ngFor=\"let option of opt.options\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!groupBy || groupBy.length === 0\">\r\n <ng-jvx-option *ngFor=\"let option of selectableOptions\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n </div>\r\n\r\n </div>\r\n <div class=\"menu-footer\">\r\n <ng-content select=\"[ng-jvx-footer]\"></ng-content>\r\n </div>\r\n\r\n </lib-panel>\r\n </div>\r\n <!-- END MENU -->\r\n <!-- START INPUT -->\r\n <div [ngClass]=\"{'ng-jvx-multiselect-value-container': true, 'is-open': isOpen}\"\r\n (click)=\"clickOnMenuTrigger($event)\"\r\n #valueContainer>\r\n @if (value.length === 0) {\r\n <div class=\"ng-jvx-multiselect__placeholder\" #placeholderContainer>\r\n <ng-content select=\"[placeholder]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-value multi-value-container\" *ngIf=\"multi\" #multiContainer>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultMultiSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: value}\"></ng-container>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value single-value-container\" *ngIf=\"!multi\">\r\n <div *ngFor=\"let val of value\" style=\"width: 100%;\">\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: val}\"></ng-container>\r\n </div>\r\n </div>\r\n @if (clearable && value.length > 0) {\r\n <div class=\"ng-jvx-multiselect__remove-button\" (click)=\"clear($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-arrow\">\r\n @if (!isLoading) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z\"></path>\r\n </svg>\r\n } @else {\r\n <div class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- END INPUT -->\r\n</div>\r\n<ng-template #defaultTemplate let-option>\r\n <div style=\"height: 100%; display: flex; align-items: center\">\r\n <div style=\"max-width: 100%;\r\n padding-inline: .3rem;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\">{{ option[itemText] }}\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectionTemplate let-value>\r\n {{ value[itemText] }}\r\n</ng-template>\r\n\r\n<ng-template #defaultMultiSelectionTemplate let-value>\r\n <div style=\"display: flex; gap: 0.3rem; flex-wrap: wrap;\">\r\n @for (val of value; track val[itemValue]) {\r\n <lib-chip class=\"ng-jvx-multiselect-chip\" [disabled]=\"this.disabled\" (removed)=\"deselect(val)\">\r\n {{ val[itemText] }}\r\n </lib-chip>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultGroupHeaderTemplate let-opt>\r\n <div style=\"padding-inline: 15px\"><strong>{{ opt.group }}</strong></div>\r\n</ng-template>\r\n","import {NgModule} from '@angular/core';\r\nimport {NgJvxMultiselectComponent} from './ng-jvx-multiselect.component';\r\nimport {CommonModule} from '@angular/common';\r\nimport {NgJvxOptionComponent} from './ng-jvx-option/ng-jvx-option.component';\r\nimport {NgJvxOptionsTemplateDirective} from './directives/ng-jvx-options-template.directive';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {NgScrollbarModule} from 'ngx-scrollbar';\r\nimport {SmoothScroll} from 'ngx-scrollbar/smooth-scroll';\r\nimport {NgJvxSelectionTemplateDirective} from './directives/ng-jvx-selection-template.directive';\r\nimport {NgJvxDisabledOptionDirective} from './directives/ng-jvx-disabled-option.directive';\r\nimport {NgJvxGroupHeaderDirective} from './directives/ng-jvx-group-header.directive';\r\nimport {NgJvxFocusDirective} from './directives/ng-jvx-focus.directive';\r\nimport {MenuTriggerDirective} from './panel/menu-trigger/menu-trigger.directive';\r\nimport {PanelComponent} from './panel/panel.component';\r\nimport {ChipComponent} from './chiplist/chip/chip.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n MenuTriggerDirective,\r\n NgJvxMultiselectComponent,\r\n NgJvxOptionComponent,\r\n NgJvxOptionsTemplateDirective,\r\n NgJvxSelectionTemplateDirective,\r\n NgJvxDisabledOptionDirective,\r\n NgJvxGroupHeaderDirective,\r\n NgJvxFocusDirective],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n NgScrollbarModule,\r\n SmoothScroll,\r\n FormsModule,\r\n PanelComponent,\r\n ChipComponent\r\n ],\r\n exports: [NgJvxMultiselectComponent,\r\n NgJvxOptionComponent,\r\n NgJvxOptionsTemplateDirective,\r\n NgJvxSelectionTemplateDirective,\r\n NgJvxDisabledOptionDirective,\r\n NgJvxGroupHeaderDirective]\r\n})\r\nexport class NgJvxMultiselectModule {\r\n}\r\n","/*\r\n * Public API Surface of ng-jvx-multiselect\r\n */\r\n\r\nexport * from './lib/ng-jvx-option/ng-jvx-option.component';\r\nexport * from './lib/directives/ng-jvx-options-template.directive';\r\nexport * from './lib/directives/ng-jvx-selection-template.directive';\r\nexport * from './lib/directives/ng-jvx-group-header.directive';\r\nexport * from './lib/directives/ng-jvx-disabled-option.directive';\r\nexport * from './lib/ng-jvx-multiselect.service';\r\nexport * from './lib/ng-jvx-multiselect.component';\r\nexport * from './lib/ng-jvx-multiselect.module';\r\nexport * from './lib/interfaces/ng-jvx-option-mapper';\r\nexport * from './lib/interfaces/ng-jvx-search-mapper';\r\nexport * from './lib/interfaces/ng-jvx-group-mapper';\r\nexport * from './lib/utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","takeUntil","tap","i2.NgJvxMultiselectService","i6.PanelComponent","i7.ChipComponent","i8.MenuTriggerDirective","i9.NgJvxOptionComponent","i10.NgJvxFocusDirective"],"mappings":"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"}
1
+ {"version":3,"file":"ng-jvx-multiselect.mjs","sources":["../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-option/ng-jvx-option.component.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-option/ng-jvx-option.component.html","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-options-template.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-selection-template.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-group-header.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-disabled-option.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/utils.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.service.ts","../../../projects/ng-jvx-multiselect/src/lib/panel/menu-trigger/menu-trigger.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/panel/panel.component.ts","../../../projects/ng-jvx-multiselect/src/lib/panel/panel.component.html","../../../projects/ng-jvx-multiselect/src/lib/chiplist/chip/chip.component.ts","../../../projects/ng-jvx-multiselect/src/lib/chiplist/chip/chip.component.html","../../../projects/ng-jvx-multiselect/src/lib/directives/ng-jvx-focus.directive.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.component.ts","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.component.html","../../../projects/ng-jvx-multiselect/src/lib/ng-jvx-multiselect.module.ts","../../../projects/ng-jvx-multiselect/src/public-api.ts","../../../projects/ng-jvx-multiselect/src/ng-jvx-multiselect.ts"],"sourcesContent":["import {Component, DoCheck, EventEmitter, input, Input, OnInit, Output, ViewChild, ViewEncapsulation} from '@angular/core';\r\n\r\n@Component({\r\n // tslint:disable-next-line:component-selector\r\n selector: 'ng-jvx-option',\r\n templateUrl: './ng-jvx-option.component.html',\r\n styleUrls: ['./ng-jvx-option.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class NgJvxOptionComponent {\r\n @Output() clickOnOption = new EventEmitter<any>();\r\n value = input<any>();\r\n disabled = input<boolean>(false);\r\n isSelected = input<boolean>(false);\r\n\r\n constructor() {\r\n }\r\n\r\n}\r\n","<div class=\"option\" [ngClass]=\"{'ng-jvx-option': true, 'ng-jvx-single-selected-option': isSelected()}\" #listOption\r\n(click)=\"clickOnOption.emit()\">\r\n <div class=\"option-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div class=\"list-option-background\"></div>\r\n</div>\r\n","import {Directive, ElementRef, HostListener, Input, TemplateRef, ViewContainerRef} from '@angular/core';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxOptionsTemplate]'\r\n})\r\nexport class NgJvxOptionsTemplateDirective {\r\n\r\n constructor(\r\n private el: ElementRef,\r\n public template: TemplateRef<any>,\r\n private vcRef: ViewContainerRef) {\r\n }\r\n\r\n\r\n\r\n @Input() set ngJvxOptionsTemplateOf(source: Array<any[]>) {\r\n for (const item of source) {\r\n this.vcRef.createEmbeddedView(this.template, {$implicit: item});\r\n }\r\n }\r\n\r\n}\r\n","import {Directive, Input, TemplateRef, ViewContainerRef} from '@angular/core';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxSelectionTemplate]'\r\n})\r\nexport class NgJvxSelectionTemplateDirective {\r\n\r\n constructor(\r\n public template: TemplateRef<any>,\r\n private vcRef: ViewContainerRef) {\r\n }\r\n\r\n @Input() set ngJvxSelectionTemplateOf(source: Array<any[]>) {\r\n for (const item of source) {\r\n this.vcRef.createEmbeddedView(this.template, {$implicit: item});\r\n }\r\n }\r\n\r\n}\r\n","import {Directive, Input, TemplateRef, ViewContainerRef} from '@angular/core';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxGroupHeader]'\r\n})\r\nexport class NgJvxGroupHeaderDirective {\r\n\r\n constructor(\r\n public template: TemplateRef<any>,\r\n private vcRef: ViewContainerRef) {\r\n }\r\n\r\n @Input() set ngJvxGroupHeaderOf(source: Array<any[]>) {\r\n for (const item of source) {\r\n this.vcRef.createEmbeddedView(this.template, {$implicit: item});\r\n }\r\n }\r\n\r\n\r\n}\r\n","import {Directive, ElementRef, HostListener, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {fromEvent, Subject} from 'rxjs';\r\nimport {takeUntil} from 'rxjs/operators';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxDisabledOption]'\r\n})\r\nexport class NgJvxDisabledOptionDirective implements OnInit, OnDestroy {\r\n private isDisabled = false;\r\n private originalOpacity = 1;\r\n\r\n private unsubs = new Subject<void>();\r\n private restore = new Subject<void>();\r\n\r\n @Input() set ngJvxDisabledOption(source: boolean) {\r\n this.isDisabled = source;\r\n if (this.isDisabled) {\r\n this.el.nativeElement.style.opacity = this.originalOpacity ? this.originalOpacity / 2 : 0.5;\r\n fromEvent(this.el.nativeElement, 'click').pipe(takeUntil(this.restore), takeUntil(this.unsubs)).subscribe((e: MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n } else {\r\n this.el.nativeElement.style.opacity = this.originalOpacity;\r\n this.restore.next();\r\n }\r\n }\r\n\r\n constructor(\r\n private el: ElementRef) {\r\n this.originalOpacity = el.nativeElement.style.opacity;\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubs.next();\r\n this.unsubs.complete();\r\n }\r\n}\r\n","import { HttpContext, HttpContextToken } from '@angular/common/http';\r\n\r\nexport const JVXMULTISELECT = new HttpContextToken<boolean>(() => false);\r\nexport const setJvxCall = (): any => new HttpContext().set(JVXMULTISELECT, true);\r\n","import {Injectable} from '@angular/core';\r\nimport {Observable} from 'rxjs';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport {setJvxCall} from './utils';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgJvxMultiselectService {\r\n constructor(private http: HttpClient) {\r\n }\r\n\r\n getList({\r\n url,\r\n ignorePagination = false,\r\n currentPage,\r\n pageSize,\r\n requestType = 'get',\r\n requestHeaders,\r\n search,\r\n searchProp = 'search',\r\n data\r\n }: {\r\n url: string, ignorePagination: boolean,\r\n currentPage: number,\r\n pageSize: number,\r\n requestType: 'get' | 'post',\r\n requestHeaders: any,\r\n search?: string,\r\n searchProp?: string,\r\n data: any\r\n }): Observable<any> {\r\n let params = new HttpParams();\r\n if (search && search.length > 0) {\r\n params = params.set(searchProp, search);\r\n }\r\n if (!ignorePagination) {\r\n params = params.set('page', currentPage.toString())\r\n .set('size', pageSize.toString());\r\n }\r\n const options = {\r\n mode: 'no-cors', // cors\r\n headers: requestHeaders,\r\n context: setJvxCall(),\r\n // withCredentials: true,\r\n // credentials: 'same-origin', // cache: 'default',\r\n data,\r\n params\r\n };\r\n if (requestType === 'get') {\r\n return this.http.get(url, options);\r\n } else {\r\n return this.http.post(url, options);\r\n }\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n Directive,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n} from '@angular/core';\r\nimport {Overlay} from '@angular/cdk/overlay';\r\nimport {fromEvent, noop, Subject, takeUntil, tap} from 'rxjs';\r\nimport {PanelComponent} from '../panel.component';\r\n\r\n@Directive({\r\n selector: '[lib-menu-trigger-for], [libMenuTriggerFor]'\r\n})\r\nexport class MenuTriggerDirective implements OnDestroy, AfterViewInit {\r\n private unsubscribe = new Subject<void>();\r\n\r\n @Output() closed = new EventEmitter<void>();\r\n @Output() onMenuOpen = new EventEmitter<void>();\r\n @Output() menuOpened = new EventEmitter<void>();\r\n @Output() onMenuClose = new EventEmitter<void>();\r\n @Output() menuClosed = new EventEmitter<void>();\r\n\r\n /** References the menu instance that the trigger is associated with. */\r\n get menu(): PanelComponent | null {\r\n return this._menu;\r\n }\r\n\r\n @Input()\r\n set libMenuTriggerFor(menu: PanelComponent | null) {\r\n this._menu = menu;\r\n }\r\n\r\n // tslint:disable-next-line:variable-name\r\n private _menu: PanelComponent | null = null;\r\n\r\n\r\n constructor(private el: ElementRef, private overlay: Overlay) {\r\n fromEvent(this.el.nativeElement, 'click')\r\n .pipe(\r\n takeUntil(this.unsubscribe),\r\n tap(() => {\r\n if (this.menu) {\r\n this.openMenu();\r\n }\r\n })\r\n )\r\n .subscribe(noop);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.menu) {\r\n this.menu.onOpened.pipe(takeUntil(this.unsubscribe)).subscribe(() => {\r\n this.menuOpened.emit();\r\n });\r\n this.menu.onClose.pipe(takeUntil(this.unsubscribe)).subscribe(() => {\r\n this.onMenuClose.emit();\r\n });\r\n this.menu.onClosed.pipe(takeUntil(this.unsubscribe)).subscribe(() => {\r\n this.menuClosed.emit();\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n closeMenu(): void {\r\n this.menu.close();\r\n }\r\n\r\n openMenu(): void {\r\n this.menu.trigger = this.el;\r\n this.menu.open();\r\n this.onMenuOpen.emit();\r\n this.menu.open();\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n input,\r\n Input,\r\n OnDestroy,\r\n Output,\r\n signal,\r\n TemplateRef,\r\n ViewChild,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {CdkConnectedOverlay} from '@angular/cdk/overlay';\r\nimport {fromEvent, Subject, timer} from 'rxjs';\r\nimport {takeUntil} from 'rxjs/operators';\r\nimport {animate, style, transition, trigger} from '@angular/animations';\r\n\r\n@Component({\r\n selector: 'lib-panel',\r\n standalone: true,\r\n imports: [\r\n CdkConnectedOverlay\r\n ],\r\n templateUrl: './panel.component.html',\r\n styleUrl: './panel.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n animations: [\r\n trigger('animation', [\r\n transition(':enter', [\r\n style({\r\n opacity: 0,\r\n transform: 'scaleY(0.8)',\r\n transformOrigin: 'top',\r\n }),\r\n animate(\r\n '0.08s ease-in-out',\r\n style({\r\n opacity: 1,\r\n transform: 'scaleY(1)',\r\n transformOrigin: 'top',\r\n })\r\n ),\r\n ]),\r\n transition(':leave', [\r\n style({\r\n opacity: 1,\r\n transform: 'scaleY(1)',\r\n transformOrigin: 'top'\r\n }),\r\n animate(\r\n '.08s ease-in-out',\r\n style({\r\n opacity: 0,\r\n transform: 'scaleY(0.8)',\r\n transformOrigin: 'top'\r\n })\r\n ),\r\n ]),\r\n ]),\r\n ]\r\n})\r\nexport class PanelComponent implements OnDestroy {\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Accessors\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Refs\r\n // -----------------------------------------------------------------------------------------------------\r\n @ViewChild('menuTemplate', { static: true })\r\n menuTemplate!: TemplateRef<any>;\r\n\r\n protected isOpen = signal(false);\r\n private unsubscribe = new Subject<void>();\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Inputs\r\n // -----------------------------------------------------------------------------------------------------\r\n @Input() trigger!: ElementRef<any>;\r\n @Input() yPosition: 'above' | 'below' = 'above';\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Outputs\r\n // -----------------------------------------------------------------------------------------------------\r\n @Output() onClose = new EventEmitter<void>();\r\n @Output() onClosed = new EventEmitter<void>();\r\n @Output() onOpened = new EventEmitter<void>();\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ lifecycle Hooks\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n constructor() {\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(() => {\r\n this.close();\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Public Methods\r\n // -----------------------------------------------------------------------------------------------------\r\n\r\n open(): void {\r\n this.isOpen.set(true);\r\n timer(800).subscribe(() => {\r\n this.onOpened.emit();\r\n });\r\n }\r\n\r\n close(): void {\r\n this.isOpen.set(false);\r\n this.onClose.emit();\r\n timer(800).subscribe(() => {\r\n this.onClosed.emit();\r\n });\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ protected Methods\r\n // -----------------------------------------------------------------------------------------------------\r\n protected clickOnMenu(): void {\r\n this.close();\r\n }\r\n\r\n // -----------------------------------------------------------------------------------------------------\r\n // @ Private Methods\r\n // -----------------------------------------------------------------------------------------------------\r\n}\r\n","<ng-template #menuTemplate cdkConnectedOverlay\r\n (backdropClick)=\"close()\"\r\n [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayDisposeOnNavigation]=\"true\"\r\n [cdkConnectedOverlayHasBackdrop]=\"true\"\r\n [cdkConnectedOverlayDisableClose]=\"false\"\r\n [cdkConnectedOverlayBackdropClass]=\"'ng-jvx-panel-overlay'\"\r\n [cdkConnectedOverlayOpen]=\"isOpen()\">\r\n <div class=\"ng-jvx-panel\" [@animation]=\"isOpen()\" (click)=\"clickOnMenu()\">\r\n <ng-content></ng-content>\r\n </div>\r\n</ng-template>\r\n","import {Component, EventEmitter, input, Input, Output, ViewEncapsulation} from '@angular/core';\r\nimport {NgClass} from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-chip',\r\n standalone: true,\r\n imports: [\r\n NgClass\r\n ],\r\n templateUrl: './chip.component.html',\r\n styleUrl: './chip.component.scss',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class ChipComponent {\r\n @Output() removed = new EventEmitter();\r\n\r\n disabled = input<boolean>(false);\r\n\r\n clickOnRemove(e: MouseEvent): void {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if (!this.disabled()) {\r\n this.removed.emit();\r\n }\r\n }\r\n}\r\n","<div [ngClass]=\"{disabled: disabled()}\"><span class=\"chip-text\">\r\n <ng-content></ng-content>\r\n</span>\r\n <svg class=\"remove-button\" xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" fill=\"currentColor\" viewBox=\"0 0 256 256\" (click)=\"clickOnRemove($event)\"><path\r\n d=\"M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm37.66,130.34a8,8,0,0,1-11.32,11.32L128,139.31l-26.34,26.35a8,8,0,0,1-11.32-11.32L116.69,128,90.34,101.66a8,8,0,0,1,11.32-11.32L128,116.69l26.34-26.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path></svg>\r\n\r\n</div>\r\n","import {AfterContentInit, Directive, ElementRef, Input, OnChanges, OnInit, SimpleChanges} from '@angular/core';\r\nimport {timer} from 'rxjs';\r\n\r\n@Directive({\r\n // tslint:disable-next-line:directive-selector\r\n selector: '[ngJvxFocus]'\r\n})\r\nexport class NgJvxFocusDirective implements OnInit, OnChanges {\r\n @Input() ngJvxFocus: boolean;\r\n\r\n constructor(private el: ElementRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.ngJvxFocus) {\r\n this.el.nativeElement.focus();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.hasOwnProperty('ngJvxFocus') && changes.ngJvxFocus.currentValue === true) {\r\n this.el.nativeElement.focus();\r\n }\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild, DoCheck,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n HostBinding,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n QueryList,\r\n Self,\r\n SimpleChanges,\r\n ViewChild,\r\n ViewChildren,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {NgJvxOptionsTemplateDirective} from './directives/ng-jvx-options-template.directive';\r\nimport {ControlValueAccessor, NgControl, UntypedFormBuilder, UntypedFormControl, UntypedFormGroup} from '@angular/forms';\r\nimport {NgJvxOptionComponent} from './ng-jvx-option/ng-jvx-option.component';\r\nimport {NgJvxMultiselectService} from './ng-jvx-multiselect.service';\r\nimport {HttpHeaders} from '@angular/common/http';\r\nimport {NgScrollbar} from 'ngx-scrollbar';\r\nimport {debounceTime, distinctUntilChanged, map, switchMap, takeUntil, tap, throttleTime} from 'rxjs/operators';\r\nimport {BehaviorSubject, forkJoin, fromEvent, noop, Observable, of, Subject, timer} from 'rxjs';\r\nimport {NgJvxMultiOptionMapper, NgJvxOptionMapper} from './interfaces/ng-jvx-option-mapper';\r\nimport {NgJvxSelectionTemplateDirective} from './directives/ng-jvx-selection-template.directive';\r\nimport {coerceBooleanProperty} from '@angular/cdk/coercion';\r\nimport {NgJvxGroupHeaderDirective} from './directives/ng-jvx-group-header.directive';\r\nimport {NgJvxSearchMapper} from './interfaces/ng-jvx-search-mapper';\r\nimport {NgJvxGroup, NgJvxGroupMapper} from './interfaces/ng-jvx-group-mapper';\r\nimport {MenuTriggerDirective} from './panel/menu-trigger/menu-trigger.directive';\r\n\r\n@Component({\r\n // tslint:disable-next-line:component-selector\r\n selector: 'ng-jvx-multiselect',\r\n templateUrl: './ng-jvx-multiselect.component.html',\r\n styleUrls: ['./ng-jvx-multiselect.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n providers: [\r\n // {\r\n // provide: MatFormFieldControl,\r\n // useExisting: forwardRef(() => NgJvxMultiselectComponent),\r\n // multi: true,\r\n // }\r\n ]\r\n})\r\nexport class NgJvxMultiselectComponent implements OnInit, DoCheck, OnDestroy, AfterViewInit, OnChanges,\r\n ControlValueAccessor {\r\n static nextId = 0;\r\n @HostBinding() id = `jvx-multiselect-${NgJvxMultiselectComponent.nextId++}`;\r\n\r\n @HostBinding('class.floating')\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty || this.value.length > 0 || !!this.isPlaceholderActive;\r\n }\r\n\r\n @ViewChild('jvxMultiselect', {static: true}) jvxMultiselect: ElementRef;\r\n @ViewChild('valueContainer', {static: true}) valueContainer: ElementRef;\r\n @ViewChild('selectionContainer', {static: false}) selectionContainer: ElementRef;\r\n // @ViewChild('selection', {static: true}) selection: MatSelectionList;\r\n @ViewChild(MenuTriggerDirective, {static: true}) trigger: MenuTriggerDirective;\r\n @ViewChild('scrollbar', {static: false}) scrollbar: NgScrollbar;\r\n @ViewChild('multiContainer', {static: false}) multiContainer: ElementRef;\r\n @ViewChild('placeholderContainer', {static: false}) placeholderContainer: ElementRef;\r\n @ViewChildren(NgJvxOptionComponent) optionComp: QueryList<NgJvxOptionComponent>;\r\n @ContentChild(NgJvxOptionsTemplateDirective) optionsTemplate: NgJvxOptionsTemplateDirective | null = null;\r\n @ContentChild(NgJvxSelectionTemplateDirective) selectionTemplate: NgJvxSelectionTemplateDirective | null = null;\r\n @ContentChild(NgJvxGroupHeaderDirective) groupHeaderTemplate: NgJvxGroupHeaderDirective | null = null;\r\n // @ContentChild(NgJvxOptionComponent) optionComp: NgJvxOptionComponent;\r\n // @ContentChild(TemplateRef) optionsTemplate: TemplateRef<any> | null = null;\r\n @Input() options: any[] = [];\r\n @Input() multi = false;\r\n @Input() url = '';\r\n @Input() requestType: 'get' | 'post' = 'get';\r\n @Input() itemValue = 'value';\r\n @Input() itemText = 'text';\r\n @Input() ignorePagination = false;\r\n @Input() clearable = false;\r\n @Input() closeOnClick = true;\r\n @Input() hasErrors = false;\r\n @Input() searchMode: null | 'server' | 'client' = null;\r\n @Input() searchInput = false;\r\n @Input() searchLabel = 'search';\r\n @Input() listProp = '';\r\n @Input() totalRowsProp = '';\r\n @Input() panelClass = '';\r\n @Input() searchProp = 'search';\r\n @Input() closeButton = false;\r\n @Input() mapper: NgJvxOptionMapper<any> = {\r\n mapOption(source: any): Observable<any> {\r\n return of(source);\r\n }\r\n };\r\n @Input() multiMapper: NgJvxMultiOptionMapper<any> = {\r\n mapOptions(source: any[]): Observable<any> {\r\n return of(source);\r\n }\r\n };\r\n @Input() searchMapper: NgJvxSearchMapper<any> = {\r\n mapSearch: (source: string, options: any[]): Observable<any> => {\r\n return of(options.filter(o => o[this.itemText].toString().toLowerCase().includes(source.toString().toLowerCase())));\r\n }\r\n };\r\n @Input() groupBy: NgJvxGroupMapper<any> | string | null;\r\n\r\n @Input() set value(value: any[]) {\r\n this.pValue = value ?? [];\r\n if (value) {\r\n this.form.get('selectionValue').setValue(this.pValue.map(v => v[this.itemValue]));\r\n } else {\r\n this.form.get('selectionValue').setValue(value);\r\n }\r\n this.stateChanges.next();\r\n }\r\n\r\n get value(): any[] {\r\n return this.pValue;\r\n }\r\n\r\n @Input() requestHeaders: HttpHeaders = new HttpHeaders();\r\n\r\n @Input()\r\n get required(): boolean {\r\n return this._required;\r\n }\r\n\r\n set required(req) {\r\n this._required = coerceBooleanProperty(req);\r\n this.stateChanges.next();\r\n }\r\n\r\n // tslint:disable-next-line:variable-name\r\n private _required = false;\r\n\r\n @Input()\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n this._disabled ? this.parts.disable() : this.parts.enable();\r\n this.stateChanges.next();\r\n }\r\n\r\n @Input()\r\n get pageSize(): number {\r\n return this.intPageSize;\r\n }\r\n\r\n set pageSize(val: number) {\r\n if (val < 15) {\r\n this.intPageSize = 15;\r\n } else {\r\n this.intPageSize = val;\r\n }\r\n }\r\n\r\n // tslint:disable-next-line:variable-name\r\n private _disabled = false;\r\n\r\n get errorState(): boolean {\r\n if (this.ngControl != null) {\r\n return this.ngControl.invalid && this.ngControl.touched;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n @Output() valueChange: EventEmitter<any[]> = new EventEmitter<any[]>();\r\n @Output() jvxMultiselectOpen: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() jvxMultiselectOpened: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() jvxMultiselectClose: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() jvxMultiselectClosed: EventEmitter<void> = new EventEmitter<void>();\r\n @Output() scrollEnd: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n public controlType = 'ng-jvx-multiselect';\r\n public document = document;\r\n public window = window;\r\n public form: UntypedFormGroup;\r\n public isOpen = false;\r\n public isLoading = false;\r\n public showList = true;\r\n public asyncOptions: any = [];\r\n public selectableOptions = [];\r\n public orderedOptions: { group: any, options: any[] }[] = [];\r\n public searchValue = '';\r\n public yPosition: 'above' | 'below' = 'above';\r\n public stateChanges = new Subject<void>();\r\n public currentPage = 0;\r\n public listContainerSize: { height: string, minHeight: string, width: string } = {height: 'auto', minHeight: '0', width: '100%'};\r\n public parts: UntypedFormGroup;\r\n\r\n public touched = false;\r\n\r\n public placeholder: string;\r\n public focused = false;\r\n public multiContainerWidth = 100;\r\n private isPlaceholderActiveSubject = new BehaviorSubject<boolean>(false);\r\n private isPlaceholderActive = false;\r\n private searchValueSubject = new Subject<string>();\r\n private searchValue$ = this.searchValueSubject.asObservable();\r\n private pValue: any[] = [];\r\n private shouldLoadMore = true;\r\n private unsubscribe = new Subject<void>();\r\n private unsubscribe$ = this.unsubscribe.asObservable();\r\n private intPageSize = 15;\r\n public onTouched = () => {\r\n };\r\n\r\n\r\n constructor(private formBuilder: UntypedFormBuilder, private service: NgJvxMultiselectService,\r\n private elementRef: ElementRef,\r\n private changeDetectorRef: ChangeDetectorRef,\r\n @Optional() @Self() public ngControl: NgControl, fb: UntypedFormBuilder) {\r\n if (this.ngControl != null) {\r\n // Setting the value accessor directly (instead of using\r\n // the providers) to avoid running into a circular import.\r\n this.ngControl.valueAccessor = this;\r\n }\r\n this.isPlaceholderActiveSubject.pipe(takeUntil(this.unsubscribe), debounceTime(0)).subscribe((v) => {\r\n this.isPlaceholderActive = v;\r\n this.stateChanges.next();\r\n });\r\n this.parts = fb.group({\r\n area: '',\r\n exchange: '',\r\n subscriber: '',\r\n });\r\n this.form = this.formBuilder.group({\r\n selectionValue: new UntypedFormControl(this.selectionValue)\r\n });\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.isPlaceholderActiveSubject.next(this.placeholderContainer?.nativeElement?.hasChildNodes());\r\n }\r\n\r\n ngOnInit(): void {\r\n this.stateChange$.pipe(takeUntil(this.unsubscribe)).subscribe(() => {\r\n this.changeDetectorRef.markForCheck();\r\n });\r\n // this.setSelectableOptions(this.options).subscribe(noop);\r\n this.selectableOptions = [...this.options];\r\n this.updateOrderedOptions(this.selectableOptions).subscribe(noop);\r\n fromEvent(window, 'resize').pipe(takeUntil(this.unsubscribe), debounceTime(100), map(() => {\r\n return this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';\r\n\r\n }), switchMap(() => timer(100)), tap(() => {\r\n this.multiContainerWidth = this.multiContainer?.nativeElement?.offsetWidth ?? 100;\r\n this.yPosition = window.innerHeight - this.jvxMultiselect.nativeElement?.getBoundingClientRect()?.top < 260 ? 'above' : 'below';\r\n this.changeDetectorRef.markForCheck();\r\n })).subscribe(noop);\r\n\r\n this.searchValue$.pipe(takeUntil(this.unsubscribe), debounceTime(300), distinctUntilChanged((prev, curr) => {\r\n return curr === this.searchValue;\r\n }), switchMap((val: string) => {\r\n this.searchValue = val;\r\n this.currentPage = 0;\r\n if (this.searchMode === 'client') {\r\n return this.clientSearch();\r\n } else if (this.url && this.url.length > 0) {\r\n return this.serverSearch();\r\n }\r\n }\r\n )\r\n ).subscribe((val: any[]) => {\r\n this.changeDetectorRef.markForCheck();\r\n });\r\n }\r\n\r\n private clientSearch(): Observable<any> {\r\n let obs: Observable<any>;\r\n if (this.url && this.url.length > 0) {\r\n this.selectableOptions = [];\r\n this.updateOrderedOptions(this.selectableOptions).subscribe(noop);\r\n this.shouldLoadMore = true;\r\n obs = this.getList().pipe(map(() => {\r\n return this.selectableOptions;\r\n }));\r\n } else {\r\n obs = of(this.options);\r\n }\r\n return obs.pipe(switchMap((val) => this.searchMapper.mapSearch(this.searchValue, val)), switchMap((res) => {\r\n // return this.setSelectableOptions(res);\r\n this.selectableOptions = [];\r\n this.selectableOptions.push(...res);\r\n return this.updateOrderedOptions(this.selectableOptions);\r\n }\r\n ));\r\n }\r\n\r\n private setSelectableOptions(options: any[]): Observable<any> {\r\n this.selectableOptions = [];\r\n const obs: Observable<any>[] = options.reduce((acc, curr) => {\r\n acc.push(this.mapper.mapOption(curr));\r\n return acc;\r\n }, []);\r\n\r\n // this.mapper.mapOption(option);\r\n\r\n return forkJoin([...obs]).pipe(switchMap((val) => {\r\n this.selectableOptions.push(...val);\r\n return this.updateOrderedOptions(this.selectableOptions);\r\n }));\r\n }\r\n\r\n private serverSearch(): Observable<any> {\r\n this.shouldLoadMore = true;\r\n this.selectableOptions = [];\r\n this.shouldLoadMore = true;\r\n return this.getList();\r\n }\r\n\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.stateChanges.complete();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n timer(0).subscribe(() => {\r\n this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';\r\n });\r\n\r\n if (this.scrollbar) {\r\n this.scrollbar.scrolled.pipe(takeUntil(this.unsubscribe$)).subscribe((e: any) => {\r\n this.onScrolled(e);\r\n });\r\n }\r\n timer(0).pipe(tap(() => {\r\n this.multiContainerWidth = this.multiContainer?.nativeElement?.offsetWidth ?? 100;\r\n this.yPosition = window.innerHeight - this.jvxMultiselect.nativeElement?.getBoundingClientRect()?.top < 260 ? 'above' : 'below';\r\n this.changeDetectorRef.markForCheck();\r\n })).subscribe(noop);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.options) {\r\n // this.setSelectableOptions(this.options).subscribe(noop);\r\n this.selectableOptions = [...this.options];\r\n }\r\n }\r\n\r\n\r\n get selectionValue(): any[] {\r\n return this.value.map((v) => {\r\n return v[this.itemValue];\r\n });\r\n }\r\n\r\n get empty(): boolean {\r\n const n = this.parts.value;\r\n return !n.area && !n.exchange && !n.subscriber && !this.isPlaceholderActive;\r\n }\r\n\r\n onCLickOnMenu(e: MouseEvent): void {\r\n if (this.multi || this.closeOnClick === false) {\r\n e.stopPropagation();\r\n }\r\n }\r\n\r\n\r\n private propagateChange(_: any): any {\r\n }\r\n\r\n // this is the initial value set to the component\r\n public writeValue(obj: any[]): void {\r\n this.value = obj;\r\n }\r\n\r\n // registers 'fn' that will be fired when changes are made\r\n // this is how we emit the changes back to the form\r\n public registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n onChange(e: any): void {\r\n // onChange(e: MatSelectionListChange): void {\r\n\r\n let vals = e.source.selectedOptions.selected.map(o => o.value);\r\n vals = this.selectableOptions.filter(o => vals.includes(o[this.itemValue]));\r\n const selectableIds = this.selectableOptions.map(s => s[this.itemValue]);\r\n if (this.multi) {\r\n // if search is active, probably some of the already selected values are not included in the selectable options,\r\n // so we have to push them in the selected values of the list;\r\n for (const v of this.value) {\r\n if (!selectableIds.includes(v[this.itemValue])) {\r\n vals = [v, ...vals];\r\n }\r\n }\r\n }\r\n vals.sort((a, b) => {\r\n return typeof a[this.itemValue] === 'string' ?\r\n a[this.itemValue].localeCompare(b[this.itemValue]) : a[this.itemValue] - b[this.itemValue];\r\n });\r\n this.value = [...vals];\r\n this.form.get('selectionValue').setValue(this.value.map(v => v[this.itemValue]));\r\n\r\n this.valueChange.emit(this.value);\r\n this.propagateChange(this.value);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n\r\n onFocusIn(event: FocusEvent): void {\r\n if (!this.focused) {\r\n this.focused = true;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n onFocusOut(event: FocusEvent): void {\r\n if (!this.elementRef.nativeElement.contains(event.relatedTarget as Element)) {\r\n this.touched = true;\r\n this.focused = false;\r\n this.onTouched();\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n onMenuOpen(): void {\r\n this.isOpen = true;\r\n\r\n this.jvxMultiselectOpen.emit();\r\n }\r\n\r\n onMenuClose(): void {\r\n this.isOpen = false;\r\n this.jvxMultiselectClose.emit();\r\n }\r\n\r\n deselect(val: any): void {\r\n this.value = [...this.value.filter(v => v[this.itemValue] !== val[this.itemValue])];\r\n // this.value.splice(this.value.findIndex(v => v[this.itemValue] === val[this.itemValue]), 1);\r\n this.form.get('selectionValue').setValue(this.value.map(m => m.value));\r\n this.valueChange.emit(this.value);\r\n this.propagateChange(this.value);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n private setSelectionContainerSize(): void {\r\n timer(0).subscribe(() => {\r\n if (this.selectionContainer) {\r\n this.listContainerSize.height = this.selectionContainer.nativeElement.offsetHeight > 260 ? '260px' : 'auto';\r\n this.listContainerSize.minHeight = this.selectionContainer.nativeElement.offsetHeight <= 260 ?\r\n this.selectionContainer.nativeElement.offsetHeight + 'px' : '260px';\r\n this.listContainerSize.width = this.jvxMultiselect.nativeElement.offsetWidth + 'px';\r\n }\r\n this.changeDetectorRef.detectChanges();\r\n });\r\n }\r\n\r\n clickOnMenuTrigger(e: MouseEvent): void {\r\n if (!this.disabled) {\r\n this.showList = false;\r\n this.shouldLoadMore = true;\r\n timer(0).subscribe(() => {\r\n this.showList = true;\r\n if (this.url.length > 0) {\r\n e.preventDefault();\r\n\r\n this.selectableOptions.length = 0;\r\n this.updateOrderedOptions(this.selectableOptions);\r\n this.getList().subscribe(noop);\r\n this.setSelectionContainerSize();\r\n\r\n } else {\r\n this.trigger.openMenu();\r\n this.setSelectionContainerSize();\r\n }\r\n });\r\n }\r\n }\r\n\r\n private getList(): Observable<any> {\r\n this.isLoading = true;\r\n return this.service.getList({\r\n url: this.url,\r\n requestType: this.requestType,\r\n data: {},\r\n currentPage: ++this.currentPage,\r\n ignorePagination: this.ignorePagination,\r\n requestHeaders: this.requestHeaders,\r\n search: this.searchValue,\r\n searchProp: this.searchProp,\r\n pageSize: this.intPageSize\r\n }).pipe(\r\n map((val) => {\r\n return val ?? [];\r\n }),\r\n switchMap((val) => this.multiMapper.mapOptions(val)), switchMap((val) => {\r\n let result = [];\r\n if (!val) {\r\n result = [];\r\n } else if (this.listProp.length > 0) {\r\n result = [...(val[this.listProp] ?? [])];\r\n } else {\r\n result = [...val];\r\n }\r\n\r\n if (result.length === 0) {\r\n this.shouldLoadMore = false;\r\n this.isLoading = false;\r\n return of([]);\r\n } else {\r\n const newOptions = [];\r\n\r\n for (const opt of result) {\r\n const newOption = this.mapper.mapOption(opt);\r\n newOptions.push(newOption);\r\n }\r\n return forkJoin(newOptions);\r\n }\r\n }), switchMap((finVal: any) => {\r\n this.selectableOptions.push(...finVal);\r\n return this.updateOrderedOptions(this.selectableOptions);\r\n }), map((val) => {\r\n this.isLoading = false;\r\n this.trigger.openMenu();\r\n this.setSelectionContainerSize();\r\n return val;\r\n }), tap(() => {\r\n this.changeDetectorRef.markForCheck();\r\n }));\r\n }\r\n\r\n onScrolled(e: any): void {\r\n if (e.target.scrollTop + 220 + ((this.searchInput ? 0 : 1) * 40) === this.selectionContainer.nativeElement.offsetHeight\r\n && !this.isLoading) {\r\n this.scrollEnd.emit();\r\n if (this.url && this.url.length > 0 && !this.ignorePagination && this.shouldLoadMore) {\r\n this.getList().subscribe(noop);\r\n }\r\n }\r\n }\r\n\r\n onMenuOpened(): void {\r\n this.jvxMultiselectOpened.emit();\r\n }\r\n\r\n onMenuClosed(): void {\r\n if ((!this.url || this.url.length === 0) && this.searchMode === 'client') {\r\n this.searchValueSubject.next('');\r\n } else {\r\n this.searchValue = '';\r\n this.currentPage = 0;\r\n }\r\n this.jvxMultiselectClosed.emit();\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n onSearchInputClick(e: MouseEvent): void {\r\n e.stopPropagation();\r\n }\r\n\r\n onSearchValueChange(e: any): void {\r\n this.searchValueSubject.next(e.target.value);\r\n }\r\n\r\n clear(e: Event): void {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n this.value = [];\r\n this.form.get('selectionValue').setValue(this.value.map(v => v[this.itemValue]));\r\n this.propagateChange(this.value);\r\n this.valueChange.emit(this.value);\r\n this.changeDetectorRef.markForCheck();\r\n }\r\n\r\n setDescribedByIds(ids: string[]): void {\r\n const controlElement = this.elementRef.nativeElement\r\n .querySelector('.ng-jvx-multiselect');\r\n controlElement.setAttribute('aria-describedby', ids.join(' '));\r\n }\r\n\r\n onContainerClick(event: MouseEvent): void {\r\n // if ((event.target as Element).tagName.toLowerCase() !== 'input') {\r\n // this.elementRef.nativeElement.querySelector('input').focus();\r\n // }\r\n }\r\n\r\n private get stateChange$(): Observable<any> {\r\n return this.stateChanges.asObservable();\r\n }\r\n\r\n updateOrderedOptions(options): Observable<any> {\r\n let obs = of(options);\r\n if (this.groupBy) {\r\n this.orderedOptions.length = 0;\r\n const obsArr = [];\r\n for (const option of options) {\r\n if (typeof this.groupBy !== 'string') {\r\n obsArr.push(this.groupBy.mapGroup(option));\r\n } else {\r\n obsArr.push(of({group: option[this.groupBy], option} as NgJvxGroup<any>));\r\n }\r\n }\r\n obs = forkJoin(obsArr).pipe(map((res: any) => {\r\n const groups = [...new Set(res.map(item => item.group))];\r\n for (const group of groups) {\r\n this.orderedOptions.push({\r\n group,\r\n options: res.filter(r => r.group === group).map(o => o.option)\r\n });\r\n }\r\n return this.orderedOptions;\r\n }));\r\n }\r\n return obs;\r\n }\r\n\r\n public closeMenu(): void {\r\n this.trigger.closeMenu();\r\n }\r\n\r\n isOptionSelected(option: any): boolean {\r\n return this.form.get('selectionValue').value.includes(option[this.itemValue]);\r\n }\r\n\r\n clickOnOption(option: any): void {\r\n if (this.isOptionSelected(option)) {\r\n this.deselect(option);\r\n } else {\r\n this.select(option);\r\n }\r\n }\r\n\r\n select(option: any): void {\r\n if (!this.multi) {\r\n this.form.get('selectionValue').reset([]);\r\n this.value = [];\r\n }\r\n this.value.push(option);\r\n\r\n this.value.sort((a, b) => {\r\n return typeof a[this.itemValue] === 'string' ?\r\n a[this.itemValue].localeCompare(b[this.itemValue]) : a[this.itemValue] - b[this.itemValue];\r\n });\r\n const val = this.form.get('selectionValue').value.concat([option[this.itemValue]]);\r\n val.sort((a, b) => {\r\n return typeof a[this.itemValue] === 'string' ?\r\n a[this.itemValue].localeCompare(b[this.itemValue]) : a[this.itemValue] - b[this.itemValue];\r\n });\r\n this.form.get('selectionValue').setValue(val);\r\n this.propagateChange(this.value);\r\n this.valueChange.emit(this.value);\r\n this.changeDetectorRef.markForCheck();\r\n console.log(this.form.get('selectionValue').value);\r\n }\r\n}\r\n","<div class=\"ng-jvx-multiselect\" [ngClass]=\"{'disabled': disabled, 'has-errors': hasErrors}\" #jvxMultiselect>\r\n <!-- START MENU -->\r\n <div [libMenuTriggerFor]=\"menuRef\" (onMenuOpen)=\"onMenuOpen()\" (menuOpened)=\"onMenuOpened()\"\r\n #trigger\r\n (onMenuClose)=\"onMenuClose()\" (menuClosed)=\"onMenuClosed()\"\r\n >\r\n <lib-panel #menuRef [class]=\"['jvx-multiselect-panel', panelClass].join(' ')\" [formGroup]=\"form\"\r\n [yPosition]=\"yPosition\">\r\n @if (closeButton) {\r\n <div class=\"closeMenuButton\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"menu-list-container\"\r\n #menuLIstContainer\r\n [ngStyle]=\"{'overflow-y': 'hidden', 'width': listContainerSize.width, 'min-width.px': 112, 'max-height': '260px', 'height': listContainerSize.height, 'min-height': listContainerSize.minHeight}\">\r\n\r\n <div class=\"search-input-container\" *ngIf=\"!!searchInput\" (click)=\"onSearchInputClick($event)\">\r\n <input type=\"text\" [placeholder]=\"searchLabel\" [ngModel]=\"searchValue\" [ngModelOptions]=\"{standalone: true}\"\r\n [ngJvxFocus]=\"isOpen\"\r\n (input)=\"onSearchValueChange($event)\"/>\r\n </div>\r\n <div\r\n [ngStyle]=\"{height: searchInput && selectionContainer.clientHeight > 220 || selectionContainer.clientHeight > 260? 260 - (searchInput? 40 : 0) + 'px': 'auto'}\">\r\n <ng-scrollbar style=\"width: 100%\"\r\n smoothScroll\r\n [visibility]=\"'hover'\"\r\n [appearance]=\"'compact'\"\r\n [sensorDisabled]=\"isLoading\"\r\n [autoHeightDisabled]=\"false\" #scrollbar>\r\n <div #selectionContainer (click)=\"onCLickOnMenu($event)\">\r\n <div #selection\r\n *ngIf=\"showList\"\r\n [ngStyle]=\"{'padding': 0, 'width': listContainerSize.width, 'min-width.px': 112}\"\r\n ngDefaultControl\r\n formControlName=\"selectionValue\">\r\n <ng-content></ng-content>\r\n <ng-container *ngIf=\"!!groupBy\">\r\n <ng-container *ngFor=\"let opt of orderedOptions\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"groupHeaderTemplate? groupHeaderTemplate.template: defaultGroupHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: opt}\"></ng-container>\r\n\r\n <ng-jvx-option *ngFor=\"let option of opt.options\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!groupBy || groupBy.length === 0\">\r\n <ng-jvx-option *ngFor=\"let option of selectableOptions\" [value]=\"option[itemValue]\"\r\n [isSelected]=\"isOptionSelected(option)\" (click)=\"clickOnOption(option)\">\r\n <div class=\"ng-jvx-option-wrapper\" style=\"min-height:48px\">\r\n <!-- <ng-container [ngTemplateOutlet]=\"optionsTemplate\" [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>-->\r\n <ng-container [ngTemplateOutlet]=\"optionsTemplate? optionsTemplate.template : defaultTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: option}\"></ng-container>\r\n </div>\r\n </ng-jvx-option>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-scrollbar>\r\n </div>\r\n\r\n </div>\r\n <div class=\"menu-footer\">\r\n <ng-content select=\"[ng-jvx-footer]\"></ng-content>\r\n </div>\r\n\r\n </lib-panel>\r\n </div>\r\n <!-- END MENU -->\r\n <!-- START INPUT -->\r\n <div [ngClass]=\"{'ng-jvx-multiselect-value-container': true, 'is-open': isOpen}\"\r\n (click)=\"clickOnMenuTrigger($event)\"\r\n #valueContainer>\r\n @if (value.length === 0) {\r\n <div class=\"ng-jvx-multiselect__placeholder\" #placeholderContainer>\r\n <ng-content select=\"[placeholder]\"></ng-content>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-value multi-value-container\" *ngIf=\"multi\" #multiContainer>\r\n\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultMultiSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: value}\"></ng-container>\r\n\r\n\r\n </div>\r\n\r\n <div class=\"ng-jvx-multiselect-value single-value-container\" *ngIf=\"!multi\">\r\n <div *ngFor=\"let val of value\" style=\"width: 100%;\">\r\n <ng-container [ngTemplateOutlet]=\"selectionTemplate? selectionTemplate.template : defaultSelectionTemplate\"\r\n [ngTemplateOutletContext]=\"{$implicit: val}\"></ng-container>\r\n </div>\r\n </div>\r\n @if (clearable && value.length > 0) {\r\n <div class=\"ng-jvx-multiselect__remove-button\" (click)=\"clear($event)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z\"></path>\r\n </svg>\r\n </div>\r\n }\r\n <div class=\"ng-jvx-multiselect-arrow\">\r\n @if (!isLoading) {\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"#000000\" viewBox=\"0 0 256 256\">\r\n <path\r\n d=\"M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z\"></path>\r\n </svg>\r\n } @else {\r\n <div class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <!-- END INPUT -->\r\n</div>\r\n<ng-template #defaultTemplate let-option>\r\n <div style=\"min-height: 48px; height: 100%; display: flex; align-items: center\">\r\n <div style=\"max-width: 100%;\r\n padding-inline: .3rem;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\">{{ option[itemText] }}\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectionTemplate let-value>\r\n {{ value[itemText] }}\r\n</ng-template>\r\n\r\n<ng-template #defaultMultiSelectionTemplate let-value>\r\n <div style=\"display: flex; gap: 0.3rem; flex-wrap: wrap;\">\r\n @for (val of value; track val[itemValue]) {\r\n <lib-chip class=\"ng-jvx-multiselect-chip\" [disabled]=\"this.disabled\" (removed)=\"deselect(val)\">\r\n {{ val[itemText] }}\r\n </lib-chip>\r\n }\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultGroupHeaderTemplate let-opt>\r\n <div style=\"padding-inline: 15px\"><strong>{{ opt.group }}</strong></div>\r\n</ng-template>\r\n","import {NgModule} from '@angular/core';\r\nimport {NgJvxMultiselectComponent} from './ng-jvx-multiselect.component';\r\nimport {CommonModule} from '@angular/common';\r\nimport {NgJvxOptionComponent} from './ng-jvx-option/ng-jvx-option.component';\r\nimport {NgJvxOptionsTemplateDirective} from './directives/ng-jvx-options-template.directive';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {NgScrollbarModule} from 'ngx-scrollbar';\r\nimport {SmoothScroll} from 'ngx-scrollbar/smooth-scroll';\r\nimport {NgJvxSelectionTemplateDirective} from './directives/ng-jvx-selection-template.directive';\r\nimport {NgJvxDisabledOptionDirective} from './directives/ng-jvx-disabled-option.directive';\r\nimport {NgJvxGroupHeaderDirective} from './directives/ng-jvx-group-header.directive';\r\nimport {NgJvxFocusDirective} from './directives/ng-jvx-focus.directive';\r\nimport {MenuTriggerDirective} from './panel/menu-trigger/menu-trigger.directive';\r\nimport {PanelComponent} from './panel/panel.component';\r\nimport {ChipComponent} from './chiplist/chip/chip.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n MenuTriggerDirective,\r\n NgJvxMultiselectComponent,\r\n NgJvxOptionComponent,\r\n NgJvxOptionsTemplateDirective,\r\n NgJvxSelectionTemplateDirective,\r\n NgJvxDisabledOptionDirective,\r\n NgJvxGroupHeaderDirective,\r\n NgJvxFocusDirective],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n NgScrollbarModule,\r\n SmoothScroll,\r\n FormsModule,\r\n PanelComponent,\r\n ChipComponent\r\n ],\r\n exports: [NgJvxMultiselectComponent,\r\n NgJvxOptionComponent,\r\n NgJvxOptionsTemplateDirective,\r\n NgJvxSelectionTemplateDirective,\r\n NgJvxDisabledOptionDirective,\r\n NgJvxGroupHeaderDirective]\r\n})\r\nexport class NgJvxMultiselectModule {\r\n}\r\n","/*\r\n * Public API Surface of ng-jvx-multiselect\r\n */\r\n\r\nexport * from './lib/ng-jvx-option/ng-jvx-option.component';\r\nexport * from './lib/directives/ng-jvx-options-template.directive';\r\nexport * from './lib/directives/ng-jvx-selection-template.directive';\r\nexport * from './lib/directives/ng-jvx-group-header.directive';\r\nexport * from './lib/directives/ng-jvx-disabled-option.directive';\r\nexport * from './lib/ng-jvx-multiselect.service';\r\nexport * from './lib/ng-jvx-multiselect.component';\r\nexport * from './lib/ng-jvx-multiselect.module';\r\nexport * from './lib/interfaces/ng-jvx-option-mapper';\r\nexport * from './lib/interfaces/ng-jvx-search-mapper';\r\nexport * from './lib/interfaces/ng-jvx-group-mapper';\r\nexport * from './lib/utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","takeUntil","tap","i2.NgJvxMultiselectService","i6.PanelComponent","i7.ChipComponent","i8.MenuTriggerDirective","i9.NgJvxOptionComponent","i10.NgJvxFocusDirective"],"mappings":";;;;;;;;;;;;;;;;;;;MASa,oBAAoB,CAAA;AAM/B,IAAA,WAAA,GAAA;AALU,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAO,CAAC;QAClD,IAAK,CAAA,KAAA,GAAG,KAAK,EAAO,CAAC;AACrB,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AACjC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;KAGlC;+GAPU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,8eCTjC,8SAOA,EAAA,MAAA,EAAA,CAAA,4XAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FDEa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAPhC,SAAS;+BAEE,eAAe,EAAA,aAAA,EAGV,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,8SAAA,EAAA,MAAA,EAAA,CAAA,4XAAA,CAAA,EAAA,CAAA;wDAG3B,aAAa,EAAA,CAAA;sBAAtB,MAAM;;;MEJI,6BAA6B,CAAA;AAExC,IAAA,WAAA,CACU,EAAc,EACf,QAA0B,EACzB,KAAuB,EAAA;QAFvB,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QACf,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAkB;QACzB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAkB;KAChC;IAID,IAAa,sBAAsB,CAAC,MAAoB,EAAA;AACtD,QAAA,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;SACjE;KACF;+GAdU,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA7B,6BAA6B,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAJzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAET,oBAAA,QAAQ,EAAE,wBAAwB;AACnC,iBAAA,CAAA;wIAWc,sBAAsB,EAAA,CAAA;sBAAlC,KAAK;;;MCVK,+BAA+B,CAAA;IAE1C,WACS,CAAA,QAA0B,EACzB,KAAuB,EAAA;QADxB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAkB;QACzB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAkB;KAChC;IAED,IAAa,wBAAwB,CAAC,MAAoB,EAAA;AACxD,QAAA,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;SACjE;KACF;+GAXU,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA/B,+BAA+B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAJ3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAET,oBAAA,QAAQ,EAAE,0BAA0B;AACrC,iBAAA,CAAA;+GAQc,wBAAwB,EAAA,CAAA;sBAApC,KAAK;;;MCPK,yBAAyB,CAAA;IAEpC,WACS,CAAA,QAA0B,EACzB,KAAuB,EAAA;QADxB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAkB;QACzB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAkB;KAChC;IAED,IAAa,kBAAkB,CAAC,MAAoB,EAAA;AAClD,QAAA,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;SACjE;KACF;+GAXU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAzB,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAET,oBAAA,QAAQ,EAAE,oBAAoB;AAC/B,iBAAA,CAAA;+GAQc,kBAAkB,EAAA,CAAA;sBAA9B,KAAK;;;MCLK,4BAA4B,CAAA;IAOvC,IAAa,mBAAmB,CAAC,MAAe,EAAA;AAC9C,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,GAAG,CAAC;AAC5F,YAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAa,KAAI;gBAC1H,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;AACtB,aAAC,CAAC,CAAC;SACJ;aAAM;AACL,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;AAC3D,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB;KACF;AAED,IAAA,WAAA,CACU,EAAc,EAAA;QAAd,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QArBhB,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;QACnB,IAAe,CAAA,eAAA,GAAG,CAAC,CAAC;AAEpB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC7B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAQ,CAAC;QAkBpC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;KAEvD;IAED,QAAQ,GAAA;KACP;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;KACxB;+GAjCU,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA5B,4BAA4B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAJxC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAET,oBAAA,QAAQ,EAAE,uBAAuB;AAClC,iBAAA,CAAA;+EAQc,mBAAmB,EAAA,CAAA;sBAA/B,KAAK;;;ACbD,MAAM,cAAc,GAAG,IAAI,gBAAgB,CAAU,MAAM,KAAK,EAAE;AAC5D,MAAA,UAAU,GAAG,MAAW,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI;;MCKlE,uBAAuB,CAAA;AAClC,IAAA,WAAA,CAAoB,IAAgB,EAAA;QAAhB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAY;KACnC;IAED,OAAO,CAAC,EACE,GAAG,EACH,gBAAgB,GAAG,KAAK,EACxB,WAAW,EACX,QAAQ,EACR,WAAW,GAAG,KAAK,EACnB,cAAc,EACd,MAAM,EACN,UAAU,GAAG,QAAQ,EACrB,IAAI,EAUb,EAAA;AACC,QAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;SACzC;QACD,IAAI,CAAC,gBAAgB,EAAE;YACrB,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC;iBAChD,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;SACrC;AACD,QAAA,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,SAAS;AACf,YAAA,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,UAAU,EAAE;;;YAGrB,IAAI;YACJ,MAAM;SACP,CAAC;AACF,QAAA,IAAI,WAAW,KAAK,KAAK,EAAE;YACzB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;SACpC;aAAM;YACL,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;SACrC;KACF;+GA9CU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA,EAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCSY,oBAAoB,CAAA;;AAU/B,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;IAED,IACI,iBAAiB,CAAC,IAA2B,EAAA;AAC/C,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KACnB;IAMD,WAAoB,CAAA,EAAc,EAAU,OAAgB,EAAA;QAAxC,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;QAAU,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;AAtBpD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAQ,CAAC;AAEhC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ,CAAC;AAClC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ,CAAC;AACtC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ,CAAC;AACtC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;AACvC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ,CAAC;;QAaxC,IAAK,CAAA,KAAA,GAA0B,IAAI,CAAC;QAI1C,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC;aACtC,IAAI,CACHC,WAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAC3B,GAAG,CAAC,MAAK;AACP,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,QAAQ,EAAE,CAAC;aACjB;AACH,SAAC,CAAC,CACH;aACA,SAAS,CAAC,IAAI,CAAC,CAAC;KACpB;IAED,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAClE,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACzB,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACjE,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AAC1B,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAACA,WAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AAClE,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACzB,aAAC,CAAC,CAAC;SACJ;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;KAC7B;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KACnB;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KAClB;+GAhEU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,IAAA,CAAA,OAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAApB,oBAAoB,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6CAA6C;AACxD,iBAAA,CAAA;uGAIW,MAAM,EAAA,CAAA;sBAAf,MAAM;gBACG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBACG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBACG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAQH,iBAAiB,EAAA,CAAA;sBADpB,KAAK;;;MCgCK,cAAc,CAAA;;;;AA8BzB,IAAA,WAAA,GAAA;AAnBU,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAQ,CAAC;QAMjC,IAAS,CAAA,SAAA,GAAsB,OAAO,CAAC;;;;AAKtC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;AACnC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ,CAAC;AACpC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ,CAAC;AAM5C,QAAA,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC;AACxB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACjC,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,KAAK,EAAE,CAAC;AACf,SAAC,CAAC,CAAC;KACN;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;KAC7B;;;;IAKD,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,MAAK;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACvB,SAAC,CAAC,CAAC;KACJ;IAED,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACpB,QAAA,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,MAAK;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACvB,SAAC,CAAC,CAAC;KACJ;;;;IAKS,WAAW,GAAA;QACjB,IAAI,CAAC,KAAK,EAAE,CAAC;KAChB;+GAlEU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EC9D3B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,4mBAYA,EDUI,MAAA,EAAA,CAAA,26CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,mBAAmB,EAKT,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACV,OAAO,CAAC,WAAW,EAAE;gBACnB,UAAU,CAAC,QAAQ,EAAE;AACnB,oBAAA,KAAK,CAAC;AACJ,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,SAAS,EAAE,aAAa;AACxB,wBAAA,eAAe,EAAE,KAAK;qBACvB,CAAC;AACF,oBAAA,OAAO,CACL,mBAAmB,EACnB,KAAK,CAAC;AACJ,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,eAAe,EAAE,KAAK;AACvB,qBAAA,CAAC,CACH;iBACF,CAAC;gBACF,UAAU,CAAC,QAAQ,EAAE;AACnB,oBAAA,KAAK,CAAC;AACJ,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,eAAe,EAAE,KAAK;qBACvB,CAAC;AACF,oBAAA,OAAO,CACL,kBAAkB,EAClB,KAAK,CAAC;AACJ,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,SAAS,EAAE,aAAa;AACxB,wBAAA,eAAe,EAAE,KAAK;AACvB,qBAAA,CAAC,CACH;iBACF,CAAC;aACH,CAAC;AACH,SAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FAEU,cAAc,EAAA,UAAA,EAAA,CAAA;kBA5C1B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EACP,OAAA,EAAA;wBACP,mBAAmB;qBACpB,EAGc,aAAA,EAAA,iBAAiB,CAAC,IAAI,EACzB,UAAA,EAAA;wBACV,OAAO,CAAC,WAAW,EAAE;4BACnB,UAAU,CAAC,QAAQ,EAAE;AACnB,gCAAA,KAAK,CAAC;AACJ,oCAAA,OAAO,EAAE,CAAC;AACV,oCAAA,SAAS,EAAE,aAAa;AACxB,oCAAA,eAAe,EAAE,KAAK;iCACvB,CAAC;AACF,gCAAA,OAAO,CACL,mBAAmB,EACnB,KAAK,CAAC;AACJ,oCAAA,OAAO,EAAE,CAAC;AACV,oCAAA,SAAS,EAAE,WAAW;AACtB,oCAAA,eAAe,EAAE,KAAK;AACvB,iCAAA,CAAC,CACH;6BACF,CAAC;4BACF,UAAU,CAAC,QAAQ,EAAE;AACnB,gCAAA,KAAK,CAAC;AACJ,oCAAA,OAAO,EAAE,CAAC;AACV,oCAAA,SAAS,EAAE,WAAW;AACtB,oCAAA,eAAe,EAAE,KAAK;iCACvB,CAAC;AACF,gCAAA,OAAO,CACL,kBAAkB,EAClB,KAAK,CAAC;AACJ,oCAAA,OAAO,EAAE,CAAC;AACV,oCAAA,SAAS,EAAE,aAAa;AACxB,oCAAA,eAAe,EAAE,KAAK;AACvB,iCAAA,CAAC,CACH;6BACF,CAAC;yBACH,CAAC;AACH,qBAAA,EAAA,QAAA,EAAA,4mBAAA,EAAA,MAAA,EAAA,CAAA,26CAAA,CAAA,EAAA,CAAA;wDAWD,YAAY,EAAA,CAAA;sBADX,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBASlC,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAKI,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBACG,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBACG,QAAQ,EAAA,CAAA;sBAAjB,MAAM;;;ME1EI,aAAa,CAAA;AAV1B,IAAA,WAAA,GAAA;AAWY,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;AAEvC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AASlC,KAAA;AAPC,IAAA,aAAa,CAAC,CAAa,EAAA;QACzB,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB;KACF;+GAXU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECb1B,2kBAOA,EAAA,MAAA,EAAA,CAAA,oiBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDAI,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FAME,aAAa,EAAA,UAAA,EAAA,CAAA;kBAVzB,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EACP,OAAA,EAAA;wBACP,OAAO;qBACR,EAGc,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAAA,2kBAAA,EAAA,MAAA,EAAA,CAAA,oiBAAA,CAAA,EAAA,CAAA;8BAG3B,OAAO,EAAA,CAAA;sBAAhB,MAAM;;;MEPI,mBAAmB,CAAA;AAG9B,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;KACjC;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SAC/B;KACF;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,YAAY,KAAK,IAAI,EAAE;AACpF,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SAC/B;KACF;+GAhBU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAnB,mBAAmB,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;;AAET,oBAAA,QAAQ,EAAE,cAAc;AACzB,iBAAA,CAAA;+EAEU,UAAU,EAAA,CAAA;sBAAlB,KAAK;;;MC8CK,yBAAyB,CAAA;aAE7B,IAAM,CAAA,MAAA,GAAG,CAAH,CAAK,EAAA;AAGlB,IAAA,IACI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC;KAC3F;IAmDD,IAAa,KAAK,CAAC,KAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC;QAC1B,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACnF;aAAM;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SACjD;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC1B;AAED,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;AAID,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IAAI,QAAQ,CAAC,GAAG,EAAA;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC1B;AAKD,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;IAED,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAC5D,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC1B;AAED,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAED,IAAI,QAAQ,CAAC,GAAW,EAAA;AACtB,QAAA,IAAI,GAAG,GAAG,EAAE,EAAE;AACZ,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;SACvB;aAAM;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;SACxB;KACF;AAKD,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;YAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SACzD;aAAM;AACL,YAAA,OAAO,KAAK,CAAC;SACd;KACF;IA4CD,WAAoB,CAAA,WAA+B,EAAU,OAAgC,EACzE,UAAsB,EACtB,iBAAoC,EACjB,SAAoB,EAAE,EAAsB,EAAA;QAH/D,IAAW,CAAA,WAAA,GAAX,WAAW,CAAoB;QAAU,IAAO,CAAA,OAAA,GAAP,OAAO,CAAyB;QACzE,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QACjB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;AArK5C,QAAA,IAAA,CAAA,EAAE,GAAG,CAAmB,gBAAA,EAAA,yBAAyB,CAAC,MAAM,EAAE,EAAE,CAAC;QAgB/B,IAAe,CAAA,eAAA,GAAyC,IAAI,CAAC;QAC3D,IAAiB,CAAA,iBAAA,GAA2C,IAAI,CAAC;QACvE,IAAmB,CAAA,mBAAA,GAAqC,IAAI,CAAC;;;QAG7F,IAAO,CAAA,OAAA,GAAU,EAAE,CAAC;QACpB,IAAK,CAAA,KAAA,GAAG,KAAK,CAAC;QACd,IAAG,CAAA,GAAA,GAAG,EAAE,CAAC;QACT,IAAW,CAAA,WAAA,GAAmB,KAAK,CAAC;QACpC,IAAS,CAAA,SAAA,GAAG,OAAO,CAAC;QACpB,IAAQ,CAAA,QAAA,GAAG,MAAM,CAAC;QAClB,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;QACzB,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAClB,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC;QACpB,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAClB,IAAU,CAAA,UAAA,GAA+B,IAAI,CAAC;QAC9C,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;QACpB,IAAW,CAAA,WAAA,GAAG,QAAQ,CAAC;QACvB,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;QACd,IAAa,CAAA,aAAA,GAAG,EAAE,CAAC;QACnB,IAAU,CAAA,UAAA,GAAG,EAAE,CAAC;QAChB,IAAU,CAAA,UAAA,GAAG,QAAQ,CAAC;QACtB,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;AACpB,QAAA,IAAA,CAAA,MAAM,GAA2B;AACxC,YAAA,SAAS,CAAC,MAAW,EAAA;AACnB,gBAAA,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;aACnB;SACF,CAAC;AACO,QAAA,IAAA,CAAA,WAAW,GAAgC;AAClD,YAAA,UAAU,CAAC,MAAa,EAAA;AACtB,gBAAA,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;aACnB;SACF,CAAC;AACO,QAAA,IAAA,CAAA,YAAY,GAA2B;AAC9C,YAAA,SAAS,EAAE,CAAC,MAAc,EAAE,OAAc,KAAqB;AAC7D,gBAAA,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;aACrH;SACF,CAAC;AAiBO,QAAA,IAAA,CAAA,cAAc,GAAgB,IAAI,WAAW,EAAE,CAAC;;QAajD,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;;QA2BlB,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAUhB,QAAA,IAAA,CAAA,WAAW,GAAwB,IAAI,YAAY,EAAS,CAAC;AAC7D,QAAA,IAAA,CAAA,kBAAkB,GAAuB,IAAI,YAAY,EAAQ,CAAC;AAClE,QAAA,IAAA,CAAA,oBAAoB,GAAuB,IAAI,YAAY,EAAQ,CAAC;AACpE,QAAA,IAAA,CAAA,mBAAmB,GAAuB,IAAI,YAAY,EAAQ,CAAC;AACnE,QAAA,IAAA,CAAA,oBAAoB,GAAuB,IAAI,YAAY,EAAQ,CAAC;AACpE,QAAA,IAAA,CAAA,SAAS,GAAuB,IAAI,YAAY,EAAQ,CAAC;QAE5D,IAAW,CAAA,WAAA,GAAG,oBAAoB,CAAC;QACnC,IAAQ,CAAA,QAAA,GAAG,QAAQ,CAAC;QACpB,IAAM,CAAA,MAAA,GAAG,MAAM,CAAC;QAEhB,IAAM,CAAA,MAAA,GAAG,KAAK,CAAC;QACf,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAClB,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC;QAChB,IAAY,CAAA,YAAA,GAAQ,EAAE,CAAC;QACvB,IAAiB,CAAA,iBAAA,GAAG,EAAE,CAAC;QACvB,IAAc,CAAA,cAAA,GAAqC,EAAE,CAAC;QACtD,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;QACjB,IAAS,CAAA,SAAA,GAAsB,OAAO,CAAC;AACvC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ,CAAC;QACnC,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC;AAChB,QAAA,IAAA,CAAA,iBAAiB,GAAyD,EAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC;QAG1H,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;QAGhB,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;QAChB,IAAmB,CAAA,mBAAA,GAAG,GAAG,CAAC;AACzB,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;QACjE,IAAmB,CAAA,mBAAA,GAAG,KAAK,CAAC;AAC5B,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,OAAO,EAAU,CAAC;AAC3C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC;QACtD,IAAM,CAAA,MAAA,GAAU,EAAE,CAAC;QACnB,IAAc,CAAA,cAAA,GAAG,IAAI,CAAC;AACtB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAQ,CAAC;AAClC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAC/C,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;QAClB,IAAS,CAAA,SAAA,GAAG,MAAK;AACxB,SAAC,CAAC;AAOA,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;;;AAG1B,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;SACrC;QACD,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAI;AACjG,YAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAC3B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;AACpB,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,UAAU,EAAE,EAAE;AACf,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACjC,YAAA,cAAc,EAAE,IAAI,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC;AAC5D,SAAA,CAAC,CAAC;KACJ;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC;KACjG;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACjE,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACxC,SAAC,CAAC,CAAC;;QAEH,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClE,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,MAAK;AACxF,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;AAE7F,SAAC,CAAC,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,EAAEE,KAAG,CAAC,MAAK;AACxC,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,WAAW,IAAI,GAAG,CAAC;YAClF,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,qBAAqB,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC;AAChI,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACxC,SAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAEpB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,oBAAoB,CAAC,CAAC,IAAI,EAAE,IAAI,KAAI;AACvG,YAAA,OAAO,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC;AACnC,SAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAW,KAAI;AAC1B,YAAA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;AACvB,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACrB,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;AAChC,gBAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;aAC5B;AAAM,iBAAA,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1C,gBAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;aAC5B;SACF,CACF,CACF,CAAC,SAAS,CAAC,CAAC,GAAU,KAAI;AACzB,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACxC,SAAC,CAAC,CAAC;KACJ;IAEO,YAAY,GAAA;AAClB,QAAA,IAAI,GAAoB,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAClE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAK;gBACjC,OAAO,IAAI,CAAC,iBAAiB,CAAC;aAC/B,CAAC,CAAC,CAAC;SACL;aAAM;AACL,YAAA,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACxB;AACD,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,KAAI;;AAEtG,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC1D,CACF,CAAC,CAAC;KACJ;AAEO,IAAA,oBAAoB,CAAC,OAAc,EAAA;AACzC,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAsB,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;AAC1D,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,YAAA,OAAO,GAAG,CAAC;SACZ,EAAE,EAAE,CAAC,CAAC;;AAIP,QAAA,OAAO,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;YAC/C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC1D,CAAC,CAAC,CAAC;KACL;IAEO,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;KACvB;IAGD,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KAC9B;IAED,eAAe,GAAA;AACb,QAAA,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACtB,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;AACtF,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAM,KAAI;AAC9E,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACrB,aAAC,CAAC,CAAC;SACJ;QACD,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAACA,KAAG,CAAC,MAAK;AACrB,YAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,WAAW,IAAI,GAAG,CAAC;YAClF,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,qBAAqB,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC;AAChI,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACxC,SAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACrB;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE;;YAEnB,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;SAC5C;KACF;AAGD,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAC1B,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3B,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC3B,QAAA,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;KAC7E;AAED,IAAA,aAAa,CAAC,CAAa,EAAA;QACzB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,EAAE;YAC7C,CAAC,CAAC,eAAe,EAAE,CAAC;SACrB;KACF;AAGO,IAAA,eAAe,CAAC,CAAM,EAAA;KAC7B;;AAGM,IAAA,UAAU,CAAC,GAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;KAClB;;;AAIM,IAAA,gBAAgB,CAAC,EAAO,EAAA;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC3B;AAED,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED,IAAA,QAAQ,CAAC,CAAM,EAAA;;QAGb,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5E,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACzE,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;;;AAGd,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AAC1B,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE;AAC9C,oBAAA,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;iBACrB;aACF;SACF;QACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YACjB,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ;AAC1C,gBAAA,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/F,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAEjF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;AAGD,IAAA,SAAS,CAAC,KAAiB,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;SAC1B;KACF;AAED,IAAA,UAAU,CAAC,KAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAwB,CAAC,EAAE;AAC3E,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;SAC1B;KACF;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AAEnB,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;KAChC;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;KACjC;AAED,IAAA,QAAQ,CAAC,GAAQ,EAAA;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;;QAEpF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;IAEO,yBAAyB,GAAA;AAC/B,QAAA,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACtB,YAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,YAAY,GAAG,GAAG,GAAG,OAAO,GAAG,MAAM,CAAC;AAC5G,gBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,YAAY,IAAI,GAAG;AAC1F,oBAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC;AACtE,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC;aACrF;AACD,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;AACzC,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,kBAAkB,CAAC,CAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,YAAA,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACtB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBACvB,CAAC,CAAC,cAAc,EAAE,CAAC;AAEnB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;AAClC,oBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBAClD,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBAC/B,IAAI,CAAC,yBAAyB,EAAE,CAAC;iBAElC;qBAAM;AACL,oBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACxB,IAAI,CAAC,yBAAyB,EAAE,CAAC;iBAClC;AACH,aAAC,CAAC,CAAC;SACJ;KACF;IAEO,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAC1B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,WAAW,EAAE,EAAE,IAAI,CAAC,WAAW;YAC/B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,MAAM,EAAE,IAAI,CAAC,WAAW;YACxB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,WAAW;SAC3B,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,GAAG,KAAI;YACV,OAAO,GAAG,IAAI,EAAE,CAAC;SAClB,CAAC,EACF,SAAS,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,KAAI;YACtE,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,EAAE;gBACR,MAAM,GAAG,EAAE,CAAC;aACb;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,gBAAA,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;aAC1C;iBAAM;AACL,gBAAA,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;aACnB;AAED,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,gBAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;aACf;iBAAM;gBACL,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,gBAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;oBACxB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7C,oBAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBAC5B;AACD,gBAAA,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC;aAC7B;AACH,SAAC,CAAC,EAAE,SAAS,CAAC,CAAC,MAAW,KAAI;YAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC3D,SAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAI;AACd,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,yBAAyB,EAAE,CAAC;AACjC,YAAA,OAAO,GAAG,CAAC;AACb,SAAC,CAAC,EAAEA,KAAG,CAAC,MAAK;AACX,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;SACvC,CAAC,CAAC,CAAC;KACP;AAED,IAAA,UAAU,CAAC,CAAM,EAAA;AACf,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,YAAY;AAClH,eAAA,CAAC,IAAI,CAAC,SAAS,EAAE;AACpB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,cAAc,EAAE;gBACpF,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;aAChC;SACF;KACF;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;KAClC;IAED,YAAY,GAAA;QACV,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,KAAK,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE;AACxE,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAClC;aAAM;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;SACtB;AACD,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;AAED,IAAA,kBAAkB,CAAC,CAAa,EAAA;QAC9B,CAAC,CAAC,eAAe,EAAE,CAAC;KACrB;AAED,IAAA,mBAAmB,CAAC,CAAM,EAAA;QACxB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC9C;AAED,IAAA,KAAK,CAAC,CAAQ,EAAA;QACZ,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;AAED,IAAA,iBAAiB,CAAC,GAAa,EAAA;AAC7B,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;aACjD,aAAa,CAAC,qBAAqB,CAAC,CAAC;AACxC,QAAA,cAAc,CAAC,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;KAChE;AAED,IAAA,gBAAgB,CAAC,KAAiB,EAAA;;;;KAIjC;AAED,IAAA,IAAY,YAAY,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;KACzC;AAED,IAAA,oBAAoB,CAAC,OAAO,EAAA;AAC1B,QAAA,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;AACtB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,gBAAA,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE;AACpC,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;iBAC5C;qBAAM;AACL,oBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAoB,CAAC,CAAC,CAAC;iBAC3E;aACF;AACD,YAAA,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,KAAI;gBAC3C,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzD,gBAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;wBACvB,KAAK;wBACL,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;AAC/D,qBAAA,CAAC,CAAC;iBACJ;gBACD,OAAO,IAAI,CAAC,cAAc,CAAC;aAC5B,CAAC,CAAC,CAAC;SACL;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;IAEM,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;KAC1B;AAED,IAAA,gBAAgB,CAAC,MAAW,EAAA;QAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;KAC/E;AAED,IAAA,aAAa,CAAC,MAAW,EAAA;AACvB,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SACvB;aAAM;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACrB;KACF;AAED,IAAA,MAAM,CAAC,MAAW,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;SACjB;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAExB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YACvB,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ;AAC1C,gBAAA,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/F,SAAC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACnF,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAChB,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ;AAC1C,gBAAA,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/F,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACtC,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC;KACpD;+GA/lBU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAG,uBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EARzB,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,GAAA,EAAA,KAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,SAAA,EAAA;;;;;;SAMV,EAqBa,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,6BAA6B,EAC7B,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,+BAA+B,EAC/B,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,yBAAyB,saAP5B,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAIjB,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxEpC,ggQA2JA,EAAA,MAAA,EAAA,CAAA,6uGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,WAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,0BAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FDrGa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAfrC,SAAS;+BAEE,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAC1B,SAAA,EAAA;;;;;;AAMV,qBAAA,EAAA,QAAA,EAAA,ggQAAA,EAAA,MAAA,EAAA,CAAA,6uGAAA,CAAA,EAAA,CAAA;;0BA0KY,QAAQ;;0BAAI,IAAI;4EArKd,EAAE,EAAA,CAAA;sBAAhB,WAAW;gBAGR,gBAAgB,EAAA,CAAA;sBADnB,WAAW;uBAAC,gBAAgB,CAAA;gBAKgB,cAAc,EAAA,CAAA;sBAA1D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAA;gBACE,cAAc,EAAA,CAAA;sBAA1D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAA;gBACO,kBAAkB,EAAA,CAAA;sBAAnE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC,CAAA;gBAEC,OAAO,EAAA,CAAA;sBAAvD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAA;gBACN,SAAS,EAAA,CAAA;sBAAjD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC,CAAA;gBACO,cAAc,EAAA,CAAA;sBAA3D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC,CAAA;gBACQ,oBAAoB,EAAA,CAAA;sBAAvE,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,sBAAsB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC,CAAA;gBACd,UAAU,EAAA,CAAA;sBAA7C,YAAY;uBAAC,oBAAoB,CAAA;gBACW,eAAe,EAAA,CAAA;sBAA3D,YAAY;uBAAC,6BAA6B,CAAA;gBACI,iBAAiB,EAAA,CAAA;sBAA/D,YAAY;uBAAC,+BAA+B,CAAA;gBACJ,mBAAmB,EAAA,CAAA;sBAA3D,YAAY;uBAAC,yBAAyB,CAAA;gBAG9B,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAKG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAKG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAKG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEO,KAAK,EAAA,CAAA;sBAAjB,KAAK;gBAcG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAGF,QAAQ,EAAA,CAAA;sBADX,KAAK;gBAcF,QAAQ,EAAA,CAAA;sBADX,KAAK;gBAYF,QAAQ,EAAA,CAAA;sBADX,KAAK;gBAwBI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,kBAAkB,EAAA,CAAA;sBAA3B,MAAM;gBACG,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;gBACG,mBAAmB,EAAA,CAAA;sBAA5B,MAAM;gBACG,oBAAoB,EAAA,CAAA;sBAA7B,MAAM;gBACG,SAAS,EAAA,CAAA;sBAAlB,MAAM;;;ME5II,sBAAsB,CAAA;+GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,iBAxB/B,oBAAoB;YACpB,yBAAyB;YACzB,oBAAoB;YACpB,6BAA6B;YAC7B,+BAA+B;YAC/B,4BAA4B;YAC5B,yBAAyB;AACzB,YAAA,mBAAmB,aAEnB,YAAY;YACZ,mBAAmB;YACnB,iBAAiB;YACjB,YAAY;YACZ,WAAW;YACX,cAAc;AACd,YAAA,aAAa,aAEL,yBAAyB;YACjC,oBAAoB;YACpB,6BAA6B;YAC7B,+BAA+B;YAC/B,4BAA4B;YAC5B,yBAAyB,CAAA,EAAA,CAAA,CAAA,EAAA;AAEhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAf/B,YAAY;YACZ,mBAAmB;YACnB,iBAAiB;YAEjB,WAAW,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAWF,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBA1BlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,oBAAoB;wBACpB,yBAAyB;wBACzB,oBAAoB;wBACpB,6BAA6B;wBAC7B,+BAA+B;wBAC/B,4BAA4B;wBAC5B,yBAAyB;wBACzB,mBAAmB;AAAC,qBAAA;AACtB,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,iBAAiB;wBACjB,YAAY;wBACZ,WAAW;wBACX,cAAc;wBACd,aAAa;AACd,qBAAA;oBACD,OAAO,EAAE,CAAC,yBAAyB;wBACjC,oBAAoB;wBACpB,6BAA6B;wBAC7B,+BAA+B;wBAC/B,4BAA4B;AAC5B,wBAAA,yBAAyB,CAAC;AAC7B,iBAAA,CAAA;;;ACzCD;;AAEG;;ACFH;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-jvx-multiselect",
3
- "version": "18.0.5",
3
+ "version": "18.0.6",
4
4
  "license": "MIT",
5
5
  "description": "ng-jvx-multiselect is a select for angular projects. It handles both single and multiple selections and allows to retrieves the options via asynchronous calls.",
6
6
  "exports": {