{"version":3,"file":"ngx-dropzone-cdk.mjs","sources":["../../../projects/cdk/src/lib/coercion/boolean-coercion.ts","../../../projects/cdk/src/lib/file-input/accept.service.ts","../../../projects/cdk/src/lib/file-input/file-input-validators.ts","../../../projects/cdk/src/lib/file-input/file-input-errors.ts","../../../projects/cdk/src/lib/file-input/file-input.directive.ts","../../../projects/cdk/src/lib/dropzone/dropzone-errors.ts","../../../projects/cdk/src/lib/dropzone/dropzone.service.ts","../../../projects/cdk/src/lib/dropzone/dropzone.component.ts","../../../projects/cdk/src/public-api.ts","../../../projects/cdk/src/ngx-dropzone-cdk.ts"],"sourcesContent":["/** Inspired by the Angular Material library, we check our input properties. */\nexport function coerceBoolean(value?: unknown): boolean {\n  return ['', '1', 'true'].includes(`${value}`);\n}\n\n/** Allows filtering `null` and `undefined` elements from arrays. */\nexport function nonNullable<T>(value: T | null): value is T {\n  return value !== null && value !== undefined;\n}\n","import { Injectable } from '@angular/core';\nimport { FileInputValue } from './file-input-value';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AcceptService {\n  /**\n   * Returns `true` if all files match the provided `accept` parameter.\n   * See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/accept)\n   * for more information.\n   */\n  accepts(fileValue: FileInputValue, accept: string): boolean {\n    if (!fileValue || accept === '*') {\n      return true;\n    }\n\n    const acceptedMimeTypes = this.parseAttribute(accept, (t) => this.isValidMimeType(t));\n    const acceptedExtensions = this.parseAttribute(accept, (t) => this.isValidExtension(t));\n\n    const fileList = Array.isArray(fileValue) ? fileValue : [fileValue];\n\n    return fileList.every(\n      (file) =>\n        this.isAcceptedByExtension(file, acceptedExtensions) || this.isAcceptedByMimeType(file, acceptedMimeTypes)\n    );\n  }\n\n  private isAcceptedByExtension(file: File, acceptedExtensions: string[]): boolean {\n    return acceptedExtensions.some((ext) => file.name.toLowerCase().endsWith(ext));\n  }\n\n  private isAcceptedByMimeType(file: File, acceptedMimeTypes: string[]): boolean {\n    return acceptedMimeTypes.some((type) => {\n      if (type === file.type) {\n        return true;\n      }\n\n      const [media, sub] = type.split('/', 2);\n      const fileMedia = file.type.split('/')[0];\n\n      return sub === '*' && media === fileMedia;\n    });\n  }\n\n  private parseAttribute(accept: string, predicate: (type: string) => boolean): string[] {\n    if (!accept?.length) {\n      return [];\n    }\n\n    return accept.split(',').reduce((types, type) => {\n      const trimmedType = type.trim();\n      if (trimmedType.length && predicate(trimmedType)) {\n        types.push(trimmedType.toLowerCase());\n      }\n      return types;\n    }, [] as string[]);\n  }\n\n  private isValidMimeType(type: string): boolean {\n    const safeType = type || '';\n    const slashPos = safeType.indexOf('/');\n\n    if (slashPos <= 0 || slashPos === safeType.length - 1) {\n      return false;\n    }\n\n    return Array.from(safeType).every((char, i) => this.isValidToken(char) || i === slashPos);\n  }\n\n  private isValidExtension(type: string): boolean {\n    const safeType = type || '';\n    return safeType.length >= 2 && safeType[0] === '.';\n  }\n\n  private isValidToken(char: string): boolean {\n    const invalidChars = Array.from('\" (),/:@[]{}');\n    return this.isAscii(char) && !invalidChars.includes(char);\n  }\n\n  private isAscii(char: string): boolean {\n    return (char || '').charCodeAt(0) < 127;\n  }\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { AcceptService } from '.';\nimport { FileInputValue } from './file-input-value';\n\nexport class FileInputValidators {\n  /**\n   * Checks if the file size is equal or greater than the minimum size.\n   * Validates every file within array or single file. Returns no error when null.\n   */\n  static minSize(min: number): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const valid = this.validate(control.value, (file) => file.size >= min);\n      return valid ? null : { minSize: { value: control.value } };\n    };\n  }\n\n  /**\n   * Checks if the file size is equal or smaller than the allowed size.\n   * Validates every file within array or single file. Returns no error when null.\n   */\n  static maxSize(max: number): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const valid = this.validate(control.value, (file) => file.size <= max);\n      return valid ? null : { maxSize: { value: control.value } };\n    };\n  }\n\n  /** Checks if all provided files match the specified `accept` value. */\n  static accept(accept: string): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const allAccepted = new AcceptService().accepts(control.value, accept);\n      return allAccepted ? null : { accept: { value: control.value } };\n    };\n  }\n\n  private static validate(value: FileInputValue, predicate: (file: File) => boolean): boolean {\n    if (!value) {\n      return true;\n    }\n\n    if (Array.isArray(value)) {\n      return value.every((f) => f && predicate(f));\n    }\n\n    return predicate(value);\n  }\n}\n","/**\n * Returns an exception to be thrown when attempting to add the `FileInputDirective`\n * to an HTML `<input>` element with a type other than \"file\".\n */\nexport function getInputTypeError() {\n  return Error('The [fileInput] directive may only be applied to `<input type=\"file\" />` elements.');\n}\n\n/**\n * Returns an exception to be thrown when attempting to assign an array value\n * to a file input element without the `multiple` attribute.\n */\nexport function getArrayValueError() {\n  return Error('Value must not be an array when the multiple attribute is not present.');\n}\n\n/**\n * Returns an exception to be thrown when attempting to assign a non-array value\n * to a file input element in `multiple` mode. Note that `undefined` and `null` are\n * valid values to allow for resetting the value.\n */\nexport function getNonArrayValueError() {\n  return Error('Value must be an array when the multiple attribute is present.');\n}\n","import { computed, Directive, DoCheck, ElementRef, inject, input, model, OnInit, output, signal } from '@angular/core';\nimport { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { FORM_FIELD, FormValueControl } from '@angular/forms/signals';\nimport { coerceBoolean, nonNullable } from '../coercion';\nimport { AcceptService } from './accept.service';\nimport { getArrayValueError, getInputTypeError, getNonArrayValueError } from './file-input-errors';\nimport { FileInputMode, FileInputValue } from './file-input-value';\n\n@Directive({\n  selector: 'input[fileInput]',\n  exportAs: 'fileInput',\n  host: {\n    style: 'display: none',\n    '[accept]': 'accept()',\n    '[disabled]': 'disabledState()',\n    '(change)': '_handleChange($event)',\n    '(focus)': '_focusChanged(true)',\n    '(blur)': '_focusChanged(false)',\n  },\n})\nexport class FileInputDirective implements FormValueControl<FileInputValue>, ControlValueAccessor, OnInit, DoCheck {\n  /**\n   * The value of the file input control.\n   *\n   * Being a model signal, it fulfills the `FormValueControl` contract,\n   * so the signal forms `[formField]` directive binds the field value\n   * to this directive instead of the native (readonly) file input.\n   */\n  readonly value = model<FileInputValue>(null);\n\n  /** The touched state of the control. Kept in sync with the field when bound via `[formField]`. */\n  readonly touched = model(false);\n\n  /** The invalid state of the bound signal forms field. Bound automatically via `[formField]`. */\n  readonly invalid = input(false);\n\n  /** The required state. Set by the `required` attribute or bound automatically via `[formField]`. */\n  readonly required = input(false, { transform: coerceBoolean });\n\n  /** Controls the accepted file types. */\n  readonly accept = input('*');\n\n  /** Controls the value setting strategy. */\n  readonly mode = input<FileInputMode>('replace');\n\n  /** The disabled state. Set by the `disabled` attribute or bound automatically via `[formField]`. */\n  readonly disabled = input(false, { transform: coerceBoolean });\n\n  /** Event emitted when the selected files have been changed by the user. */\n  readonly selectionChange = output<FileInputValue>();\n\n  /** Emits when the control is touched by the user. Marks the bound signal forms field as touched. */\n  readonly touch = output<void>();\n\n  private readonly _focused = signal(false);\n  private readonly _disabledByForms = signal(false);\n  private readonly _reactiveError = signal(false);\n\n  private _onChange: ((value: FileInputValue) => void) | null = null;\n  private _onTouched: (() => void) | null = null;\n\n  private _acceptService = inject(AcceptService);\n  private _parent: FormGroupDirective | NgForm | null =\n    inject(NgForm, { optional: true }) ?? inject(FormGroupDirective, { optional: true });\n\n  /** The signal forms field binding, if the input element is bound via `[formField]`. */\n  private _formField = inject(FORM_FIELD, { optional: true, self: true });\n\n  public elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n  /**\n   * The legacy `NgControl` of the reactive or template-driven forms integration.\n   * Remains `null` when the input element is bound to a signal forms field.\n   */\n  public ngControl = this._formField ? null : inject(NgControl, { optional: true, self: true });\n\n  /** The combined disabled state of the input element and the bound form. */\n  readonly disabledState = computed(() => this.disabled() || this._disabledByForms());\n\n  /** Returns true if the file input has no selected item. */\n  readonly empty = computed(() => {\n    const value = this.value();\n    return value === null || (Array.isArray(value) && !value.length);\n  });\n\n  /** Returns true if the file input element is focused. */\n  readonly focused = computed(() => this._focused() && !this.disabledState());\n\n  /** Returns the error state. */\n  readonly errorState = computed(() => {\n    // Check for any errors of the signal forms field bound via [formField].\n    const signalError = this.invalid() && this.touched();\n\n    // Check for any errors directly on the native input element.\n    const nativeError = this.touched() && !this._acceptService.accepts(this.value(), this.accept());\n\n    return this._reactiveError() || signalError || nativeError;\n  });\n\n  /** Returns true if the `multiple` attribute is present on the input element. */\n  get multiple(): boolean {\n    return this.elementRef.nativeElement.multiple;\n  }\n\n  constructor() {\n    if (this.ngControl != null) {\n      // Setting the value accessor directly (instead of using\n      // the providers) to allow access to error state.\n      this.ngControl.valueAccessor = this;\n    }\n  }\n\n  ngOnInit() {\n    if (this.elementRef.nativeElement.type !== 'file') {\n      throw getInputTypeError();\n    }\n  }\n\n  ngDoCheck() {\n    if (this.ngControl) {\n      // Check for any errors of the FormControl or NgModel.\n      const { invalid, touched } = this.ngControl.control ?? {};\n      this._reactiveError.set(!!(invalid && (touched || this._parent?.submitted)));\n    }\n  }\n\n  /** Opens the native OS file picker. */\n  openFilePicker() {\n    this.elementRef.nativeElement.click();\n  }\n\n  /** Handles the native (change) event. */\n  _handleChange(event: Event) {\n    if (this.disabledState()) return;\n\n    const fileList = (event.target as HTMLInputElement)?.files;\n    if (!fileList || fileList.length === 0) return;\n\n    const files = this.multiple ? Array.from(fileList) : fileList.item(0);\n    const filesWithPaths = this._copyRelativePaths(files);\n    const newValue = this._appendOrReplace(filesWithPaths);\n    this._setValue(newValue);\n\n    this.selectionChange.emit(newValue);\n    this._onChange?.(newValue);\n\n    // Reset the native element for another selection.\n    this.elementRef.nativeElement.value = '';\n  }\n\n  /** Handles the drop of a file array. */\n  handleFileDrop(files: File[]) {\n    if (this.disabledState()) return;\n\n    const newValue = this._appendOrReplace(this.multiple ? files : files[0]);\n    this._setValue(newValue);\n\n    this.selectionChange.emit(newValue);\n    this._onChange?.(newValue);\n  }\n\n  /** Sets the selected files value as required by the `ControlValueAccessor` interface. */\n  writeValue(value: FileInputValue) {\n    this._setValue(value);\n    this.selectionChange.emit(value);\n  }\n\n  /** Registers the change handler as required by `ControlValueAccessor`. */\n  registerOnChange(fn: (value: FileInputValue) => void) {\n    this._onChange = fn;\n  }\n\n  /** Registers the touched handler as required by `ControlValueAccessor`. */\n  registerOnTouched(fn: () => void) {\n    this._onTouched = fn;\n  }\n\n  /** Implements the disabled state setter from `ControlValueAccessor`. */\n  setDisabledState(disabled: boolean) {\n    this._disabledByForms.set(disabled);\n  }\n\n  /** Sets the value of the file input control and marks it as touched. */\n  _setValue(newValue: FileInputValue) {\n    this._assertMultipleValue(newValue);\n    this.value.set(newValue);\n\n    this.touched.set(true);\n    this._onTouched?.();\n    this.touch.emit();\n  }\n\n  /** Called when the input element is focused or blurred. */\n  _focusChanged(focused: boolean) {\n    this._focused.set(focused);\n  }\n\n  /**\n   * On directory drops, the readonly `webkitRelativePath` property is not available.\n   * We manually set the `relativePath` property for dropped file trees instead.\n   * To achieve a consistent behavior when using the file picker, we copy the value.\n   */\n  private _copyRelativePaths(value: FileInputValue) {\n    if (!value) return value;\n\n    if (Array.isArray(value)) {\n      return value.map((file) => {\n        file.relativePath = file.webkitRelativePath;\n        return file;\n      });\n    }\n\n    value.relativePath = value.webkitRelativePath;\n    return value;\n  }\n\n  /** Asserts that the provided value type matches the input element's multiple attribute. */\n  private _assertMultipleValue(value: FileInputValue) {\n    if (this.multiple && !Array.isArray(value || [])) {\n      throw getNonArrayValueError();\n    }\n\n    if (!this.multiple && Array.isArray(value)) {\n      throw getArrayValueError();\n    }\n  }\n\n  private _appendOrReplace(value: FileInputValue): FileInputValue {\n    const currentValue = this.value();\n\n    if (this._canAppend(currentValue)) {\n      const valueArray = Array.isArray(value) ? value : [value];\n      return [...currentValue, ...valueArray.filter(nonNullable)];\n    }\n\n    return value;\n  }\n\n  private _canAppend(value: FileInputValue): value is File[] {\n    return this.mode() === 'append' && this.multiple && Array.isArray(value);\n  }\n}\n","/**\n * Returns an exception to be thrown when creating a dropzone\n * without a FileInputDirective child.\n */\nexport function getMissingControlError() {\n  return Error('The `ngx-dropzone` component requires a child of `<input type=\"file\" fileInput />`.');\n}\n","import { Injectable } from '@angular/core';\nimport { nonNullable } from '../coercion';\nimport { type File } from './../file-input';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DropzoneService {\n  /**\n   * Returns a `File[]` from a `DragEvent`. Accepts a list of files or folders.\n   */\n  async getFiles(event: DragEvent): Promise<File[]> {\n    if (!event.dataTransfer?.items) {\n      // Fallback for older specifications\n      return Array.from(event.dataTransfer?.files ?? []);\n    }\n\n    const fsEntries = Array.from(event.dataTransfer?.items ?? [])\n      .map((item) => this._toFileSystemEntry(item))\n      .map((entry) => this._getFilesFromEntry(entry))\n      .filter(nonNullable);\n\n    const files: File[][] = await Promise.all(fsEntries);\n    return this._flattenFiles(files);\n  }\n\n  private _toFileSystemEntry(item: DataTransferItem): FileSystemEntry | File | null {\n    // In the future, we can use the `getAsEntry` method when it becomes available.\n    if ('getAsEntry' in item && typeof item.getAsEntry === 'function') {\n      return item.getAsEntry();\n    }\n\n    // If supported, use the `webkitGetAsEntry` method to allow folder drops.\n    // As a fallback, use the well-supported `getAsFile` method.\n    return item.webkitGetAsEntry() || item.getAsFile();\n  }\n\n  private async _getFilesFromEntry(entry: FileSystemEntry | File | null): Promise<File[]> {\n    if (!entry) return [];\n\n    if (entry instanceof File) {\n      return [entry];\n    }\n\n    if (this._isFile(entry)) {\n      const file = await this._readFilePromise(entry);\n\n      // Manually set the `relativePath` property for dropped files.\n      file.relativePath = entry.fullPath?.slice(1) ?? '';\n\n      return [file];\n    }\n\n    if (this._isDirectory(entry)) {\n      const entries = await this._readDirectoryWithoutLimit(entry);\n      const children = entries.map((e) => this._getFilesFromEntry(e));\n\n      const files = await Promise.all(children);\n      return this._flattenFiles(files);\n    }\n\n    return [];\n  }\n\n  /**\n   * In Chrome >= 77, the `readEntries` method returns only 100 files.\n   * To achieve a consistent behavior across browsers and not restrict user interaction,\n   * we break the limit by recursively calling `readEntries`.\n   */\n  private async _readDirectoryWithoutLimit(entry: FileSystemDirectoryEntry): Promise<FileSystemEntry[]> {\n    const reader = entry.createReader();\n    let entries: FileSystemEntry[] = [];\n\n    const readEntries = async () => {\n      const children = await this._readDirectoryPromise(reader);\n\n      if (children.length) {\n        entries = entries.concat(children);\n        await readEntries();\n      }\n    };\n\n    await readEntries();\n    return entries;\n  }\n\n  private _isFile = (item: FileSystemEntry): item is FileSystemFileEntry => item.isFile;\n  private _isDirectory = (item: FileSystemEntry): item is FileSystemDirectoryEntry => item.isDirectory;\n  private _flattenFiles = (files: File[][]) => ([] as File[]).concat(...files);\n\n  private _readFilePromise(entry: FileSystemFileEntry) {\n    return new Promise<File>((resolve) => {\n      entry.file((file) => resolve(file));\n    });\n  }\n\n  private _readDirectoryPromise(reader: FileSystemDirectoryReader) {\n    return new Promise<FileSystemEntry[]>((resolve) => {\n      reader.readEntries((entries) => resolve(entries));\n    });\n  }\n}\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  HostBinding,\n  HostListener,\n  inject,\n  Input,\n  signal,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { FileInputDirective, FileInputValue } from './../file-input';\nimport { getMissingControlError } from './dropzone-errors';\nimport { DropzoneService } from './dropzone.service';\n\n@Component({\n  selector: 'ngx-dropzone',\n  exportAs: 'dropzone',\n  imports: [FileInputDirective],\n  providers: [DropzoneService],\n  template: `<ng-content></ng-content>`,\n  host: {\n    tabindex: '0',\n    '[class.ng-untouched]': '_forwardProp(\"untouched\")',\n    '[class.ng-touched]': '_forwardProp(\"touched\")',\n    '[class.ng-pristine]': '_forwardProp(\"pristine\")',\n    '[class.ng-dirty]': '_forwardProp(\"dirty\")',\n    '[class.ng-valid]': '_forwardProp(\"valid\")',\n    '[class.ng-invalid]': '_forwardProp(\"invalid\")',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DropzoneComponent implements AfterContentInit {\n  protected _dropzoneService = inject(DropzoneService);\n\n  @ContentChild(FileInputDirective, { static: true })\n  readonly fileInputDirective: FileInputDirective | null = null;\n\n  readonly dragover = signal(false);\n\n  @HostBinding('class.dragover')\n  get isDragover() {\n    return this.dragover();\n  }\n\n  @HostBinding('class.disabled')\n  get disabled(): boolean {\n    return this.fileInputDirective?.disabledState() || false;\n  }\n\n  @HostBinding('class.focused')\n  get focused(): boolean {\n    return this.fileInputDirective?.focused() || this.isDragover;\n  }\n\n  @HostBinding('attr.aria-invalid')\n  get errorState() {\n    return this.fileInputDirective?.errorState() || false;\n  }\n\n  @Input()\n  get value() {\n    return this.fileInputDirective?.value() || null;\n  }\n  set value(newValue: FileInputValue) {\n    this.fileInputDirective?._setValue(newValue);\n  }\n\n  ngAfterContentInit() {\n    if (!this.fileInputDirective) {\n      throw getMissingControlError();\n    }\n  }\n\n  /** Opens the native OS file picker. */\n  @HostListener('keydown.code.enter')\n  openFilePicker() {\n    if (!this.disabled && this.fileInputDirective) {\n      this.fileInputDirective.openFilePicker();\n    }\n  }\n\n  /** Forwards styling property from control to host element. */\n  _forwardProp(prop: keyof NgControl): boolean {\n    return !!this.fileInputDirective?.ngControl?.[prop];\n  }\n\n  @HostListener('dragover', ['$event'])\n  _onDragOver = (event: DragEvent) => {\n    event?.preventDefault();\n  };\n\n  @HostListener('dragenter', ['$event'])\n  _onDragEnter = (event: DragEvent) => {\n    event?.preventDefault();\n    this.dragover.set(true);\n\n    // Indicate to the Browser that files will be copied.\n    if (event?.dataTransfer) {\n      event.dataTransfer.dropEffect = 'copy';\n    }\n  };\n\n  @HostListener('dragleave', ['$event'])\n  _onDragLeave = (event: DragEvent) => {\n    event?.preventDefault();\n    this.dragover.set(false);\n  };\n\n  @HostListener('drop', ['$event'])\n  _onDrop = async (event: DragEvent) => {\n    this._onDragLeave(event);\n\n    const files = await this._dropzoneService.getFiles(event);\n    this.fileInputDirective?.handleFileDrop(files);\n  };\n}\n","/*\n * Public API Surface of cdk\n */\n\nexport * from './lib/coercion';\nexport * from './lib/dropzone';\nexport * from './lib/file-input';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAAA;AACM,SAAU,aAAa,CAAC,KAAe,EAAA;AAC3C,IAAA,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAA,EAAG,KAAK,CAAA,CAAE,CAAC;AAC/C;AAEA;AACM,SAAU,WAAW,CAAI,KAAe,EAAA;AAC5C,IAAA,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAC9C;;MCFa,aAAa,CAAA;AACxB;;;;AAIG;IACH,OAAO,CAAC,SAAyB,EAAE,MAAc,EAAA;AAC/C,QAAA,IAAI,CAAC,SAAS,IAAI,MAAM,KAAK,GAAG,EAAE;AAChC,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACrF,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAEvF,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC;QAEnE,OAAO,QAAQ,CAAC,KAAK,CACnB,CAAC,IAAI,KACH,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAC7G;IACH;IAEQ,qBAAqB,CAAC,IAAU,EAAE,kBAA4B,EAAA;QACpE,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChF;IAEQ,oBAAoB,CAAC,IAAU,EAAE,iBAA2B,EAAA;AAClE,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAI;AACrC,YAAA,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;AACtB,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AACvC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEzC,YAAA,OAAO,GAAG,KAAK,GAAG,IAAI,KAAK,KAAK,SAAS;AAC3C,QAAA,CAAC,CAAC;IACJ;IAEQ,cAAc,CAAC,MAAc,EAAE,SAAoC,EAAA;AACzE,QAAA,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;AACnB,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,KAAI;AAC9C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;YAC/B,IAAI,WAAW,CAAC,MAAM,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE;gBAChD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;YACvC;AACA,YAAA,OAAO,KAAK;QACd,CAAC,EAAE,EAAc,CAAC;IACpB;AAEQ,IAAA,eAAe,CAAC,IAAY,EAAA;AAClC,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;QAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;AAEtC,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACrD,YAAA,OAAO,KAAK;QACd;QAEA,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC;IAC3F;AAEQ,IAAA,gBAAgB,CAAC,IAAY,EAAA;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE;AAC3B,QAAA,OAAO,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG;IACpD;AAEQ,IAAA,YAAY,CAAC,IAAY,EAAA;QAC/B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;AAC/C,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3D;AAEQ,IAAA,OAAO,CAAC,IAAY,EAAA;AAC1B,QAAA,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG;IACzC;uGA5EW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cAFZ,MAAM,EAAA,CAAA;;2FAEP,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCDY,mBAAmB,CAAA;AAC9B;;;AAGG;IACH,OAAO,OAAO,CAAC,GAAW,EAAA;QACxB,OAAO,CAAC,OAAwB,KAA6B;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;AACtE,YAAA,OAAO,KAAK,GAAG,IAAI,GAAG,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE;AAC7D,QAAA,CAAC;IACH;AAEA;;;AAGG;IACH,OAAO,OAAO,CAAC,GAAW,EAAA;QACxB,OAAO,CAAC,OAAwB,KAA6B;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;AACtE,YAAA,OAAO,KAAK,GAAG,IAAI,GAAG,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE;AAC7D,QAAA,CAAC;IACH;;IAGA,OAAO,MAAM,CAAC,MAAc,EAAA;QAC1B,OAAO,CAAC,OAAwB,KAA6B;AAC3D,YAAA,MAAM,WAAW,GAAG,IAAI,aAAa,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;AACtE,YAAA,OAAO,WAAW,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE;AAClE,QAAA,CAAC;IACH;AAEQ,IAAA,OAAO,QAAQ,CAAC,KAAqB,EAAE,SAAkC,EAAA;QAC/E,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9C;AAEA,QAAA,OAAO,SAAS,CAAC,KAAK,CAAC;IACzB;AACD;;AC9CD;;;AAGG;SACa,iBAAiB,GAAA;AAC/B,IAAA,OAAO,KAAK,CAAC,oFAAoF,CAAC;AACpG;AAEA;;;AAGG;SACa,kBAAkB,GAAA;AAChC,IAAA,OAAO,KAAK,CAAC,wEAAwE,CAAC;AACxF;AAEA;;;;AAIG;SACa,qBAAqB,GAAA;AACnC,IAAA,OAAO,KAAK,CAAC,gEAAgE,CAAC;AAChF;;MCHa,kBAAkB,CAAA;AAC7B;;;;;;AAMG;IACM,KAAK,GAAG,KAAK,CAAiB,IAAI;8EAAC;;IAGnC,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;;IAGtB,OAAO,GAAG,KAAK,CAAC,KAAK;gFAAC;;IAGtB,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,aAAa,EAAA,CAAG;;IAGrD,MAAM,GAAG,KAAK,CAAC,GAAG;+EAAC;;IAGnB,IAAI,GAAG,KAAK,CAAgB,SAAS;6EAAC;;IAGtC,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,aAAa,EAAA,CAAG;;IAGrD,eAAe,GAAG,MAAM,EAAkB;;IAG1C,KAAK,GAAG,MAAM,EAAQ;IAEd,QAAQ,GAAG,MAAM,CAAC,KAAK;iFAAC;IACxB,gBAAgB,GAAG,MAAM,CAAC,KAAK;yFAAC;IAChC,cAAc,GAAG,MAAM,CAAC,KAAK;uFAAC;IAEvC,SAAS,GAA6C,IAAI;IAC1D,UAAU,GAAwB,IAAI;AAEtC,IAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;IACtC,OAAO,GACb,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAG9E,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAEhE,IAAA,UAAU,GAAG,MAAM,CAA+B,UAAU,CAAC;AAEpE;;;AAGG;IACI,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;AAGpF,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE;sFAAC;;AAG1E,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,OAAO,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAClE,CAAC;8EAAC;;AAGO,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gFAAC;;AAGlE,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;;QAElC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;;QAGpD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAE/F,OAAO,IAAI,CAAC,cAAc,EAAE,IAAI,WAAW,IAAI,WAAW;IAC5D,CAAC;mFAAC;;AAGF,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ;IAC/C;AAEA,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;;;AAG1B,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI;QACrC;IACF;IAEA,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,KAAK,MAAM,EAAE;YACjD,MAAM,iBAAiB,EAAE;QAC3B;IACF;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;;AAElB,YAAA,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE;YACzD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;QAC9E;IACF;;IAGA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;IACvC;;AAGA,IAAA,aAAa,CAAC,KAAY,EAAA;QACxB,IAAI,IAAI,CAAC,aAAa,EAAE;YAAE;AAE1B,QAAA,MAAM,QAAQ,GAAI,KAAK,CAAC,MAA2B,EAAE,KAAK;AAC1D,QAAA,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE;QAExC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;AACtD,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AAExB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;;QAG1B,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;IAC1C;;AAGA,IAAA,cAAc,CAAC,KAAa,EAAA;QAC1B,IAAI,IAAI,CAAC,aAAa,EAAE;YAAE;QAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AAExB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC5B;;AAGA,IAAA,UAAU,CAAC,KAAqB,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;;AAGA,IAAA,gBAAgB,CAAC,EAAmC,EAAA;AAClD,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;;AAGA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;;AAGA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;AAChC,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;IACrC;;AAGA,IAAA,SAAS,CAAC,QAAwB,EAAA;AAChC,QAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AAExB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,UAAU,IAAI;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;;AAGA,IAAA,aAAa,CAAC,OAAgB,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;IAC5B;AAEA;;;;AAIG;AACK,IAAA,kBAAkB,CAAC,KAAqB,EAAA;AAC9C,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,KAAK;AAExB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACxB,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB;AAC3C,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC,CAAC;QACJ;AAEA,QAAA,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,kBAAkB;AAC7C,QAAA,OAAO,KAAK;IACd;;AAGQ,IAAA,oBAAoB,CAAC,KAAqB,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE;YAChD,MAAM,qBAAqB,EAAE;QAC/B;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC1C,MAAM,kBAAkB,EAAE;QAC5B;IACF;AAEQ,IAAA,gBAAgB,CAAC,KAAqB,EAAA;AAC5C,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE;AAEjC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE;AACjC,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC;AACzD,YAAA,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC7D;AAEA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,UAAU,CAAC,KAAqB,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IAC1E;uGA5NW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,OAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,sBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,eAAe;AACtB,wBAAA,UAAU,EAAE,UAAU;AACtB,wBAAA,YAAY,EAAE,iBAAiB;AAC/B,wBAAA,UAAU,EAAE,uBAAuB;AACnC,wBAAA,SAAS,EAAE,qBAAqB;AAChC,wBAAA,QAAQ,EAAE,sBAAsB;AACjC,qBAAA;AACF,iBAAA;;;ACnBD;;;AAGG;SACa,sBAAsB,GAAA;AACpC,IAAA,OAAO,KAAK,CAAC,qFAAqF,CAAC;AACrG;;MCCa,eAAe,CAAA;AAC1B;;AAEG;IACH,MAAM,QAAQ,CAAC,KAAgB,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE;;AAE9B,YAAA,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;QACpD;AAEA,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;AACzD,aAAA,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC3C,aAAA,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;aAC7C,MAAM,CAAC,WAAW,CAAC;QAEtB,MAAM,KAAK,GAAa,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AACpD,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;IAClC;AAEQ,IAAA,kBAAkB,CAAC,IAAsB,EAAA;;QAE/C,IAAI,YAAY,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE;AACjE,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE;QAC1B;;;QAIA,OAAO,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE;IACpD;IAEQ,MAAM,kBAAkB,CAAC,KAAoC,EAAA;AACnE,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AAErB,QAAA,IAAI,KAAK,YAAY,IAAI,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC;QAChB;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;AAG/C,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;YAElD,OAAO,CAAC,IAAI,CAAC;QACf;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC;AAC5D,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAE/D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzC,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAClC;AAEA,QAAA,OAAO,EAAE;IACX;AAEA;;;;AAIG;IACK,MAAM,0BAA0B,CAAC,KAA+B,EAAA;AACtE,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,EAAE;QACnC,IAAI,OAAO,GAAsB,EAAE;AAEnC,QAAA,MAAM,WAAW,GAAG,YAAW;YAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC;AAEzD,YAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,gBAAA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAClC,MAAM,WAAW,EAAE;YACrB;AACF,QAAA,CAAC;QAED,MAAM,WAAW,EAAE;AACnB,QAAA,OAAO,OAAO;IAChB;IAEQ,OAAO,GAAG,CAAC,IAAqB,KAAkC,IAAI,CAAC,MAAM;IAC7E,YAAY,GAAG,CAAC,IAAqB,KAAuC,IAAI,CAAC,WAAW;AAC5F,IAAA,aAAa,GAAG,CAAC,KAAe,KAAM,EAAa,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;AAEpE,IAAA,gBAAgB,CAAC,KAA0B,EAAA;AACjD,QAAA,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;AACnC,YAAA,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AACrC,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,qBAAqB,CAAC,MAAiC,EAAA;AAC7D,QAAA,OAAO,IAAI,OAAO,CAAoB,CAAC,OAAO,KAAI;AAChD,YAAA,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AACnD,QAAA,CAAC,CAAC;IACJ;uGA7FW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MC6BY,iBAAiB,CAAA;AAClB,IAAA,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC;IAG3C,kBAAkB,GAA8B,IAAI;IAEpD,QAAQ,GAAG,MAAM,CAAC,KAAK;iFAAC;AAEjC,IAAA,IACI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;IACxB;AAEA,IAAA,IACI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,kBAAkB,EAAE,aAAa,EAAE,IAAI,KAAK;IAC1D;AAEA,IAAA,IACI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU;IAC9D;AAEA,IAAA,IACI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE,IAAI,KAAK;IACvD;AAEA,IAAA,IACI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,IAAI,IAAI;IACjD;IACA,IAAI,KAAK,CAAC,QAAwB,EAAA;AAChC,QAAA,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,QAAQ,CAAC;IAC9C;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC5B,MAAM,sBAAsB,EAAE;QAChC;IACF;;IAIA,cAAc,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC7C,YAAA,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE;QAC1C;IACF;;AAGA,IAAA,YAAY,CAAC,IAAqB,EAAA;QAChC,OAAO,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,SAAS,GAAG,IAAI,CAAC;IACrD;AAGA,IAAA,WAAW,GAAG,CAAC,KAAgB,KAAI;QACjC,KAAK,EAAE,cAAc,EAAE;AACzB,IAAA,CAAC;AAGD,IAAA,YAAY,GAAG,CAAC,KAAgB,KAAI;QAClC,KAAK,EAAE,cAAc,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;;AAGvB,QAAA,IAAI,KAAK,EAAE,YAAY,EAAE;AACvB,YAAA,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,MAAM;QACxC;AACF,IAAA,CAAC;AAGD,IAAA,YAAY,GAAG,CAAC,KAAgB,KAAI;QAClC,KAAK,EAAE,cAAc,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,IAAA,CAAC;AAGD,IAAA,OAAO,GAAG,OAAO,KAAgB,KAAI;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAExB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC;AACzD,QAAA,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,KAAK,CAAC;AAChD,IAAA,CAAC;uGAnFU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,wwBAdjB,CAAC,eAAe,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAiBd,kBAAkB,sFAhBtB,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAa1B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAlB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,QAAQ,EAAE,UAAU;oBACpB,OAAO,EAAE,CAAC,kBAAkB,CAAC;oBAC7B,SAAS,EAAE,CAAC,eAAe,CAAC;AAC5B,oBAAA,QAAQ,EAAE,CAAA,yBAAA,CAA2B;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,QAAQ,EAAE,GAAG;AACb,wBAAA,sBAAsB,EAAE,2BAA2B;AACnD,wBAAA,oBAAoB,EAAE,yBAAyB;AAC/C,wBAAA,qBAAqB,EAAE,0BAA0B;AACjD,wBAAA,kBAAkB,EAAE,uBAAuB;AAC3C,wBAAA,kBAAkB,EAAE,uBAAuB;AAC3C,wBAAA,oBAAoB,EAAE,yBAAyB;AAChD,qBAAA;oBACD,aAAa,EAAE,iBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAChD,iBAAA;;sBAIE,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;sBAKjD,WAAW;uBAAC,gBAAgB;;sBAK5B,WAAW;uBAAC,gBAAgB;;sBAK5B,WAAW;uBAAC,eAAe;;sBAK3B,WAAW;uBAAC,mBAAmB;;sBAK/B;;sBAeA,YAAY;uBAAC,oBAAoB;;sBAYjC,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;;sBAKnC,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBAWpC,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBAMpC,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;;;AChHlC;;AAEG;;ACFH;;AAEG;;;;"}