{"version":3,"file":"moxa-formoxa-mx-select-search.mjs","sources":["../../../../libs/formoxa/mx-select-search/src/lib/services/mx-select-search-intl.service.ts","../../../../libs/formoxa/mx-select-search/src/lib/components/mx-select-search.component.ts","../../../../libs/formoxa/mx-select-search/src/moxa-formoxa-mx-select-search.ts"],"sourcesContent":["import { Injectable, Optional, Provider, SkipSelf } from '@angular/core';\nimport { TranslationLabels, TranslationService } from '@moxa/formoxa/mx-shared';\n\nexport interface MxSelectSearchIntlLabels extends TranslationLabels {\n  searchLabel: string;\n  selectAllLabel: string;\n  clearSelectionLabel: string;\n  selectedLabel: string;\n  totalLabel: string;\n  matchFoundLabel: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class MxSelectSearchIntlService extends TranslationService<MxSelectSearchIntlLabels> {\n  defaultLabels: MxSelectSearchIntlLabels = {\n    searchLabel: 'Search',\n    selectAllLabel: 'Select all',\n    clearSelectionLabel: 'Clear selection',\n    selectedLabel: 'Selected',\n    totalLabel: 'Total',\n    matchFoundLabel: 'match(es) found'\n  };\n\n  constructor() {\n    super();\n    this.registerTranslations('en', this.defaultLabels);\n  }\n}\n\nfunction MX_SELECT_SEARCH_INTL_PROVIDER_FACTORY(parent: MxSelectSearchIntlService): MxSelectSearchIntlService {\n  return parent || new MxSelectSearchIntlService();\n}\n\nexport const MX_SELECT_SEARCH_INTL_PROVIDER: Provider = {\n  provide: MxSelectSearchIntlService,\n  useFactory: MX_SELECT_SEARCH_INTL_PROVIDER_FACTORY,\n  deps: [[new Optional(), new SkipSelf(), MxSelectSearchIntlService]]\n};\n","import { FocusMonitor } from '@angular/cdk/a11y';\nimport {\n  AfterViewInit,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  model,\n  OnDestroy,\n  Renderer2,\n  signal,\n  untracked,\n  viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormBuilder, FormsModule, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MAT_FORM_FIELD, MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Subject } from 'rxjs';\n\nimport { MxFormFieldDirective } from '@moxa/formoxa/mx-form-field';\nimport { MxSelectSearchOption } from '../models/mx-select-search.model';\nimport { MX_SELECT_SEARCH_INTL_PROVIDER, MxSelectSearchIntlService } from '../services/mx-select-search-intl.service';\n\ninterface OptionItem {\n  label: string;\n  value: string;\n  hidden: boolean;\n  disabled?: boolean;\n  tooltip?: string;\n  tooltipDisabled?: boolean;\n}\n\ninterface OptionGroupItem {\n  groupName: string;\n  children: OptionItem[];\n  isExpanded: boolean;\n}\n\n@Component({\n  selector: 'mx-select-search',\n  imports: [\n    ReactiveFormsModule,\n    FormsModule,\n    MatFormFieldModule,\n    MatInputModule,\n    MatSelectModule,\n    MatDividerModule,\n    MatIconModule,\n    MatButtonModule,\n    MatCheckboxModule,\n    MatTooltipModule,\n    MxFormFieldDirective\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styleUrls: ['./mx-select-search.component.scss'],\n  template: `\n    <div [formGroup]=\"form\" class=\"mx-select-search\" [attr.aria-labelledby]=\"_formField?.getLabelId()\">\n      <mat-select\n        formControlName=\"selectedValues\"\n        #select\n        multiple\n        panelClass=\"mx-select-search__panel-wrapper\"\n        (ngModelChange)=\"_handleSelectChange($event)\"\n        (focus)=\"onFocusIn()\"\n        (focusout)=\"onFocusOut($event)\"\n      >\n        <mat-select-trigger>\n          <div #triggerWrapper>\n            <ng-content select=\"[mx-select-search-trigger]\"></ng-content>\n          </div>\n\n          @if (!_hasProjectedTrigger()) {\n            {{ defaultSelectedDisplay() }}\n          }\n        </mat-select-trigger>\n\n        <div class=\"mx-select-search__panel-header\">\n          <div class=\"mx-select-search__panel-header__content\">\n            <mat-form-field class=\"mx-select-search__panel-header__content__search\" mxFormField mxFormFieldDense>\n              <mat-icon matPrefix svgIcon=\"icon:search\"></mat-icon>\n              <input\n                #searchInput\n                matInput\n                [placeholder]=\"intl.translate('searchLabel')\"\n                [(ngModel)]=\"_keyword\"\n                [ngModelOptions]=\"{ standalone: true }\"\n                (keydown)=\"$event.stopPropagation()\"\n              />\n              @if (_keyword()) {\n                <button matSuffix type=\"button\" mat-icon-button (click)=\"_keyword.set('')\">\n                  <mat-icon svgIcon=\"icon:clear\"></mat-icon>\n                </button>\n              }\n            </mat-form-field>\n            <div class=\"mx-select-search__panel-header__content__toolbar\">\n              <button\n                mat-button\n                color=\"primary\"\n                type=\"button\"\n                class=\"mx-select-search__panel-header__select-all-btn\"\n                [disabled]=\"isSelectAllDisabled()\"\n                (click)=\"_onSelectAll()\"\n              >\n                {{ intl.translate('selectAllLabel') }}\n              </button>\n              <button\n                mat-button\n                color=\"primary\"\n                type=\"button\"\n                class=\"mx-select-search__panel-header__clear-selection-btn\"\n                [disabled]=\"isClearSelectionDisabled()\"\n                (click)=\"_onClearAll()\"\n              >\n                {{ intl.translate('clearSelectionLabel') }}\n              </button>\n            </div>\n          </div>\n          <mat-divider></mat-divider>\n        </div>\n\n        <div class=\"mx-select-search__panel-content\">\n          <div class=\"mx-select-search__panel-content__content\">\n            @if (_keyword()) {\n              <div class=\"mx-select-search__panel-content__content__filter-count\">\n                {{ _filteredOptionCount() }} {{ intl.translate('matchFoundLabel') }}\n              </div>\n            }\n\n            @for (option of _displayOptionList(); track option) {\n              @if (_isOptionGroupItem(option)) {\n                <div\n                  class=\"mx-select-search__panel-content__content__option-group-wrapper\"\n                  [class.mx-select-search__panel-content__content__option-group-wrapper--hidden]=\"_isHideGroup(option)\"\n                >\n                  <div class=\"mx-select-search__panel-content__content__option-group\">\n                    <button type=\"button\" mat-icon-button (click)=\"option.isExpanded = !option.isExpanded\">\n                      <mat-icon\n                        [svgIcon]=\"option.isExpanded ? 'icon:keyboard_arrow_down' : 'icon:navigate_next'\"\n                      ></mat-icon>\n                    </button>\n                    <mat-checkbox\n                      class=\"mx-select-search__panel-content__content__option-group__checkbox\"\n                      [disabled]=\"_isDisabledGroup(option)\"\n                      [checked]=\"_isGroupAllChecked(option.children)\"\n                      [indeterminate]=\"!_isGroupAllChecked(option.children) && _isGroupPartialChecked(option.children)\"\n                      (change)=\"_onChangeGroupCheck(option.children, $event)\"\n                    >\n                      {{ option.groupName }}\n                    </mat-checkbox>\n                  </div>\n                  <div\n                    class=\"mx-select-search__panel-content__content__nested-option-wrapper\"\n                    [hidden]=\"!option.isExpanded\"\n                  >\n                    @for (option of option.children; track option.value) {\n                      <div\n                        [matTooltip]=\"option.tooltip || ''\"\n                        [matTooltipDisabled]=\"!option.disabled || !option.tooltip || option.tooltipDisabled\"\n                      >\n                        <mat-option\n                          class=\"mx-select-search__panel-content__content__nested-option\"\n                          [disabled]=\"option.disabled\"\n                          [class.mx-select-search__panel-content__nested-option--hidden]=\"option.hidden\"\n                          [value]=\"option.value\"\n                        >\n                          {{ option.label || noDataSymbol() }}\n                        </mat-option>\n                      </div>\n                    }\n                  </div>\n                </div>\n              } @else {\n                <div\n                  [matTooltip]=\"option.tooltip || ''\"\n                  [matTooltipDisabled]=\"!option.disabled || !option.tooltip || option.tooltipDisabled\"\n                >\n                  <mat-option\n                    class=\"mx-select-search__panel-content__content__option\"\n                    [disabled]=\"option.disabled\"\n                    [class.mx-select-search__panel-content__content__option--hidden]=\"option.hidden\"\n                    [value]=\"option.value\"\n                  >\n                    {{ option.label || noDataSymbol() }}\n                  </mat-option>\n                </div>\n              }\n            }\n          </div>\n        </div>\n\n        <div class=\"mx-select-search__panel-footer\">\n          {{ intl.translate('selectedLabel') }}: {{ form.get('selectedValues')?.value?.length || 0 }},\n          {{ intl.translate('totalLabel') }}:\n          {{ options().length }}\n        </div>\n      </mat-select>\n    </div>\n  `,\n  providers: [{ provide: MatFormFieldControl, useExisting: MxSelectSearchComponent }, MX_SELECT_SEARCH_INTL_PROVIDER],\n  host: {\n    '[id]': 'id'\n  }\n})\nexport class MxSelectSearchComponent\n  implements ControlValueAccessor, MatFormFieldControl<string[]>, OnDestroy, AfterViewInit\n{\n  static nextId = 0;\n  ngControl = inject(NgControl, { optional: true, self: true });\n  readonly stateChanges = new Subject<void>();\n  readonly touched = signal(false);\n  readonly controlType = 'one-ui-nested-select';\n  readonly id = `one-ui-nested-select-${MxSelectSearchComponent.nextId++}`;\n  readonly searchInput = viewChild.required<HTMLInputElement>('searchInput');\n  readonly triggerWrapperEl = viewChild.required<ElementRef<HTMLElement>>('triggerWrapper');\n  readonly shouldLabelFloat = true;\n  readonly _userAriaDescribedBy = input<string>('', { alias: 'aria-describedby' });\n  readonly _placeholder = input<string>('', { alias: 'placeholder' });\n  readonly _required = input<boolean, unknown>(false, {\n    alias: 'required',\n    transform: booleanAttribute\n  });\n  readonly _disabledByInput = input<boolean, unknown>(false, {\n    alias: 'disabled',\n    transform: booleanAttribute\n  });\n  readonly _value = model<string[] | null>(null, { alias: 'value' });\n  onChange!: (value: any) => void;\n  onTouched!: () => void;\n\n  protected readonly _formField = inject(MAT_FORM_FIELD, {\n    optional: true\n  });\n\n  private readonly _focused = signal(false);\n  private readonly _disabledByCva = signal(false);\n  private readonly _disabled = computed(() => this._disabledByInput() || this._disabledByCva());\n  private readonly _focusMonitor = inject(FocusMonitor);\n  private readonly _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n  private readonly _fb = inject(FormBuilder);\n  private readonly _renderer = inject(Renderer2);\n  private _mutationObserver!: MutationObserver;\n\n  intl = inject(MxSelectSearchIntlService);\n\n  options = input<MxSelectSearchOption[]>([]);\n  noDataSymbol = input('--');\n\n  form = this._fb.group({\n    selectedValues: this._fb.control<string[]>([])\n  });\n\n  /* Select Panel */\n  _displayOptionList = signal<Array<OptionGroupItem | OptionItem>>([]);\n  _keyword = signal('');\n  _filteredOptionCount = signal(0);\n  _hasProjectedTrigger = signal(false);\n\n  #valueSet = signal<Set<string>>(new Set());\n  #valueLabelMap = signal<Map<string, string>>(new Map());\n\n  get focused(): boolean {\n    return this._focused();\n  }\n\n  get empty() {\n    return !!this.form.value.selectedValues?.length;\n  }\n\n  get userAriaDescribedBy() {\n    return this._userAriaDescribedBy();\n  }\n\n  get placeholder(): string {\n    return this._placeholder();\n  }\n\n  get required(): boolean {\n    return this._required();\n  }\n\n  get disabled(): boolean {\n    return this._disabled();\n  }\n\n  get value(): string[] | null {\n    return this._value();\n  }\n\n  get errorState(): boolean {\n    return (this.form.invalid || !!this.ngControl?.invalid) && this.touched();\n  }\n\n  defaultSelectedDisplay = computed(() => {\n    const values = this._value() ?? [];\n    return values.map((val) => this.#valueLabelMap().get(val) || '').join(', ');\n  });\n\n  isSelectAllDisabled = computed(() => {\n    const values = this.#valueSet();\n    return this.options()\n      .filter((option) => !option.disabled)\n      .every((option) => values.has(option.value));\n  });\n\n  isClearSelectionDisabled = computed(() => {\n    const values = this._value() ?? [];\n    return !values.length;\n  });\n\n  constructor() {\n    if (this.ngControl != null) {\n      this.ngControl.valueAccessor = this;\n    }\n\n    effect(() => {\n      this._placeholder();\n      this._required();\n      this._disabled();\n      untracked(() => this.stateChanges.next());\n    });\n\n    effect(() => {\n      if (this._disabled()) {\n        untracked(() => this.form.disable());\n      } else {\n        untracked(() => this.form.enable());\n      }\n    });\n\n    effect(() => {\n      const value = this._value() || [];\n      untracked(() => this.form.controls.selectedValues.setValue(value));\n    });\n\n    effect(() => {\n      const options = this.options();\n      this.#valueLabelMap.set(new Map(options.map((option) => [option.value, option.label])));\n    });\n\n    this.form.statusChanges.pipe(takeUntilDestroyed()).subscribe(() => {\n      this.stateChanges.next();\n    });\n\n    this.form.valueChanges.pipe(takeUntilDestroyed()).subscribe((control) => {\n      this.#updateValue(control.selectedValues as string[]);\n    });\n\n    /* Select Panel */\n    effect(() => {\n      const options = this.options();\n      const groupMap = new Map<string, OptionGroupItem>();\n      const finalList: Array<OptionGroupItem | OptionItem> = [];\n\n      for (const option of options) {\n        const item: OptionItem = {\n          label: option.label,\n          value: option.value,\n          disabled: option.disabled,\n          tooltip: option.tooltip,\n          tooltipDisabled: option.tooltipDisabled,\n          hidden: false\n        };\n\n        if (option.groupName) {\n          let group = groupMap.get(option.groupName);\n          if (!group) {\n            group = {\n              groupName: option.groupName,\n              children: [],\n              isExpanded: true\n            };\n            groupMap.set(option.groupName, group);\n            finalList.push(group);\n          }\n          group.children.push(item);\n        } else {\n          finalList.push(item);\n        }\n      }\n\n      this._displayOptionList.set(finalList);\n    });\n\n    effect(() => {\n      const filterValue = this._keyword() ? this._keyword().toLowerCase() : '';\n\n      untracked(() => {\n        const optionList = this._displayOptionList();\n        let filteredCount = 0;\n\n        optionList.forEach((item) => {\n          const children = 'children' in item ? item.children : [item];\n\n          children.forEach((subItem) => {\n            const filterStr = 'groupName' in item ? `${item.groupName} ${subItem.label}` : subItem.label;\n            const keywordIncluded = filterStr.toLowerCase().includes(filterValue);\n\n            subItem.hidden = !keywordIncluded;\n            if (keywordIncluded) filteredCount++;\n          });\n        });\n\n        this._filteredOptionCount.set(filteredCount);\n      });\n    });\n  }\n\n  ngAfterViewInit(): void {\n    const triggerWrapper = this.triggerWrapperEl()?.nativeElement;\n    if (!triggerWrapper) {\n      this._hasProjectedTrigger.set(false);\n      return;\n    }\n\n    const checkTriggerContent = () => {\n      const textContent = triggerWrapper.textContent?.trim() ?? '';\n      this._hasProjectedTrigger.set(triggerWrapper.children.length > 0 || textContent.length > 0);\n    };\n\n    this._mutationObserver = new MutationObserver(checkTriggerContent);\n\n    this._mutationObserver.observe(triggerWrapper, {\n      childList: true,\n      subtree: true,\n      characterData: true\n    });\n\n    checkTriggerContent();\n  }\n\n  ngOnDestroy() {\n    this.stateChanges.complete();\n    this._focusMonitor.stopMonitoring(this._elementRef);\n    this._mutationObserver?.disconnect();\n  }\n\n  onFocusIn() {\n    if (!this._focused()) {\n      this._focused.set(true);\n    }\n  }\n\n  onFocusOut(event: FocusEvent) {\n    if (!this._elementRef.nativeElement.contains(event.relatedTarget as Element)) {\n      this.touched.set(true);\n      this._focused.set(false);\n      if (this.onTouched) {\n        this.onTouched();\n      }\n    }\n  }\n\n  setDescribedByIds(ids: string[]) {\n    const controlElement = this._renderer.selectRootElement('.mx-select-search', true);\n    if (controlElement) {\n      this._renderer.setAttribute(controlElement, 'aria-describedby', ids.join(' '));\n    }\n  }\n\n  onContainerClick() {\n    //\n  }\n\n  writeValue(val: string[] | null): void {\n    this.form.controls.selectedValues.setValue(val);\n    this.#updateValue(val);\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this._disabledByCva.set(isDisabled);\n  }\n\n  _handleSelectChange(value: string[]): void {\n    if (this.onChange) {\n      this.onChange(value);\n    }\n  }\n\n  #updateValue(val: string[] | null) {\n    const current = this._value();\n    if (JSON.stringify(current) === JSON.stringify(val)) {\n      return;\n    }\n    this._value.set(val);\n    this.#valueSet.set(val ? new Set(val) : new Set());\n  }\n\n  /* Select Panel */\n  _isOptionGroupItem(item: OptionGroupItem | OptionItem): item is OptionGroupItem {\n    return (item as OptionGroupItem).children !== undefined;\n  }\n\n  _onSelectAll(): void {\n    const values = this._keyword()\n      ? this._displayOptionList().reduce<string[]>((acc, option) => {\n          const items = 'children' in option ? option.children : [option];\n          acc.push(...items.filter((item) => !item.hidden && !item.disabled).map((item) => item.value));\n          return acc;\n        }, [])\n      : this.options()\n          .filter((option) => !option.disabled)\n          .map((option) => option.value);\n\n    this.form.controls.selectedValues.setValue(values);\n  }\n\n  _onClearAll(): void {\n    if (!this._keyword()) {\n      this.form.controls.selectedValues.setValue([]);\n      return;\n    }\n\n    const availableValues = this._displayOptionList().reduce<string[]>((acc, option) => {\n      const items = 'children' in option ? option.children : [option];\n      acc.push(...items.filter((item) => !item.hidden && !item.disabled).map((item) => item.value));\n      return acc;\n    }, []);\n\n    const selectedValues: string[] = this.form.controls.selectedValues.value ?? [];\n    const newValues = selectedValues.filter((value) => !availableValues.includes(value));\n\n    this.form.controls.selectedValues.setValue(newValues);\n  }\n\n  _isHideGroup(group: OptionGroupItem): boolean {\n    return !group.children.length || group.children.every((item) => item.hidden);\n  }\n\n  _isDisabledGroup(group: OptionGroupItem): boolean {\n    return !group.children.length || group.children.every((item) => item.disabled || item.hidden);\n  }\n\n  _isGroupAllChecked(children: OptionItem[]): boolean {\n    const values = this.#valueSet();\n    const validValues = children.filter((item) => !item.disabled && !item.hidden).map((item) => item.value);\n    return validValues.length > 0 && validValues.every((val) => values.has(val));\n  }\n\n  _isGroupPartialChecked(children: OptionItem[]): boolean {\n    const values = this.#valueSet();\n    const validValues = children.filter((item) => !item.disabled && !item.hidden).map((item) => item.value);\n    const selectedCount = validValues.filter((val) => values.has(val)).length;\n    return selectedCount > 0 && selectedCount < validValues.length;\n  }\n\n  _onChangeGroupCheck(children: OptionItem[], event: MatCheckboxChange): void {\n    const values = new Set(this.#valueSet());\n\n    if (event.checked) {\n      for (const item of children) {\n        if (!item.disabled && !item.hidden) {\n          values.add(item.value);\n        }\n      }\n    } else {\n      for (const item of children) {\n        values.delete(item.value);\n      }\n    }\n\n    this.form.controls.selectedValues.setValue(Array.from(values));\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAaM,MAAO,yBAA0B,SAAQ,kBAA4C,CAAA;AAUzF,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AAVT,QAAA,IAAA,CAAA,aAAa,GAA6B;AACxC,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,cAAc,EAAE,YAAY;AAC5B,YAAA,mBAAmB,EAAE,iBAAiB;AACtC,YAAA,aAAa,EAAE,UAAU;AACzB,YAAA,UAAU,EAAE,OAAO;AACnB,YAAA,eAAe,EAAE;SAClB;QAIC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC;IACrD;8GAbW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA,CAAA;;2FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AAiBlC,SAAS,sCAAsC,CAAC,MAAiC,EAAA;AAC/E,IAAA,OAAO,MAAM,IAAI,IAAI,yBAAyB,EAAE;AAClD;AAEO,MAAM,8BAA8B,GAAa;AACtD,IAAA,OAAO,EAAE,yBAAyB;AAClC,IAAA,UAAU,EAAE,sCAAsC;AAClD,IAAA,IAAI,EAAE,CAAC,CAAC,IAAI,QAAQ,EAAE,EAAE,IAAI,QAAQ,EAAE,EAAE,yBAAyB,CAAC;;;MCkLvD,uBAAuB,CAAA;aAG3B,IAAA,CAAA,MAAM,GAAG,CAAH,CAAK;AAmDlB,IAAA,SAAS;AACT,IAAA,cAAc;AAEd,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;IACxB;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM;IACjD;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE;IACpC;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE;IAC5B;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;IACzB;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;IACzB;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE;IACtB;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE;IAC3E;AAmBA,IAAA,WAAA,GAAA;AAtGA,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACpD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAClC,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;QACvB,IAAA,CAAA,WAAW,GAAG,sBAAsB;AACpC,QAAA,IAAA,CAAA,EAAE,GAAG,CAAA,qBAAA,EAAwB,uBAAuB,CAAC,MAAM,EAAE,EAAE;AAC/D,QAAA,IAAA,CAAA,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAmB,aAAa,CAAC;AACjE,QAAA,IAAA,CAAA,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAA0B,gBAAgB,CAAC;QAChF,IAAA,CAAA,gBAAgB,GAAG,IAAI;QACvB,IAAA,CAAA,oBAAoB,GAAG,KAAK,CAAS,EAAE,iEAAI,KAAK,EAAE,kBAAkB,EAAA,CAAG;QACvE,IAAA,CAAA,YAAY,GAAG,KAAK,CAAS,EAAE,yDAAI,KAAK,EAAE,aAAa,EAAA,CAAG;AAC1D,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,WAAA,EAAA,GAAA,EAAA,CAAA,EAChD,KAAK,EAAE,UAAU;YACjB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AACO,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAmB,KAAK,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,GAAA,EAAA,CAAA,EACvD,KAAK,EAAE,UAAU;YACjB,SAAS,EAAE,gBAAgB,EAAA,CAC3B;QACO,IAAA,CAAA,MAAM,GAAG,KAAK,CAAkB,IAAI,mDAAI,KAAK,EAAE,OAAO,EAAA,CAAG;AAI/C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,cAAc,EAAE;AACrD,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;AAEe,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,oDAAC;AACxB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,KAAK,0DAAC;AAC9B,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,qDAAC;AAC5E,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AACpC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA0B,UAAU,CAAC;AACzD,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;AACzB,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAG9C,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAExC,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAyB,EAAE,mDAAC;AAC3C,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,IAAI,wDAAC;AAE1B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACpB,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAW,EAAE;AAC9C,SAAA,CAAC;;AAGF,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAsC,EAAE,8DAAC;AACpE,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,EAAE,oDAAC;AACrB,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,CAAC,gEAAC;AAChC,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,KAAK,gEAAC;AAEpC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE,qDAAC;AAC1C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAsB,IAAI,GAAG,EAAE,0DAAC;AAkCvD,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAC,MAAK;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;YAClC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7E,QAAA,CAAC,kEAAC;AAEF,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAClC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;YAC/B,OAAO,IAAI,CAAC,OAAO;iBAChB,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ;AACnC,iBAAA,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChD,QAAA,CAAC,+DAAC;AAEF,QAAA,IAAA,CAAA,wBAAwB,GAAG,QAAQ,CAAC,MAAK;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;AAClC,YAAA,OAAO,CAAC,MAAM,CAAC,MAAM;AACvB,QAAA,CAAC,oEAAC;AAGA,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;QACrC;QAEA,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,SAAS,EAAE;YAChB,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAC3C,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBACpB,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACtC;iBAAO;gBACL,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACrC;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;AACjC,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpE,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK;AAChE,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC1B,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;AACtE,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,cAA0B,CAAC;AACvD,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC9B,YAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B;YACnD,MAAM,SAAS,GAAwC,EAAE;AAEzD,YAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,gBAAA,MAAM,IAAI,GAAe;oBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,oBAAA,MAAM,EAAE;iBACT;AAED,gBAAA,IAAI,MAAM,CAAC,SAAS,EAAE;oBACpB,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;oBAC1C,IAAI,CAAC,KAAK,EAAE;AACV,wBAAA,KAAK,GAAG;4BACN,SAAS,EAAE,MAAM,CAAC,SAAS;AAC3B,4BAAA,QAAQ,EAAE,EAAE;AACZ,4BAAA,UAAU,EAAE;yBACb;wBACD,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;AACrC,wBAAA,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;oBACvB;AACA,oBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC3B;qBAAO;AACL,oBAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;gBACtB;YACF;AAEA,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;AACxC,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YAExE,SAAS,CAAC,MAAK;AACb,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE;gBAC5C,IAAI,aAAa,GAAG,CAAC;AAErB,gBAAA,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC1B,oBAAA,MAAM,QAAQ,GAAG,UAAU,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC;AAE5D,oBAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;wBAC3B,MAAM,SAAS,GAAG,WAAW,IAAI,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,CAAA,EAAI,OAAO,CAAC,KAAK,CAAA,CAAE,GAAG,OAAO,CAAC,KAAK;wBAC5F,MAAM,eAAe,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;AAErE,wBAAA,OAAO,CAAC,MAAM,GAAG,CAAC,eAAe;AACjC,wBAAA,IAAI,eAAe;AAAE,4BAAA,aAAa,EAAE;AACtC,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,aAAa,CAAC;AAC9C,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,eAAe,GAAA;QACb,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa;QAC7D,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;YACpC;QACF;QAEA,MAAM,mBAAmB,GAAG,MAAK;YAC/B,MAAM,WAAW,GAAG,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE;AAC5D,YAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7F,QAAA,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,gBAAgB,CAAC,mBAAmB,CAAC;AAElE,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,cAAc,EAAE;AAC7C,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,aAAa,EAAE;AAChB,SAAA,CAAC;AAEF,QAAA,mBAAmB,EAAE;IACvB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;QAC5B,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AACnD,QAAA,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE;IACtC;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB;IACF;AAEA,IAAA,UAAU,CAAC,KAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAwB,CAAC,EAAE;AAC5E,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,CAAC,SAAS,EAAE;YAClB;QACF;IACF;AAEA,IAAA,iBAAiB,CAAC,GAAa,EAAA;AAC7B,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,CAAC;QAClF,IAAI,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,cAAc,EAAE,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChF;IACF;IAEA,gBAAgB,GAAA;;IAEhB;AAEA,IAAA,UAAU,CAAC,GAAoB,EAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC/C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;IACxB;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;IACrC;AAEA,IAAA,mBAAmB,CAAC,KAAe,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACtB;IACF;AAEA,IAAA,YAAY,CAAC,GAAoB,EAAA;AAC/B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE;AAC7B,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;YACnD;QACF;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;IACpD;;AAGA,IAAA,kBAAkB,CAAC,IAAkC,EAAA;AACnD,QAAA,OAAQ,IAAwB,CAAC,QAAQ,KAAK,SAAS;IACzD;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ;AAC1B,cAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAW,CAAC,GAAG,EAAE,MAAM,KAAI;AACzD,gBAAA,MAAM,KAAK,GAAG,UAAU,IAAI,MAAM,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC;AAC/D,gBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7F,gBAAA,OAAO,GAAG;YACZ,CAAC,EAAE,EAAE;AACP,cAAE,IAAI,CAAC,OAAO;iBACT,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ;iBACnC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,KAAK,CAAC;QAEpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC;IACpD;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C;QACF;AAEA,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAW,CAAC,GAAG,EAAE,MAAM,KAAI;AACjF,YAAA,MAAM,KAAK,GAAG,UAAU,IAAI,MAAM,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC;AAC/D,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7F,YAAA,OAAO,GAAG;QACZ,CAAC,EAAE,EAAE,CAAC;AAEN,QAAA,MAAM,cAAc,GAAa,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE;AAC9E,QAAA,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEpF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC;IACvD;AAEA,IAAA,YAAY,CAAC,KAAsB,EAAA;QACjC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC;IAC9E;AAEA,IAAA,gBAAgB,CAAC,KAAsB,EAAA;QACrC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC;IAC/F;AAEA,IAAA,kBAAkB,CAAC,QAAsB,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;QACvG,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9E;AAEA,IAAA,sBAAsB,CAAC,QAAsB,EAAA;AAC3C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC/B,QAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC;QACvG,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;QACzE,OAAO,aAAa,GAAG,CAAC,IAAI,aAAa,GAAG,WAAW,CAAC,MAAM;IAChE;IAEA,mBAAmB,CAAC,QAAsB,EAAE,KAAwB,EAAA;QAClE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AAExC,QAAA,IAAI,KAAK,CAAC,OAAO,EAAE;AACjB,YAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;gBAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAClC,oBAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;gBACxB;YACF;QACF;aAAO;AACL,YAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AAC3B,gBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3B;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChE;8GA9WW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EALvB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,uBAAuB,EAAE,EAAE,8BAA8B,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/IzG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8IT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ooGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA5JC,mBAAmB,+2BACnB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,iYACd,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,2BAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,YAAA,EAAA,0BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,aAAa,mLACb,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,gBAAgB,6TAChB,oBAAoB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAwJX,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBArKnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,OAAA,EACnB;wBACP,mBAAmB;wBACnB,WAAW;wBACX,kBAAkB;wBAClB,cAAc;wBACd,eAAe;wBACf,gBAAgB;wBAChB,aAAa;wBACb,eAAe;wBACf,iBAAiB;wBACjB,gBAAgB;wBAChB;qBACD,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8IT,EAAA,CAAA,EAAA,SAAA,EACU,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAA,uBAAyB,EAAE,EAAE,8BAA8B,CAAC,EAAA,IAAA,EAC7G;AACJ,wBAAA,MAAM,EAAE;AACT,qBAAA,EAAA,MAAA,EAAA,CAAA,ooGAAA,CAAA,EAAA;AAW2D,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,aAAa,0EACD,gBAAgB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,cAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AChO1F;;AAEG;;;;"}