@sapphire-ion/framework 1.0.13 → 1.0.16

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.
Files changed (23) hide show
  1. package/esm2022/lib/classes/inputs/table-field.mjs +11 -1
  2. package/esm2022/lib/components/drawer/default-drawer-end/default-drawer-end.component.mjs +3 -3
  3. package/esm2022/lib/components/drawer/drawer-group/drawer-group.component.mjs +11 -8
  4. package/esm2022/lib/components/drawer/drawer.component.mjs +13 -13
  5. package/esm2022/lib/components/inputs/input-file/input-file.component.mjs +1 -1
  6. package/esm2022/lib/components/inputs/input-select/input-select.component.mjs +3 -3
  7. package/esm2022/lib/components/login/login.component.mjs +10 -4
  8. package/esm2022/lib/components/main-content/main-content.component.mjs +38 -6
  9. package/esm2022/lib/components/popover/sion-popover/sion-popover.component.mjs +29 -12
  10. package/esm2022/lib/guards/error.interceptor.mjs +2 -1
  11. package/esm2022/lib/services/auth.service.mjs +5 -1
  12. package/fesm2022/sapphire-ion-framework.mjs +108 -37
  13. package/fesm2022/sapphire-ion-framework.mjs.map +1 -1
  14. package/lib/components/drawer/drawer-group/drawer-group.component.d.ts +1 -1
  15. package/lib/components/drawer/drawer.component.d.ts +1 -3
  16. package/lib/components/login/login.component.d.ts +1 -0
  17. package/lib/components/main-content/main-content.component.d.ts +9 -1
  18. package/lib/components/popover/sion-popover/sion-popover.component.d.ts +7 -4
  19. package/package.json +1 -1
  20. package/themes/compiled-styles.scss +27 -0
  21. package/themes/components/drawer/drawer-group/drawer-group.component.scss +60 -17
  22. package/themes/components/drawer/drawer.component.scss +63 -40
  23. package/themes/styles/core.styles.scss +61 -4
@@ -244,11 +244,11 @@ export class InputSelectComponent extends CustomInput {
244
244
  return Array.isArray(obj);
245
245
  }
246
246
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InputSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
247
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: InputSelectComponent, selector: "input-select", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { items: "itemsChange" }, host: { listeners: { "document:keydown": "HandleKeyboardEvent($event)" } }, providers: [...InputProviderFactory.GetProviders(InputSelectComponent)], queries: [{ propertyName: "labelTemplate", first: true, predicate: SIonLabelTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "optionTemplate", first: true, predicate: SIonOptionTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "placeholderTemplate", first: true, predicate: SIonPlaceholderTemplateDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "inputContainer", first: true, predicate: ["inputContainer"], descendants: true }, { propertyName: "inputSelectLabel", first: true, predicate: ["inputSelectLabel"], descendants: true }, { propertyName: "inputSearchBar", first: true, predicate: ["inputSearchBar"], descendants: true }, { propertyName: "selectContent", first: true, predicate: ["selectContent"], descendants: true }, { propertyName: "popover", first: true, predicate: SIonPopoverComponent, descendants: true }, { propertyName: "modal", first: true, predicate: IonModal, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"focus($event); Present($event)\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.manual-focus]=\"floatingVisible\"\r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"loading() || loadingFromLoader || disabled()\"\r\n [class.loading]=\"loading() || loadingFromLoader\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n \r\n <div class=\"w-full truncate outline-none\" [class.pr-7]=\"!configuration().clearable\" [class.pr-10]=\"configuration().clearable\" #inputSelectLabel tabindex=\"0\">\r\n @if (!configuration().multiple && currentLabel){\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: currentLabel, item: currentItems.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{currentLabel}} </span>\r\n }\r\n }\r\n @else if (configuration().multiple && isArray(currentItems) && $any(currentItems).length) {\r\n <div class=\"w-full\">\r\n <div class=\"overflow-x-auto flex gap-2 size-full mask-x/2\">\r\n @for (item of currentItems; track $index) {\r\n <div class=\"translucid-border rounded-lg flex items-center justify-center gap-2 pl-2\">\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.label, item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{item.label}} </span>\r\n }\r\n \r\n <div class=\"h-full aspect-square flex items-center justify-center cursor-pointer\" (click)=\"Select(item); $event.stopPropagation()\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n <!-- <ion-button class=\"m-0 h-full\" (click)=\"Select(item.value); $event.stopPropagation()\" color=\"medium\" size=\"small\" fill=\"outline\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @else {\r\n @if(placeholderTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"placeholderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: this.configuration().placeholder, placeholder: this.configuration().placeholder }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label !text-medium\"> {{this.configuration().placeholder}} </span>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"absolute bottom-1 flex flex-col items-center justify-center size-7\" [class.right-1]=\"!configuration().clearable\" [class.right-8]=\"configuration().clearable\">\r\n <ion-icon class=\"-mb-0.5\" name=\"chevron-up\"></ion-icon>\r\n <ion-icon class=\"-mt-0.5\" name=\"chevron-down\"></ion-icon>\r\n </div>\r\n @if(configuration().clearable){\r\n <ion-button class=\"absolute right-1 bottom-1\" (click)=\"Clear($event)\" color=\"medium\" size=\"small\" fill=\"clear\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n } \r\n\r\n <div class=\"loading-container\" [class.loading]=\"loading() || loadingFromLoader\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n</div>\r\n\r\n<ion-modal #modal (ionModalWillPresent)=\"OnPresent()\" (didDismiss)=\"OnDismiss()\" style=\"--width: 90%; --height: 90%;\" [keepContentsMounted]=\"true\">\r\n <ng-template>\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\" [ngTemplateOutletContext]=\"{ modal: true }\"></ng-container>\r\n </ng-template>\r\n</ion-modal>\r\n\r\n<sion-popover \r\n #popover \r\n [width]=\"inputContainer.offsetWidth + 'px'\" \r\n (onWillPresent)=\"OnPresent()\" \r\n (onDidDismiss)=\"OnDismiss()\" \r\n [anchor]=\"inputContainer\" \r\n [placement]=\"configuration().popoverConfiguration.placement\" \r\n [flip]=\"configuration().popoverConfiguration.flip\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\"></ng-container>\r\n</sion-popover>\r\n\r\n<ng-template #selectContentTemplate let-modal=\"modal\">\r\n <div #selectContent class=\"select-content\" [class.!size-full]=\"modal\">\r\n <div class=\"select-search-bar-container\">\r\n <div class=\"select-search-bar-icon-container !border-r-0 border-primary/70 bg-primary/70 shrink-0\">\r\n <ion-icon color=\"dark\" name=\"search\"></ion-icon>\r\n </div>\r\n <input #inputSearchBar tabindex=\"-1\" class=\"select-search-bar border-primary/70 !rounded-l-none\" [formControl]=\"searchBarControl\"/>\r\n </div> \r\n <ul class=\"select-item-list mask-y\" role=\"listbox\" [attr.aria-activedescendant]=\"'sion-is-' + selectedIndex\">\r\n @if(floatingVisible){\r\n @for (item of lstOptions; track item.value) { \r\n <ng-container \r\n [ngTemplateOutlet]=\"baseOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\">\r\n </ng-container>\r\n }\r\n }\r\n </ul>\r\n @if(isServiceAtivo()){\r\n <div class=\"w-full text-xs flex items-center justify-end\">\r\n <ion-checkbox [ngModel]=\"somenteAtivos()\" (ngModelChange)=\"somenteAtivos.set($event)\" class=\"scale-75\"> Somente ativos </ion-checkbox>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #baseOptionTemplate let-item=\"item\" let-index=\"index\">\r\n <li [id]=\"'sion-is-' + index\" class=\"select-item\" [class.disabled]=\"item.disabled\" [attr.aria-selected]=\"index == selectedIndex\" (mouseenter)=\"selectedIndex = index\" (click)=\"Select(item)\">\r\n <div class=\"select-item-checkmark-conteiner\">\r\n @if(item.selected) {\r\n <ion-icon class=\"select-item-checkmark\" color=\"primary\" name=\"checkmark\"></ion-icon>\r\n }\r\n </div>\r\n @if (optionTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"optionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"select-item-label\"> {{item.label}} </span>\r\n }\r\n </li>\r\n</ng-template>", styles: [".input-container{cursor:pointer!important}.input-select-label{pointer-events:none;min-height:1.5rem;width:100%;outline:2px solid transparent;outline-offset:2px;color:var(--ion-color-dark)}.select-content{display:flex;height:18rem;width:100%;flex-direction:column;gap:.25rem;overflow:hidden;padding:.25rem}.select-content .select-search-bar-container{display:flex;width:100%;flex-shrink:1}.select-content .select-search-bar-container .select-search-bar-icon-container{display:flex;height:100%;width:1.75rem;align-items:center;justify-content:center;border-top-left-radius:.375rem;border-bottom-left-radius:.375rem;border-width:1px}.select-content .select-search-bar-container .select-search-bar{width:100%;flex-shrink:1;border-radius:.375rem;border-width:1px;background-color:transparent;padding-left:.5rem;padding-right:.5rem;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}@media (orientation: portrait){.select-content .select-search-bar-container .select-search-bar{height:2.5rem}}@media (orientation: landscape){.select-content .select-search-bar-container .select-search-bar{height:1.75rem}}.select-item-list{width:100%;height:100%;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.select-item-list .select-item{color:var(--ion-color-dark);display:flex;width:100%;flex-shrink:0;align-items:center;justify-content:flex-start;border-radius:.375rem;padding-right:.5rem}@media (orientation: portrait){.select-item-list .select-item{min-height:2.5rem}}@media (orientation: landscape){.select-item-list .select-item{min-height:2rem}}.select-item-list .select-item{cursor:pointer}.select-item-list .select-item.disabled{opacity:.5;pointer-events:none}.select-item-list .select-item:hover,.select-item-list .select-item:focus,.select-item-list .select-item[aria-selected=true]{background-color:color-mix(in srgb,var(--ion-color-dark) 20%,transparent)}.select-item-list .select-item .select-item-checkmark-conteiner{display:flex;height:100%;width:1.75rem;flex-shrink:0;align-items:center;justify-content:center}.select-item-list .select-item .select-item-label{width:100%}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 1px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:transform;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "required", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i1.IonModal, selector: "ion-modal" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SIonPopoverComponent, selector: "sion-popover", inputs: ["fill", "arrow", "flip", "placement", "height", "width", "anchor"], outputs: ["onWillPresent", "onDidPresent", "onWillDismiss", "onDidDismiss", "isVisibleChange"] }] }); }
247
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: InputSelectComponent, selector: "input-select", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, configuration: { classPropertyName: "configuration", publicName: "configuration", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { items: "itemsChange" }, host: { listeners: { "document:keydown": "HandleKeyboardEvent($event)" } }, providers: [...InputProviderFactory.GetProviders(InputSelectComponent)], queries: [{ propertyName: "labelTemplate", first: true, predicate: SIonLabelTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "optionTemplate", first: true, predicate: SIonOptionTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "placeholderTemplate", first: true, predicate: SIonPlaceholderTemplateDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "inputContainer", first: true, predicate: ["inputContainer"], descendants: true }, { propertyName: "inputSelectLabel", first: true, predicate: ["inputSelectLabel"], descendants: true }, { propertyName: "inputSearchBar", first: true, predicate: ["inputSearchBar"], descendants: true }, { propertyName: "selectContent", first: true, predicate: ["selectContent"], descendants: true }, { propertyName: "popover", first: true, predicate: SIonPopoverComponent, descendants: true }, { propertyName: "modal", first: true, predicate: IonModal, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"focus($event); Present($event)\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.manual-focus]=\"floatingVisible\"\r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"loading() || loadingFromLoader || disabled()\"\r\n [class.loading]=\"loading() || loadingFromLoader\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n \r\n <div class=\"w-full truncate outline-none\" [class.pr-7]=\"!configuration().clearable\" [class.pr-10]=\"configuration().clearable\" #inputSelectLabel tabindex=\"0\">\r\n @if (!configuration().multiple && currentLabel){\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: currentLabel, item: currentItems.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{currentLabel}} </span>\r\n }\r\n }\r\n @else if (configuration().multiple && isArray(currentItems) && $any(currentItems).length) {\r\n <div class=\"w-full min-h-6 overflow-hidden relative\">\r\n <div class=\"absolute left-0 top-0 overflow-x-auto flex gap-2 size-full mask-x/2\">\r\n @for (item of currentItems; track $index) {\r\n <div class=\"translucid-border rounded-lg flex items-center justify-center gap-2 pl-2\">\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.label, item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{item.label}} </span>\r\n }\r\n \r\n <div class=\"h-full aspect-square flex items-center justify-center cursor-pointer\" (click)=\"Select(item); $event.stopPropagation()\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n <!-- <ion-button class=\"m-0 h-full\" (click)=\"Select(item.value); $event.stopPropagation()\" color=\"medium\" size=\"small\" fill=\"outline\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @else {\r\n @if(placeholderTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"placeholderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: this.configuration().placeholder, placeholder: this.configuration().placeholder }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label !text-medium\"> {{this.configuration().placeholder}} </span>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"absolute bottom-1 flex flex-col items-center justify-center size-7\" [class.right-1]=\"!configuration().clearable\" [class.right-8]=\"configuration().clearable\">\r\n <ion-icon class=\"-mb-0.5\" name=\"chevron-up\"></ion-icon>\r\n <ion-icon class=\"-mt-0.5\" name=\"chevron-down\"></ion-icon>\r\n </div>\r\n @if(configuration().clearable){\r\n <ion-button class=\"absolute right-1 bottom-1\" (click)=\"Clear($event)\" color=\"medium\" size=\"small\" fill=\"clear\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n } \r\n\r\n <div class=\"loading-container\" [class.loading]=\"loading() || loadingFromLoader\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n</div>\r\n\r\n<ion-modal #modal (ionModalWillPresent)=\"OnPresent()\" (didDismiss)=\"OnDismiss()\" style=\"--width: 90%; --height: 90%;\" [keepContentsMounted]=\"true\">\r\n <ng-template>\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\" [ngTemplateOutletContext]=\"{ modal: true }\"></ng-container>\r\n </ng-template>\r\n</ion-modal>\r\n\r\n<sion-popover \r\n #popover \r\n [width]=\"inputContainer.offsetWidth + 'px'\" \r\n (onWillPresent)=\"OnPresent()\" \r\n (onDidDismiss)=\"OnDismiss()\" \r\n [anchor]=\"inputContainer\" \r\n [placement]=\"configuration().popoverConfiguration.placement\" \r\n [flip]=\"configuration().popoverConfiguration.flip\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\"></ng-container>\r\n</sion-popover>\r\n\r\n<ng-template #selectContentTemplate let-modal=\"modal\">\r\n <div #selectContent class=\"select-content\" [class.!size-full]=\"modal\">\r\n <div class=\"select-search-bar-container\">\r\n <div class=\"select-search-bar-icon-container !border-r-0 border-primary/70 bg-primary/70 shrink-0\">\r\n <ion-icon color=\"dark\" name=\"search\"></ion-icon>\r\n </div>\r\n <input #inputSearchBar tabindex=\"-1\" class=\"select-search-bar border-primary/70 !rounded-l-none\" [formControl]=\"searchBarControl\"/>\r\n </div> \r\n <ul class=\"select-item-list mask-y\" role=\"listbox\" [attr.aria-activedescendant]=\"'sion-is-' + selectedIndex\">\r\n @if(floatingVisible){\r\n @for (item of lstOptions; track item.value) { \r\n <ng-container \r\n [ngTemplateOutlet]=\"baseOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\">\r\n </ng-container>\r\n }\r\n }\r\n </ul>\r\n @if(isServiceAtivo()){\r\n <div class=\"w-full text-xs flex items-center justify-end\">\r\n <ion-checkbox [ngModel]=\"somenteAtivos()\" (ngModelChange)=\"somenteAtivos.set($event)\" class=\"scale-75\"> Somente ativos </ion-checkbox>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #baseOptionTemplate let-item=\"item\" let-index=\"index\">\r\n <li [id]=\"'sion-is-' + index\" class=\"select-item\" [class.disabled]=\"item.disabled\" [attr.aria-selected]=\"index == selectedIndex\" (mouseenter)=\"selectedIndex = index\" (click)=\"Select(item)\">\r\n <div class=\"select-item-checkmark-conteiner\">\r\n @if(item.selected) {\r\n <ion-icon class=\"select-item-checkmark\" color=\"primary\" name=\"checkmark\"></ion-icon>\r\n }\r\n </div>\r\n @if (optionTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"optionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"select-item-label\"> {{item.label}} </span>\r\n }\r\n </li>\r\n</ng-template>", styles: [".input-container{cursor:pointer!important}.input-select-label{pointer-events:none;min-height:1.5rem;width:100%;outline:2px solid transparent;outline-offset:2px;color:var(--ion-color-dark)}.select-content{display:flex;height:18rem;width:100%;flex-direction:column;gap:.25rem;overflow:hidden;padding:.25rem}.select-content .select-search-bar-container{display:flex;width:100%;flex-shrink:1}.select-content .select-search-bar-container .select-search-bar-icon-container{display:flex;height:100%;width:1.75rem;align-items:center;justify-content:center;border-top-left-radius:.375rem;border-bottom-left-radius:.375rem;border-width:1px}.select-content .select-search-bar-container .select-search-bar{width:100%;flex-shrink:1;border-radius:.375rem;border-width:1px;background-color:transparent;padding-left:.5rem;padding-right:.5rem;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}@media (orientation: portrait){.select-content .select-search-bar-container .select-search-bar{height:2.5rem}}@media (orientation: landscape){.select-content .select-search-bar-container .select-search-bar{height:1.75rem}}.select-item-list{width:100%;height:100%;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.select-item-list .select-item{color:var(--ion-color-dark);display:flex;width:100%;flex-shrink:0;align-items:center;justify-content:flex-start;border-radius:.375rem;padding-right:.5rem}@media (orientation: portrait){.select-item-list .select-item{min-height:2.5rem}}@media (orientation: landscape){.select-item-list .select-item{min-height:2rem}}.select-item-list .select-item{cursor:pointer}.select-item-list .select-item.disabled{opacity:.5;pointer-events:none}.select-item-list .select-item:hover,.select-item-list .select-item:focus,.select-item-list .select-item[aria-selected=true]{background-color:color-mix(in srgb,var(--ion-color-dark) 20%,transparent)}.select-item-list .select-item .select-item-checkmark-conteiner{display:flex;height:100%;width:1.75rem;flex-shrink:0;align-items:center;justify-content:center}.select-item-list .select-item .select-item-label{width:100%}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 1px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:transform;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCheckbox, selector: "ion-checkbox", inputs: ["alignment", "checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "required", "value"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i1.IonModal, selector: "ion-modal" }, { kind: "directive", type: i1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.SIonPopoverComponent, selector: "sion-popover", inputs: ["fill", "arrow", "flip", "placement", "height", "width", "anchor"], outputs: ["onWillPresent", "onDidPresent", "onWillDismiss", "onDidDismiss", "isVisibleChange"] }] }); }
248
248
  }
249
249
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InputSelectComponent, decorators: [{
250
250
  type: Component,
251
- args: [{ selector: 'input-select', providers: [...InputProviderFactory.GetProviders(InputSelectComponent)], template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"focus($event); Present($event)\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.manual-focus]=\"floatingVisible\"\r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"loading() || loadingFromLoader || disabled()\"\r\n [class.loading]=\"loading() || loadingFromLoader\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n \r\n <div class=\"w-full truncate outline-none\" [class.pr-7]=\"!configuration().clearable\" [class.pr-10]=\"configuration().clearable\" #inputSelectLabel tabindex=\"0\">\r\n @if (!configuration().multiple && currentLabel){\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: currentLabel, item: currentItems.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{currentLabel}} </span>\r\n }\r\n }\r\n @else if (configuration().multiple && isArray(currentItems) && $any(currentItems).length) {\r\n <div class=\"w-full\">\r\n <div class=\"overflow-x-auto flex gap-2 size-full mask-x/2\">\r\n @for (item of currentItems; track $index) {\r\n <div class=\"translucid-border rounded-lg flex items-center justify-center gap-2 pl-2\">\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.label, item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{item.label}} </span>\r\n }\r\n \r\n <div class=\"h-full aspect-square flex items-center justify-center cursor-pointer\" (click)=\"Select(item); $event.stopPropagation()\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n <!-- <ion-button class=\"m-0 h-full\" (click)=\"Select(item.value); $event.stopPropagation()\" color=\"medium\" size=\"small\" fill=\"outline\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @else {\r\n @if(placeholderTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"placeholderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: this.configuration().placeholder, placeholder: this.configuration().placeholder }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label !text-medium\"> {{this.configuration().placeholder}} </span>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"absolute bottom-1 flex flex-col items-center justify-center size-7\" [class.right-1]=\"!configuration().clearable\" [class.right-8]=\"configuration().clearable\">\r\n <ion-icon class=\"-mb-0.5\" name=\"chevron-up\"></ion-icon>\r\n <ion-icon class=\"-mt-0.5\" name=\"chevron-down\"></ion-icon>\r\n </div>\r\n @if(configuration().clearable){\r\n <ion-button class=\"absolute right-1 bottom-1\" (click)=\"Clear($event)\" color=\"medium\" size=\"small\" fill=\"clear\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n } \r\n\r\n <div class=\"loading-container\" [class.loading]=\"loading() || loadingFromLoader\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n</div>\r\n\r\n<ion-modal #modal (ionModalWillPresent)=\"OnPresent()\" (didDismiss)=\"OnDismiss()\" style=\"--width: 90%; --height: 90%;\" [keepContentsMounted]=\"true\">\r\n <ng-template>\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\" [ngTemplateOutletContext]=\"{ modal: true }\"></ng-container>\r\n </ng-template>\r\n</ion-modal>\r\n\r\n<sion-popover \r\n #popover \r\n [width]=\"inputContainer.offsetWidth + 'px'\" \r\n (onWillPresent)=\"OnPresent()\" \r\n (onDidDismiss)=\"OnDismiss()\" \r\n [anchor]=\"inputContainer\" \r\n [placement]=\"configuration().popoverConfiguration.placement\" \r\n [flip]=\"configuration().popoverConfiguration.flip\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\"></ng-container>\r\n</sion-popover>\r\n\r\n<ng-template #selectContentTemplate let-modal=\"modal\">\r\n <div #selectContent class=\"select-content\" [class.!size-full]=\"modal\">\r\n <div class=\"select-search-bar-container\">\r\n <div class=\"select-search-bar-icon-container !border-r-0 border-primary/70 bg-primary/70 shrink-0\">\r\n <ion-icon color=\"dark\" name=\"search\"></ion-icon>\r\n </div>\r\n <input #inputSearchBar tabindex=\"-1\" class=\"select-search-bar border-primary/70 !rounded-l-none\" [formControl]=\"searchBarControl\"/>\r\n </div> \r\n <ul class=\"select-item-list mask-y\" role=\"listbox\" [attr.aria-activedescendant]=\"'sion-is-' + selectedIndex\">\r\n @if(floatingVisible){\r\n @for (item of lstOptions; track item.value) { \r\n <ng-container \r\n [ngTemplateOutlet]=\"baseOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\">\r\n </ng-container>\r\n }\r\n }\r\n </ul>\r\n @if(isServiceAtivo()){\r\n <div class=\"w-full text-xs flex items-center justify-end\">\r\n <ion-checkbox [ngModel]=\"somenteAtivos()\" (ngModelChange)=\"somenteAtivos.set($event)\" class=\"scale-75\"> Somente ativos </ion-checkbox>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #baseOptionTemplate let-item=\"item\" let-index=\"index\">\r\n <li [id]=\"'sion-is-' + index\" class=\"select-item\" [class.disabled]=\"item.disabled\" [attr.aria-selected]=\"index == selectedIndex\" (mouseenter)=\"selectedIndex = index\" (click)=\"Select(item)\">\r\n <div class=\"select-item-checkmark-conteiner\">\r\n @if(item.selected) {\r\n <ion-icon class=\"select-item-checkmark\" color=\"primary\" name=\"checkmark\"></ion-icon>\r\n }\r\n </div>\r\n @if (optionTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"optionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"select-item-label\"> {{item.label}} </span>\r\n }\r\n </li>\r\n</ng-template>", styles: [".input-container{cursor:pointer!important}.input-select-label{pointer-events:none;min-height:1.5rem;width:100%;outline:2px solid transparent;outline-offset:2px;color:var(--ion-color-dark)}.select-content{display:flex;height:18rem;width:100%;flex-direction:column;gap:.25rem;overflow:hidden;padding:.25rem}.select-content .select-search-bar-container{display:flex;width:100%;flex-shrink:1}.select-content .select-search-bar-container .select-search-bar-icon-container{display:flex;height:100%;width:1.75rem;align-items:center;justify-content:center;border-top-left-radius:.375rem;border-bottom-left-radius:.375rem;border-width:1px}.select-content .select-search-bar-container .select-search-bar{width:100%;flex-shrink:1;border-radius:.375rem;border-width:1px;background-color:transparent;padding-left:.5rem;padding-right:.5rem;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}@media (orientation: portrait){.select-content .select-search-bar-container .select-search-bar{height:2.5rem}}@media (orientation: landscape){.select-content .select-search-bar-container .select-search-bar{height:1.75rem}}.select-item-list{width:100%;height:100%;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.select-item-list .select-item{color:var(--ion-color-dark);display:flex;width:100%;flex-shrink:0;align-items:center;justify-content:flex-start;border-radius:.375rem;padding-right:.5rem}@media (orientation: portrait){.select-item-list .select-item{min-height:2.5rem}}@media (orientation: landscape){.select-item-list .select-item{min-height:2rem}}.select-item-list .select-item{cursor:pointer}.select-item-list .select-item.disabled{opacity:.5;pointer-events:none}.select-item-list .select-item:hover,.select-item-list .select-item:focus,.select-item-list .select-item[aria-selected=true]{background-color:color-mix(in srgb,var(--ion-color-dark) 20%,transparent)}.select-item-list .select-item .select-item-checkmark-conteiner{display:flex;height:100%;width:1.75rem;flex-shrink:0;align-items:center;justify-content:center}.select-item-list .select-item .select-item-label{width:100%}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 1px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:transform;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"] }]
251
+ args: [{ selector: 'input-select', providers: [...InputProviderFactory.GetProviders(InputSelectComponent)], template: "<div \r\n #inputContainer\r\n class=\"input-container\" \r\n (click)=\"focus($event); Present($event)\"\r\n [class.required]=\"required()\" \r\n [class.submitted]=\"submitted()\" \r\n [class.manual-focus]=\"floatingVisible\"\r\n [class.invalid]=\"invalid\" \r\n [class.disabled]=\"loading() || loadingFromLoader || disabled()\"\r\n [class.loading]=\"loading() || loadingFromLoader\"\r\n>\r\n <div class=\"input-label\"> \r\n <span class=\"truncate\">\r\n {{label()}} \r\n </span>\r\n </div>\r\n \r\n <div class=\"w-full truncate outline-none\" [class.pr-7]=\"!configuration().clearable\" [class.pr-10]=\"configuration().clearable\" #inputSelectLabel tabindex=\"0\">\r\n @if (!configuration().multiple && currentLabel){\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: currentLabel, item: currentItems.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{currentLabel}} </span>\r\n }\r\n }\r\n @else if (configuration().multiple && isArray(currentItems) && $any(currentItems).length) {\r\n <div class=\"w-full min-h-6 overflow-hidden relative\">\r\n <div class=\"absolute left-0 top-0 overflow-x-auto flex gap-2 size-full mask-x/2\">\r\n @for (item of currentItems; track $index) {\r\n <div class=\"translucid-border rounded-lg flex items-center justify-center gap-2 pl-2\">\r\n @if(labelTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"labelTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.label, item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label\"> {{item.label}} </span>\r\n }\r\n \r\n <div class=\"h-full aspect-square flex items-center justify-center cursor-pointer\" (click)=\"Select(item); $event.stopPropagation()\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </div>\r\n <!-- <ion-button class=\"m-0 h-full\" (click)=\"Select(item.value); $event.stopPropagation()\" color=\"medium\" size=\"small\" fill=\"outline\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" color=\"danger\" slot=\"icon-only\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n @else {\r\n @if(placeholderTemplate){\r\n <ng-container \r\n [ngTemplateOutlet]=\"placeholderTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: this.configuration().placeholder, placeholder: this.configuration().placeholder }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"input-select-label !text-medium\"> {{this.configuration().placeholder}} </span>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"absolute bottom-1 flex flex-col items-center justify-center size-7\" [class.right-1]=\"!configuration().clearable\" [class.right-8]=\"configuration().clearable\">\r\n <ion-icon class=\"-mb-0.5\" name=\"chevron-up\"></ion-icon>\r\n <ion-icon class=\"-mt-0.5\" name=\"chevron-down\"></ion-icon>\r\n </div>\r\n @if(configuration().clearable){\r\n <ion-button class=\"absolute right-1 bottom-1\" (click)=\"Clear($event)\" color=\"medium\" size=\"small\" fill=\"clear\" style=\"--border-radius: .5rem\">\r\n <ion-icon name=\"close\" slot=\"icon-only\"></ion-icon>\r\n </ion-button>\r\n } \r\n\r\n <div class=\"loading-container\" [class.loading]=\"loading() || loadingFromLoader\">\r\n <ion-spinner></ion-spinner>\r\n </div>\r\n</div>\r\n\r\n<ion-modal #modal (ionModalWillPresent)=\"OnPresent()\" (didDismiss)=\"OnDismiss()\" style=\"--width: 90%; --height: 90%;\" [keepContentsMounted]=\"true\">\r\n <ng-template>\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\" [ngTemplateOutletContext]=\"{ modal: true }\"></ng-container>\r\n </ng-template>\r\n</ion-modal>\r\n\r\n<sion-popover \r\n #popover \r\n [width]=\"inputContainer.offsetWidth + 'px'\" \r\n (onWillPresent)=\"OnPresent()\" \r\n (onDidDismiss)=\"OnDismiss()\" \r\n [anchor]=\"inputContainer\" \r\n [placement]=\"configuration().popoverConfiguration.placement\" \r\n [flip]=\"configuration().popoverConfiguration.flip\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"selectContentTemplate\"></ng-container>\r\n</sion-popover>\r\n\r\n<ng-template #selectContentTemplate let-modal=\"modal\">\r\n <div #selectContent class=\"select-content\" [class.!size-full]=\"modal\">\r\n <div class=\"select-search-bar-container\">\r\n <div class=\"select-search-bar-icon-container !border-r-0 border-primary/70 bg-primary/70 shrink-0\">\r\n <ion-icon color=\"dark\" name=\"search\"></ion-icon>\r\n </div>\r\n <input #inputSearchBar tabindex=\"-1\" class=\"select-search-bar border-primary/70 !rounded-l-none\" [formControl]=\"searchBarControl\"/>\r\n </div> \r\n <ul class=\"select-item-list mask-y\" role=\"listbox\" [attr.aria-activedescendant]=\"'sion-is-' + selectedIndex\">\r\n @if(floatingVisible){\r\n @for (item of lstOptions; track item.value) { \r\n <ng-container \r\n [ngTemplateOutlet]=\"baseOptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item, index: $index }\">\r\n </ng-container>\r\n }\r\n }\r\n </ul>\r\n @if(isServiceAtivo()){\r\n <div class=\"w-full text-xs flex items-center justify-end\">\r\n <ion-checkbox [ngModel]=\"somenteAtivos()\" (ngModelChange)=\"somenteAtivos.set($event)\" class=\"scale-75\"> Somente ativos </ion-checkbox>\r\n </div>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #baseOptionTemplate let-item=\"item\" let-index=\"index\">\r\n <li [id]=\"'sion-is-' + index\" class=\"select-item\" [class.disabled]=\"item.disabled\" [attr.aria-selected]=\"index == selectedIndex\" (mouseenter)=\"selectedIndex = index\" (click)=\"Select(item)\">\r\n <div class=\"select-item-checkmark-conteiner\">\r\n @if(item.selected) {\r\n <ion-icon class=\"select-item-checkmark\" color=\"primary\" name=\"checkmark\"></ion-icon>\r\n }\r\n </div>\r\n @if (optionTemplate) {\r\n <ng-container \r\n [ngTemplateOutlet]=\"optionTemplate\"\r\n [ngTemplateOutletContext]=\"{ item: item.item }\">\r\n </ng-container>\r\n }\r\n @else {\r\n <span class=\"select-item-label\"> {{item.label}} </span>\r\n }\r\n </li>\r\n</ng-template>", styles: [".input-container{cursor:pointer!important}.input-select-label{pointer-events:none;min-height:1.5rem;width:100%;outline:2px solid transparent;outline-offset:2px;color:var(--ion-color-dark)}.select-content{display:flex;height:18rem;width:100%;flex-direction:column;gap:.25rem;overflow:hidden;padding:.25rem}.select-content .select-search-bar-container{display:flex;width:100%;flex-shrink:1}.select-content .select-search-bar-container .select-search-bar-icon-container{display:flex;height:100%;width:1.75rem;align-items:center;justify-content:center;border-top-left-radius:.375rem;border-bottom-left-radius:.375rem;border-width:1px}.select-content .select-search-bar-container .select-search-bar{width:100%;flex-shrink:1;border-radius:.375rem;border-width:1px;background-color:transparent;padding-left:.5rem;padding-right:.5rem;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}@media (orientation: portrait){.select-content .select-search-bar-container .select-search-bar{height:2.5rem}}@media (orientation: landscape){.select-content .select-search-bar-container .select-search-bar{height:1.75rem}}.select-item-list{width:100%;height:100%;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.select-item-list .select-item{color:var(--ion-color-dark);display:flex;width:100%;flex-shrink:0;align-items:center;justify-content:flex-start;border-radius:.375rem;padding-right:.5rem}@media (orientation: portrait){.select-item-list .select-item{min-height:2.5rem}}@media (orientation: landscape){.select-item-list .select-item{min-height:2rem}}.select-item-list .select-item{cursor:pointer}.select-item-list .select-item.disabled{opacity:.5;pointer-events:none}.select-item-list .select-item:hover,.select-item-list .select-item:focus,.select-item-list .select-item[aria-selected=true]{background-color:color-mix(in srgb,var(--ion-color-dark) 20%,transparent)}.select-item-list .select-item .select-item-checkmark-conteiner{display:flex;height:100%;width:1.75rem;flex-shrink:0;align-items:center;justify-content:center}.select-item-list .select-item .select-item-label{width:100%}\n", "@property --input-color{syntax: \"<color>\"; initial-value: transparent; inherits: false;}.input-container{position:relative;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));cursor:text;border-radius:.75rem;padding:.25rem .75rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition:--input-color .2s ease-in-out,box-shadow .2s ease-in-out,opacity .2s ease-in-out,filter .2s ease-in-out;--color: var(--ion-color-dark);--input-color: var(--input-background, var(--ion-color-step-250));--shadow: 0 3px 4px -1px rgb(0 0 0 / .1);--inset-shadow: var(--input-color) 0px 1.75px 1px 0px inset;--focused-shadow: 0 0 1px 2px color-mix(in srgb, var(--ion-color-medium) 35%, transparent);box-shadow:var(--inset-shadow),var(--shadow);will-change:box-shadow,filter opacity;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;background:radial-gradient(ellipse at 0px top,hsl(from var(--input-color) h s l/.5),hsl(from var(--input-color) h s l/.4)),hsl(from var(--ion-color-light) h s l/.8)}.input-container:hover{--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container:focus-within,.input-container:focus,.input-container.manual-focus{box-shadow:var(--inset-shadow),var(--shadow),var(--focused-shadow);--tw-brightness: brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container .input-label{pointer-events:none;display:flex;height:1rem;width:100%;min-width:0px;max-width:100%;align-items:center;justify-content:flex-start;gap:.25rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;line-height:1rem;color:var(--color)}.input-container input,.input-container textarea{height:1.5rem;width:100%;border-radius:.375rem;background-color:transparent;font-size:.875rem;line-height:1.25rem;color:var(--ion-color-dark);outline:2px solid transparent;outline-offset:2px}.input-container.loading{cursor:wait!important}.input-container.required .input-label:after{content:\"*\";color:var(--ion-color-danger);vertical-align:bottom}.input-container.submitted.invalid{--input-color: color-mix(in srgb, var(--ion-color-danger) 50%, transparent)}.input-container.disabled{cursor:not-allowed;opacity:.5;--tw-brightness: brightness(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.input-container.disabled *{pointer-events:none}.loading-container{position:absolute;pointer-events:none;width:100%;height:100%;top:0;left:0;display:flex;justify-content:end;align-items:center;padding-right:.5rem;will-change:opacity;transition:opacity .2s ease-in-out;overflow:hidden;opacity:0;z-index:10}.loading-container ion-spinner{will-change:transform;transition:transform .2s ease-in-out;transform:translateY(-100%)}.loading-container.loading{opacity:1}.loading-container.loading ion-spinner{transform:translateY(0)}ion-modal::part(content){border-radius:.75rem;border:1px solid var(--ion-color-step-250)}\n"] }]
252
252
  }], ctorParameters: () => [], propDecorators: { labelTemplate: [{
253
253
  type: ContentChild,
254
254
  args: [SIonLabelTemplateDirective, { read: TemplateRef }]
@@ -289,4 +289,4 @@ class ItemValue {
289
289
  function isPortrait() {
290
290
  return window.innerHeight > window.innerWidth;
291
291
  }
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtc2VsZWN0L2lucHV0LXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LXNlbGVjdC9pbnB1dC1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBb0IsS0FBSyxFQUFlLEtBQUssRUFBZSxNQUFNLEVBQVUsV0FBVyxFQUFFLFNBQVMsR0FBbUIsTUFBTSxlQUFlLENBQUM7QUFDdE8sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFekQsT0FBTyxFQUE4QixnQ0FBZ0MsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2hJLE9BQU8sRUFBeUIsMkJBQTJCLEVBQUUsTUFBTSw2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QVM7SUFBZjtRQUdFLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztJQUM1QixDQUFDO0NBQUE7QUFFRCxTQUFTLFVBQVU7SUFDakIsT0FBTyxNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgY29tcHV0ZWQsIENvbnRlbnRDaGlsZCwgZWZmZWN0LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIGluamVjdCwgSW5qZWN0b3IsIGlucHV0LCBJbnB1dFNpZ25hbCwgbW9kZWwsIE1vZGVsU2lnbmFsLCBzaWduYWwsIFNpZ25hbCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgV3JpdGFibGVTaWduYWwsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJb25Nb2RhbCB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcclxuXHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJpbmRMYWJlbEZhY3RvcnksIEJpbmRWYWx1ZUZhY3RvcnksIElucHV0U2VsZWN0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vaW5wdXQuc2VsZWN0LmNvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBTSW9uUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BvcG92ZXIvc2lvbi1wb3BvdmVyL3Npb24tcG9wb3Zlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJbnB1dFByb3ZpZGVyRmFjdG9yeSB9IGZyb20gJy4uL2lucHV0LXByb3ZpZGVyLWZhY3RvcnknO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dCB9IGZyb20gJy4uL2N1c3RvbS1pbnB1dCc7XHJcbmltcG9ydCB7IFNlYXJjaCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgUGxhY2Vob2xkZXJUZW1wbGF0ZUNvbnRleHQsIFNJb25QbGFjZWhvbGRlclRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3Npb24tcGxhY2Vob2xkZXItdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgT3B0aW9uVGVtcGxhdGVDb250ZXh0LCBTSW9uT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2lvbi1vcHRpb24tdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgTGFiZWxUZW1wbGF0ZUNvbnRleHQsIFNJb25MYWJlbFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3Npb24tbGFiZWwtdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2VBdGl2byB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3dlYi9odHRwLmF0aXZvLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpbnB1dC1zZWxlY3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2lucHV0LXNlbGVjdC5jb21wb25lbnQuc2NzcycsICcuLi9pbnB1dHMuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogWy4uLklucHV0UHJvdmlkZXJGYWN0b3J5LkdldFByb3ZpZGVycyhJbnB1dFNlbGVjdENvbXBvbmVudCldLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRTZWxlY3RDb21wb25lbnQ8VCA9IGFueT4gZXh0ZW5kcyBDdXN0b21JbnB1dDxUIHwgVFtdPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAvKiogSXRlbXMgZGlzcG9uw612ZWlzIG5vIHNlbGVjdCAqL1xyXG4gIGl0ZW1zICAgICAgICAgICAgOiBNb2RlbFNpZ25hbDxhbnlbXT4gICAgICAgICAgICAgICAgICAgICAgPSBtb2RlbDxhbnlbXT4oW10pO1xyXG4gIC8qKiBDb25maWd1cmHDp8OjbyBkbyBzZWxlY3QgKi9cclxuICBjb25maWd1cmF0aW9uICAgIDogSW5wdXRTaWduYWw8SW5wdXRTZWxlY3RDb25maWd1cmF0aW9uPiA9IGlucHV0PElucHV0U2VsZWN0Q29uZmlndXJhdGlvbj4obmV3IElucHV0U2VsZWN0Q29uZmlndXJhdGlvbigpKTsgXHJcbiAgbG9hZGluZ0Zyb21Mb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY3VycmVudExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgY3VycmVudEl0ZW1zIDogYW55IHwgSXRlbVZhbHVlPGFueT5bXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBcclxuICBTZXRDdXJyZW50SXRlbUxhYmVsKCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5jb25maWd1cmF0aW9uKCkubXVsdGlwbGUpe1xyXG4gICAgICB0aGlzLmN1cnJlbnRMYWJlbCA9IHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpLmZpbHRlcihwID0+IHAuc2VsZWN0ZWQpLm1hcChwID0+IHAubGFiZWwpLmpvaW4oJywgJyk7XHJcbiAgICAgIHRoaXMuY3VycmVudEl0ZW1zID0gdGhpcy5sc3RPcHRpb25zSXRlbVZhbHVlKCkuZmlsdGVyKHAgPT4gcC5zZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLmN1cnJlbnRMYWJlbCA9IHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpLmZpbmQocCA9PiBwLnNlbGVjdGVkKT8ubGFiZWw7XHJcbiAgICAgIHRoaXMuY3VycmVudEl0ZW1zID0gdGhpcy5sc3RPcHRpb25zSXRlbVZhbHVlKCkuZmluZChwID0+IHAuc2VsZWN0ZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbHN0T3B0aW9uc0l0ZW1WYWx1ZTogU2lnbmFsPEl0ZW1WYWx1ZTxhbnk+W10+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgYmluZExhYmVsID0gQmluZExhYmVsRmFjdG9yeSh0aGlzLmNvbmZpZ3VyYXRpb24oKSk7XHJcbiAgICBjb25zdCBiaW5kVmFsdWUgPSBCaW5kVmFsdWVGYWN0b3J5KHRoaXMuY29uZmlndXJhdGlvbigpKTtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zKCkuZmlsdGVyKHAgPT4gKHRoaXMuc29tZW50ZUF0aXZvcygpICYmIHRoaXMuaXNTZXJ2aWNlQXRpdm8oKSkgPyBwLmF0aXZvIDogdHJ1ZSkgLm1hcChwID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IG5ldyBJdGVtVmFsdWU8YW55PigpO1xyXG4gICAgICBpdGVtLmxhYmVsID0gYmluZExhYmVsKHApO1xyXG4gICAgICBpdGVtLnZhbHVlID0gYmluZFZhbHVlKHApO1xyXG4gICAgICBpdGVtLml0ZW0gID0gcDtcclxuICAgICAgaXRlbS5zZWxlY3RlZCA9IHRoaXMudmFsdWUoKSA9PSBpdGVtLnZhbHVlO1xyXG4gICAgICBpdGVtLmRpc2FibGVkID0gcC5kaXNhYmxlZCB8fCBmYWxzZSB8fCAodGhpcy5pc1NlcnZpY2VBdGl2byAmJiBwLmF0aXZvID09IGZhbHNlKTtcclxuICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgbHN0T3B0aW9uczogSXRlbVZhbHVlPGFueT5bXSA9IFtdO1xyXG4gIFVwZGF0ZUxzdE9wdGlvbnMoc2VhcmNoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIC8vIFVwZGF0ZSB0aGUgc2VhcmNoIFxyXG4gICAgaWYgKHNlYXJjaCkge1xyXG4gICAgICB0aGlzLmxzdE9wdGlvbnMgPSBTZWFyY2g8SXRlbVZhbHVlPGFueT4+KHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpLCBzZWFyY2gsIChpdGVtOiBJdGVtVmFsdWU8YW55PikgPT4gaXRlbS5sYWJlbCk7XHJcbiAgICB9IGVsc2UgeyBcclxuICAgICAgdGhpcy5sc3RPcHRpb25zID0gdGhpcy5sc3RPcHRpb25zSXRlbVZhbHVlKCk7IFxyXG4gICAgfVxyXG4gIH1cclxuICBVcGRhdGVTZWxlY3RlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSl7XHJcbiAgICAgIGNvbnN0IGFyciA9IHRoaXMudmFsdWUoKSBhcyBhbnlbXSB8fCBbXTtcclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubHN0T3B0aW9ucykge1xyXG4gICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBhcnIuZmluZChwID0+IHAgPT0gaXRlbS52YWx1ZSkgIT0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxzdE9wdGlvbnMuZm9yRWFjaCgoaXRlbTogSXRlbVZhbHVlPGFueT4pID0+IHsgaXRlbS5zZWxlY3RlZCA9IHRoaXMudmFsdWUoKSA9PSBpdGVtLnZhbHVlOyB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuU2V0Q3VycmVudEl0ZW1MYWJlbCgpO1xyXG4gIH1cclxuXHJcbiAgQENvbnRlbnRDaGlsZChTSW9uTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSAgICAgICwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBsYWJlbFRlbXBsYXRlICAgICAgOiBUZW1wbGF0ZVJlZjxMYWJlbFRlbXBsYXRlQ29udGV4dDxUPj47XHJcbiAgQENvbnRlbnRDaGlsZChTSW9uT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmUgICAgICwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBvcHRpb25UZW1wbGF0ZSAgICAgOiBUZW1wbGF0ZVJlZjxPcHRpb25UZW1wbGF0ZUNvbnRleHQ8VD4+O1xyXG4gIEBDb250ZW50Q2hpbGQoU0lvblBsYWNlaG9sZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcGxhY2Vob2xkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8UGxhY2Vob2xkZXJUZW1wbGF0ZUNvbnRleHQ+O1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRDb250YWluZXInKSBpbnB1dENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRTZWxlY3RMYWJlbCcpIGlucHV0U2VsZWN0TGFiZWw6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIG92ZXJyaWRlIGZvY3VzKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7IH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IFxyXG4gICAgc3VwZXIoKTsgXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICB0aGlzLlVwZGF0ZUxzdE9wdGlvbnModGhpcy5zZWFyY2hWYWx1ZSgpKTtcclxuICAgICAgdGhpcy5VcGRhdGVTZWxlY3RlZCgpO1xyXG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KSBcclxuICB9XHJcbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9uKCkubG9hZGVyLkFkZENvbXBvbmVudCh0aGlzKTtcclxuICAgIHRoaXMuY29uZmlndXJhdGlvbigpLmxvYWRlci5SZWZyZXNoKHRoaXMuaXRlbXMoKSk7XHJcbiAgfVxyXG4gIGlzU2VydmljZUF0aXZvOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiB7IHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24oKS5sb2FkRnJvbVNlcnZpY2UgaW5zdGFuY2VvZiBIdHRwU2VydmljZUF0aXZvOyB9KTtcclxuICBzb21lbnRlQXRpdm9zOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgSGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgLy8gWyBQb3BvdmVyIF1cclxuICAgIGlmKHRoaXMuc2VsZWN0Q29udGVudD8ubmF0aXZlRWxlbWVudD8uY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKXtcclxuICAgICAgaWYoZXZlbnQua2V5ID09IFwiVGFiXCIpe1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYgKGV2ZW50LmtleSA9PSBcIkVzY2FwZVwiKXtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIHRoaXMuRGlzbWlzcygpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gWyBpbnB1dENvbnRhaW5lciBdXHJcbiAgICBpZih0aGlzLmlucHV0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKXsgXHJcbiAgICAgIGlmKFtcIkFycm93RG93blwiLCBcIkFycm93VXBcIl0uaW5jbHVkZXMoZXZlbnQua2V5KSl7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLlByZXNlbnQoZXZlbnQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gWyBpbnB1dFNlbGVjdFNlYXJjaEJhciBdXHJcbiAgICBpZih0aGlzLmlucHV0U2VhcmNoQmFyLm5hdGl2ZUVsZW1lbnQgPT0gZXZlbnQudGFyZ2V0KXtcclxuICAgICAgaWYoZXZlbnQua2V5ID09IFwiRW50ZXJcIil7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAvLyBJZiB0aGUgc2VsZWN0IGlzIG5vdCBhdGl2byBpZ25vcmUgdGhlIHNlbGVjdGVkIGl0ZW1cclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5sc3RPcHRpb25zW3RoaXMuc2VsZWN0ZWRJbmRleCFdO1xyXG4gICAgICAgIGlmKHRoaXMuaXNTZXJ2aWNlQXRpdm8oKSAmJiAhaXRlbS5pdGVtLmF0aXZvKSB7IHJldHVybjsgfVxyXG4gICAgICAgIHRoaXMuU2VsZWN0KGl0ZW0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIFxyXG4gICAgICBpZihldmVudC5rZXkgPT0gXCJBcnJvd0Rvd25cIil7XHJcbiAgICAgICAgaWYodGhpcy5zZWxlY3RlZEluZGV4ID09IHVuZGVmaW5lZCl7IHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7IHJldHVybjsgfVxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gKHRoaXMuc2VsZWN0ZWRJbmRleCA8IHRoaXMubHN0T3B0aW9ucy5sZW5ndGggLSAxID8gdGhpcy5zZWxlY3RlZEluZGV4ICsgMSA6IHRoaXMuc2VsZWN0ZWRJbmRleClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBcclxuICAgICAgaWYoZXZlbnQua2V5ID09IFwiQXJyb3dVcFwiKXtcclxuICAgICAgICBpZih0aGlzLnNlbGVjdGVkSW5kZXggPT0gdW5kZWZpbmVkKXsgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDsgcmV0dXJuOyB9XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAodGhpcy5zZWxlY3RlZEluZGV4ID4gMCA/IHRoaXMuc2VsZWN0ZWRJbmRleCAtIDEgOiB0aGlzLnNlbGVjdGVkSW5kZXgpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlbGVjdGVkSW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgLy9bIFNlYXJjaCBCYXIgXVxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0U2VhcmNoQmFyJykgaW5wdXRTZWFyY2hCYXI6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgc2VhcmNoQmFyQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gIHNlYXJjaFZhbHVlICAgICA6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz4gPSAgc2lnbmFsPHN0cmluZz4oXCJcIik7XHJcbiAgcHJpdmF0ZSBzZWFyY2hCYXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHB1YmxpYyBkZXN0cm95ZWQ6IGJvb2xlYW4gPSBmYWxzZVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBvYnNlcnZhYmxlID0gdGhpcy5zZWFyY2hCYXJDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgKVxyXG4gICAgdGhpcy5zZWFyY2hCYXJTdWJzY3JpcHRpb24gPSBvYnNlcnZhYmxlLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4geyBcclxuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLnNlYXJjaFZhbHVlLnNldCh2YWx1ZSk7IFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBDbGVhclNlYXJjaEJhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoQmFyU3Vic2NyaXB0aW9uKSB7IHRoaXMuc2VhcmNoQmFyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5DbGVhclNlYXJjaEJhcigpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZShvYmo6IFQgfCBUW10pOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnZhbHVlLnNldChvYmopO1xyXG4gICAgdGhpcy5ydW5WYWxpZGF0aW9uKCk7XHJcbiAgICB0aGlzLlVwZGF0ZVNlbGVjdGVkKCk7XHJcbiAgfVxyXG4gIFxyXG4gIG92ZXJyaWRlIFNldFZhbHVlKG9iajogVCB8IFRbXSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZS5zZXQob2JqKTtcclxuICAgIHRoaXMucnVuVmFsaWRhdGlvbigpO1xyXG4gICAgdGhpcy5VcGRhdGVTZWxlY3RlZCgpO1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy52YWx1ZSgpKTtcclxuICAgIGlmKCF0aGlzLmNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSl7XHJcbiAgICAgIHRoaXMuRGlzbWlzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBDbGVhcihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSl7XHJcbiAgICAgIHRoaXMuU2V0VmFsdWUoW10pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuU2V0VmFsdWUodW5kZWZpbmVkKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIFNlbGVjdChpdGVtVmFsdWU6IEl0ZW1WYWx1ZTxUPik6IHZvaWR7XHJcbiAgICBjb25zdCBpdGVtID0gaXRlbVZhbHVlLnZhbHVlO1xyXG4gICAgaWYodGhpcy5jb25maWd1cmF0aW9uKCkubXVsdGlwbGUpe1xyXG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnZhbHVlKCk7XHJcbiAgICAgIGlmKEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSl7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBjdXJyZW50VmFsdWUuZmluZEluZGV4KHAgPT4gcCA9PSBpdGVtKTtcclxuICAgICAgICBpZihpbmRleCA+IC0xKXtcclxuICAgICAgICAgIGN1cnJlbnRWYWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjdXJyZW50VmFsdWUucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5TZXRWYWx1ZShbLi4uY3VycmVudFZhbHVlXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5TZXRWYWx1ZShbaXRlbV0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLlNldFZhbHVlKGl0ZW0pO1xyXG4gICAgICB0aGlzLkRpc21pc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBbIFBvcG92ZXIgLyBNb2RhbCBdXHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0Q29udGVudCcpIHNlbGVjdENvbnRlbnQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoU0lvblBvcG92ZXJDb21wb25lbnQpIHBvcG92ZXI6IFNJb25Qb3BvdmVyQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoSW9uTW9kYWwpICAgICAgICAgICAgICAgbW9kYWw6IElvbk1vZGFsO1xyXG5cclxuICBmbG9hdGluZ1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYXN5bmMgUHJlc2VudChldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmKGlzUG9ydHJhaXQoKSl7XHJcbiAgICAgIC8vIE1vZGFsXHJcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwucHJlc2VudCgpO1xyXG4gICAgICB0aGlzLmlucHV0U2VhcmNoQmFyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gUG9wb3ZlclxyXG4gICAgYXdhaXQgdGhpcy5wb3BvdmVyLnByZXNlbnQoZXZlbnQpO1xyXG4gICAgdGhpcy5pbnB1dFNlYXJjaEJhci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG4gIGFzeW5jIERpc21pc3MoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZih0aGlzLm1vZGFsKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuZGlzbWlzcygpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5wb3BvdmVyKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucG9wb3Zlci5kaXNtaXNzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB1bmRlZmluZWQ7XHJcbiAgICBpZih0aGlzLmlucHV0U2VsZWN0TGFiZWw/Lm5hdGl2ZUVsZW1lbnQpeyBcclxuICAgICAgdGhpcy5pbnB1dFNlbGVjdExhYmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgT25EaXNtaXNzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mbG9hdGluZ1Zpc2libGUgPSBmYWxzZTsgXHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlLnNldCgnJyk7XHJcbiAgICB0aGlzLnNlYXJjaEJhckNvbnRyb2wuc2V0VmFsdWUoJycpO1xyXG4gIH1cclxuICBPblByZXNlbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZsb2F0aW5nVmlzaWJsZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBpc0FycmF5KG9iaiA6IGFueSApIHtcclxuICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKVxyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgSXRlbVZhbHVlPFQ+e1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgdmFsdWU6IFQ7XHJcbiAgc2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpdGVtICAgIDogYW55OyBcclxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1BvcnRyYWl0KCkge1xyXG4gIHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQgPiB3aW5kb3cuaW5uZXJXaWR0aDtcclxufSIsIjxkaXYgXHJcbiAgI2lucHV0Q29udGFpbmVyXHJcbiAgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIiBcclxuICAoY2xpY2spPVwiZm9jdXMoJGV2ZW50KTsgUHJlc2VudCgkZXZlbnQpXCJcclxuICBbY2xhc3MucmVxdWlyZWRdPVwicmVxdWlyZWQoKVwiIFxyXG4gIFtjbGFzcy5zdWJtaXR0ZWRdPVwic3VibWl0dGVkKClcIiBcclxuICBbY2xhc3MubWFudWFsLWZvY3VzXT1cImZsb2F0aW5nVmlzaWJsZVwiXHJcbiAgW2NsYXNzLmludmFsaWRdPVwiaW52YWxpZFwiIFxyXG4gIFtjbGFzcy5kaXNhYmxlZF09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0Zyb21Mb2FkZXIgfHwgZGlzYWJsZWQoKVwiXHJcbiAgW2NsYXNzLmxvYWRpbmddPVwibG9hZGluZygpIHx8IGxvYWRpbmdGcm9tTG9hZGVyXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1sYWJlbFwiPiBcclxuICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGVcIj5cclxuICAgICAge3tsYWJlbCgpfX0gXHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPGRpdiBjbGFzcz1cInctZnVsbCB0cnVuY2F0ZSBvdXRsaW5lLW5vbmVcIiBbY2xhc3MucHItN109XCIhY29uZmlndXJhdGlvbigpLmNsZWFyYWJsZVwiIFtjbGFzcy5wci0xMF09XCJjb25maWd1cmF0aW9uKCkuY2xlYXJhYmxlXCIgICNpbnB1dFNlbGVjdExhYmVsIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgQGlmICghY29uZmlndXJhdGlvbigpLm11bHRpcGxlICYmIGN1cnJlbnRMYWJlbCl7XHJcbiAgICAgIEBpZihsYWJlbFRlbXBsYXRlKXtcclxuICAgICAgICA8bmctY29udGFpbmVyIFxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxUZW1wbGF0ZVwiXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGN1cnJlbnRMYWJlbCwgaXRlbTogY3VycmVudEl0ZW1zLml0ZW0gfVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICB9XHJcbiAgICAgIEBlbHNlIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LXNlbGVjdC1sYWJlbFwiPiB7e2N1cnJlbnRMYWJlbH19IDwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgQGVsc2UgaWYgKGNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSAmJiBpc0FycmF5KGN1cnJlbnRJdGVtcykgJiYgJGFueShjdXJyZW50SXRlbXMpLmxlbmd0aCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LXgtYXV0byBmbGV4IGdhcC0yIHNpemUtZnVsbCBtYXNrLXgvMlwiPlxyXG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBjdXJyZW50SXRlbXM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJhbnNsdWNpZC1ib3JkZXIgcm91bmRlZC1sZyBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBwbC0yXCI+XHJcbiAgICAgICAgICAgICAgQGlmKGxhYmVsVGVtcGxhdGUpe1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBcclxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbS5sYWJlbCwgaXRlbTogaXRlbS5pdGVtIH1cIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LXNlbGVjdC1sYWJlbFwiPiB7e2l0ZW0ubGFiZWx9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC1mdWxsIGFzcGVjdC1zcXVhcmUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiU2VsZWN0KGl0ZW0pOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiBjb2xvcj1cImRhbmdlclwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS0gPGlvbi1idXR0b24gY2xhc3M9XCJtLTAgaC1mdWxsXCIgKGNsaWNrKT1cIlNlbGVjdChpdGVtLnZhbHVlKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgY29sb3I9XCJtZWRpdW1cIiBzaXplPVwic21hbGxcIiBmaWxsPVwib3V0bGluZVwiIHN0eWxlPVwiLS1ib3JkZXItcmFkaXVzOiAuNXJlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiIGNvbG9yPVwiZGFuZ2VyXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gICAgQGVsc2Uge1xyXG4gICAgICBAaWYocGxhY2Vob2xkZXJUZW1wbGF0ZSl7XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBsYWNlaG9sZGVyVGVtcGxhdGVcIlxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB0aGlzLmNvbmZpZ3VyYXRpb24oKS5wbGFjZWhvbGRlciwgcGxhY2Vob2xkZXI6IHRoaXMuY29uZmlndXJhdGlvbigpLnBsYWNlaG9sZGVyIH1cIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgfVxyXG4gICAgICBAZWxzZSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1zZWxlY3QtbGFiZWwgIXRleHQtbWVkaXVtXCI+IHt7dGhpcy5jb25maWd1cmF0aW9uKCkucGxhY2Vob2xkZXJ9fSA8L3NwYW4+XHJcbiAgICAgIH1cclxuICAgIH1cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImFic29sdXRlIGJvdHRvbS0xIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNpemUtN1wiIFtjbGFzcy5yaWdodC0xXT1cIiFjb25maWd1cmF0aW9uKCkuY2xlYXJhYmxlXCIgW2NsYXNzLnJpZ2h0LThdPVwiY29uZmlndXJhdGlvbigpLmNsZWFyYWJsZVwiPlxyXG4gICAgPGlvbi1pY29uIGNsYXNzPVwiLW1iLTAuNVwiIG5hbWU9XCJjaGV2cm9uLXVwXCI+PC9pb24taWNvbj5cclxuICAgIDxpb24taWNvbiBjbGFzcz1cIi1tdC0wLjVcIiBuYW1lPVwiY2hldnJvbi1kb3duXCI+PC9pb24taWNvbj5cclxuICA8L2Rpdj5cclxuICBAaWYoY29uZmlndXJhdGlvbigpLmNsZWFyYWJsZSl7XHJcbiAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cImFic29sdXRlIHJpZ2h0LTEgYm90dG9tLTFcIiAoY2xpY2spPVwiQ2xlYXIoJGV2ZW50KVwiIGNvbG9yPVwibWVkaXVtXCIgc2l6ZT1cInNtYWxsXCIgZmlsbD1cImNsZWFyXCIgc3R5bGU9XCItLWJvcmRlci1yYWRpdXM6IC41cmVtXCI+XHJcbiAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cclxuICAgIDwvaW9uLWJ1dHRvbj5cclxuICB9IFxyXG5cclxuICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250YWluZXJcIiBbY2xhc3MubG9hZGluZ109XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0Zyb21Mb2FkZXJcIj5cclxuICAgIDxpb24tc3Bpbm5lcj48L2lvbi1zcGlubmVyPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxpb24tbW9kYWwgI21vZGFsIChpb25Nb2RhbFdpbGxQcmVzZW50KT1cIk9uUHJlc2VudCgpXCIgKGRpZERpc21pc3MpPVwiT25EaXNtaXNzKClcIiBzdHlsZT1cIi0td2lkdGg6IDkwJTsgLS1oZWlnaHQ6IDkwJTtcIiBba2VlcENvbnRlbnRzTW91bnRlZF09XCJ0cnVlXCI+XHJcbiAgPG5nLXRlbXBsYXRlPlxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3RDb250ZW50VGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBtb2RhbDogdHJ1ZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9pb24tbW9kYWw+XHJcblxyXG48c2lvbi1wb3BvdmVyIFxyXG4gICAgI3BvcG92ZXIgXHJcbiAgICBbd2lkdGhdPVwiaW5wdXRDb250YWluZXIub2Zmc2V0V2lkdGggKyAncHgnXCIgXHJcbiAgICAob25XaWxsUHJlc2VudCk9XCJPblByZXNlbnQoKVwiIFxyXG4gICAgKG9uRGlkRGlzbWlzcyk9XCJPbkRpc21pc3MoKVwiIFxyXG4gICAgW2FuY2hvcl09XCJpbnB1dENvbnRhaW5lclwiIFxyXG4gICAgW3BsYWNlbWVudF09XCJjb25maWd1cmF0aW9uKCkucG9wb3ZlckNvbmZpZ3VyYXRpb24ucGxhY2VtZW50XCIgXHJcbiAgICBbZmxpcF09XCJjb25maWd1cmF0aW9uKCkucG9wb3ZlckNvbmZpZ3VyYXRpb24uZmxpcFwiXHJcbiAgPlxyXG4gIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0Q29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbjwvc2lvbi1wb3BvdmVyPlxyXG5cclxuPG5nLXRlbXBsYXRlICNzZWxlY3RDb250ZW50VGVtcGxhdGUgbGV0LW1vZGFsPVwibW9kYWxcIj5cclxuICA8ZGl2ICNzZWxlY3RDb250ZW50IGNsYXNzPVwic2VsZWN0LWNvbnRlbnRcIiBbY2xhc3MuIXNpemUtZnVsbF09XCJtb2RhbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdC1zZWFyY2gtYmFyLWNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXNlYXJjaC1iYXItaWNvbi1jb250YWluZXIgIWJvcmRlci1yLTAgYm9yZGVyLXByaW1hcnkvNzAgYmctcHJpbWFyeS83MCBzaHJpbmstMFwiPlxyXG4gICAgICAgIDxpb24taWNvbiBjb2xvcj1cImRhcmtcIiBuYW1lPVwic2VhcmNoXCI+PC9pb24taWNvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxpbnB1dCAjaW5wdXRTZWFyY2hCYXIgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwic2VsZWN0LXNlYXJjaC1iYXIgYm9yZGVyLXByaW1hcnkvNzAgIXJvdW5kZWQtbC1ub25lXCIgW2Zvcm1Db250cm9sXT1cInNlYXJjaEJhckNvbnRyb2xcIi8+XHJcbiAgICA8L2Rpdj4gXHJcbiAgICA8dWwgY2xhc3M9XCJzZWxlY3QtaXRlbS1saXN0IG1hc2steVwiIHJvbGU9XCJsaXN0Ym94XCIgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cIidzaW9uLWlzLScgKyBzZWxlY3RlZEluZGV4XCI+XHJcbiAgICAgIEBpZihmbG9hdGluZ1Zpc2libGUpe1xyXG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgbHN0T3B0aW9uczsgdHJhY2sgaXRlbS52YWx1ZSkgeyBcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJiYXNlT3B0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW06IGl0ZW0sIGluZGV4OiAkaW5kZXggfVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICA8L3VsPlxyXG4gICAgQGlmKGlzU2VydmljZUF0aXZvKCkpe1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHRleHQteHMgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmRcIj5cclxuICAgICAgICA8aW9uLWNoZWNrYm94IFtuZ01vZGVsXT1cInNvbWVudGVBdGl2b3MoKVwiIChuZ01vZGVsQ2hhbmdlKT1cInNvbWVudGVBdGl2b3Muc2V0KCRldmVudClcIiBjbGFzcz1cInNjYWxlLTc1XCI+IFNvbWVudGUgYXRpdm9zIDwvaW9uLWNoZWNrYm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYmFzZU9wdGlvblRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCI+XHJcbiAgPGxpIFtpZF09XCInc2lvbi1pcy0nICsgaW5kZXhcIiBjbGFzcz1cInNlbGVjdC1pdGVtXCIgW2NsYXNzLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIiBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImluZGV4ID09IHNlbGVjdGVkSW5kZXhcIiAobW91c2VlbnRlcik9XCJzZWxlY3RlZEluZGV4ID0gaW5kZXhcIiAoY2xpY2spPVwiU2VsZWN0KGl0ZW0pXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWl0ZW0tY2hlY2ttYXJrLWNvbnRlaW5lclwiPlxyXG4gICAgICBAaWYoaXRlbS5zZWxlY3RlZCkge1xyXG4gICAgICAgIDxpb24taWNvbiBjbGFzcz1cInNlbGVjdC1pdGVtLWNoZWNrbWFya1wiIGNvbG9yPVwicHJpbWFyeVwiIG5hbWU9XCJjaGVja21hcmtcIj48L2lvbi1pY29uPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZiAob3B0aW9uVGVtcGxhdGUpIHtcclxuICAgICAgPG5nLWNvbnRhaW5lciBcclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25UZW1wbGF0ZVwiXHJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbS5pdGVtIH1cIj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICB9XHJcbiAgICBAZWxzZSB7XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0LWl0ZW0tbGFiZWxcIj4ge3tpdGVtLmxhYmVsfX0gPC9zcGFuPlxyXG4gICAgfVxyXG4gIDwvbGk+XHJcbjwvbmctdGVtcGxhdGU+Il19
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9pbnB1dHMvaW5wdXQtc2VsZWN0L2lucHV0LXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvaW5wdXRzL2lucHV0LXNlbGVjdC9pbnB1dC1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBb0IsS0FBSyxFQUFlLEtBQUssRUFBZSxNQUFNLEVBQVUsV0FBVyxFQUFFLFNBQVMsR0FBbUIsTUFBTSxlQUFlLENBQUM7QUFDdE8sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFekQsT0FBTyxFQUE4QixnQ0FBZ0MsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2hJLE9BQU8sRUFBeUIsMkJBQTJCLEVBQUUsTUFBTSw2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QVM7SUFBZjtRQUdFLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztJQUM1QixDQUFDO0NBQUE7QUFFRCxTQUFTLFVBQVU7SUFDakIsT0FBTyxNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgY29tcHV0ZWQsIENvbnRlbnRDaGlsZCwgZWZmZWN0LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIGluamVjdCwgSW5qZWN0b3IsIGlucHV0LCBJbnB1dFNpZ25hbCwgbW9kZWwsIE1vZGVsU2lnbmFsLCBzaWduYWwsIFNpZ25hbCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgV3JpdGFibGVTaWduYWwsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJb25Nb2RhbCB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcclxuXHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJpbmRMYWJlbEZhY3RvcnksIEJpbmRWYWx1ZUZhY3RvcnksIElucHV0U2VsZWN0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vaW5wdXQuc2VsZWN0LmNvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBTSW9uUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BvcG92ZXIvc2lvbi1wb3BvdmVyL3Npb24tcG9wb3Zlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBJbnB1dFByb3ZpZGVyRmFjdG9yeSB9IGZyb20gJy4uL2lucHV0LXByb3ZpZGVyLWZhY3RvcnknO1xyXG5pbXBvcnQgeyBDdXN0b21JbnB1dCB9IGZyb20gJy4uL2N1c3RvbS1pbnB1dCc7XHJcbmltcG9ydCB7IFNlYXJjaCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHsgUGxhY2Vob2xkZXJUZW1wbGF0ZUNvbnRleHQsIFNJb25QbGFjZWhvbGRlclRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3Npb24tcGxhY2Vob2xkZXItdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgT3B0aW9uVGVtcGxhdGVDb250ZXh0LCBTSW9uT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2lvbi1vcHRpb24tdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgTGFiZWxUZW1wbGF0ZUNvbnRleHQsIFNJb25MYWJlbFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3Npb24tbGFiZWwtdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2VBdGl2byB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3dlYi9odHRwLmF0aXZvLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpbnB1dC1zZWxlY3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2lucHV0LXNlbGVjdC5jb21wb25lbnQuc2NzcycsICcuLi9pbnB1dHMuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogWy4uLklucHV0UHJvdmlkZXJGYWN0b3J5LkdldFByb3ZpZGVycyhJbnB1dFNlbGVjdENvbXBvbmVudCldLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5wdXRTZWxlY3RDb21wb25lbnQ8VCA9IGFueT4gZXh0ZW5kcyBDdXN0b21JbnB1dDxUIHwgVFtdPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuICAvKiogSXRlbXMgZGlzcG9uw612ZWlzIG5vIHNlbGVjdCAqL1xyXG4gIGl0ZW1zICAgICAgICAgICAgOiBNb2RlbFNpZ25hbDxhbnlbXT4gICAgICAgICAgICAgICAgICAgICAgPSBtb2RlbDxhbnlbXT4oW10pO1xyXG4gIC8qKiBDb25maWd1cmHDp8OjbyBkbyBzZWxlY3QgKi9cclxuICBjb25maWd1cmF0aW9uICAgIDogSW5wdXRTaWduYWw8SW5wdXRTZWxlY3RDb25maWd1cmF0aW9uPiA9IGlucHV0PElucHV0U2VsZWN0Q29uZmlndXJhdGlvbj4obmV3IElucHV0U2VsZWN0Q29uZmlndXJhdGlvbigpKTsgXHJcbiAgbG9hZGluZ0Zyb21Mb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY3VycmVudExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgY3VycmVudEl0ZW1zIDogYW55IHwgSXRlbVZhbHVlPGFueT5bXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBcclxuICBTZXRDdXJyZW50SXRlbUxhYmVsKCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5jb25maWd1cmF0aW9uKCkubXVsdGlwbGUpe1xyXG4gICAgICB0aGlzLmN1cnJlbnRMYWJlbCA9IHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpLmZpbHRlcihwID0+IHAuc2VsZWN0ZWQpLm1hcChwID0+IHAubGFiZWwpLmpvaW4oJywgJyk7XHJcbiAgICAgIHRoaXMuY3VycmVudEl0ZW1zID0gdGhpcy5sc3RPcHRpb25zSXRlbVZhbHVlKCkuZmlsdGVyKHAgPT4gcC5zZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICB0aGlzLmN1cnJlbnRMYWJlbCA9IHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpLmZpbmQocCA9PiBwLnNlbGVjdGVkKT8ubGFiZWw7XHJcbiAgICAgIHRoaXMuY3VycmVudEl0ZW1zID0gdGhpcy5sc3RPcHRpb25zSXRlbVZhbHVlKCkuZmluZChwID0+IHAuc2VsZWN0ZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbHN0T3B0aW9uc0l0ZW1WYWx1ZTogU2lnbmFsPEl0ZW1WYWx1ZTxhbnk+W10+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgYmluZExhYmVsID0gQmluZExhYmVsRmFjdG9yeSh0aGlzLmNvbmZpZ3VyYXRpb24oKSk7XHJcbiAgICBjb25zdCBiaW5kVmFsdWUgPSBCaW5kVmFsdWVGYWN0b3J5KHRoaXMuY29uZmlndXJhdGlvbigpKTtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zKCkuZmlsdGVyKHAgPT4gKHRoaXMuc29tZW50ZUF0aXZvcygpICYmIHRoaXMuaXNTZXJ2aWNlQXRpdm8oKSkgPyBwLmF0aXZvIDogdHJ1ZSkgLm1hcChwID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IG5ldyBJdGVtVmFsdWU8YW55PigpO1xyXG4gICAgICBpdGVtLmxhYmVsID0gYmluZExhYmVsKHApO1xyXG4gICAgICBpdGVtLnZhbHVlID0gYmluZFZhbHVlKHApO1xyXG4gICAgICBpdGVtLml0ZW0gID0gcDtcclxuICAgICAgaXRlbS5zZWxlY3RlZCA9IHRoaXMudmFsdWUoKSA9PSBpdGVtLnZhbHVlO1xyXG4gICAgICBpdGVtLmRpc2FibGVkID0gcC5kaXNhYmxlZCB8fCBmYWxzZSB8fCAodGhpcy5pc1NlcnZpY2VBdGl2byAmJiBwLmF0aXZvID09IGZhbHNlKTtcclxuICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxuICB9KTtcclxuXHJcbiAgbHN0T3B0aW9uczogSXRlbVZhbHVlPGFueT5bXSA9IFtdO1xyXG4gIFVwZGF0ZUxzdE9wdGlvbnMoc2VhcmNoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIC8vIFVwZGF0ZSB0aGUgc2VhcmNoIFxyXG4gICAgaWYgKHNlYXJjaCkge1xyXG4gICAgICB0aGlzLmxzdE9wdGlvbnMgPSBTZWFyY2g8SXRlbVZhbHVlPGFueT4+KHRoaXMubHN0T3B0aW9uc0l0ZW1WYWx1ZSgpLCBzZWFyY2gsIChpdGVtOiBJdGVtVmFsdWU8YW55PikgPT4gaXRlbS5sYWJlbCk7XHJcbiAgICB9IGVsc2UgeyBcclxuICAgICAgdGhpcy5sc3RPcHRpb25zID0gdGhpcy5sc3RPcHRpb25zSXRlbVZhbHVlKCk7IFxyXG4gICAgfVxyXG4gIH1cclxuICBVcGRhdGVTZWxlY3RlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSl7XHJcbiAgICAgIGNvbnN0IGFyciA9IHRoaXMudmFsdWUoKSBhcyBhbnlbXSB8fCBbXTtcclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubHN0T3B0aW9ucykge1xyXG4gICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBhcnIuZmluZChwID0+IHAgPT0gaXRlbS52YWx1ZSkgIT0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxzdE9wdGlvbnMuZm9yRWFjaCgoaXRlbTogSXRlbVZhbHVlPGFueT4pID0+IHsgaXRlbS5zZWxlY3RlZCA9IHRoaXMudmFsdWUoKSA9PSBpdGVtLnZhbHVlOyB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuU2V0Q3VycmVudEl0ZW1MYWJlbCgpO1xyXG4gIH1cclxuXHJcbiAgQENvbnRlbnRDaGlsZChTSW9uTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSAgICAgICwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBsYWJlbFRlbXBsYXRlICAgICAgOiBUZW1wbGF0ZVJlZjxMYWJlbFRlbXBsYXRlQ29udGV4dDxUPj47XHJcbiAgQENvbnRlbnRDaGlsZChTSW9uT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmUgICAgICwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBvcHRpb25UZW1wbGF0ZSAgICAgOiBUZW1wbGF0ZVJlZjxPcHRpb25UZW1wbGF0ZUNvbnRleHQ8VD4+O1xyXG4gIEBDb250ZW50Q2hpbGQoU0lvblBsYWNlaG9sZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcGxhY2Vob2xkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8UGxhY2Vob2xkZXJUZW1wbGF0ZUNvbnRleHQ+O1xyXG5cclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRDb250YWluZXInKSBpbnB1dENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRTZWxlY3RMYWJlbCcpIGlucHV0U2VsZWN0TGFiZWw6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIG92ZXJyaWRlIGZvY3VzKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7IH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IFxyXG4gICAgc3VwZXIoKTsgXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICB0aGlzLlVwZGF0ZUxzdE9wdGlvbnModGhpcy5zZWFyY2hWYWx1ZSgpKTtcclxuICAgICAgdGhpcy5VcGRhdGVTZWxlY3RlZCgpO1xyXG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KSBcclxuICB9XHJcbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9uKCkubG9hZGVyLkFkZENvbXBvbmVudCh0aGlzKTtcclxuICAgIHRoaXMuY29uZmlndXJhdGlvbigpLmxvYWRlci5SZWZyZXNoKHRoaXMuaXRlbXMoKSk7XHJcbiAgfVxyXG4gIGlzU2VydmljZUF0aXZvOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiB7IHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24oKS5sb2FkRnJvbVNlcnZpY2UgaW5zdGFuY2VvZiBIdHRwU2VydmljZUF0aXZvOyB9KTtcclxuICBzb21lbnRlQXRpdm9zOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgSGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgLy8gWyBQb3BvdmVyIF1cclxuICAgIGlmKHRoaXMuc2VsZWN0Q29udGVudD8ubmF0aXZlRWxlbWVudD8uY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKXtcclxuICAgICAgaWYoZXZlbnQua2V5ID09IFwiVGFiXCIpe1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2VcclxuICAgICAgaWYgKGV2ZW50LmtleSA9PSBcIkVzY2FwZVwiKXtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIHRoaXMuRGlzbWlzcygpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gWyBpbnB1dENvbnRhaW5lciBdXHJcbiAgICBpZih0aGlzLmlucHV0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKXsgXHJcbiAgICAgIGlmKFtcIkFycm93RG93blwiLCBcIkFycm93VXBcIl0uaW5jbHVkZXMoZXZlbnQua2V5KSl7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLlByZXNlbnQoZXZlbnQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gWyBpbnB1dFNlbGVjdFNlYXJjaEJhciBdXHJcbiAgICBpZih0aGlzLmlucHV0U2VhcmNoQmFyLm5hdGl2ZUVsZW1lbnQgPT0gZXZlbnQudGFyZ2V0KXtcclxuICAgICAgaWYoZXZlbnQua2V5ID09IFwiRW50ZXJcIil7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAvLyBJZiB0aGUgc2VsZWN0IGlzIG5vdCBhdGl2byBpZ25vcmUgdGhlIHNlbGVjdGVkIGl0ZW1cclxuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5sc3RPcHRpb25zW3RoaXMuc2VsZWN0ZWRJbmRleCFdO1xyXG4gICAgICAgIGlmKHRoaXMuaXNTZXJ2aWNlQXRpdm8oKSAmJiAhaXRlbS5pdGVtLmF0aXZvKSB7IHJldHVybjsgfVxyXG4gICAgICAgIHRoaXMuU2VsZWN0KGl0ZW0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIFxyXG4gICAgICBpZihldmVudC5rZXkgPT0gXCJBcnJvd0Rvd25cIil7XHJcbiAgICAgICAgaWYodGhpcy5zZWxlY3RlZEluZGV4ID09IHVuZGVmaW5lZCl7IHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7IHJldHVybjsgfVxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gKHRoaXMuc2VsZWN0ZWRJbmRleCA8IHRoaXMubHN0T3B0aW9ucy5sZW5ndGggLSAxID8gdGhpcy5zZWxlY3RlZEluZGV4ICsgMSA6IHRoaXMuc2VsZWN0ZWRJbmRleClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBcclxuICAgICAgaWYoZXZlbnQua2V5ID09IFwiQXJyb3dVcFwiKXtcclxuICAgICAgICBpZih0aGlzLnNlbGVjdGVkSW5kZXggPT0gdW5kZWZpbmVkKXsgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDsgcmV0dXJuOyB9XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAodGhpcy5zZWxlY3RlZEluZGV4ID4gMCA/IHRoaXMuc2VsZWN0ZWRJbmRleCAtIDEgOiB0aGlzLnNlbGVjdGVkSW5kZXgpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlbGVjdGVkSW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgLy9bIFNlYXJjaCBCYXIgXVxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0U2VhcmNoQmFyJykgaW5wdXRTZWFyY2hCYXI6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgc2VhcmNoQmFyQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gIHNlYXJjaFZhbHVlICAgICA6IFdyaXRhYmxlU2lnbmFsPHN0cmluZz4gPSAgc2lnbmFsPHN0cmluZz4oXCJcIik7XHJcbiAgcHJpdmF0ZSBzZWFyY2hCYXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHB1YmxpYyBkZXN0cm95ZWQ6IGJvb2xlYW4gPSBmYWxzZVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBvYnNlcnZhYmxlID0gdGhpcy5zZWFyY2hCYXJDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgKVxyXG4gICAgdGhpcy5zZWFyY2hCYXJTdWJzY3JpcHRpb24gPSBvYnNlcnZhYmxlLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4geyBcclxuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLnNlYXJjaFZhbHVlLnNldCh2YWx1ZSk7IFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBDbGVhclNlYXJjaEJhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoQmFyU3Vic2NyaXB0aW9uKSB7IHRoaXMuc2VhcmNoQmFyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5DbGVhclNlYXJjaEJhcigpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZShvYmo6IFQgfCBUW10pOiB2b2lkIHwgUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnZhbHVlLnNldChvYmopO1xyXG4gICAgdGhpcy5ydW5WYWxpZGF0aW9uKCk7XHJcbiAgICB0aGlzLlVwZGF0ZVNlbGVjdGVkKCk7XHJcbiAgfVxyXG4gIFxyXG4gIG92ZXJyaWRlIFNldFZhbHVlKG9iajogVCB8IFRbXSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZS5zZXQob2JqKTtcclxuICAgIHRoaXMucnVuVmFsaWRhdGlvbigpO1xyXG4gICAgdGhpcy5VcGRhdGVTZWxlY3RlZCgpO1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy52YWx1ZSgpKTtcclxuICAgIGlmKCF0aGlzLmNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSl7XHJcbiAgICAgIHRoaXMuRGlzbWlzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBDbGVhcihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBpZih0aGlzLmNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSl7XHJcbiAgICAgIHRoaXMuU2V0VmFsdWUoW10pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuU2V0VmFsdWUodW5kZWZpbmVkKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIFNlbGVjdChpdGVtVmFsdWU6IEl0ZW1WYWx1ZTxUPik6IHZvaWR7XHJcbiAgICBjb25zdCBpdGVtID0gaXRlbVZhbHVlLnZhbHVlO1xyXG4gICAgaWYodGhpcy5jb25maWd1cmF0aW9uKCkubXVsdGlwbGUpe1xyXG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnZhbHVlKCk7XHJcbiAgICAgIGlmKEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSl7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBjdXJyZW50VmFsdWUuZmluZEluZGV4KHAgPT4gcCA9PSBpdGVtKTtcclxuICAgICAgICBpZihpbmRleCA+IC0xKXtcclxuICAgICAgICAgIGN1cnJlbnRWYWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjdXJyZW50VmFsdWUucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5TZXRWYWx1ZShbLi4uY3VycmVudFZhbHVlXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5TZXRWYWx1ZShbaXRlbV0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLlNldFZhbHVlKGl0ZW0pO1xyXG4gICAgICB0aGlzLkRpc21pc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBbIFBvcG92ZXIgLyBNb2RhbCBdXHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0Q29udGVudCcpIHNlbGVjdENvbnRlbnQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoU0lvblBvcG92ZXJDb21wb25lbnQpIHBvcG92ZXI6IFNJb25Qb3BvdmVyQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoSW9uTW9kYWwpICAgICAgICAgICAgICAgbW9kYWw6IElvbk1vZGFsO1xyXG5cclxuICBmbG9hdGluZ1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYXN5bmMgUHJlc2VudChldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmKGlzUG9ydHJhaXQoKSl7XHJcbiAgICAgIC8vIE1vZGFsXHJcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwucHJlc2VudCgpO1xyXG4gICAgICB0aGlzLmlucHV0U2VhcmNoQmFyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gUG9wb3ZlclxyXG4gICAgYXdhaXQgdGhpcy5wb3BvdmVyLnByZXNlbnQoZXZlbnQpO1xyXG4gICAgdGhpcy5pbnB1dFNlYXJjaEJhci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG4gIGFzeW5jIERpc21pc3MoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZih0aGlzLm1vZGFsKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuZGlzbWlzcygpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5wb3BvdmVyKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucG9wb3Zlci5kaXNtaXNzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB1bmRlZmluZWQ7XHJcbiAgICBpZih0aGlzLmlucHV0U2VsZWN0TGFiZWw/Lm5hdGl2ZUVsZW1lbnQpeyBcclxuICAgICAgdGhpcy5pbnB1dFNlbGVjdExhYmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgT25EaXNtaXNzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5mbG9hdGluZ1Zpc2libGUgPSBmYWxzZTsgXHJcbiAgICB0aGlzLnNlYXJjaFZhbHVlLnNldCgnJyk7XHJcbiAgICB0aGlzLnNlYXJjaEJhckNvbnRyb2wuc2V0VmFsdWUoJycpO1xyXG4gIH1cclxuICBPblByZXNlbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZsb2F0aW5nVmlzaWJsZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBpc0FycmF5KG9iaiA6IGFueSApIHtcclxuICAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKVxyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgSXRlbVZhbHVlPFQ+e1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgdmFsdWU6IFQ7XHJcbiAgc2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpdGVtICAgIDogYW55OyBcclxuICBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1BvcnRyYWl0KCkge1xyXG4gIHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQgPiB3aW5kb3cuaW5uZXJXaWR0aDtcclxufSIsIjxkaXYgXHJcbiAgI2lucHV0Q29udGFpbmVyXHJcbiAgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIiBcclxuICAoY2xpY2spPVwiZm9jdXMoJGV2ZW50KTsgUHJlc2VudCgkZXZlbnQpXCJcclxuICBbY2xhc3MucmVxdWlyZWRdPVwicmVxdWlyZWQoKVwiIFxyXG4gIFtjbGFzcy5zdWJtaXR0ZWRdPVwic3VibWl0dGVkKClcIiBcclxuICBbY2xhc3MubWFudWFsLWZvY3VzXT1cImZsb2F0aW5nVmlzaWJsZVwiXHJcbiAgW2NsYXNzLmludmFsaWRdPVwiaW52YWxpZFwiIFxyXG4gIFtjbGFzcy5kaXNhYmxlZF09XCJsb2FkaW5nKCkgfHwgbG9hZGluZ0Zyb21Mb2FkZXIgfHwgZGlzYWJsZWQoKVwiXHJcbiAgW2NsYXNzLmxvYWRpbmddPVwibG9hZGluZygpIHx8IGxvYWRpbmdGcm9tTG9hZGVyXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1sYWJlbFwiPiBcclxuICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGVcIj5cclxuICAgICAge3tsYWJlbCgpfX0gXHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPGRpdiBjbGFzcz1cInctZnVsbCB0cnVuY2F0ZSBvdXRsaW5lLW5vbmVcIiBbY2xhc3MucHItN109XCIhY29uZmlndXJhdGlvbigpLmNsZWFyYWJsZVwiIFtjbGFzcy5wci0xMF09XCJjb25maWd1cmF0aW9uKCkuY2xlYXJhYmxlXCIgICNpbnB1dFNlbGVjdExhYmVsIHRhYmluZGV4PVwiMFwiPlxyXG4gICAgQGlmICghY29uZmlndXJhdGlvbigpLm11bHRpcGxlICYmIGN1cnJlbnRMYWJlbCl7XHJcbiAgICAgIEBpZihsYWJlbFRlbXBsYXRlKXtcclxuICAgICAgICA8bmctY29udGFpbmVyIFxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxUZW1wbGF0ZVwiXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGN1cnJlbnRMYWJlbCwgaXRlbTogY3VycmVudEl0ZW1zLml0ZW0gfVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICB9XHJcbiAgICAgIEBlbHNlIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LXNlbGVjdC1sYWJlbFwiPiB7e2N1cnJlbnRMYWJlbH19IDwvc3Bhbj5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgQGVsc2UgaWYgKGNvbmZpZ3VyYXRpb24oKS5tdWx0aXBsZSAmJiBpc0FycmF5KGN1cnJlbnRJdGVtcykgJiYgJGFueShjdXJyZW50SXRlbXMpLmxlbmd0aCkge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1pbi1oLTYgb3ZlcmZsb3ctaGlkZGVuIHJlbGF0aXZlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIGxlZnQtMCB0b3AtMCBvdmVyZmxvdy14LWF1dG8gZmxleCBnYXAtMiBzaXplLWZ1bGwgbWFzay14LzJcIj5cclxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgY3VycmVudEl0ZW1zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyYW5zbHVjaWQtYm9yZGVyIHJvdW5kZWQtbGcgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcGwtMlwiPlxyXG4gICAgICAgICAgICAgIEBpZihsYWJlbFRlbXBsYXRlKXtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0ubGFiZWwsIGl0ZW06IGl0ZW0uaXRlbSB9XCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1zZWxlY3QtbGFiZWxcIj4ge3tpdGVtLmxhYmVsfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtZnVsbCBhc3BlY3Qtc3F1YXJlIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIlNlbGVjdChpdGVtKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlXCIgY29sb3I9XCJkYW5nZXJcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8IS0tIDxpb24tYnV0dG9uIGNsYXNzPVwibS0wIGgtZnVsbFwiIChjbGljayk9XCJTZWxlY3QoaXRlbS52YWx1ZSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIGNvbG9yPVwibWVkaXVtXCIgc2l6ZT1cInNtYWxsXCIgZmlsbD1cIm91dGxpbmVcIiBzdHlsZT1cIi0tYm9yZGVyLXJhZGl1czogLjVyZW1cIj5cclxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2VcIiBjb2xvcj1cImRhbmdlclwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIH1cclxuICAgIEBlbHNlIHtcclxuICAgICAgQGlmKHBsYWNlaG9sZGVyVGVtcGxhdGUpe1xyXG4gICAgICAgIDxuZy1jb250YWluZXIgXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwbGFjZWhvbGRlclRlbXBsYXRlXCJcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogdGhpcy5jb25maWd1cmF0aW9uKCkucGxhY2Vob2xkZXIsIHBsYWNlaG9sZGVyOiB0aGlzLmNvbmZpZ3VyYXRpb24oKS5wbGFjZWhvbGRlciB9XCI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIH1cclxuICAgICAgQGVsc2Uge1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtc2VsZWN0LWxhYmVsICF0ZXh0LW1lZGl1bVwiPiB7e3RoaXMuY29uZmlndXJhdGlvbigpLnBsYWNlaG9sZGVyfX0gPC9zcGFuPlxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBib3R0b20tMSBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBzaXplLTdcIiBbY2xhc3MucmlnaHQtMV09XCIhY29uZmlndXJhdGlvbigpLmNsZWFyYWJsZVwiIFtjbGFzcy5yaWdodC04XT1cImNvbmZpZ3VyYXRpb24oKS5jbGVhcmFibGVcIj5cclxuICAgIDxpb24taWNvbiBjbGFzcz1cIi1tYi0wLjVcIiBuYW1lPVwiY2hldnJvbi11cFwiPjwvaW9uLWljb24+XHJcbiAgICA8aW9uLWljb24gY2xhc3M9XCItbXQtMC41XCIgbmFtZT1cImNoZXZyb24tZG93blwiPjwvaW9uLWljb24+XHJcbiAgPC9kaXY+XHJcbiAgQGlmKGNvbmZpZ3VyYXRpb24oKS5jbGVhcmFibGUpe1xyXG4gICAgPGlvbi1idXR0b24gY2xhc3M9XCJhYnNvbHV0ZSByaWdodC0xIGJvdHRvbS0xXCIgKGNsaWNrKT1cIkNsZWFyKCRldmVudClcIiBjb2xvcj1cIm1lZGl1bVwiIHNpemU9XCJzbWFsbFwiIGZpbGw9XCJjbGVhclwiIHN0eWxlPVwiLS1ib3JkZXItcmFkaXVzOiAuNXJlbVwiPlxyXG4gICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XHJcbiAgICA8L2lvbi1idXR0b24+XHJcbiAgfSBcclxuXHJcbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctY29udGFpbmVyXCIgW2NsYXNzLmxvYWRpbmddPVwibG9hZGluZygpIHx8IGxvYWRpbmdGcm9tTG9hZGVyXCI+XHJcbiAgICA8aW9uLXNwaW5uZXI+PC9pb24tc3Bpbm5lcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48aW9uLW1vZGFsICNtb2RhbCAoaW9uTW9kYWxXaWxsUHJlc2VudCk9XCJPblByZXNlbnQoKVwiIChkaWREaXNtaXNzKT1cIk9uRGlzbWlzcygpXCIgc3R5bGU9XCItLXdpZHRoOiA5MCU7IC0taGVpZ2h0OiA5MCU7XCIgW2tlZXBDb250ZW50c01vdW50ZWRdPVwidHJ1ZVwiPlxyXG4gIDxuZy10ZW1wbGF0ZT5cclxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2VsZWN0Q29udGVudFRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgbW9kYWw6IHRydWUgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvaW9uLW1vZGFsPlxyXG5cclxuPHNpb24tcG9wb3ZlciBcclxuICAgICNwb3BvdmVyIFxyXG4gICAgW3dpZHRoXT1cImlucHV0Q29udGFpbmVyLm9mZnNldFdpZHRoICsgJ3B4J1wiIFxyXG4gICAgKG9uV2lsbFByZXNlbnQpPVwiT25QcmVzZW50KClcIiBcclxuICAgIChvbkRpZERpc21pc3MpPVwiT25EaXNtaXNzKClcIiBcclxuICAgIFthbmNob3JdPVwiaW5wdXRDb250YWluZXJcIiBcclxuICAgIFtwbGFjZW1lbnRdPVwiY29uZmlndXJhdGlvbigpLnBvcG92ZXJDb25maWd1cmF0aW9uLnBsYWNlbWVudFwiIFxyXG4gICAgW2ZsaXBdPVwiY29uZmlndXJhdGlvbigpLnBvcG92ZXJDb25maWd1cmF0aW9uLmZsaXBcIlxyXG4gID5cclxuICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdENvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG48L3Npb24tcG9wb3Zlcj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc2VsZWN0Q29udGVudFRlbXBsYXRlIGxldC1tb2RhbD1cIm1vZGFsXCI+XHJcbiAgPGRpdiAjc2VsZWN0Q29udGVudCBjbGFzcz1cInNlbGVjdC1jb250ZW50XCIgW2NsYXNzLiFzaXplLWZ1bGxdPVwibW9kYWxcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Qtc2VhcmNoLWJhci1jb250YWluZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC1zZWFyY2gtYmFyLWljb24tY29udGFpbmVyICFib3JkZXItci0wIGJvcmRlci1wcmltYXJ5LzcwIGJnLXByaW1hcnkvNzAgc2hyaW5rLTBcIj5cclxuICAgICAgICA8aW9uLWljb24gY29sb3I9XCJkYXJrXCIgbmFtZT1cInNlYXJjaFwiPjwvaW9uLWljb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aW5wdXQgI2lucHV0U2VhcmNoQmFyIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cInNlbGVjdC1zZWFyY2gtYmFyIGJvcmRlci1wcmltYXJ5LzcwICFyb3VuZGVkLWwtbm9uZVwiIFtmb3JtQ29udHJvbF09XCJzZWFyY2hCYXJDb250cm9sXCIvPlxyXG4gICAgPC9kaXY+IFxyXG4gICAgPHVsIGNsYXNzPVwic2VsZWN0LWl0ZW0tbGlzdCBtYXNrLXlcIiByb2xlPVwibGlzdGJveFwiIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCInc2lvbi1pcy0nICsgc2VsZWN0ZWRJbmRleFwiPlxyXG4gICAgICBAaWYoZmxvYXRpbmdWaXNpYmxlKXtcclxuICAgICAgICBAZm9yIChpdGVtIG9mIGxzdE9wdGlvbnM7IHRyYWNrIGl0ZW0udmFsdWUpIHsgXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYmFzZU9wdGlvblRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtLCBpbmRleDogJGluZGV4IH1cIj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgPC91bD5cclxuICAgIEBpZihpc1NlcnZpY2VBdGl2bygpKXtcclxuICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCB0ZXh0LXhzIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kXCI+XHJcbiAgICAgICAgPGlvbi1jaGVja2JveCBbbmdNb2RlbF09XCJzb21lbnRlQXRpdm9zKClcIiAobmdNb2RlbENoYW5nZSk9XCJzb21lbnRlQXRpdm9zLnNldCgkZXZlbnQpXCIgY2xhc3M9XCJzY2FsZS03NVwiPiBTb21lbnRlIGF0aXZvcyA8L2lvbi1jaGVja2JveD5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2Jhc2VPcHRpb25UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gIDxsaSBbaWRdPVwiJ3Npb24taXMtJyArIGluZGV4XCIgY2xhc3M9XCJzZWxlY3QtaXRlbVwiIFtjbGFzcy5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCIgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpbmRleCA9PSBzZWxlY3RlZEluZGV4XCIgKG1vdXNlZW50ZXIpPVwic2VsZWN0ZWRJbmRleCA9IGluZGV4XCIgKGNsaWNrKT1cIlNlbGVjdChpdGVtKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdC1pdGVtLWNoZWNrbWFyay1jb250ZWluZXJcIj5cclxuICAgICAgQGlmKGl0ZW0uc2VsZWN0ZWQpIHtcclxuICAgICAgICA8aW9uLWljb24gY2xhc3M9XCJzZWxlY3QtaXRlbS1jaGVja21hcmtcIiBjb2xvcj1cInByaW1hcnlcIiBuYW1lPVwiY2hlY2ttYXJrXCI+PC9pb24taWNvbj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKG9wdGlvblRlbXBsYXRlKSB7XHJcbiAgICAgIDxuZy1jb250YWluZXIgXHJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW06IGl0ZW0uaXRlbSB9XCI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgfVxyXG4gICAgQGVsc2Uge1xyXG4gICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdC1pdGVtLWxhYmVsXCI+IHt7aXRlbS5sYWJlbH19IDwvc3Bhbj5cclxuICAgIH1cclxuICA8L2xpPlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { FormBuilder, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
2
- import { Component, EventEmitter, HostListener, Output } from '@angular/core';
2
+ import { Component, EventEmitter, HostListener, Output, ViewChild } from '@angular/core';
3
3
  import { IonicModule, NavController } from '@ionic/angular';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import { Router } from '@angular/router';
@@ -49,6 +49,9 @@ export class DefaultLoginComponent {
49
49
  if ($event && $event.key != 'Enter') {
50
50
  return;
51
51
  }
52
+ if ($event && !this.loginContainer.contains(document.activeElement)) {
53
+ return; // Prevent login if the active element is not within the login container
54
+ }
52
55
  this.submitted = true;
53
56
  this.loading = true;
54
57
  if (!this.frm.valid) {
@@ -74,7 +77,7 @@ export class DefaultLoginComponent {
74
77
  }
75
78
  }
76
79
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultLoginComponent, deps: [{ token: i1.FormBuilder }, { token: i2.GenericService }, { token: i3.NavController }, { token: i4.AuthService }, { token: i5.ApiUrlProviderService }, { token: i6.EnvironmentService }, { token: i7.Router }], target: i0.ɵɵFactoryTarget.Component }); }
77
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DefaultLoginComponent, isStandalone: true, selector: "login", outputs: { OnLogin: "OnLogin" }, host: { listeners: { "window:keydown": "Login($event)" } }, ngImport: i0, template: "<!-- <div class=\"size-full flex justify-center items-center relative\">\r\n <div class=\"landscape:w-4/5 portrait:w-full landscape:h-2/3 portrait:h-full landscape:max-w-[60rem] translucid-border landscape:rounded-3xl landscape:backdrop-blur-xl overflow-hidden\">\r\n <div class=\"size-full flex portrait:flex-col\" style=\"background-color: color-mix(in srgb, var(--ion-color-light) 20%, transparent 80%);\">\r\n <div class=\"shrink-0 w-96 portrait:w-full portrait:h-32 h-full p-3\">\r\n <div class=\"rounded-2xl size-full overflow-x-hidden\">\r\n <ng-content class=\"size-full\"></ng-content>\r\n </div>\r\n </div>\r\n <div class=\"grow flex items-center justify-center h-full py-3 pr-3 portrait:pl-3\">\r\n <div class=\"w-96 h-full flex flex-col items-center justify-center gap-2\" *ngIf=\"frm\" [formGroup]=\"frm\">\r\n\r\n <ion-text class=\"text-5xl my-10 portrait:mt-[-5rem]\"> Login </ion-text>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\">\r\n <ion-card-content>\r\n <ion-item lines=\"none\" label=\"Senha\" labelPlacement=\"stacked\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"person\" slot=\"start\"></ion-icon>\r\n <ion-input placeholder=\"Usu\u00E1rio / User\" formControlName=\"apelido\"></ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\"> \r\n <ion-card-content>\r\n <ion-item lines=\"none\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"lock-closed\" slot=\"start\"></ion-icon>\r\n <ion-input type=\"password\" formControlName=\"senha\" placeholder=\"Senha / Password\">\r\n <ion-input-password-toggle slot=\"end\"></ion-input-password-toggle>\r\n </ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <div class=\"w-full\">\r\n <a href=\"\">Esqueceu a senha?</a>\r\n </div>\r\n\r\n <div class=\"flex w-full\">\r\n <ion-button class=\"rounded-2xl shadow-xl default-transition w-full\" expand=\"block\" (click)=\"Login()\" [disabled]=\"loading\">\r\n <ion-spinner class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': !loading, 'mr-2' : loading}\" slot=\"start\"></ion-spinner>\r\n <ion-icon class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': loading}\" name=\"enter-outline\" slot=\"start\" ></ion-icon>\r\n <span class=\"default-transition\" > Login </span>\r\n </ion-button>\r\n\r\n <ion-button class=\"shrink-0 aspect-square ml-3\" color=\"dark\" hidden>\r\n <svg class=\"size-8\" slot=\"icon-only\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 32 32\" width=\"64\" height=\"64\"><defs><path id=\"A\" d=\"M44.5 20H24v8.5h11.8C34.7 33.9 30.1 37 24 37c-7.2 0-13-5.8-13-13s5.8-13 13-13c3.1 0 5.9 1.1 8.1 2.9l6.4-6.4C34.6 4.1 29.6 2 24 2 11.8 2 2 11.8 2 24s9.8 22 22 22c11 0 21-8 21-22 0-1.3-.2-2.7-.5-4z\"/></defs><clipPath id=\"B\"><use xlink:href=\"#A\"/></clipPath><g transform=\"matrix(.727273 0 0 .727273 -.954545 -1.45455)\"><path d=\"M0 37V11l17 13z\" clip-path=\"url(#B)\" fill=\"#fbbc05\"/><path d=\"M0 11l17 13 7-6.1L48 14V0H0z\" clip-path=\"url(#B)\" fill=\"#ea4335\"/><path d=\"M0 37l30-23 7.9 1L48 0v48H0z\" clip-path=\"url(#B)\" fill=\"#34a853\"/><path d=\"M48 48L17 24l-4-3 35-10z\" clip-path=\"url(#B)\" fill=\"#4285f4\"/></g></svg>\r\n </ion-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div> -->\r\n\r\n<div class=\"size-full flex justify-center items-center relative portrait:p-4\">\r\n <div class=\"landscape:w-4/5 landscape:h-2/3 landscape:xl:max-w-[60rem] portrait:size-full translucid-border backdrop-blur-xl rounded-3xl overflow-hidden\">\r\n <div class=\"size-full flex portrait:flex-col\" style=\"background-color: color-mix(in srgb, var(--ion-color-light) 20%, transparent 80%);\">\r\n <div class=\"shrink-0 w-96 portrait:w-full portrait:h-40 landscape:h-full p-2\">\r\n <div class=\"size-full rounded-2xl overflow-hidden\">\r\n <ng-content select=\"[slot=logo]\" class=\"size-full\"></ng-content>\r\n </div>\r\n </div>\r\n <div class=\"shrink size-full flex flex-col items-center justify-center gap-3 px-10 relative\" *ngIf=\"frm\" [formGroup]=\"frm\">\r\n <ion-text class=\"h-24 text-5xl\"> Login </ion-text>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\">\r\n <ion-card-content>\r\n <ion-item lines=\"none\" label=\"Senha\" labelPlacement=\"stacked\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"person\" slot=\"start\"></ion-icon>\r\n <ion-input placeholder=\"Usu\u00E1rio / User\" formControlName=\"apelido\"></ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\"> \r\n <ion-card-content>\r\n <ion-item lines=\"none\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"lock-closed\" slot=\"start\"></ion-icon>\r\n <ion-input type=\"password\" formControlName=\"senha\" placeholder=\"Senha / Password\">\r\n <ion-input-password-toggle slot=\"end\"></ion-input-password-toggle>\r\n </ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <div class=\"flex w-full\">\r\n <ion-button class=\"transition-all rounded-2xl shadow-xl default-transition w-full\" expand=\"block\" (click)=\"Login()\" [disabled]=\"loading\">\r\n <ion-spinner class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': !loading, 'mr-2' : loading}\" slot=\"start\"></ion-spinner>\r\n <ion-icon class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': loading}\" name=\"enter-outline\" slot=\"start\" ></ion-icon>\r\n <span class=\"default-transition\"> Login </span>\r\n </ion-button>\r\n\r\n <!-- <ion-button class=\"shrink-0 aspect-square ml-3\" color=\"dark\" hidden>\r\n <svg class=\"size-8\" slot=\"icon-only\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 32 32\" width=\"64\" height=\"64\"><defs><path id=\"A\" d=\"M44.5 20H24v8.5h11.8C34.7 33.9 30.1 37 24 37c-7.2 0-13-5.8-13-13s5.8-13 13-13c3.1 0 5.9 1.1 8.1 2.9l6.4-6.4C34.6 4.1 29.6 2 24 2 11.8 2 2 11.8 2 24s9.8 22 22 22c11 0 21-8 21-22 0-1.3-.2-2.7-.5-4z\"/></defs><clipPath id=\"B\"><use xlink:href=\"#A\"/></clipPath><g transform=\"matrix(.727273 0 0 .727273 -.954545 -1.45455)\"><path d=\"M0 37V11l17 13z\" clip-path=\"url(#B)\" fill=\"#fbbc05\"/><path d=\"M0 11l17 13 7-6.1L48 14V0H0z\" clip-path=\"url(#B)\" fill=\"#ea4335\"/><path d=\"M0 37l30-23 7.9 1L48 0v48H0z\" clip-path=\"url(#B)\" fill=\"#34a853\"/><path d=\"M48 48L17 24l-4-3 35-10z\" clip-path=\"url(#B)\" fill=\"#4285f4\"/></g></svg>\r\n </ion-button> -->\r\n </div>\r\n\r\n <div class=\"w-full\">\r\n <ng-content select=\"[slot=end]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["ion-card{margin:0;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);background:color-mix(in srgb,var(--ion-color-light) 15%,transparent 93%);border-bottom-color:var(--ion-color-medium);border-right-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-top-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-left-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-width:1px 1px 2px 1px}ion-card ion-card-content{padding:0}ion-card:hover{background:color-mix(in srgb,var(--ion-color-dark) 15%,transparent 93%)}ion-card.submitted.invalid{border-color:color-mix(in srgb,var(--ion-color-danger) 75%,transparent 25%)!important}ion-card ion-card-content{width:100%;height:100%;background-color:transparent;padding:0}ion-item{--background: transparent;margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonInput, selector: "ion-input", inputs: ["autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearInputIcon", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i3.IonInputPasswordToggle, selector: "ion-input-password-toggle", inputs: ["color", "hideIcon", "mode", "showIcon"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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"] }] }); }
80
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DefaultLoginComponent, isStandalone: true, selector: "login", outputs: { OnLogin: "OnLogin" }, host: { listeners: { "window:keydown": "Login($event)" } }, viewQueries: [{ propertyName: "loginContainer", first: true, predicate: ["loginContainer"], descendants: true }], ngImport: i0, template: "<!-- <div class=\"size-full flex justify-center items-center relative\">\r\n <div class=\"landscape:w-4/5 portrait:w-full landscape:h-2/3 portrait:h-full landscape:max-w-[60rem] translucid-border landscape:rounded-3xl landscape:backdrop-blur-xl overflow-hidden\">\r\n <div class=\"size-full flex portrait:flex-col\" style=\"background-color: color-mix(in srgb, var(--ion-color-light) 20%, transparent 80%);\">\r\n <div class=\"shrink-0 w-96 portrait:w-full portrait:h-32 h-full p-3\">\r\n <div class=\"rounded-2xl size-full overflow-x-hidden\">\r\n <ng-content class=\"size-full\"></ng-content>\r\n </div>\r\n </div>\r\n <div class=\"grow flex items-center justify-center h-full py-3 pr-3 portrait:pl-3\">\r\n <div class=\"w-96 h-full flex flex-col items-center justify-center gap-2\" *ngIf=\"frm\" [formGroup]=\"frm\">\r\n\r\n <ion-text class=\"text-5xl my-10 portrait:mt-[-5rem]\"> Login </ion-text>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\">\r\n <ion-card-content>\r\n <ion-item lines=\"none\" label=\"Senha\" labelPlacement=\"stacked\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"person\" slot=\"start\"></ion-icon>\r\n <ion-input placeholder=\"Usu\u00E1rio / User\" formControlName=\"apelido\"></ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\"> \r\n <ion-card-content>\r\n <ion-item lines=\"none\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"lock-closed\" slot=\"start\"></ion-icon>\r\n <ion-input type=\"password\" formControlName=\"senha\" placeholder=\"Senha / Password\">\r\n <ion-input-password-toggle slot=\"end\"></ion-input-password-toggle>\r\n </ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <div class=\"w-full\">\r\n <a href=\"\">Esqueceu a senha?</a>\r\n </div>\r\n\r\n <div class=\"flex w-full\">\r\n <ion-button class=\"rounded-2xl shadow-xl default-transition w-full\" expand=\"block\" (click)=\"Login()\" [disabled]=\"loading\">\r\n <ion-spinner class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': !loading, 'mr-2' : loading}\" slot=\"start\"></ion-spinner>\r\n <ion-icon class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': loading}\" name=\"enter-outline\" slot=\"start\" ></ion-icon>\r\n <span class=\"default-transition\" > Login </span>\r\n </ion-button>\r\n\r\n <ion-button class=\"shrink-0 aspect-square ml-3\" color=\"dark\" hidden>\r\n <svg class=\"size-8\" slot=\"icon-only\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 32 32\" width=\"64\" height=\"64\"><defs><path id=\"A\" d=\"M44.5 20H24v8.5h11.8C34.7 33.9 30.1 37 24 37c-7.2 0-13-5.8-13-13s5.8-13 13-13c3.1 0 5.9 1.1 8.1 2.9l6.4-6.4C34.6 4.1 29.6 2 24 2 11.8 2 2 11.8 2 24s9.8 22 22 22c11 0 21-8 21-22 0-1.3-.2-2.7-.5-4z\"/></defs><clipPath id=\"B\"><use xlink:href=\"#A\"/></clipPath><g transform=\"matrix(.727273 0 0 .727273 -.954545 -1.45455)\"><path d=\"M0 37V11l17 13z\" clip-path=\"url(#B)\" fill=\"#fbbc05\"/><path d=\"M0 11l17 13 7-6.1L48 14V0H0z\" clip-path=\"url(#B)\" fill=\"#ea4335\"/><path d=\"M0 37l30-23 7.9 1L48 0v48H0z\" clip-path=\"url(#B)\" fill=\"#34a853\"/><path d=\"M48 48L17 24l-4-3 35-10z\" clip-path=\"url(#B)\" fill=\"#4285f4\"/></g></svg>\r\n </ion-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div> -->\r\n\r\n<div #loginContainer class=\"size-full flex justify-center items-center relative portrait:p-4\">\r\n <div class=\"landscape:w-4/5 landscape:h-2/3 landscape:xl:max-w-[60rem] portrait:size-full translucid-border backdrop-blur-xl rounded-3xl overflow-hidden\">\r\n <div class=\"size-full flex portrait:flex-col\" style=\"background-color: color-mix(in srgb, var(--ion-color-light) 20%, transparent 80%);\">\r\n <div class=\"shrink-0 w-96 portrait:w-full portrait:h-40 landscape:h-full p-2\">\r\n <div class=\"size-full rounded-2xl overflow-hidden\">\r\n <ng-content select=\"[slot=logo]\" class=\"size-full\"></ng-content>\r\n </div>\r\n </div>\r\n <div class=\"shrink size-full flex flex-col items-center justify-center gap-3 px-10 relative\" *ngIf=\"frm\" [formGroup]=\"frm\">\r\n <ion-text class=\"h-24 text-5xl\"> Login </ion-text>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\">\r\n <ion-card-content>\r\n <ion-item lines=\"none\" label=\"Senha\" labelPlacement=\"stacked\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"person\" slot=\"start\"></ion-icon>\r\n <ion-input placeholder=\"Usu\u00E1rio / User\" formControlName=\"apelido\"></ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\"> \r\n <ion-card-content>\r\n <ion-item lines=\"none\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"lock-closed\" slot=\"start\"></ion-icon>\r\n <ion-input type=\"password\" formControlName=\"senha\" placeholder=\"Senha / Password\">\r\n <ion-input-password-toggle slot=\"end\"></ion-input-password-toggle>\r\n </ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <div class=\"flex w-full\">\r\n <ion-button class=\"transition-all rounded-2xl shadow-xl default-transition w-full\" expand=\"block\" (click)=\"Login()\" [disabled]=\"loading\">\r\n <ion-spinner class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': !loading, 'mr-2' : loading}\" slot=\"start\"></ion-spinner>\r\n <ion-icon class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': loading}\" name=\"enter-outline\" slot=\"start\" ></ion-icon>\r\n <span class=\"default-transition\"> Login </span>\r\n </ion-button>\r\n\r\n <!-- <ion-button class=\"shrink-0 aspect-square ml-3\" color=\"dark\" hidden>\r\n <svg class=\"size-8\" slot=\"icon-only\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 32 32\" width=\"64\" height=\"64\"><defs><path id=\"A\" d=\"M44.5 20H24v8.5h11.8C34.7 33.9 30.1 37 24 37c-7.2 0-13-5.8-13-13s5.8-13 13-13c3.1 0 5.9 1.1 8.1 2.9l6.4-6.4C34.6 4.1 29.6 2 24 2 11.8 2 2 11.8 2 24s9.8 22 22 22c11 0 21-8 21-22 0-1.3-.2-2.7-.5-4z\"/></defs><clipPath id=\"B\"><use xlink:href=\"#A\"/></clipPath><g transform=\"matrix(.727273 0 0 .727273 -.954545 -1.45455)\"><path d=\"M0 37V11l17 13z\" clip-path=\"url(#B)\" fill=\"#fbbc05\"/><path d=\"M0 11l17 13 7-6.1L48 14V0H0z\" clip-path=\"url(#B)\" fill=\"#ea4335\"/><path d=\"M0 37l30-23 7.9 1L48 0v48H0z\" clip-path=\"url(#B)\" fill=\"#34a853\"/><path d=\"M48 48L17 24l-4-3 35-10z\" clip-path=\"url(#B)\" fill=\"#4285f4\"/></g></svg>\r\n </ion-button> -->\r\n </div>\r\n\r\n <div class=\"w-full\">\r\n <ng-content select=\"[slot=end]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["ion-card{margin:0;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);background:color-mix(in srgb,var(--ion-color-light) 15%,transparent 93%);border-bottom-color:var(--ion-color-medium);border-right-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-top-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-left-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-width:1px 1px 2px 1px}ion-card ion-card-content{padding:0}ion-card:hover{background:color-mix(in srgb,var(--ion-color-dark) 15%,transparent 93%)}ion-card.submitted.invalid{border-color:color-mix(in srgb,var(--ion-color-danger) 75%,transparent 25%)!important}ion-card ion-card-content{width:100%;height:100%;background-color:transparent;padding:0}ion-item{--background: transparent;margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IonicModule }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonInput, selector: "ion-input", inputs: ["autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearInputIcon", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i3.IonInputPasswordToggle, selector: "ion-input-password-toggle", inputs: ["color", "hideIcon", "mode", "showIcon"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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"] }] }); }
78
81
  }
79
82
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DefaultLoginComponent, decorators: [{
80
83
  type: Component,
@@ -83,11 +86,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
83
86
  IonicModule,
84
87
  FormsModule,
85
88
  ReactiveFormsModule,
86
- ], selector: 'login', template: "<!-- <div class=\"size-full flex justify-center items-center relative\">\r\n <div class=\"landscape:w-4/5 portrait:w-full landscape:h-2/3 portrait:h-full landscape:max-w-[60rem] translucid-border landscape:rounded-3xl landscape:backdrop-blur-xl overflow-hidden\">\r\n <div class=\"size-full flex portrait:flex-col\" style=\"background-color: color-mix(in srgb, var(--ion-color-light) 20%, transparent 80%);\">\r\n <div class=\"shrink-0 w-96 portrait:w-full portrait:h-32 h-full p-3\">\r\n <div class=\"rounded-2xl size-full overflow-x-hidden\">\r\n <ng-content class=\"size-full\"></ng-content>\r\n </div>\r\n </div>\r\n <div class=\"grow flex items-center justify-center h-full py-3 pr-3 portrait:pl-3\">\r\n <div class=\"w-96 h-full flex flex-col items-center justify-center gap-2\" *ngIf=\"frm\" [formGroup]=\"frm\">\r\n\r\n <ion-text class=\"text-5xl my-10 portrait:mt-[-5rem]\"> Login </ion-text>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\">\r\n <ion-card-content>\r\n <ion-item lines=\"none\" label=\"Senha\" labelPlacement=\"stacked\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"person\" slot=\"start\"></ion-icon>\r\n <ion-input placeholder=\"Usu\u00E1rio / User\" formControlName=\"apelido\"></ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\"> \r\n <ion-card-content>\r\n <ion-item lines=\"none\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"lock-closed\" slot=\"start\"></ion-icon>\r\n <ion-input type=\"password\" formControlName=\"senha\" placeholder=\"Senha / Password\">\r\n <ion-input-password-toggle slot=\"end\"></ion-input-password-toggle>\r\n </ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <div class=\"w-full\">\r\n <a href=\"\">Esqueceu a senha?</a>\r\n </div>\r\n\r\n <div class=\"flex w-full\">\r\n <ion-button class=\"rounded-2xl shadow-xl default-transition w-full\" expand=\"block\" (click)=\"Login()\" [disabled]=\"loading\">\r\n <ion-spinner class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': !loading, 'mr-2' : loading}\" slot=\"start\"></ion-spinner>\r\n <ion-icon class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': loading}\" name=\"enter-outline\" slot=\"start\" ></ion-icon>\r\n <span class=\"default-transition\" > Login </span>\r\n </ion-button>\r\n\r\n <ion-button class=\"shrink-0 aspect-square ml-3\" color=\"dark\" hidden>\r\n <svg class=\"size-8\" slot=\"icon-only\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 32 32\" width=\"64\" height=\"64\"><defs><path id=\"A\" d=\"M44.5 20H24v8.5h11.8C34.7 33.9 30.1 37 24 37c-7.2 0-13-5.8-13-13s5.8-13 13-13c3.1 0 5.9 1.1 8.1 2.9l6.4-6.4C34.6 4.1 29.6 2 24 2 11.8 2 2 11.8 2 24s9.8 22 22 22c11 0 21-8 21-22 0-1.3-.2-2.7-.5-4z\"/></defs><clipPath id=\"B\"><use xlink:href=\"#A\"/></clipPath><g transform=\"matrix(.727273 0 0 .727273 -.954545 -1.45455)\"><path d=\"M0 37V11l17 13z\" clip-path=\"url(#B)\" fill=\"#fbbc05\"/><path d=\"M0 11l17 13 7-6.1L48 14V0H0z\" clip-path=\"url(#B)\" fill=\"#ea4335\"/><path d=\"M0 37l30-23 7.9 1L48 0v48H0z\" clip-path=\"url(#B)\" fill=\"#34a853\"/><path d=\"M48 48L17 24l-4-3 35-10z\" clip-path=\"url(#B)\" fill=\"#4285f4\"/></g></svg>\r\n </ion-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div> -->\r\n\r\n<div class=\"size-full flex justify-center items-center relative portrait:p-4\">\r\n <div class=\"landscape:w-4/5 landscape:h-2/3 landscape:xl:max-w-[60rem] portrait:size-full translucid-border backdrop-blur-xl rounded-3xl overflow-hidden\">\r\n <div class=\"size-full flex portrait:flex-col\" style=\"background-color: color-mix(in srgb, var(--ion-color-light) 20%, transparent 80%);\">\r\n <div class=\"shrink-0 w-96 portrait:w-full portrait:h-40 landscape:h-full p-2\">\r\n <div class=\"size-full rounded-2xl overflow-hidden\">\r\n <ng-content select=\"[slot=logo]\" class=\"size-full\"></ng-content>\r\n </div>\r\n </div>\r\n <div class=\"shrink size-full flex flex-col items-center justify-center gap-3 px-10 relative\" *ngIf=\"frm\" [formGroup]=\"frm\">\r\n <ion-text class=\"h-24 text-5xl\"> Login </ion-text>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\">\r\n <ion-card-content>\r\n <ion-item lines=\"none\" label=\"Senha\" labelPlacement=\"stacked\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"person\" slot=\"start\"></ion-icon>\r\n <ion-input placeholder=\"Usu\u00E1rio / User\" formControlName=\"apelido\"></ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\"> \r\n <ion-card-content>\r\n <ion-item lines=\"none\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"lock-closed\" slot=\"start\"></ion-icon>\r\n <ion-input type=\"password\" formControlName=\"senha\" placeholder=\"Senha / Password\">\r\n <ion-input-password-toggle slot=\"end\"></ion-input-password-toggle>\r\n </ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <div class=\"flex w-full\">\r\n <ion-button class=\"transition-all rounded-2xl shadow-xl default-transition w-full\" expand=\"block\" (click)=\"Login()\" [disabled]=\"loading\">\r\n <ion-spinner class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': !loading, 'mr-2' : loading}\" slot=\"start\"></ion-spinner>\r\n <ion-icon class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': loading}\" name=\"enter-outline\" slot=\"start\" ></ion-icon>\r\n <span class=\"default-transition\"> Login </span>\r\n </ion-button>\r\n\r\n <!-- <ion-button class=\"shrink-0 aspect-square ml-3\" color=\"dark\" hidden>\r\n <svg class=\"size-8\" slot=\"icon-only\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 32 32\" width=\"64\" height=\"64\"><defs><path id=\"A\" d=\"M44.5 20H24v8.5h11.8C34.7 33.9 30.1 37 24 37c-7.2 0-13-5.8-13-13s5.8-13 13-13c3.1 0 5.9 1.1 8.1 2.9l6.4-6.4C34.6 4.1 29.6 2 24 2 11.8 2 2 11.8 2 24s9.8 22 22 22c11 0 21-8 21-22 0-1.3-.2-2.7-.5-4z\"/></defs><clipPath id=\"B\"><use xlink:href=\"#A\"/></clipPath><g transform=\"matrix(.727273 0 0 .727273 -.954545 -1.45455)\"><path d=\"M0 37V11l17 13z\" clip-path=\"url(#B)\" fill=\"#fbbc05\"/><path d=\"M0 11l17 13 7-6.1L48 14V0H0z\" clip-path=\"url(#B)\" fill=\"#ea4335\"/><path d=\"M0 37l30-23 7.9 1L48 0v48H0z\" clip-path=\"url(#B)\" fill=\"#34a853\"/><path d=\"M48 48L17 24l-4-3 35-10z\" clip-path=\"url(#B)\" fill=\"#4285f4\"/></g></svg>\r\n </ion-button> -->\r\n </div>\r\n\r\n <div class=\"w-full\">\r\n <ng-content select=\"[slot=end]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["ion-card{margin:0;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);background:color-mix(in srgb,var(--ion-color-light) 15%,transparent 93%);border-bottom-color:var(--ion-color-medium);border-right-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-top-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-left-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-width:1px 1px 2px 1px}ion-card ion-card-content{padding:0}ion-card:hover{background:color-mix(in srgb,var(--ion-color-dark) 15%,transparent 93%)}ion-card.submitted.invalid{border-color:color-mix(in srgb,var(--ion-color-danger) 75%,transparent 25%)!important}ion-card ion-card-content{width:100%;height:100%;background-color:transparent;padding:0}ion-item{--background: transparent;margin:0}\n"] }]
89
+ ], selector: 'login', template: "<!-- <div class=\"size-full flex justify-center items-center relative\">\r\n <div class=\"landscape:w-4/5 portrait:w-full landscape:h-2/3 portrait:h-full landscape:max-w-[60rem] translucid-border landscape:rounded-3xl landscape:backdrop-blur-xl overflow-hidden\">\r\n <div class=\"size-full flex portrait:flex-col\" style=\"background-color: color-mix(in srgb, var(--ion-color-light) 20%, transparent 80%);\">\r\n <div class=\"shrink-0 w-96 portrait:w-full portrait:h-32 h-full p-3\">\r\n <div class=\"rounded-2xl size-full overflow-x-hidden\">\r\n <ng-content class=\"size-full\"></ng-content>\r\n </div>\r\n </div>\r\n <div class=\"grow flex items-center justify-center h-full py-3 pr-3 portrait:pl-3\">\r\n <div class=\"w-96 h-full flex flex-col items-center justify-center gap-2\" *ngIf=\"frm\" [formGroup]=\"frm\">\r\n\r\n <ion-text class=\"text-5xl my-10 portrait:mt-[-5rem]\"> Login </ion-text>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\">\r\n <ion-card-content>\r\n <ion-item lines=\"none\" label=\"Senha\" labelPlacement=\"stacked\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"person\" slot=\"start\"></ion-icon>\r\n <ion-input placeholder=\"Usu\u00E1rio / User\" formControlName=\"apelido\"></ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\"> \r\n <ion-card-content>\r\n <ion-item lines=\"none\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"lock-closed\" slot=\"start\"></ion-icon>\r\n <ion-input type=\"password\" formControlName=\"senha\" placeholder=\"Senha / Password\">\r\n <ion-input-password-toggle slot=\"end\"></ion-input-password-toggle>\r\n </ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <div class=\"w-full\">\r\n <a href=\"\">Esqueceu a senha?</a>\r\n </div>\r\n\r\n <div class=\"flex w-full\">\r\n <ion-button class=\"rounded-2xl shadow-xl default-transition w-full\" expand=\"block\" (click)=\"Login()\" [disabled]=\"loading\">\r\n <ion-spinner class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': !loading, 'mr-2' : loading}\" slot=\"start\"></ion-spinner>\r\n <ion-icon class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': loading}\" name=\"enter-outline\" slot=\"start\" ></ion-icon>\r\n <span class=\"default-transition\" > Login </span>\r\n </ion-button>\r\n\r\n <ion-button class=\"shrink-0 aspect-square ml-3\" color=\"dark\" hidden>\r\n <svg class=\"size-8\" slot=\"icon-only\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 32 32\" width=\"64\" height=\"64\"><defs><path id=\"A\" d=\"M44.5 20H24v8.5h11.8C34.7 33.9 30.1 37 24 37c-7.2 0-13-5.8-13-13s5.8-13 13-13c3.1 0 5.9 1.1 8.1 2.9l6.4-6.4C34.6 4.1 29.6 2 24 2 11.8 2 2 11.8 2 24s9.8 22 22 22c11 0 21-8 21-22 0-1.3-.2-2.7-.5-4z\"/></defs><clipPath id=\"B\"><use xlink:href=\"#A\"/></clipPath><g transform=\"matrix(.727273 0 0 .727273 -.954545 -1.45455)\"><path d=\"M0 37V11l17 13z\" clip-path=\"url(#B)\" fill=\"#fbbc05\"/><path d=\"M0 11l17 13 7-6.1L48 14V0H0z\" clip-path=\"url(#B)\" fill=\"#ea4335\"/><path d=\"M0 37l30-23 7.9 1L48 0v48H0z\" clip-path=\"url(#B)\" fill=\"#34a853\"/><path d=\"M48 48L17 24l-4-3 35-10z\" clip-path=\"url(#B)\" fill=\"#4285f4\"/></g></svg>\r\n </ion-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div> -->\r\n\r\n<div #loginContainer class=\"size-full flex justify-center items-center relative portrait:p-4\">\r\n <div class=\"landscape:w-4/5 landscape:h-2/3 landscape:xl:max-w-[60rem] portrait:size-full translucid-border backdrop-blur-xl rounded-3xl overflow-hidden\">\r\n <div class=\"size-full flex portrait:flex-col\" style=\"background-color: color-mix(in srgb, var(--ion-color-light) 20%, transparent 80%);\">\r\n <div class=\"shrink-0 w-96 portrait:w-full portrait:h-40 landscape:h-full p-2\">\r\n <div class=\"size-full rounded-2xl overflow-hidden\">\r\n <ng-content select=\"[slot=logo]\" class=\"size-full\"></ng-content>\r\n </div>\r\n </div>\r\n <div class=\"shrink size-full flex flex-col items-center justify-center gap-3 px-10 relative\" *ngIf=\"frm\" [formGroup]=\"frm\">\r\n <ion-text class=\"h-24 text-5xl\"> Login </ion-text>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\">\r\n <ion-card-content>\r\n <ion-item lines=\"none\" label=\"Senha\" labelPlacement=\"stacked\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"person\" slot=\"start\"></ion-icon>\r\n <ion-input placeholder=\"Usu\u00E1rio / User\" formControlName=\"apelido\"></ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <ion-card class=\"w-full backdrop-blur-xl\"> \r\n <ion-card-content>\r\n <ion-item lines=\"none\" class=\"rounded-2xl my-3 w-full\">\r\n <ion-icon name=\"lock-closed\" slot=\"start\"></ion-icon>\r\n <ion-input type=\"password\" formControlName=\"senha\" placeholder=\"Senha / Password\">\r\n <ion-input-password-toggle slot=\"end\"></ion-input-password-toggle>\r\n </ion-input>\r\n </ion-item>\r\n </ion-card-content>\r\n </ion-card>\r\n\r\n <div class=\"flex w-full\">\r\n <ion-button class=\"transition-all rounded-2xl shadow-xl default-transition w-full\" expand=\"block\" (click)=\"Login()\" [disabled]=\"loading\">\r\n <ion-spinner class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': !loading, 'mr-2' : loading}\" slot=\"start\"></ion-spinner>\r\n <ion-icon class=\"default-transition\" [ngClass]=\"{'-translate-x-12 opacity-0 size-0': loading}\" name=\"enter-outline\" slot=\"start\" ></ion-icon>\r\n <span class=\"default-transition\"> Login </span>\r\n </ion-button>\r\n\r\n <!-- <ion-button class=\"shrink-0 aspect-square ml-3\" color=\"dark\" hidden>\r\n <svg class=\"size-8\" slot=\"icon-only\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 32 32\" width=\"64\" height=\"64\"><defs><path id=\"A\" d=\"M44.5 20H24v8.5h11.8C34.7 33.9 30.1 37 24 37c-7.2 0-13-5.8-13-13s5.8-13 13-13c3.1 0 5.9 1.1 8.1 2.9l6.4-6.4C34.6 4.1 29.6 2 24 2 11.8 2 2 11.8 2 24s9.8 22 22 22c11 0 21-8 21-22 0-1.3-.2-2.7-.5-4z\"/></defs><clipPath id=\"B\"><use xlink:href=\"#A\"/></clipPath><g transform=\"matrix(.727273 0 0 .727273 -.954545 -1.45455)\"><path d=\"M0 37V11l17 13z\" clip-path=\"url(#B)\" fill=\"#fbbc05\"/><path d=\"M0 11l17 13 7-6.1L48 14V0H0z\" clip-path=\"url(#B)\" fill=\"#ea4335\"/><path d=\"M0 37l30-23 7.9 1L48 0v48H0z\" clip-path=\"url(#B)\" fill=\"#34a853\"/><path d=\"M48 48L17 24l-4-3 35-10z\" clip-path=\"url(#B)\" fill=\"#4285f4\"/></g></svg>\r\n </ion-button> -->\r\n </div>\r\n\r\n <div class=\"w-full\">\r\n <ng-content select=\"[slot=end]\"></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["ion-card{margin:0;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:1rem;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);transition-property:all;transition-duration:.3s;transition-timing-function:cubic-bezier(.4,0,.2,1);background:color-mix(in srgb,var(--ion-color-light) 15%,transparent 93%);border-bottom-color:var(--ion-color-medium);border-right-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-top-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-left-color:color-mix(in srgb,var(--ion-color-medium) 30%,transparent 70%);border-width:1px 1px 2px 1px}ion-card ion-card-content{padding:0}ion-card:hover{background:color-mix(in srgb,var(--ion-color-dark) 15%,transparent 93%)}ion-card.submitted.invalid{border-color:color-mix(in srgb,var(--ion-color-danger) 75%,transparent 25%)!important}ion-card ion-card-content{width:100%;height:100%;background-color:transparent;padding:0}ion-item{--background: transparent;margin:0}\n"] }]
87
90
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.GenericService }, { type: i3.NavController }, { type: i4.AuthService }, { type: i5.ApiUrlProviderService }, { type: i6.EnvironmentService }, { type: i7.Router }], propDecorators: { OnLogin: [{
88
91
  type: Output
92
+ }], loginContainer: [{
93
+ type: ViewChild,
94
+ args: ['loginContainer']
89
95
  }], Login: [{
90
96
  type: HostListener,
91
97
  args: ['window:keydown', ['$event']]
92
98
  }] } });
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2xvZ2luL2xvZ2luLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9sb2dpbi9sb2dpbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFhLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQVUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNwRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7O0FBYzFELE1BQU0sT0FBTyxxQkFBcUI7SUFFaEMsWUFDVSxFQUFlLEVBQ2YsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIsV0FBd0IsRUFDekIscUJBQTRDLEVBQzVDLFdBQStCLEVBQzlCLE1BQWM7UUFOZCxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGdCQUFXLEdBQVgsV0FBVyxDQUFh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REFDWCxXQUFXLGtTQUNYLG1CQUFtQjs7NEZBTVYscUJBQXFCO2tCQVpqQyxTQUFTO2lDQUNJLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsV0FBVzt3QkFDWCxtQkFBbUI7cUJBQ3BCLFlBQ1MsT0FBTzs2UEF5Q1AsT0FBTztzQkFBaEIsTUFBTTtnQkFHRCxLQUFLO3NCQURWLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJb25pY01vZHVsZSwgTmF2Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Vudmlyb25tZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcGlVcmxQcm92aWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93ZWIvYXBpLXVybC1wcm92aWRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJpY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nZW5lcmljcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBJb25pY01vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICBdLFxyXG4gIHNlbGVjdG9yOiAnbG9naW4nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2dpbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbG9naW4uY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERlZmF1bHRMb2dpbkNvbXBvbmVudCAgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBnZW5lcmljU2VydmljZTogR2VuZXJpY1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHB1YmxpYyBhcGlVcmxQcm92aWRlclNlcnZpY2U6IEFwaVVybFByb3ZpZGVyU2VydmljZSxcclxuICAgIHB1YmxpYyBjb3JlU2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICkgeyBcclxuICAgIHRoaXMuZ2VuZXJpY1NlcnZpY2UuU2V0VGl0bGUoXCJMb2dpblwiKTtcclxuICB9XHJcbiAgXHJcbiAgYXN5bmMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLkNyZWF0ZUZvcm0oKTtcclxuXHJcbiAgICBpZighdGhpcy5jb3JlU2VydmljZS5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKXtcclxuICAgICAgdGhpcy5mcm0ucGF0Y2hWYWx1ZSh0aGlzLmNvcmVTZXJ2aWNlLmVudmlyb25tZW50LmRlZmF1bHRDcmVkZW50aWFscyk7IFxyXG4gICAgfVxyXG4gICAgY29uc3QgVG9rZW4gPSBhd2FpdCB0aGlzLmF1dGhTZXJ2aWNlLkxvYWRUb2tlbigpXHJcbiAgICBpZih0aGlzLmF1dGhTZXJ2aWNlLmlzVG9rZW5WYWxpZChUb2tlbikpe1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvXCJdKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgZnJtOiBGb3JtR3JvdXA7XHJcbiAgQ3JlYXRlRm9ybSgpOiB2b2lke1xyXG4gICAgdGhpcy5mcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgYXBlbGlkbyA6IFtudWxsICxWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgc2VuaGEgICA6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkaW5nOiBib29sZWFuO1xyXG4gIHN1Ym1pdHRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgT25Mb2dpbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIGFzeW5jIExvZ2luKCRldmVudD86IEtleWJvYXJkRXZlbnQpOiBQcm9taXNlPHZvaWQ+e1xyXG4gICAgaWYoJGV2ZW50ICYmICRldmVudC5rZXkgIT0gJ0VudGVyJyl7IHJldHVybjsgfVxyXG5cclxuICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcclxuICAgIHRoaXMubG9hZGluZyAgID0gdHJ1ZTtcclxuICAgXHJcbiAgICBpZighdGhpcy5mcm0udmFsaWQpe1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5nZW5lcmljU2VydmljZS5QcmVzZW50VG9hc3QoXCJVc3VhcmlvIC8gU2VuaGEgbsOjbyBpbmZvcm1hZG8hXCIpOyByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5e1xyXG4gICAgICBjb25zdCBUb2tlbiA9IGF3YWl0IHRoaXMuYXV0aFNlcnZpY2UuTG9naW4odGhpcy5mcm0udmFsdWUpO1xyXG5cclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoXCIvXCIpO1xyXG4gICAgICB0aGlzLmdlbmVyaWNTZXJ2aWNlLlByZXNlbnRUb2FzdChcIkxvZ2FkbyBjb20gc3VjZXNzbyFcIiwgXCJjaGVja21hcmstY2lyY2xlXCIpO1xyXG4gICAgICB0aGlzLk9uTG9naW4uZW1pdChUb2tlbik7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoc3RhdHVzKXtcclxuICAgICAgaWYoc3RhdHVzID09IDQwMSl7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljU2VydmljZS5QcmVzZW50VG9hc3QoXCJVc3XDoXJpbyAvIFNlbmhhIGludsOhbGlkbyAocykhXCIpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLmdlbmVyaWNTZXJ2aWNlLlByZXNlbnRUb2FzdChcIk9jb3JyZXUgdW0gZXJybyBhbyByZWFsaXphciBvIGxvZ2luIVwiKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPCEtLSA8ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHJlbGF0aXZlXCI+XHJcbiAgPGRpdiBjbGFzcz1cImxhbmRzY2FwZTp3LTQvNSBwb3J0cmFpdDp3LWZ1bGwgbGFuZHNjYXBlOmgtMi8zIHBvcnRyYWl0OmgtZnVsbCBsYW5kc2NhcGU6bWF4LXctWzYwcmVtXSB0cmFuc2x1Y2lkLWJvcmRlciBsYW5kc2NhcGU6cm91bmRlZC0zeGwgbGFuZHNjYXBlOmJhY2tkcm9wLWJsdXIteGwgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIGZsZXggcG9ydHJhaXQ6ZmxleC1jb2xcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1pb24tY29sb3ItbGlnaHQpIDIwJSwgdHJhbnNwYXJlbnQgODAlKTtcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNocmluay0wIHctOTYgcG9ydHJhaXQ6dy1mdWxsIHBvcnRyYWl0OmgtMzIgaC1mdWxsIHAtM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLTJ4bCBzaXplLWZ1bGwgb3ZlcmZsb3cteC1oaWRkZW5cIj5cclxuICAgICAgICAgIDxuZy1jb250ZW50IGNsYXNzPVwic2l6ZS1mdWxsXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyb3cgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1mdWxsIHB5LTMgcHItMyBwb3J0cmFpdDpwbC0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInctOTYgaC1mdWxsIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yXCIgKm5nSWY9XCJmcm1cIiBbZm9ybUdyb3VwXT1cImZybVwiPlxyXG5cclxuICAgICAgICAgIDxpb24tdGV4dCBjbGFzcz1cInRleHQtNXhsIG15LTEwIHBvcnRyYWl0Om10LVstNXJlbV1cIj4gTG9naW4gPC9pb24tdGV4dD5cclxuXHJcbiAgICAgICAgICA8aW9uLWNhcmQgY2xhc3M9XCJ3LWZ1bGwgYmFja2Ryb3AtYmx1ci14bFwiPlxyXG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgbGFiZWw9XCJTZW5oYVwiIGxhYmVsUGxhY2VtZW50PVwic3RhY2tlZFwiIGNsYXNzPVwicm91bmRlZC0yeGwgbXktMyB3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwicGVyc29uXCIgc2xvdD1cInN0YXJ0XCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICAgIDxpb24taW5wdXQgcGxhY2Vob2xkZXI9XCJVc3XDoXJpbyAvIFVzZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJhcGVsaWRvXCI+PC9pb24taW5wdXQ+XHJcbiAgICAgICAgICAgICAgPC9pb24taXRlbT5cclxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgPC9pb24tY2FyZD5cclxuXHJcbiAgICAgICAgICA8aW9uLWNhcmQgY2xhc3M9XCJ3LWZ1bGwgYmFja2Ryb3AtYmx1ci14bFwiPiBcclxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiIGNsYXNzPVwicm91bmRlZC0yeGwgbXktMyB3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwibG9jay1jbG9zZWRcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1pbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBmb3JtQ29udHJvbE5hbWU9XCJzZW5oYVwiIHBsYWNlaG9sZGVyPVwiU2VuaGEgLyBQYXNzd29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWlucHV0LXBhc3N3b3JkLXRvZ2dsZSBzbG90PVwiZW5kXCI+PC9pb24taW5wdXQtcGFzc3dvcmQtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgPC9pb24taW5wdXQ+XHJcbiAgICAgICAgICAgICAgPC9pb24taXRlbT5cclxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgPC9pb24tY2FyZD5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJcIj5Fc3F1ZWNldSBhIHNlbmhhPzwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbFwiPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cInJvdW5kZWQtMnhsIHNoYWRvdy14bCBkZWZhdWx0LXRyYW5zaXRpb24gdy1mdWxsXCIgZXhwYW5kPVwiYmxvY2tcIiAoY2xpY2spPVwiTG9naW4oKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgPGlvbi1zcGlubmVyIGNsYXNzPVwiZGVmYXVsdC10cmFuc2l0aW9uXCIgW25nQ2xhc3NdPVwieyctdHJhbnNsYXRlLXgtMTIgb3BhY2l0eS0wIHNpemUtMCc6ICFsb2FkaW5nLCAnbXItMicgOiBsb2FkaW5nfVwiIHNsb3Q9XCJzdGFydFwiPjwvaW9uLXNwaW5uZXI+XHJcbiAgICAgICAgICAgICAgPGlvbi1pY29uICAgIGNsYXNzPVwiZGVmYXVsdC10cmFuc2l0aW9uXCIgW25nQ2xhc3NdPVwieyctdHJhbnNsYXRlLXgtMTIgb3BhY2l0eS0wIHNpemUtMCc6ICBsb2FkaW5nfVwiIG5hbWU9XCJlbnRlci1vdXRsaW5lXCIgc2xvdD1cInN0YXJ0XCIgPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZWZhdWx0LXRyYW5zaXRpb25cIiA+IExvZ2luIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gY2xhc3M9XCJzaHJpbmstMCBhc3BlY3Qtc3F1YXJlIG1sLTNcIiBjb2xvcj1cImRhcmtcIiBoaWRkZW4+XHJcbiAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInNpemUtOFwiIHNsb3Q9XCJpY29uLW9ubHlcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiIHdpZHRoPVwiNjRcIiBoZWlnaHQ9XCI2NFwiPjxkZWZzPjxwYXRoIGlkPVwiQVwiIGQ9XCJNNDQuNSAyMEgyNHY4LjVoMTEuOEMzNC43IDMzLjkgMzAuMSAzNyAyNCAzN2MtNy4yIDAtMTMtNS44LTEzLTEzczUuOC0xMyAxMy0xM2MzLjEgMCA1LjkgMS4xIDguMSAyLjlsNi40LTYuNEMzNC42IDQuMSAyOS42IDIgMjQgMiAxMS44IDIgMiAxMS44IDIgMjRzOS44IDIyIDIyIDIyYzExIDAgMjEtOCAyMS0yMiAwLTEuMy0uMi0yLjctLjUtNHpcIi8+PC9kZWZzPjxjbGlwUGF0aCBpZD1cIkJcIj48dXNlIHhsaW5rOmhyZWY9XCIjQVwiLz48L2NsaXBQYXRoPjxnIHRyYW5zZm9ybT1cIm1hdHJpeCguNzI3MjczIDAgMCAuNzI3MjczIC0uOTU0NTQ1IC0xLjQ1NDU1KVwiPjxwYXRoIGQ9XCJNMCAzN1YxMWwxNyAxM3pcIiBjbGlwLXBhdGg9XCJ1cmwoI0IpXCIgZmlsbD1cIiNmYmJjMDVcIi8+PHBhdGggZD1cIk0wIDExbDE3IDEzIDctNi4xTDQ4IDE0VjBIMHpcIiBjbGlwLXBhdGg9XCJ1cmwoI0IpXCIgZmlsbD1cIiNlYTQzMzVcIi8+PHBhdGggZD1cIk0wIDM3bDMwLTIzIDcuOSAxTDQ4IDB2NDhIMHpcIiBjbGlwLXBhdGg9XCJ1cmwoI0IpXCIgZmlsbD1cIiMzNGE4NTNcIi8+PHBhdGggZD1cIk00OCA0OEwxNyAyNGwtNC0zIDM1LTEwelwiIGNsaXAtcGF0aD1cInVybCgjQilcIiBmaWxsPVwiIzQyODVmNFwiLz48L2c+PC9zdmc+XHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4gLS0+XHJcblxyXG48ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHJlbGF0aXZlIHBvcnRyYWl0OnAtNFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJsYW5kc2NhcGU6dy00LzUgbGFuZHNjYXBlOmgtMi8zIGxhbmRzY2FwZTp4bDptYXgtdy1bNjByZW1dIHBvcnRyYWl0OnNpemUtZnVsbCB0cmFuc2x1Y2lkLWJvcmRlciBiYWNrZHJvcC1ibHVyLXhsIHJvdW5kZWQtM3hsIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNpemUtZnVsbCBmbGV4IHBvcnRyYWl0OmZsZXgtY29sXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0taW9uLWNvbG9yLWxpZ2h0KSAyMCUsIHRyYW5zcGFyZW50IDgwJSk7XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzaHJpbmstMCB3LTk2IHBvcnRyYWl0OnctZnVsbCBwb3J0cmFpdDpoLTQwIGxhbmRzY2FwZTpoLWZ1bGwgcC0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNpemUtZnVsbCByb3VuZGVkLTJ4bCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PWxvZ29dXCIgY2xhc3M9XCJzaXplLWZ1bGxcIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2hyaW5rIHNpemUtZnVsbCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMyBweC0xMCByZWxhdGl2ZVwiICpuZ0lmPVwiZnJtXCIgW2Zvcm1Hcm91cF09XCJmcm1cIj5cclxuICAgICAgICA8aW9uLXRleHQgY2xhc3M9XCJoLTI0IHRleHQtNXhsXCI+IExvZ2luIDwvaW9uLXRleHQ+XHJcblxyXG4gICAgICAgIDxpb24tY2FyZCBjbGFzcz1cInctZnVsbCBiYWNrZHJvcC1ibHVyLXhsXCI+XHJcbiAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiIGxhYmVsPVwiU2VuaGFcIiBsYWJlbFBsYWNlbWVudD1cInN0YWNrZWRcIiBjbGFzcz1cInJvdW5kZWQtMnhsIG15LTMgdy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJwZXJzb25cIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgIDxpb24taW5wdXQgcGxhY2Vob2xkZXI9XCJVc3XDoXJpbyAvIFVzZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJhcGVsaWRvXCI+PC9pb24taW5wdXQ+XHJcbiAgICAgICAgICAgIDwvaW9uLWl0ZW0+XHJcbiAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9pb24tY2FyZD5cclxuXHJcbiAgICAgICAgPGlvbi1jYXJkIGNsYXNzPVwidy1mdWxsIGJhY2tkcm9wLWJsdXIteGxcIj4gXHJcbiAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiIGNsYXNzPVwicm91bmRlZC0yeGwgbXktMyB3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImxvY2stY2xvc2VkXCIgc2xvdD1cInN0YXJ0XCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICA8aW9uLWlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGZvcm1Db250cm9sTmFtZT1cInNlbmhhXCIgcGxhY2Vob2xkZXI9XCJTZW5oYSAvIFBhc3N3b3JkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWlucHV0LXBhc3N3b3JkLXRvZ2dsZSBzbG90PVwiZW5kXCI+PC9pb24taW5wdXQtcGFzc3dvcmQtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgIDwvaW9uLWlucHV0PlxyXG4gICAgICAgICAgICA8L2lvbi1pdGVtPlxyXG4gICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDwvaW9uLWNhcmQ+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbFwiPlxyXG4gICAgICAgICAgPGlvbi1idXR0b24gY2xhc3M9XCJ0cmFuc2l0aW9uLWFsbCByb3VuZGVkLTJ4bCBzaGFkb3cteGwgZGVmYXVsdC10cmFuc2l0aW9uIHctZnVsbFwiIGV4cGFuZD1cImJsb2NrXCIgKGNsaWNrKT1cIkxvZ2luKClcIiBbZGlzYWJsZWRdPVwibG9hZGluZ1wiPlxyXG4gICAgICAgICAgICA8aW9uLXNwaW5uZXIgY2xhc3M9XCJkZWZhdWx0LXRyYW5zaXRpb25cIiBbbmdDbGFzc109XCJ7Jy10cmFuc2xhdGUteC0xMiBvcGFjaXR5LTAgc2l6ZS0wJzogIWxvYWRpbmcsICdtci0yJyA6IGxvYWRpbmd9XCIgc2xvdD1cInN0YXJ0XCI+PC9pb24tc3Bpbm5lcj5cclxuICAgICAgICAgICAgPGlvbi1pY29uICAgIGNsYXNzPVwiZGVmYXVsdC10cmFuc2l0aW9uXCIgW25nQ2xhc3NdPVwieyctdHJhbnNsYXRlLXgtMTIgb3BhY2l0eS0wIHNpemUtMCc6ICBsb2FkaW5nfVwiIG5hbWU9XCJlbnRlci1vdXRsaW5lXCIgc2xvdD1cInN0YXJ0XCIgPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGVmYXVsdC10cmFuc2l0aW9uXCI+IExvZ2luIDwvc3Bhbj5cclxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuXHJcbiAgICAgICAgICA8IS0tIDxpb24tYnV0dG9uIGNsYXNzPVwic2hyaW5rLTAgYXNwZWN0LXNxdWFyZSBtbC0zXCIgY29sb3I9XCJkYXJrXCIgaGlkZGVuPlxyXG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwic2l6ZS04XCIgc2xvdD1cImljb24tb25seVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCIgd2lkdGg9XCI2NFwiIGhlaWdodD1cIjY0XCI+PGRlZnM+PHBhdGggaWQ9XCJBXCIgZD1cIk00NC41IDIwSDI0djguNWgxMS44QzM0LjcgMzMuOSAzMC4xIDM3IDI0IDM3Yy03LjIgMC0xMy01LjgtMTMtMTNzNS44LTEzIDEzLTEzYzMuMSAwIDUuOSAxLjEgOC4xIDIuOWw2LjQtNi40QzM0LjYgNC4xIDI5LjYgMiAyNCAyIDExLjggMiAyIDExLjggMiAyNHM5LjggMjIgMjIgMjJjMTEgMCAyMS04IDIxLTIyIDAtMS4zLS4yLTIuNy0uNS00elwiLz48L2RlZnM+PGNsaXBQYXRoIGlkPVwiQlwiPjx1c2UgeGxpbms6aHJlZj1cIiNBXCIvPjwvY2xpcFBhdGg+PGcgdHJhbnNmb3JtPVwibWF0cml4KC43MjcyNzMgMCAwIC43MjcyNzMgLS45NTQ1NDUgLTEuNDU0NTUpXCI+PHBhdGggZD1cIk0wIDM3VjExbDE3IDEzelwiIGNsaXAtcGF0aD1cInVybCgjQilcIiBmaWxsPVwiI2ZiYmMwNVwiLz48cGF0aCBkPVwiTTAgMTFsMTcgMTMgNy02LjFMNDggMTRWMEgwelwiIGNsaXAtcGF0aD1cInVybCgjQilcIiBmaWxsPVwiI2VhNDMzNVwiLz48cGF0aCBkPVwiTTAgMzdsMzAtMjMgNy45IDFMNDggMHY0OEgwelwiIGNsaXAtcGF0aD1cInVybCgjQilcIiBmaWxsPVwiIzM0YTg1M1wiLz48cGF0aCBkPVwiTTQ4IDQ4TDE3IDI0bC00LTMgMzUtMTB6XCIgY2xpcC1wYXRoPVwidXJsKCNCKVwiIGZpbGw9XCIjNDI4NWY0XCIvPjwvZz48L3N2Zz5cclxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzbG90PWVuZF1cIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2xvZ2luL2xvZ2luLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9sb2dpbi9sb2dpbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFhLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7OztBQWMxRCxNQUFNLE9BQU8scUJBQXFCO0lBRWhDLFlBQ1UsRUFBZSxFQUNmLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLFdBQXdCLEVBQ3pCLHFCQUE0QyxFQUM1QyxXQUErQixFQUM5QixNQUFjO1FBTmQsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixnQkFBVyxHQUFY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QUM7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzsrR0F2RVUscUJBQXFCO21HQUFyQixxQkFBcUIsZ1JDdkJsQyxvMk9BdUdNLHNzQ0R6RkYsWUFBWSxnT0FDWixXQUFXLDY1REFDWCxXQUFXLGtTQUNYLG1CQUFtQjs7NEZBTVYscUJBQXFCO2tCQVpqQyxTQUFTO2lDQUNJLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsV0FBVzt3QkFDWCxtQkFBbUI7cUJBQ3BCLFlBQ1MsT0FBTzs2UEF5Q1AsT0FBTztzQkFBaEIsTUFBTTtnQkFDc0IsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBR3JCLEtBQUs7c0JBRFYsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElvbmljTW9kdWxlLCBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW52aXJvbm1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwaVVybFByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dlYi9hcGktdXJsLXByb3ZpZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHZW5lcmljU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dlbmVyaWNzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIElvbmljTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gIF0sXHJcbiAgc2VsZWN0b3I6ICdsb2dpbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sb2dpbi5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGVmYXVsdExvZ2luQ29tcG9uZW50ICBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGdlbmVyaWNTZXJ2aWNlOiBHZW5lcmljU2VydmljZSxcclxuICAgIHByaXZhdGUgbmF2Q29udHJvbGxlcjogTmF2Q29udHJvbGxlcixcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHVibGljIGFwaVVybFByb3ZpZGVyU2VydmljZTogQXBpVXJsUHJvdmlkZXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIGNvcmVTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7IFxyXG4gICAgdGhpcy5nZW5lcmljU2VydmljZS5TZXRUaXRsZShcIkxvZ2luXCIpO1xyXG4gIH1cclxuICBcclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuQ3JlYXRlRm9ybSgpO1xyXG5cclxuICAgIGlmKCF0aGlzLmNvcmVTZXJ2aWNlLmVudmlyb25tZW50LnByb2R1Y3Rpb24pe1xyXG4gICAgICB0aGlzLmZybS5wYXRjaFZhbHVlKHRoaXMuY29yZVNlcnZpY2UuZW52aXJvbm1lbnQuZGVmYXVsdENyZWRlbnRpYWxzKTsgXHJcbiAgICB9XHJcbiAgICBjb25zdCBUb2tlbiA9IGF3YWl0IHRoaXMuYXV0aFNlcnZpY2UuTG9hZFRva2VuKClcclxuICAgIGlmKHRoaXMuYXV0aFNlcnZpY2UuaXNUb2tlblZhbGlkKFRva2VuKSl7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9cIl0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBmcm06IEZvcm1Hcm91cDtcclxuICBDcmVhdGVGb3JtKCk6IHZvaWR7XHJcbiAgICB0aGlzLmZybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBhcGVsaWRvIDogW251bGwgLFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBzZW5oYSAgIDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgc3VibWl0dGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBPbkxvZ2luOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2xvZ2luQ29udGFpbmVyJykgbG9naW5Db250YWluZXI6IEhUTUxFbGVtZW50O1xyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgYXN5bmMgTG9naW4oJGV2ZW50PzogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD57XHJcbiAgICBpZigkZXZlbnQgJiYgJGV2ZW50LmtleSAhPSAnRW50ZXInKXsgcmV0dXJuOyB9XHJcbiAgICBpZigkZXZlbnQgJiYgIXRoaXMubG9naW5Db250YWluZXIuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpe1xyXG4gICAgICByZXR1cm47IC8vIFByZXZlbnQgbG9naW4gaWYgdGhlIGFjdGl2ZSBlbGVtZW50IGlzIG5vdCB3aXRoaW4gdGhlIGxvZ2luIGNvbnRhaW5lclxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcclxuICAgIHRoaXMubG9hZGluZyAgID0gdHJ1ZTtcclxuICAgXHJcbiAgICBpZighdGhpcy5mcm0udmFsaWQpe1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5nZW5lcmljU2VydmljZS5QcmVzZW50VG9hc3QoXCJVc3VhcmlvIC8gU2VuaGEgbsOjbyBpbmZvcm1hZG8hXCIpOyByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5e1xyXG4gICAgICBjb25zdCBUb2tlbiA9IGF3YWl0IHRoaXMuYXV0aFNlcnZpY2UuTG9naW4odGhpcy5mcm0udmFsdWUpO1xyXG5cclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoXCIvXCIpO1xyXG4gICAgICB0aGlzLmdlbmVyaWNTZXJ2aWNlLlByZXNlbnRUb2FzdChcIkxvZ2FkbyBjb20gc3VjZXNzbyFcIiwgXCJjaGVja21hcmstY2lyY2xlXCIpO1xyXG4gICAgICB0aGlzLk9uTG9naW4uZW1pdChUb2tlbik7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoc3RhdHVzKXtcclxuICAgICAgaWYoc3RhdHVzID09IDQwMSl7XHJcbiAgICAgICAgdGhpcy5nZW5lcmljU2VydmljZS5QcmVzZW50VG9hc3QoXCJVc3XDoXJpbyAvIFNlbmhhIGludsOhbGlkbyAocykhXCIpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLmdlbmVyaWNTZXJ2aWNlLlByZXNlbnRUb2FzdChcIk9jb3JyZXUgdW0gZXJybyBhbyByZWFsaXphciBvIGxvZ2luIVwiKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPCEtLSA8ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHJlbGF0aXZlXCI+XHJcbiAgPGRpdiBjbGFzcz1cImxhbmRzY2FwZTp3LTQvNSBwb3J0cmFpdDp3LWZ1bGwgbGFuZHNjYXBlOmgtMi8zIHBvcnRyYWl0OmgtZnVsbCBsYW5kc2NhcGU6bWF4LXctWzYwcmVtXSB0cmFuc2x1Y2lkLWJvcmRlciBsYW5kc2NhcGU6cm91bmRlZC0zeGwgbGFuZHNjYXBlOmJhY2tkcm9wLWJsdXIteGwgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2l6ZS1mdWxsIGZsZXggcG9ydHJhaXQ6ZmxleC1jb2xcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1pb24tY29sb3ItbGlnaHQpIDIwJSwgdHJhbnNwYXJlbnQgODAlKTtcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNocmluay0wIHctOTYgcG9ydHJhaXQ6dy1mdWxsIHBvcnRyYWl0OmgtMzIgaC1mdWxsIHAtM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLTJ4bCBzaXplLWZ1bGwgb3ZlcmZsb3cteC1oaWRkZW5cIj5cclxuICAgICAgICAgIDxuZy1jb250ZW50IGNsYXNzPVwic2l6ZS1mdWxsXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImdyb3cgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1mdWxsIHB5LTMgcHItMyBwb3J0cmFpdDpwbC0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInctOTYgaC1mdWxsIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yXCIgKm5nSWY9XCJmcm1cIiBbZm9ybUdyb3VwXT1cImZybVwiPlxyXG5cclxuICAgICAgICAgIDxpb24tdGV4dCBjbGFzcz1cInRleHQtNXhsIG15LTEwIHBvcnRyYWl0Om10LVstNXJlbV1cIj4gTG9naW4gPC9pb24tdGV4dD5cclxuXHJcbiAgICAgICAgICA8aW9uLWNhcmQgY2xhc3M9XCJ3LWZ1bGwgYmFja2Ryb3AtYmx1ci14bFwiPlxyXG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgbGFiZWw9XCJTZW5oYVwiIGxhYmVsUGxhY2VtZW50PVwic3RhY2tlZFwiIGNsYXNzPVwicm91bmRlZC0yeGwgbXktMyB3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwicGVyc29uXCIgc2xvdD1cInN0YXJ0XCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICAgIDxpb24taW5wdXQgcGxhY2Vob2xkZXI9XCJVc3XDoXJpbyAvIFVzZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJhcGVsaWRvXCI+PC9pb24taW5wdXQ+XHJcbiAgICAgICAgICAgICAgPC9pb24taXRlbT5cclxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgPC9pb24tY2FyZD5cclxuXHJcbiAgICAgICAgICA8aW9uLWNhcmQgY2xhc3M9XCJ3LWZ1bGwgYmFja2Ryb3AtYmx1ci14bFwiPiBcclxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiIGNsYXNzPVwicm91bmRlZC0yeGwgbXktMyB3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwibG9jay1jbG9zZWRcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1pbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBmb3JtQ29udHJvbE5hbWU9XCJzZW5oYVwiIHBsYWNlaG9sZGVyPVwiU2VuaGEgLyBQYXNzd29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWlucHV0LXBhc3N3b3JkLXRvZ2dsZSBzbG90PVwiZW5kXCI+PC9pb24taW5wdXQtcGFzc3dvcmQtdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgPC9pb24taW5wdXQ+XHJcbiAgICAgICAgICAgICAgPC9pb24taXRlbT5cclxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgPC9pb24tY2FyZD5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCJcIj5Fc3F1ZWNldSBhIHNlbmhhPzwvYT5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbFwiPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBjbGFzcz1cInJvdW5kZWQtMnhsIHNoYWRvdy14bCBkZWZhdWx0LXRyYW5zaXRpb24gdy1mdWxsXCIgZXhwYW5kPVwiYmxvY2tcIiAoY2xpY2spPVwiTG9naW4oKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgPGlvbi1zcGlubmVyIGNsYXNzPVwiZGVmYXVsdC10cmFuc2l0aW9uXCIgW25nQ2xhc3NdPVwieyctdHJhbnNsYXRlLXgtMTIgb3BhY2l0eS0wIHNpemUtMCc6ICFsb2FkaW5nLCAnbXItMicgOiBsb2FkaW5nfVwiIHNsb3Q9XCJzdGFydFwiPjwvaW9uLXNwaW5uZXI+XHJcbiAgICAgICAgICAgICAgPGlvbi1pY29uICAgIGNsYXNzPVwiZGVmYXVsdC10cmFuc2l0aW9uXCIgW25nQ2xhc3NdPVwieyctdHJhbnNsYXRlLXgtMTIgb3BhY2l0eS0wIHNpemUtMCc6ICBsb2FkaW5nfVwiIG5hbWU9XCJlbnRlci1vdXRsaW5lXCIgc2xvdD1cInN0YXJ0XCIgPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkZWZhdWx0LXRyYW5zaXRpb25cIiA+IExvZ2luIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gY2xhc3M9XCJzaHJpbmstMCBhc3BlY3Qtc3F1YXJlIG1sLTNcIiBjb2xvcj1cImRhcmtcIiBoaWRkZW4+XHJcbiAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInNpemUtOFwiIHNsb3Q9XCJpY29uLW9ubHlcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiIHdpZHRoPVwiNjRcIiBoZWlnaHQ9XCI2NFwiPjxkZWZzPjxwYXRoIGlkPVwiQVwiIGQ9XCJNNDQuNSAyMEgyNHY4LjVoMTEuOEMzNC43IDMzLjkgMzAuMSAzNyAyNCAzN2MtNy4yIDAtMTMtNS44LTEzLTEzczUuOC0xMyAxMy0xM2MzLjEgMCA1LjkgMS4xIDguMSAyLjlsNi40LTYuNEMzNC42IDQuMSAyOS42IDIgMjQgMiAxMS44IDIgMiAxMS44IDIgMjRzOS44IDIyIDIyIDIyYzExIDAgMjEtOCAyMS0yMiAwLTEuMy0uMi0yLjctLjUtNHpcIi8+PC9kZWZzPjxjbGlwUGF0aCBpZD1cIkJcIj48dXNlIHhsaW5rOmhyZWY9XCIjQVwiLz48L2NsaXBQYXRoPjxnIHRyYW5zZm9ybT1cIm1hdHJpeCguNzI3MjczIDAgMCAuNzI3MjczIC0uOTU0NTQ1IC0xLjQ1NDU1KVwiPjxwYXRoIGQ9XCJNMCAzN1YxMWwxNyAxM3pcIiBjbGlwLXBhdGg9XCJ1cmwoI0IpXCIgZmlsbD1cIiNmYmJjMDVcIi8+PHBhdGggZD1cIk0wIDExbDE3IDEzIDctNi4xTDQ4IDE0VjBIMHpcIiBjbGlwLXBhdGg9XCJ1cmwoI0IpXCIgZmlsbD1cIiNlYTQzMzVcIi8+PHBhdGggZD1cIk0wIDM3bDMwLTIzIDcuOSAxTDQ4IDB2NDhIMHpcIiBjbGlwLXBhdGg9XCJ1cmwoI0IpXCIgZmlsbD1cIiMzNGE4NTNcIi8+PHBhdGggZD1cIk00OCA0OEwxNyAyNGwtNC0zIDM1LTEwelwiIGNsaXAtcGF0aD1cInVybCgjQilcIiBmaWxsPVwiIzQyODVmNFwiLz48L2c+PC9zdmc+XHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4gLS0+XHJcblxyXG48ZGl2ICNsb2dpbkNvbnRhaW5lciBjbGFzcz1cInNpemUtZnVsbCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciByZWxhdGl2ZSBwb3J0cmFpdDpwLTRcIj5cclxuICA8ZGl2IGNsYXNzPVwibGFuZHNjYXBlOnctNC81IGxhbmRzY2FwZTpoLTIvMyBsYW5kc2NhcGU6eGw6bWF4LXctWzYwcmVtXSBwb3J0cmFpdDpzaXplLWZ1bGwgdHJhbnNsdWNpZC1ib3JkZXIgYmFja2Ryb3AtYmx1ci14bCByb3VuZGVkLTN4bCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaXplLWZ1bGwgZmxleCBwb3J0cmFpdDpmbGV4LWNvbFwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWlvbi1jb2xvci1saWdodCkgMjAlLCB0cmFuc3BhcmVudCA4MCUpO1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2hyaW5rLTAgdy05NiBwb3J0cmFpdDp3LWZ1bGwgcG9ydHJhaXQ6aC00MCBsYW5kc2NhcGU6aC1mdWxsIHAtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaXplLWZ1bGwgcm91bmRlZC0yeGwgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1sb2dvXVwiIGNsYXNzPVwic2l6ZS1mdWxsXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNocmluayBzaXplLWZ1bGwgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTMgcHgtMTAgcmVsYXRpdmVcIiAqbmdJZj1cImZybVwiIFtmb3JtR3JvdXBdPVwiZnJtXCI+XHJcbiAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaC0yNCB0ZXh0LTV4bFwiPiBMb2dpbiA8L2lvbi10ZXh0PlxyXG5cclxuICAgICAgICA8aW9uLWNhcmQgY2xhc3M9XCJ3LWZ1bGwgYmFja2Ryb3AtYmx1ci14bFwiPlxyXG4gICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiBsYWJlbD1cIlNlbmhhXCIgbGFiZWxQbGFjZW1lbnQ9XCJzdGFja2VkXCIgY2xhc3M9XCJyb3VuZGVkLTJ4bCBteS0zIHctZnVsbFwiPlxyXG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwicGVyc29uXCIgc2xvdD1cInN0YXJ0XCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICA8aW9uLWlucHV0IHBsYWNlaG9sZGVyPVwiVXN1w6FyaW8gLyBVc2VyXCIgZm9ybUNvbnRyb2xOYW1lPVwiYXBlbGlkb1wiPjwvaW9uLWlucHV0PlxyXG4gICAgICAgICAgICA8L2lvbi1pdGVtPlxyXG4gICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgIDwvaW9uLWNhcmQ+XHJcblxyXG4gICAgICAgIDxpb24tY2FyZCBjbGFzcz1cInctZnVsbCBiYWNrZHJvcC1ibHVyLXhsXCI+IFxyXG4gICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiBjbGFzcz1cInJvdW5kZWQtMnhsIG15LTMgdy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJsb2NrLWNsb3NlZFwiIHNsb3Q9XCJzdGFydFwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgICAgPGlvbi1pbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBmb3JtQ29udHJvbE5hbWU9XCJzZW5oYVwiIHBsYWNlaG9sZGVyPVwiU2VuaGEgLyBQYXNzd29yZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1pbnB1dC1wYXNzd29yZC10b2dnbGUgc2xvdD1cImVuZFwiPjwvaW9uLWlucHV0LXBhc3N3b3JkLXRvZ2dsZT5cclxuICAgICAgICAgICAgICA8L2lvbi1pbnB1dD5cclxuICAgICAgICAgICAgPC9pb24taXRlbT5cclxuICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICA8L2lvbi1jYXJkPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGxcIj5cclxuICAgICAgICAgIDxpb24tYnV0dG9uIGNsYXNzPVwidHJhbnNpdGlvbi1hbGwgcm91bmRlZC0yeGwgc2hhZG93LXhsIGRlZmF1bHQtdHJhbnNpdGlvbiB3LWZ1bGxcIiBleHBhbmQ9XCJibG9ja1wiIChjbGljayk9XCJMb2dpbigpXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdcIj5cclxuICAgICAgICAgICAgPGlvbi1zcGlubmVyIGNsYXNzPVwiZGVmYXVsdC10cmFuc2l0aW9uXCIgW25nQ2xhc3NdPVwieyctdHJhbnNsYXRlLXgtMTIgb3BhY2l0eS0wIHNpemUtMCc6ICFsb2FkaW5nLCAnbXItMicgOiBsb2FkaW5nfVwiIHNsb3Q9XCJzdGFydFwiPjwvaW9uLXNwaW5uZXI+XHJcbiAgICAgICAgICAgIDxpb24taWNvbiAgICBjbGFzcz1cImRlZmF1bHQtdHJhbnNpdGlvblwiIFtuZ0NsYXNzXT1cInsnLXRyYW5zbGF0ZS14LTEyIG9wYWNpdHktMCBzaXplLTAnOiAgbG9hZGluZ31cIiBuYW1lPVwiZW50ZXItb3V0bGluZVwiIHNsb3Q9XCJzdGFydFwiID48L2lvbi1pY29uPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRlZmF1bHQtdHJhbnNpdGlvblwiPiBMb2dpbiA8L3NwYW4+XHJcbiAgICAgICAgICA8L2lvbi1idXR0b24+XHJcblxyXG4gICAgICAgICAgPCEtLSA8aW9uLWJ1dHRvbiBjbGFzcz1cInNocmluay0wIGFzcGVjdC1zcXVhcmUgbWwtM1wiIGNvbG9yPVwiZGFya1wiIGhpZGRlbj5cclxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInNpemUtOFwiIHNsb3Q9XCJpY29uLW9ubHlcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiIHdpZHRoPVwiNjRcIiBoZWlnaHQ9XCI2NFwiPjxkZWZzPjxwYXRoIGlkPVwiQVwiIGQ9XCJNNDQuNSAyMEgyNHY4LjVoMTEuOEMzNC43IDMzLjkgMzAuMSAzNyAyNCAzN2MtNy4yIDAtMTMtNS44LTEzLTEzczUuOC0xMyAxMy0xM2MzLjEgMCA1LjkgMS4xIDguMSAyLjlsNi40LTYuNEMzNC42IDQuMSAyOS42IDIgMjQgMiAxMS44IDIgMiAxMS44IDIgMjRzOS44IDIyIDIyIDIyYzExIDAgMjEtOCAyMS0yMiAwLTEuMy0uMi0yLjctLjUtNHpcIi8+PC9kZWZzPjxjbGlwUGF0aCBpZD1cIkJcIj48dXNlIHhsaW5rOmhyZWY9XCIjQVwiLz48L2NsaXBQYXRoPjxnIHRyYW5zZm9ybT1cIm1hdHJpeCguNzI3MjczIDAgMCAuNzI3MjczIC0uOTU0NTQ1IC0xLjQ1NDU1KVwiPjxwYXRoIGQ9XCJNMCAzN1YxMWwxNyAxM3pcIiBjbGlwLXBhdGg9XCJ1cmwoI0IpXCIgZmlsbD1cIiNmYmJjMDVcIi8+PHBhdGggZD1cIk0wIDExbDE3IDEzIDctNi4xTDQ4IDE0VjBIMHpcIiBjbGlwLXBhdGg9XCJ1cmwoI0IpXCIgZmlsbD1cIiNlYTQzMzVcIi8+PHBhdGggZD1cIk0wIDM3bDMwLTIzIDcuOSAxTDQ4IDB2NDhIMHpcIiBjbGlwLXBhdGg9XCJ1cmwoI0IpXCIgZmlsbD1cIiMzNGE4NTNcIi8+PHBhdGggZD1cIk00OCA0OEwxNyAyNGwtNC0zIDM1LTEwelwiIGNsaXAtcGF0aD1cInVybCgjQilcIiBmaWxsPVwiIzQyODVmNFwiLz48L2c+PC9zdmc+XHJcbiAgICAgICAgICA8L2lvbi1idXR0b24+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc2xvdD1lbmRdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4iXX0=