{"version":3,"file":"cute-dw-core.mjs","sources":["../../../projects/cute-core/src/lib/cute-core.module.ts","../../../projects/cute-core/src/lib/util/exception/RunTimeException.ts","../../../projects/cute-core/src/lib/util/exception/IllegalArgumentException.ts","../../../projects/cute-core/src/lib/collections/AbstractCollection.ts","../../../projects/cute-core/src/lib/collections/AbstractList.ts","../../../projects/cute-core/src/lib/collections/AbstractMap.ts","../../../projects/cute-core/src/lib/collections/AbstractQueue.ts","../../../projects/cute-core/src/lib/collections/AbstractSet.ts","../../../projects/cute-core/src/lib/util/exception/UnsupportedOperationException.ts","../../../projects/cute-core/src/lib/util/exception/IndexOutOfBoundsException.ts","../../../projects/cute-core/src/lib/util/exception/ConcurrentModificationException.ts","../../../projects/cute-core/src/lib/collections/view/ListView.ts","../../../projects/cute-core/src/lib/util/exception/NullPointerException.ts","../../../projects/cute-core/src/lib/util/Strings.ts","../../../projects/cute-core/src/lib/util/Objects.ts","../../../projects/cute-core/src/lib/collections/ArrayList.ts","../../../projects/cute-core/src/lib/collections/HashMap.ts","../../../projects/cute-core/src/lib/collections/HashSet.ts","../../../projects/cute-core/src/lib/util/exception/IllegalStateException.ts","../../../projects/cute-core/src/lib/util/Ciphers.ts","../../../projects/cute-core/src/lib/collections/HashTable.ts","../../../projects/cute-core/src/lib/util/Comparator.ts","../../../projects/cute-core/src/lib/collections/LinkedList.ts","../../../projects/cute-core/src/lib/collections/heap/Heap.ts","../../../projects/cute-core/src/lib/collections/heap/MinHeap.ts","../../../projects/cute-core/src/lib/collections/PriorityQueue.ts","../../../projects/cute-core/src/lib/collections/Properties.ts","../../../projects/cute-core/src/lib/collections/Vector.ts","../../../projects/cute-core/src/lib/collections/Stack.ts","../../../projects/cute-core/src/lib/collections/tree/BinaryTreeNode.ts","../../../projects/cute-core/src/lib/collections/tree/BinarySearchTree.ts","../../../projects/cute-core/src/lib/collections/tree/AvlTree.ts","../../../projects/cute-core/src/lib/collections/TreeMap.ts","../../../projects/cute-core/src/lib/collections/TreeSet.ts","../../../projects/cute-core/src/lib/services/http.service.ts","../../../projects/cute-core/src/lib/util/i18n/text/Format.ts","../../../projects/cute-core/src/lib/util/i18n/text/DateFormat.ts","../../../projects/cute-core/src/lib/util/Arrays.ts","../../../projects/cute-core/src/lib/util/i18n/Locale.ts","../../../projects/cute-core/src/lib/util/Dates.ts","../../../projects/cute-core/src/lib/util/type/Time.ts","../../../projects/cute-core/src/lib/util/i18n/text/SimpleDateFormat.ts","../../../projects/cute-core/src/lib/services/log.service.ts","../../../projects/cute-core/src/lib/controllers/AbstractController.ts","../../../projects/cute-core/src/lib/controllers/DwController.ts","../../../projects/cute-core/src/lib/util/Collections.ts","../../../projects/cute-core/src/lib/util/type/NumericTypedArray.ts","../../../projects/cute-core/src/lib/util/type/Byte.ts","../../../projects/cute-core/src/lib/util/type/DateISO.ts","../../../projects/cute-core/src/lib/util/type/DateTime.ts","../../../projects/cute-core/src/lib/util/type/Decimal.ts","../../../projects/cute-core/src/lib/util/type/Double.ts","../../../projects/cute-core/src/lib/util/type/Float.ts","../../../projects/cute-core/src/lib/util/type/Integer.ts","../../../projects/cute-core/src/lib/util/type/Long.ts","../../../projects/cute-core/src/lib/util/type/UByte.ts","../../../projects/cute-core/src/lib/util/type/UInt.ts","../../../projects/cute-core/src/lib/util/type/ULong.ts","../../../projects/cute-core/src/lib/util/XmlDocs.ts","../../../projects/cute-core/src/lib/util/Types.ts","../../../projects/cute-core/src/lib/util/Helpers.ts","../../../projects/cute-core/src/lib/util/Numbers.ts","../../../projects/cute-core/src/lib/util/i18n/text/NumberSpellerDictionary.ts","../../../projects/cute-core/src/lib/util/i18n/text/NumberSpeller.ts","../../../projects/cute-core/src/lib/util/i18n/text/NumberFormat.ts","../../../projects/cute-core/src/lib/util/i18n/text/DecimalFormat.ts","../../../projects/cute-core/src/lib/util/i18n/text/StringFormat.ts","../../../projects/cute-core/src/lib/util/type/Interval.ts","../../../projects/cute-core/src/lib/util/enum/ResultCode.ts","../../../projects/cute-core/src/lib/util/evaluator/t.ts","../../../projects/cute-core/src/lib/util/evaluator/Functions.ts","../../../projects/cute-core/src/lib/util/evaluator/CodeBlock.ts","../../../projects/cute-core/src/lib/util/exception/ClassCastException.ts","../../../projects/cute-core/src/lib/util/exception/IllegalJsonException.ts","../../../projects/cute-core/src/lib/util/exception/NoSuchElementException.ts","../../../projects/cute-core/src/lib/util/exception/ParseException.ts","../../../projects/cute-core/src/lib/util/net/JsonRpc.ts","../../../projects/cute-core/src/lib/util/rxjs/EventProducer.ts","../../../projects/cute-core/src/lib/util/rxjs/operators.ts","../../../projects/cute-core/src/lib/datastore/DataStoreOptions.ts","../../../projects/cute-core/src/lib/datastore/DSCodeBlock.ts","../../../projects/cute-core/src/lib/datastore/events.ts","../../../projects/cute-core/src/lib/datastore/DataStoreService.ts","../../../projects/cute-core/src/lib/util/exception/JsonRpcException.ts","../../../projects/cute-core/src/lib/datastore/DataStore.ts","../../../projects/cute-core/src/lib/datastore/TableParam.ts","../../../projects/cute-core/src/lib/datawindow/datawindow.component.ts","../../../projects/cute-core/src/public-api.ts","../../../projects/cute-core/src/cute-dw-core.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\n\n@NgModule({\n  declarations: [\n  ],\n  imports: [\n  ],\n  exports: [\n  ],\n  providers: [\n  ]\n})\nexport class CuteCoreModule { }\n","//import {Objects} from \"../Objects\";\r\n\r\n/**\r\n * Superclass of exceptions that can be thrown during the normal operation flow\r\n */\r\nexport class RunTimeException extends Error {\r\n  private readonly _cause: Error | undefined;\r\n\r\n  constructor(message?: string, cause?: Error) {\r\n    super(message);\r\n    this._cause = cause;\r\n    //this.name = Objects.getClassName(this);\r\n  }\r\n\r\n  get cause(): Error | undefined {return this._cause;}\r\n}\r\n","import { RunTimeException } from \"./RunTimeException\";\r\n\r\nexport class IllegalArgumentException extends RunTimeException {\r\n\r\n}\r\n","import {from, Observable, Subject} from \"rxjs\";\r\nimport { IllegalArgumentException } from \"../util/exception/IllegalArgumentException\";\r\nimport { Consumer } from \"../util/function/Consumer\";\r\nimport { Predicate } from \"../util/function/Predicate\";\r\nimport { Collection, Element } from \"./Collection\";\r\n\r\n/**\r\n * This class provides a skeletal implementation of the Collection interface, to minimize the effort required to implement this interface.\r\n */\r\nexport abstract class AbstractCollection<T> implements Collection<T> {\r\n  public readonly contentChanged$ = new Subject<void>();\r\n\r\n  abstract [Symbol.iterator](): IterableIterator<Element<T>>;\r\n  abstract [Symbol.toStringTag]: string;\r\n\r\n  /**\r\n   * Returns an observable object of the collection changes\r\n   */\r\n  get contentChanged(): Observable<void> {return this.contentChanged$.asObservable()};\r\n  /**\r\n   * Returns an iterator over the elements contained in this collection\r\n   */\r\n  get iterator(): Iterator<Element<T>> {return this[Symbol.iterator]()}\r\n  /**\r\n   * Returns the number of elements in this collection.\r\n   */\r\n  get length(): number {return this.size;}\r\n  /**\r\n   * Returns the number of elements in this collection\r\n   */\r\n  get size(): number {\r\n    return this.toArray().length;\r\n  }\r\n  /**\r\n   * Ensures that this collection contains the specified element.\r\n   * @param value Element whose presence in this collection is to be ensured\r\n   * @returns `this` Object reference\r\n   * @throws `IllegalArgumentException` if the argument's value is _undefined_\r\n   * @description This method was defined for JavaScript's `Set` interface compatibility.\r\n   */\r\n  add(value: Element<T>): this {\r\n    if ( value === undefined ) {\r\n      throw new IllegalArgumentException(`Method add(): Illegal argument value '${value}'`);\r\n    }\r\n    this.append(value);\r\n    return this;\r\n  }\r\n  /**\r\n   * Ensures that this collection contains the specified element\r\n   * @param value Element whose presence in this collection is to be ensured\r\n   * @returns _true_ if this collection changed as a result of the call, _false_ otherwise\r\n   */\r\n  abstract append(value: Element<T>): boolean;\r\n  /**\r\n   * Appends all the elements in the specified collection to this collection\r\n   * @param collection Collection containing elements to be added to this collection\r\n   * @returns _true_ if this collection changed as a result of the call\r\n   */\r\n  appendAll<E extends T>(collection: Collection<E>|Array<E>): boolean {\r\n    let count = 0;\r\n    if (collection) {\r\n      for (const elem of collection) {\r\n        if (this.append(elem)) {\r\n          count++;\r\n        }\r\n      }\r\n    }\r\n    return count > 0;\r\n  }\r\n  /**\r\n   * Removes all the elements from this collection\r\n   */\r\n  abstract clear(): void;\r\n  /**\r\n   * Returns _true_ if this collection contains the specified element\r\n   */\r\n  abstract contains(value: Element<T>): boolean;\r\n  /**\r\n   * Returns _true_ if this collection contains all the elements in the specified collection\r\n   * @param coll Collection to be checked for containment in this collection\r\n   * @returns _true_ if this collection contains all the elements in the specified collection\r\n   */\r\n  containsAll<E extends T>(coll: Collection<E>|Array<T>): boolean {\r\n    if (coll && coll.length > 0) {\r\n      for (const elem of coll) {\r\n        if (!this.contains(elem)) {\r\n          return false;\r\n        }\r\n      }\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * Compares the specified object with this collection for equality\r\n   * @param value  Object to be compared for equality with this collection\r\n   * @returns _true_ if the specified `value` is equal to this collection\r\n   */\r\n  equals(value: any): boolean {\r\n    return (value && value === this);\r\n  }\r\n  /**\r\n   * Returns the first element in the provided array that satisfies the provided testing function.\r\n   * If no values satisfy the testing function, _undefined_ is returned.\r\n   * @param test The testing function\r\n   * @returns The first element in the collection that satisfies the provided testing function. Otherwise, _undefined_ is returned.\r\n   */\r\n  find(test: Predicate<Element<T>>): Element<T> | undefined {\r\n    let resultElem = undefined;\r\n    for (const elem of this) {\r\n      if (test(elem)) {\r\n        resultElem = elem;\r\n        break;\r\n      }\r\n    }\r\n    return resultElem;\r\n  }\r\n  /**\r\n   * Performs the specified action for each element in the collection\r\n   * @param action {Consumer} The action to be performed for each element\r\n   * @throws `IllegalArgumentException`, if the specified `action` is null\r\n   */\r\n  forEach(action: Consumer<Element<T>>): void {\r\n    if (!action) {\r\n      throw new IllegalArgumentException(\"action is required parameter\");\r\n    }\r\n    for (let elem of this) {\r\n      action(elem);\r\n    }\r\n  }\r\n  /**\r\n   * Returns _true_ if this collection contains no elements\r\n   */\r\n  isEmpty(): boolean {\r\n    return this.size == 0;\r\n  }\r\n  /**\r\n   * Removes a single instance of the specified element from this collection, if it is present\r\n   * @param value  Element to be removed from this collection, if present\r\n   * @returns _true_ if an element was removed as a result of this call\r\n   */\r\n  abstract remove(value: Element<T>): boolean;\r\n  /**\r\n   * Removes all of this collection's elements that are also contained in the specified collection\r\n   * @param collection Collection containing elements to be removed from this collection\r\n   * @returns _true_ if this collection changed as a result of the call\r\n   */\r\n  removeAll(collection: Collection<T>|Array<T>): boolean {\r\n    let nCount = 0;\r\n    if (collection) {\r\n      for (const elem of collection) {\r\n        if (this.remove(elem)) {\r\n          nCount++;\r\n        }\r\n      }\r\n    }\r\n    return nCount > 0;\r\n  }\r\n  /**\r\n   * Retains only the elements in this collection that are contained in the specified collection\r\n   * @param collection Collection containing elements to be retained in this collection\r\n   * @returns _true_ if this collection changed as a result of the call\r\n   */\r\n  retainAll(collection: Collection<T>|Array<T>): boolean {\r\n    let count = 0;\r\n    if (collection) {\r\n      if (Array.isArray(collection)) {\r\n        for (const elem of this) {\r\n          if (collection.indexOf(elem!)==0 && this.remove(elem)) {\r\n            count++;\r\n          }\r\n        }\r\n      } else {\r\n        for (const elem of this) {\r\n          if (!collection.contains(elem) && this.remove(elem)) {\r\n            count++;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return count > 0;\r\n  }\r\n  /**\r\n   * Removes all the elements of this collection that satisfy the given predicate\r\n   * @param p A predicate which returns true for elements to be removed\r\n   * @returns _true_ if any elements were removed, _false_ otherwise\r\n   */\r\n  removeIf(p: Predicate<Element<T>>): boolean {\r\n    let nCount = 0;\r\n    for (const elem of this) {\r\n      if (p(elem) && this.remove(elem)) {\r\n        nCount++;\r\n      }\r\n    }\r\n    return nCount > 0;\r\n  }\r\n  /**\r\n   * Returns a sequential `Observable` object with this collection as its source\r\n   * @since 0.5.0\r\n   */\r\n  stream(): Observable<Element<T>> {\r\n    return from(this);\r\n  }\r\n  /**\r\n   * Returns an array containing all the elements in this collection\r\n   */\r\n  abstract toArray(): Array<Element<T>>;\r\n   /**\r\n   * Returns a JSON representation of this collection\r\n   */\r\n  toJSON(): Array<Element<T>> {\r\n    return this.toArray();\r\n  }\r\n  /**\r\n   * Returns a string representation of this collection\r\n   */\r\n  toString(): string {\r\n    return this.toArray().toString();\r\n  }\r\n\r\n}\r\n","import { Compare } from \"../util/function/Compare\";\r\nimport { Predicate } from \"../util/function/Predicate\";\r\nimport { AbstractCollection} from \"./AbstractCollection\";\r\nimport { Element } from \"./Collection\";\r\nimport { LinkedListNode } from \"./LinkedList\";\r\nimport { List } from \"./List\";\r\n\r\n/**\r\n * This class provides a skeletal implementation of the `List` interface to minimize the effort required to implement this interface backed by a \"random access\" data store (such as an _array_).\r\n */\r\nexport abstract class AbstractList<T> extends AbstractCollection<T> implements List<T> {\r\n  protected _modCount: number = 0;\r\n\r\n  /** Modification counter. Must be overridden in the subclasses that implement `subList` method */\r\n  get modCount(): number { return this._modCount; }\r\n  /**\r\n   * Tests whether all elements in the list pass the test implemented by the provided function\r\n   * @param callbackFn The function is called\r\n   * @returns {boolean} _true_ if the `callbackFn` function returns a _truthy_ value for every list element. Otherwise, _false_.\r\n   */\r\n  every(callbackFn: (value: Element<T>, index: number, list: List<T>) => boolean): boolean {\r\n    if (this.size > 0) {\r\n      let i: number = -1;\r\n      for (const elem of this) {\r\n        if (!callbackFn(elem, ++i, this)) {\r\n          return false;\r\n        }\r\n      }\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * Creates an array as a shallow copy of a portion of the current list, filtered down to just the elements from the current list that pass the test implemented by the provided function\r\n   * @param predicate A predicate function, to test each element of the list. Return a value that coerces to _true_ to keep the element, or to _false_ otherwise.\r\n   * @returns An array of a portion of the given list, filtered down to just the elements from the given list that pass the test implemented by the provided function. If no elements pass the test, an empty array will be returned.\r\n   */\r\n  filter(predicate: Predicate<Element<T>>): Array<Element<T>> {\r\n    let arr: Element<T>[] = [];\r\n    if (this.size > 0) {\r\n      for (const elem of this) {\r\n        if (predicate(elem)) {\r\n          arr.push(elem);\r\n        }\r\n      }\r\n    }\r\n    return arr;\r\n  }\r\n  /**\r\n   * Returns the element at the specified position in this list\r\n   * @param index\r\n   */\r\n  abstract get(index: number): Element<T> | undefined;\r\n  /**\r\n   * Gets read only node's object by its index\r\n   * @param index\r\n   * @private\r\n   */\r\n  abstract getNode(index: number): Readonly<LinkedListNode<T>> | null;\r\n  /**\r\n   * Gets the parent list of the current list `view` object\r\n   */\r\n  getParent(): AbstractList<T> | null { return null }\r\n  /**\r\n   * Gets the range of the `from` and `to` indexes related to the `view`'s parent list (if any)\r\n   * @returns\r\n   */\r\n  getParentRange(): [number, number] { return [0, 0]; }\r\n  /**\r\n  * Returns the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element\r\n  * @param value\r\n  * @param fromIndex\r\n  */\r\n  abstract indexOf(value: Element<T>, fromIndex?: number): number;\r\n  /**\r\n  * Inserts the specified element at the specified position in this list\r\n  * @param index\r\n  * @param value\r\n  */\r\n  abstract insert(index: number, value: Element<T>): boolean;\r\n  /**\r\n   * Returns the index of the last occurrence of the specified element in this list, or -1 if this list does not contain the element\r\n   * @param value\r\n   * @param fromIndex\r\n   */\r\n  abstract lastIndexOf(value: Element<T>, fromIndex?: number): number;\r\n  /**\r\n   * Removes the element at the specified position in this list\r\n   * @param index The index of the element to be removed\r\n   * @returns The element previously at the specified position\r\n   */\r\n  abstract removeAt(index: number): Element<T> | undefined;\r\n  /**\r\n   * Removes from this list all of the elements whose index is between `fromIndex`, inclusive, and `toIndex`, exclusive\r\n   * @param fromIndex Index of first element to be removed\r\n   * @param toIndex Index after last element to be removed\r\n   * @returns _true_ if the list is changed, else _false_\r\n   */\r\n  abstract removeRange(fromIndex: number, toIndex?: number): boolean;\r\n  /**\r\n   * Replaces the element at the specified position in this list with the specified element\r\n   * @param index Index of the element to replace\r\n   * @param value Element to be stored at the specified position\r\n   * @returns The element previously at the specified position\r\n   */\r\n  abstract set(index: number, value: Element<T>): Element<T> | undefined;\r\n  /**\r\n   * Tests whether all elements in the list pass the test implemented by the provided function\r\n   * @param callbackFn A function to test for each element\r\n   * @returns {boolean} _true_ if the `callbackFn` function returns a _truthy_ value for at least one element in the list. Otherwise, _false_.\r\n   */\r\n  some(callbackFn: (value: Element<T>, index: number, list: List<T>) => boolean): boolean {\r\n    let i: number = -1;\r\n    for (const elem of this) {\r\n      if (callbackFn(elem, ++i, this)) {\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * Sorts this list according to the order induced by the specified `Compare` function\r\n   * @param compare The `Compare` function used to compare list elements. A _undefined_ value indicates that the elements' natural ordering should be used\r\n   */\r\n  sort(compare?: Compare<Element<T>>): void {\r\n    const arr = this.toArray();\r\n    const nLen = arr.length;\r\n    arr.sort(compare);\r\n    for (let i = 0; i < nLen; i++) {\r\n      this.set(i, arr[i]);\r\n    }\r\n  }\r\n  /**\r\n  * Returns a view of the portion of this list between the specified `fromIndex`, inclusive, and `toIndex`, exclusive.\r\n  * @param fromIndex Low endpoint (inclusive) of the subList\r\n  * @param toIndex High endpoint (exclusive) of the subList\r\n  * @returns A view of the specified range within this list\r\n  */\r\n  abstract subList(fromIndex: number, toIndex: number): List<T>;\r\n\r\n}\r\n","import { Observable } from 'rxjs';\r\nimport { Element } from './Collection';\r\nimport { Dictionary } from './Dictionary';\r\n\r\nexport type Entry<K, V> = { key: K, value: Element<V> };\r\n/**\r\n * The root immutable `Map` interface\r\n */\r\nexport interface ImmutableMap<K,V> extends ReadonlyMap<K,V> {\r\n  /** Returns an observable object to look after the changes in this collection */\r\n  get contentChanged(): Observable<void>;\r\n  /** Returns the number of key-value mappings in this map */\r\n  get size(): number;\r\n  /** +Returns true if this map contains a mapping for the specified `key` */\r\n  containsKey(key: K): boolean;\r\n  /** +Returns _true_ if this map maps one or more keys to the specified `value` */\r\n  containsValue(value: V): boolean;\r\n  /** Returns an iterable iterator of the key/value pair contained in this map */\r\n  entries(): IterableIterator<[K, V]>;\r\n  /** Calls the callback function `callbackfn` for each key/value entry in the map  */\r\n  forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void;\r\n  /** Returns the value to which the specified `key` is mapped, or `undefined` if this map contains no mapping for the key */\r\n  get(key: K): V | undefined;\r\n  /** Returns true if this map contains a mapping for the specified `key` */\r\n  has(key: K): boolean;\r\n  /** +Returns _true_ if this map contains no key-value mappings */\r\n  isEmpty(): boolean;\r\n  /** Returns an iterable iterator of the keys contained in this map */\r\n  keys(): IterableIterator<K>;\r\n  /** +Gets the keys of this tree as a `Set` collection */\r\n  keySet(): Set<K>;\r\n  toString(): string;\r\n  /** Returns an iterable iterator of the values contained in this map */\r\n  values(): IterableIterator<V>;\r\n  /** Returns an iterable iterator of the key/value pair contained in this map */\r\n  [Symbol.iterator](): IterableIterator<[K, V]>;\r\n  /** Returns the name (classname) of the map */\r\n  [Symbol.toStringTag]: string;\r\n\r\n}\r\n\r\n/**\r\n * This class provides a skeletal implementation of the mutable `Map` interface, to minimize the effort required to implement this interface.\r\n */\r\nexport abstract class AbstractMap<K,V> implements ImmutableMap<K,V>, Map<K,V> {\r\n  /** Returns an observable object to look after the changes in this collection */\r\n  abstract get contentChanged(): Observable<void>;\r\n  /** Returns the number of key-value mappings in this map */\r\n  abstract get size(): number;\r\n  /** Removes all of the mappings from this map */\r\n  abstract clear(): void;\r\n  /** +Returns true if this map contains a mapping for the specified `key` */\r\n  abstract containsKey(key: K): boolean;\r\n  /** +Returns _true_ if this map maps one or more keys to the specified `value` */\r\n  abstract containsValue(value: V): boolean;\r\n  /** Removes the mapping for a key from this map if it is present */\r\n  delete(key: K): boolean { return (this.remove(key) !== undefined); }\r\n  /** Returns an iterable iterator of the key/value pair contained in this map */\r\n  abstract entries(): IterableIterator<[K, V]>;\r\n  /** Calls the callback function `callbackfn` for each key/value entry in the map  */\r\n  abstract forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void;\r\n  /** Returns the value to which the specified `key` is mapped, or `undefined` if this map contains no mapping for the key */\r\n  abstract get(key: K): V | undefined;\r\n  /** Returns true if this map contains a mapping for the specified `key` */\r\n  abstract has(key: K): boolean;\r\n  /** +Returns _true_ if this map contains no key-value mappings */\r\n  isEmpty(): boolean  {return this.size == 0};\r\n  /** Returns an iterable iterator of the keys contained in this map */\r\n  abstract keys(): IterableIterator<K>;\r\n  /** +Gets the keys of this tree as a `Set` collection */\r\n  abstract keySet(): Set<K>;\r\n  /** +Associates the specified `value` with the specified `key` in this map and returns the previous value of the key if it was mapped  */\r\n  abstract put(key: K, value: V): Element<V> | undefined;\r\n  /** +Copies all of the mappings from the specified map to this map */\r\n  abstract putAll<Key extends K, Value extends V>(map: Dictionary<Key,Value> | Map<Key,Value>): void;\r\n  /** +Removes the mapping for a `key` from this map and returns the previous value of the mapping if it is present */\r\n  abstract remove(key: K): Element<V> | undefined;\r\n  /** Associates the specified `value` with the specified `key` in this map and returns the map object reference */\r\n  abstract set(key: K, value: V): this;\r\n  /** +Gets the string representation of the map */\r\n  abstract toString(): string;\r\n  /** Returns an iterable iterator of the values contained in this map */\r\n  abstract values(): IterableIterator<V>;\r\n  /** Returns an iterable iterator of the key/value pair contained in this map */\r\n  abstract [Symbol.iterator](): IterableIterator<[K, V]>;\r\n  /** Returns the name (classname) of the map */\r\n  abstract [Symbol.toStringTag]: string;\r\n}\r\n","import { AbstractCollection} from \"./AbstractCollection\";\r\nimport { Element } from \"./Collection\";\r\nimport { Queue } from \"./Queue\";\r\n\r\n/**\r\n * This class provides skeletal implementations of some `Queue` operations.\r\n */\r\nexport abstract class AbstractQueue<T> extends AbstractCollection<T> implements Queue<T> {\r\n\r\n  abstract element(): Element<T> | undefined;\r\n  abstract offer(value: Element<T>): boolean;\r\n  abstract peek(): Element<T>|undefined;\r\n  abstract poll(): Element<T>|undefined;\r\n  abstract removeFirst(): Element<T>|undefined;\r\n\r\n}\r\n","import { AbstractCollection } from \"./AbstractCollection\";\r\nimport { ImmutableCollection } from \"./Collection\";\r\n\r\n/**\r\n * This immutable interface places additional stipulations, beyond those inherited from the `ImmutableCollection` interface\r\n */\r\nexport interface ImmutableSet<E> extends ImmutableCollection<E>, ReadonlySet<E> {\r\n  /** Returns a boolean asserting whether an element is present with the given value in the `Set` object or not */\r\n  has(value: E): boolean;\r\n  /** Returns a new iterator object that contains an array of `[value, value]` for each element in the `Set` object, in insertion order */\r\n  entries(): IterableIterator<[E,E]>;\r\n  /** An alias for `values` */\r\n  keys(): IterableIterator<E>;\r\n  /** Returns a new iterator object that yields the values for each element in the `Set` object in insertion order */\r\n  values(): IterableIterator<E>;\r\n  /** Calls `callbackFn` once for each value present in the `Set` object, in insertion orders */\r\n  forEach(callbackfn: (value: E, value2:E, set: Set<E>) => void, thisArg?: any): void;\r\n  /** Returns a new iterator object that yields the values for each element in the `Set` object in insertion order */\r\n  [Symbol.iterator](): IterableIterator<E>;\r\n}\r\n/**\r\n * This class provides a skeletal implementation of the mutable `Set` interface to minimize the effort required to implement this interface\r\n */\r\nexport abstract class AbstractSet<E> extends AbstractCollection<E> implements ImmutableSet<E>, Set<E> {\r\n\r\n  /** Removes the element associated to the value and returns a boolean asserting whether an element was successfully removed or not */\r\n  abstract delete(value: E): boolean;\r\n  /** Returns a boolean asserting whether an element is present with the given value in the `Set` object or not */\r\n  abstract has(value: E): boolean;\r\n  /** Returns a new iterator object that contains an array of `[value, value]` for each element in the `Set` object, in insertion order */\r\n  abstract entries(): IterableIterator<[E,E]>;\r\n  /** An alias for `values` */\r\n  abstract keys(): IterableIterator<E>;\r\n  /** Returns a new iterator object that yields the values for each element in the `Set` object in insertion order */\r\n  abstract values(): IterableIterator<E>;\r\n  /** Calls `callbackFn` once for each value present in the `Set` object, in insertion orders */\r\n  abstract forEach(callbackfn: (value: E, value2:E, set: Set<E>) => void, thisArg?: any): void;\r\n  /** Returns a new iterator object that yields the values for each element in the `Set` object in insertion order */\r\n  abstract [Symbol.iterator](): IterableIterator<E>;\r\n\r\n}\r\n","import { RunTimeException } from \"./RunTimeException\";\r\n\r\nexport class UnsupportedOperationException extends RunTimeException {\r\n\r\n}\r\n","import { RunTimeException } from \"./RunTimeException\";\r\n\r\nexport class IndexOutOfBoundsException extends RunTimeException {\r\n\r\n}\r\n","import { RunTimeException } from \"./RunTimeException\";\r\n\r\nexport class ConcurrentModificationException extends RunTimeException {\r\n\r\n}\r\n","import { ConcurrentModificationException } from \"../../util/exception/ConcurrentModificationException\";\r\nimport { Cloneable } from \"../../util/interface/Cloneable\";\r\nimport { AbstractList } from \"../AbstractList\";\r\nimport { Element } from \"../Collection\";\r\nimport { LinkedListNode } from \"../LinkedList\";\r\nimport { List } from \"../List\";\r\n/**\r\n * This class is denoted to work with a sub set of items in the parent collection\r\n */\r\nexport class ListView<T> extends AbstractList<T> implements Cloneable {\r\n  private _owner: AbstractList<T>;\r\n  private _parent: AbstractList<T>;\r\n  private _head: LinkedListNode<T> | null = null;\r\n  private _tail: LinkedListNode<T> | null = null;\r\n  private _savedModCount: number;\r\n  private _parentFromIndex: number;\r\n  private _parentToIndex: number;\r\n  private _ownerFromIndex: number = 0;\r\n  private _ownerToIndex: number = 0;\r\n  private _size: number = 0;\r\n\r\n  constructor(parent: AbstractList<T>, fromIndex: number, toIndex: number) {\r\n    super();\r\n    this._parentFromIndex = Math.max(fromIndex, 0);\r\n    this._parentToIndex = Math.min(toIndex, parent.size);\r\n    this._ownerFromIndex = this._parentFromIndex;\r\n    this._ownerToIndex = this._parentToIndex;\r\n    this._parent = parent;\r\n    this._owner = parent;\r\n\r\n    let range: [number, number];\r\n    let p: AbstractList<T> | null = parent;\r\n    while (p) {\r\n      this._owner = p;\r\n      range = p.getParentRange();\r\n      this._ownerFromIndex += range[0];\r\n      p = p.getParent();\r\n    }\r\n\r\n    this._ownerToIndex = this._ownerFromIndex + (toIndex - fromIndex);\r\n\r\n    this._savedModCount = this._owner.modCount;\r\n\r\n    if (this._parentFromIndex >= 0 && this._parentToIndex > 0 && this._parentFromIndex <= this._parentToIndex) {\r\n      this._head = parent.getNode(this._parentFromIndex);\r\n      this._tail = parent.getNode(this._parentToIndex - 1);\r\n\r\n      if (this._head && this._tail) {\r\n        this._size = 1;\r\n        let node: LinkedListNode<T>|null = this._head;\r\n        while(node != this._tail) {\r\n          this._size++;\r\n          node = node!.next;\r\n        }\r\n      }\r\n    }\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  get size(): number {return this._size}\r\n  /**\r\n   * @private\r\n   */\r\n  private _checkModCount() {\r\n    if (this._savedModCount != this._owner.modCount) {\r\n      throw new ConcurrentModificationException();\r\n    }\r\n  }\r\n\r\n  *[Symbol.iterator](): IterableIterator<Element<T>> {\r\n    let nextNode;\r\n    let isTail;\r\n    let node = this._head;\r\n    while (node) {\r\n      nextNode = node.next;\r\n      isTail = (node == this._tail);\r\n\r\n      yield node.value;\r\n\r\n      if (isTail)\r\n        break;\r\n      else\r\n        node = nextNode;\r\n    }\r\n  }\r\n\r\n  [Symbol.toStringTag] = \"ListView\";\r\n\r\n  clone(): ListView<T> {\r\n    return new ListView<T>(this._parent, this._parentFromIndex, this._parentToIndex);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  getNode(index: number): LinkedListNode<T> | null {\r\n    return this._owner.getNode(this._ownerFromIndex + index);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  getParentRange(): [number, number] {\r\n    return [this._parentFromIndex, this._parentToIndex];\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  getParent(): AbstractList<T> | null {\r\n    return this._parent;\r\n  }\r\n  /**\r\n   * @override\r\n   * @throws ConcurrentModificationException\r\n   */\r\n  clear(): void {\r\n    this._checkModCount();\r\n\r\n    if (this._owner.removeRange(this._ownerFromIndex, this._ownerToIndex)) {\r\n      this._ownerToIndex = this._ownerFromIndex;\r\n      this._head = this._tail = null;\r\n      this._size = 0;\r\n      this._savedModCount = this._owner.modCount;\r\n    }\r\n  }\r\n  /**\r\n   * @override\r\n   * @throws ConcurrentModificationException\r\n   */\r\n  get(index: number): Element<T> | undefined {\r\n    this._checkModCount();\r\n    return this._owner.get(this._ownerFromIndex + index);\r\n  }\r\n  /**\r\n   * @override\r\n   * @throws ConcurrentModificationException\r\n   */\r\n  indexOf(value: Element<T>, fromIndex?: number | undefined): number {\r\n    this._checkModCount();\r\n    return this._owner.indexOf(value, this._ownerFromIndex + (fromIndex ?? 0));\r\n  }\r\n  /**\r\n   * @override\r\n   * @throws ConcurrentModificationException\r\n   */\r\n  insert(index: number, value: Element<T>): boolean {\r\n    this._checkModCount();\r\n    if (this._owner.insert(this._ownerFromIndex + index, value)) {\r\n      if (index == 0) {\r\n        this._head = this._owner.getNode(this._ownerFromIndex);\r\n        if (!this._tail) {\r\n          this._tail = this._head;\r\n        }\r\n      } else if ((this._ownerFromIndex + index) > this._ownerToIndex) {\r\n        this._tail = this._owner.getNode(this._ownerToIndex + 1);\r\n        if (!this._head) {\r\n          this._head = this._tail;\r\n        }\r\n      }\r\n      this._size++;\r\n      this._ownerToIndex++;\r\n      this._savedModCount = this._owner.modCount;\r\n\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * @override\r\n   * @throws ConcurrentModificationException\r\n   */\r\n  lastIndexOf(value: Element<T>, fromIndex?: number | undefined): number {\r\n    this._checkModCount();\r\n    return this._owner.lastIndexOf(value, this._ownerFromIndex + (fromIndex ?? 0));\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  removeRange(fromIndex: number, toIndex?: number | undefined): boolean {\r\n    this._checkModCount();\r\n    return this._owner.removeRange(this._ownerFromIndex+fromIndex, this._ownerToIndex+(toIndex ?? this.size) );\r\n  }\r\n  /**\r\n   * @override\r\n   * @throws ConcurrentModificationException\r\n   */\r\n  set(index: number, value: Element<T>): Element<T> | undefined {\r\n    this._checkModCount();\r\n    return this._owner.set(this._ownerFromIndex + index, value);\r\n  }\r\n  /**\r\n   * @override\r\n   * @throws ConcurrentModificationException\r\n   */\r\n  subList(fromIndex: number, toIndex: number): List<T> {\r\n    this._checkModCount();\r\n    return new ListView(this, fromIndex, toIndex);\r\n  }\r\n  /**\r\n   * @override\r\n   * @throws ConcurrentModificationException\r\n   */\r\n  append(value: Element<T>): boolean {\r\n    this._checkModCount();\r\n    if (this._owner.insert(this._ownerToIndex, value)) {\r\n      this._tail = this._owner.getNode(this._ownerToIndex);\r\n      if (!this._head)  this._head = this._tail;\r\n      this._size++;\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  contains(value: Element<T>): boolean {\r\n    let node = this._head;\r\n    while (node) {\r\n      if (node.value === value) {\r\n        return true;\r\n      }\r\n      if (node == this._tail)\r\n        break;\r\n      else\r\n        node = node.next;\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  toArray(): Element<T>[] {\r\n    const vals: Array<Element<T>> = [];\r\n\r\n    let currentNode = this._head;\r\n    while (currentNode) {\r\n      vals.push(currentNode.value);\r\n      if (currentNode == this._tail) break;\r\n      currentNode = currentNode.next;\r\n    }\r\n    return vals;\r\n  }\r\n  /**\r\n   * @override\r\n   * @throws ConcurrentModificationException\r\n   */\r\n  remove(value: Element<T>): boolean {\r\n    const index = this.indexOf(value);\r\n    if (index >= 0) {\r\n      return (this.removeAt(index)!==undefined);\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * @override\r\n   * @throws ConcurrentModificationException\r\n   */\r\n  removeAt(index: number): Element<T> | undefined {\r\n    this._checkModCount();\r\n    const node = this._owner.getNode(this._ownerFromIndex+index);\r\n    let item: Element<T>|undefined = this._owner.removeAt(this._ownerFromIndex+index);\r\n    if (!(item === undefined)) {\r\n      if (this._head==this._tail && node==this._head) {\r\n        this._head = this._tail = null;\r\n      } else if (this._head && node == this._head) {\r\n        this._head = this._head.next;\r\n      } else if (this._tail && node == this._tail) {\r\n        this._tail = this._tail.prev;\r\n      }\r\n      this._size--;\r\n      this._ownerToIndex--;\r\n      this._savedModCount = this._owner.modCount;\r\n\r\n      return item;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n}\r\n","import { RunTimeException } from \"./RunTimeException\";\r\n\r\nexport class NullPointerException extends RunTimeException {\r\n\r\n}\r\n","\r\nexport type StringLike = string | null | undefined;\r\n\r\nconst LIKE_RE = /([\\\\.\\\\\\\\\\\\+\\\\*\\\\?\\\\[\\\\^\\\\]\\\\$\\\\(\\\\)\\\\{\\\\}\\\\=\\\\!\\\\<\\\\>\\\\|\\\\:\\\\-])/g;\r\n\r\nconst eLBR = encodeURI('{');\r\nconst eRBR = encodeURI('}');\r\n\r\n/**\r\n * This class consists exclusively of the static methods that operate on or return string values\r\n */\r\nexport class Strings {\r\n  /**\r\n   * Checks for string emptiness. String is empty if it doesn't contain any characters or equals to null/undefined.\r\n   * @param str String value to check\r\n   * @returns true/false\r\n   */\r\n  static isEmpty(str: StringLike): boolean {\r\n    return (Strings.trimAll(str)) ? false : true;\r\n  }\r\n  /**\r\n   * Returns a new string if the specified string is empty, i.e. has only blank characters, _null_ or _undefined_\r\n   * @param str String value to check\r\n   * @param def String value to return if `str` is empty\r\n   * @returns `str` or `def` string if `str` is empty\r\n   */\r\n  static ifEmpty(str: StringLike, def: string): string {\r\n    return Strings.isEmpty(str) ? def : str!;\r\n  }\r\n  /* https://stackoverflow.com/questions/1314045/emulating-sql-like-in-javascript */\r\n  /**\r\n   * SQL Like testing function\r\n   *\r\n   * @param str     Source string for testing\r\n   * @param search  Search pattern that may has wildcards of sql **LIKE** operator.\r\n   *                The percent sign (%) represents zero, one, or multiple characters\r\n   *                The underscore sign (_) represents one, single character\r\n   * @returns _true_ if check matches, _false_ if not\r\n   */\r\n  static like(str: StringLike, search: StringLike): boolean {\r\n    if (typeof str !== 'string') { return false; }\r\n    if (typeof search !== 'string') { return false; }\r\n    // Remove special chars\r\n    search = search.replace(LIKE_RE, \"\\\\$1\");\r\n    // Replace % and _ with equivalent regex\r\n    search = search.replace(/%/g, '.*').replace(/_/g, '.');\r\n    // Check matches?\r\n    return RegExp('^' + search + '$', 'gi').test(str);\r\n  }\r\n  /**\r\n   * Obtains a specified number of characters from the beginning of a string.\r\n   * @param str The string you want to search\r\n   * @param len A long specifying the number of characters you want to return\r\n   * @returns {string} Returns the leftmost `len` characters in string if it succeeds and the empty string (\"\") if an error occurs.\r\n   *                   If any argument's value is null, *left* returns null. If `len` is greater than or equal to the length of the string, function returns the entire string. It does not add spaces to make the return value's length equal to `len`.\r\n   * @see {@link right}\r\n   */\r\n  static left(str: StringLike, len: number): StringLike {\r\n    if (typeof (str) == \"string\" && typeof (len) == \"number\") {\r\n      return str.substring(0, len);\r\n    }\r\n    return null;\r\n  }\r\n  /**\r\n   * Obtains a specified number of characters from the end of a string.\r\n   * @param str The string from which you want characters returned\r\n   * @param len A long whose value is the number of characters you want returned from the right end of string\r\n   * @returns Returns the rightmost `len` characters in string if it succeeds and the empty string (\"\") if an error occurs. If any argument's value is null, function returns null. If `len` is greater than or equal to the length of the string, *right* returns the entire string. It does not add spaces to make the return value's length equal to `len`.\r\n   * @see {@link left}\r\n   */\r\n  static right(str: StringLike, len: number): StringLike {\r\n    if (typeof (str) == \"string\" && typeof (len) == \"number\") {\r\n      return str.substring(str.length - len);\r\n    }\r\n    return null;\r\n  }\r\n  /**\r\n   * Removes leading and trailing specified characters from a string.\r\n   * @param str The string you want returned with leading and trailing `chars` deleted\r\n   * @param chars Characters to delete from the start and the end of a string. Default is all types of spaces.\r\n   * @returns Returns a copy of string with all leading and trailing `chars` deleted if it succeeds.\r\n   *          If string is null, _trimAll_ returns null.\r\n   * @see {@link trimLeft}\r\n   * @see {@link trimRight}\r\n   */\r\n  static trimAll(str: StringLike, chars?: string | string[]): StringLike {\r\n    return Strings.trimRight(Strings.trimLeft(str, chars), chars);\r\n  }\r\n  /**\r\n   * Removes trailing specified characters from a string.\r\n   * @param str The string you want returned with trailing `chars` deleted\r\n   * @param chars Characters to delete from the end of a string. Default is all types of spaces.\r\n   * @returns Returns a copy of string with all trailing `chars` deleted if it succeeds.\r\n   *          If string is null, _trimRight_ returns null.\r\n   * @see {@link trimLeft}\r\n   * @see {@link trimAll}\r\n   */\r\n  static trimRight(str: StringLike, chars?: string | string[]): StringLike {\r\n    if (!(typeof (str) === \"string\")) return null;\r\n\r\n    if (!chars)\r\n      return str.trimEnd();\r\n\r\n    let start = 0,\r\n      end = str.length;\r\n\r\n    while (end > start && chars.indexOf(str[end - 1]) >= 0)\r\n      --end;\r\n\r\n    return (end < str.length) ? str.substring(start, end) : str;\r\n  }\r\n  /**\r\n   * Removes leading specified characters from a string.\r\n   * @param str The string you want returned with leading `chars` deleted\r\n   * @param chars Characters to delete from the start of a string. Default is all types of spaces.\r\n   * @returns Returns a copy of string with all leading `chars` deleted if it succeeds.\r\n   *          If `str` is null, _trimLeft_ returns null.\r\n   * @see {@link trimAll}\r\n   * @see {@link trimRight}\r\n   */\r\n  static trimLeft(str: StringLike, chars?: string | string[]): StringLike {\r\n    if (!(typeof (str) === \"string\")) return null;\r\n\r\n    if (!chars)\r\n      return str.trimStart();\r\n\r\n    let start = 0,\r\n      end = str.length;\r\n\r\n    while (start < end && chars.indexOf(str[start]) >= 0)\r\n      ++start;\r\n\r\n    return (start > 0) ? str.substring(start, end) : str;\r\n  }\r\n  /**\r\n   * Bites out the _first_ element of the splitted string `str` on the base of the `separator` value. If the `separator` is undefined, returns a whole string\r\n   * @param str Source string\r\n   * @param separator String-delimitor\r\n   * @returns Tuple of two elements: Token string and the Remaining part of the `str` after the bitting token\r\n   */\r\n  static getToken(str: StringLike, separator: StringLike): [string | undefined, string | undefined] {\r\n    if (!(typeof str === \"string\" && typeof separator === \"string\")) return [undefined, undefined];\r\n    const sep = str.indexOf(separator);\r\n    let token = \"\";\r\n    let rest = \"\";\r\n    if (sep >= 0) {\r\n      token = str.substring(0, sep);\r\n      rest = str.substring(sep + separator.length);\r\n    } else {\r\n      token = str;\r\n    }\r\n    return [token, rest];\r\n  }\r\n  /**\r\n   * Bites out the _last_ element of the splitted string `str` on the base of the `separator` value. If the `separator` is undefined, returns a whole string\r\n   * @param str Source string\r\n   * @param separator String-delimitor\r\n   * @returns Tuple of two elements: Token string and the Remaining part of the `str` after the bitting token\r\n   */\r\n  static getLastToken(str: StringLike, separator: StringLike): [string | undefined, string | undefined] {\r\n    if (!(typeof str === \"string\" && typeof separator === \"string\")) return [undefined, undefined];\r\n    const sep = str.lastIndexOf(separator as string);\r\n    let token = \"\";\r\n    let rest = \"\";\r\n    if (sep >= 0) {\r\n      token = str.substring(sep + separator.length);\r\n      rest = str.substring(0, sep);\r\n    } else {\r\n      token = str;\r\n    }\r\n    return [token, rest];\r\n  }\r\n  /**\r\n   * Bites out _all_ elements of the splitted string `str` on the base of the `separator` value(s).\r\n   * @param str Source string\r\n   * @param separator String or array of the delimiter characters. Default are whitespace characters.\r\n   * @returns Array of string tokens\r\n   * @since 0.5.0\r\n   */\r\n  static getTokens(str: StringLike, separator: string | string[] = \" \\t\\r\\n\"): string[] {\r\n    let output: string[] = [];\r\n    if (!(typeof str === \"string\") || str === \"\") return output;\r\n    if (!separator) return [str];\r\n\r\n    let issep = false;\r\n    for (const char of str) {\r\n      if (separator.indexOf(char) >= 0) {\r\n        if (!issep || separator.length == 1) {\r\n          output.push(\"\");\r\n        }\r\n        issep = true;\r\n      } else {\r\n        issep = false;\r\n        if (output.length == 0) {\r\n          output.push(\"\");\r\n        }\r\n        output[output.length - 1] += char;\r\n      }\r\n    }\r\n    return output;\r\n  }\r\n  /**\r\n   * Gets the value portion of a keyword=value pair from a string\r\n   * @param source The string to be searched\r\n   * @param keyword The keyword to be searched for\r\n   * @param separator The separator character used in the source string\r\n   * @returns The value found for the `keyword`. If no matching keyword is found, _undefined_ is returned.\r\n   *\t\t\t\t\tIf any argument's value is _null_, the function returns _null_.\r\n   * @since 0.5.0\r\n   * @example\r\n   * let valB = Strings.getKeyValue(\"a=123; b=foo; c=true\", \"b\", \";\");        // foo\r\n   * let valM = Strings.getKeyValue(\"a=123; b=foo; c=true\", \"missing\", \";\");  // undefined\r\n   */\r\n  static getKeyValue(source: StringLike, keyword: StringLike, separator: StringLike): StringLike {\r\n    if (!(typeof(source) == \"string\" && typeof(keyword) == \"string\" && typeof(separator) == \"string\")) return null;\r\n\r\n    let done = false;\r\n    let iKeyWord, iSeparator, iEqual, iKeyLen, iSepLen;\r\n    let sValue=undefined, sSaved, sLeftPart;\r\n\r\n    keyword = keyword.toLowerCase();\r\n    iKeyLen = keyword.length;\r\n    iSepLen = separator.length;\r\n    while (!done) {\r\n      iKeyWord = source!.toLowerCase().indexOf(keyword);\r\n      if (iKeyWord >= 0) {\r\n        sSaved = source;\r\n        source = Strings.trimLeft(Strings.right(source, source!.length - (iKeyWord + iKeyLen)));\r\n\r\n\t\t\t  // See if this is an exact match. Either the match will be at the start of the string or\r\n\t\t\t  // after a separator character. So check for both cases\r\n        if (separator.endsWith(\" \")) {\r\n\t\t\t    iEqual = iKeyWord - iSepLen;\r\n\t\t\t    if (iEqual > 0) {\r\n            if (source!.substring(iEqual, iEqual+iSepLen) != separator) {\r\n              // not the separator string so continue looking\r\n              continue;\r\n            }\r\n          }\r\n        } else {\r\n          sLeftPart = Strings.trimRight( Strings.left(sSaved, iKeyWord - 1));\r\n          if (sLeftPart) {\r\n            if (Strings.right(sLeftPart, iSepLen) != separator) {\r\n              continue;\r\n            }\r\n          }\r\n        }\r\n\r\n        if ( source?.startsWith('=') ) {\r\n          iSeparator = source!.indexOf(separator, 1);\r\n          if (iSeparator >= 0) {\r\n            sValue = source!.substring(1, iSeparator);\r\n          } else {\r\n            sValue = source!.substring(1);\r\n          }\r\n          sValue = Strings.trimAll(sValue) || \"\";\r\n          done = true;\r\n        }\r\n\r\n      } else {\r\n        done = true;\r\n      }\r\n    }\r\n    return sValue;\r\n  }\r\n  /**\r\n   * Returns the number that `search` occurs in the string `source`\r\n   * @param source The source string to be searched\r\n   * @param search The search string\r\n   * @returns Number of occurs\r\n   */\r\n  static occurs(source: StringLike, search: StringLike): number | null {\r\n    if (!(typeof (source) == \"string\" && typeof (search) == \"string\")) return null;\r\n    return source.split(search).length - 1;\r\n  }\r\n  /**\r\n   * Reverses the order or characters in a string.\r\n   * @param str A string whose characters you want to reorder so that the last character is first and the first character is last\r\n   * @returns A string with the characters of `str` in reversed order. Returns the empty string if it fails.\r\n   */\r\n  static reverse(str: StringLike): StringLike {\r\n    if (str == null) return null;\r\n    return str.split(\"\").reverse().join(\"\");\r\n  }\r\n  /**\r\n   * Replaces all matches of `search` string with `newstr` value in the source string `str`\r\n   * @param str The source string\r\n   * @param search Search string to replace\r\n   * @param newstr Replacing string value\r\n   * @param ignoreCase Set _true_, if you want to ignore character case. Default is _false_\r\n   * @returns New string or _null_ if any argument has a nullish value.\r\n   */\r\n  static replaceAll(str: StringLike, search: StringLike, newstr: StringLike, ignoreCase: boolean = false): StringLike {\r\n    if (str == null || search == null || newstr == null) return null;\r\n    if (search === newstr) return str;\r\n    const re = new RegExp(search, \"g\" + (ignoreCase ? \"i\" : \"\"));\r\n    return str.replace(re, newstr);\r\n  }\r\n  /**\r\n   * Removes single and double quotes from the left and right sides of the string\r\n   * @param str Source string\r\n   * @returns Unquoted string\r\n   */\r\n  static unquote(str: StringLike): StringLike {\r\n    if (str) {\r\n      let cl, cr;\r\n      cl = Strings.left(str, 1);\r\n      cr = Strings.right(str, 1);\r\n      if ((cl == cr) && (cl == \"'\" || cl == '\"')) {\r\n        return str.substring(1, str.length - 1);\r\n      }\r\n      cl = Strings.left(str, 2);\r\n      cr = Strings.right(str, 2);\r\n      if ((cl == cr) && (cl == \"\\\\'\" || cl == '\\\\\"')) {\r\n        return str.substring(2, str.length - 2);\r\n      }\r\n    }\r\n    return str;\r\n  }\r\n  /* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals */\r\n  /**\r\n   * A function that parses a tagged template literal and returns a closure function\r\n   * @param strings An array of string values of the template literal. For any template, its length is equal to the number of substitutions (occurrences of ${…}) plus one, and is therefore always non-empty.\r\n   * @param keys The remaining arguments are related to the expressions (substitutions). Each argument may have an _integer_ or _string_ type. The former is an index of the element in the `values` array. The latest is the key of the object's property that assigned to the last element of the `values` array in the closure.\r\n   * @returns A closure function that should be called with `values` for each expression in `keys`. The last argument can be a JavaScript object whose key names can be used as values in `keys`.\r\n   * @example\r\n   * let t1closure = Strings.parseTemplate`${0}${1}${0}!`;\r\n   * t1closure('Y', 'A');  // \"YAY!\"\r\n   * let t2closure = Strings.parseTemplate`${0} ${'foo'}!`;\r\n   * t2closure('Hello', {foo: 'World'});  // \"Hello World!\"\r\n   * (Strings.parseTemplate`${0} ${'user'}!`)('Hello', {user: 'Mike'}); // \"Hello Mike!\"\r\n   */\r\n  static parseTemplate(strings: TemplateStringsArray, ...keys: any[]): Function {\r\n    return (...values: any[]): string => {\r\n      let value;\r\n      let result = [strings[0]];\r\n      let nLen = Array.isArray(values) ? values.length : 0;\r\n      if (nLen > 0) {\r\n        let dict = values[nLen - 1] || {};\r\n        keys.forEach((key, i) => {\r\n          value = undefined;\r\n          if (Number.isInteger(key)) {\r\n            if (key >= 0 && key < nLen) {\r\n              value = values[key];\r\n            }\r\n          } else if (typeof key == \"string\" && typeof dict == \"object\") {\r\n            value = dict[key];\r\n          }\r\n          result.push(value, strings[i + 1]);\r\n        });\r\n      } else {\r\n        for (let i = 1; i < nLen; i++) {\r\n          result.push(strings[i]);\r\n        }\r\n      }\r\n      return result.join('');\r\n    }\r\n  }\r\n  /**\r\n    C#-like `Format` method that replaces the format item in a specified `template` with the text equivalent of the value\r\n    of the `args` array argument.\r\n\r\n    The `template` parameter consists of zero or more runs of text intermixed with zero or more indexed\r\n    placeholders, called _format items_, that correspond to an object in the parameter list of this\r\n    method. The formatting process replaces each format item with the text representation of the value\r\n    of the corresponding object.\r\n\r\n    The syntax of a format item is `{index[,alignment][:formatString]}`, which specifies a mandatory\r\n    index, the optional length and alignment of the formatted text, and an optional string of format\r\n    specifier characters that govern how the value of the corresponding object is formatted.\r\n    The components of a format item are:\r\n\r\n    _index_\r\n    A zero-based integer that indicates which element in a list of objects to format.\r\n    If the object specified by index is null reference, then the format item is replaced by the empty string (\"\").\r\n\r\n    _alignment_\r\n    An optional integer indicating the minimum width of the region to contain the formatted value.\r\n    If the length of the formatted value is less than alignment, then the region is padded with spaces.\r\n    If alignment is negative, the formatted value is left justified in the region; if alignment is positive,\r\n    the formatted value is right justified. If _alignment_ is not specified, the length of the region is the length of the formatted value.\r\n    The comma is required if alignment is specified.\r\n\r\n    _formatString_\r\n    An optional string of format specifiers. If formatString is not specified and the corresponding\r\n    argument implements the IFormattable interface, then null reference is used. Therefore,\r\n    all implementations of IFormattable..::.ToString are required to allow nullNothingnullptra null reference (Nothing in Visual Basic) as a format string, and return default formatting of the object representation as a String object. The colon is required if formatString is specified.\r\n\r\n    The leading and trailing brace characters, '{' and '}', are required. To specify a single literal\r\n    brace character in `template`, specify two leading or trailing brace characters; that is, \"{{\" or \"}}\".\r\n\r\n    @param template Template string\r\n    @param args Argument list\r\n    @returns Formatted string or _null_ if the `template` is _null_\r\n    @example\r\n    let s1 = Strings.format(\"{0} {1}!\", \"Hello\", \"World\");  // Hello World!\r\n    let s2 = Strings.format(\"[{0, 10}]\", 1234.56);          // [   1234.56]\r\n    let s3 = Strings.format(\"[{0,-10}]\", 1234.56);          // [1234.56   ]\r\n  */\r\n  static format(template: StringLike, ...args: any[]): StringLike {\r\n    let result = \"\", argNo, nArgs, alignment, argValue;\r\n    let token: string, formatString: string, indexToken: string, alignToken: string, sValue: string;\r\n    let lbrPos = 0, rbrPos = 0, colPos = 0, commaPos = 0;\r\n    let processed = false, lbrEsc = false, rbrEsc = false;\r\n\r\n    if (template == null) return null;\r\n\r\n    nArgs = args.length;\r\n    //if (nArgs == 0) return template;\r\n\r\n    lbrPos = template.indexOf(\"{\");\r\n    if (lbrPos >= 0) {\r\n\r\n      lbrEsc = template.indexOf(\"{{\") >= 0;\r\n      if (lbrEsc) template = Strings.replaceAll(template, \"{{\", eLBR)!;\r\n      rbrEsc = template.indexOf(\"}}\") >= 0;\r\n      if (rbrEsc) template = Strings.replaceAll(template, \"}}\", eRBR)!;\r\n\r\n      while (lbrPos >= 0) {\r\n        result += template.substring(0, lbrPos);\r\n        rbrPos = template.indexOf(\"}\", lbrPos + 1);\r\n        if (rbrPos < 0) {\r\n          result += template.substring(lbrPos);\r\n          template = \"\";\r\n          break;\r\n        }\r\n        processed = false;\r\n        token = template.substring(lbrPos + 1, rbrPos).trim();\r\n        if (token != \"\") {\r\n          colPos = token.indexOf(\":\");\r\n          if (colPos >= 0) {\r\n            indexToken = token.substring(0, colPos);\r\n            formatString = token.substring(colPos + 1).trim();\r\n          } else {\r\n            indexToken = token;\r\n            formatString = \"\";\r\n          }\r\n          commaPos = indexToken.indexOf(\",\");\r\n          if (commaPos < 0) {\r\n            alignToken = \"\";\r\n          } else {\r\n            alignToken = indexToken.substring(commaPos + 1).trim();\r\n            indexToken = indexToken.substring(0, commaPos);\r\n          }\r\n          argNo = Number.parseInt(indexToken);\r\n          if (Number.isInteger(argNo)) {\r\n            argValue = null;\r\n            if (argNo >= 0 && argNo < nArgs) {\r\n              argValue = args[argNo];\r\n            }\r\n            sValue = (argValue == null ? \"\" : String(argValue));\r\n            // TODO!\r\n            // Formatting with formatString\r\n            alignment = Number.parseInt(alignToken);\r\n            if (alignment > 0) {\r\n              result += sValue.trimStart().padStart(alignment);\r\n            } else if (alignment < 0) {\r\n              result += sValue.trimEnd().padEnd(-alignment);\r\n            } else {\r\n              result += sValue;\r\n            }\r\n            processed = true;\r\n          }\r\n        }\r\n\r\n        if (!processed) {\r\n          result += template.substring(lbrPos, rbrPos + 1);\r\n        }\r\n\r\n        template = template.substring(rbrPos + 1);\r\n        lbrPos = template.indexOf(\"{\");\r\n      }\r\n\r\n      result += template;\r\n\r\n      if (lbrEsc) result = Strings.replaceAll(result, eLBR, \"{\")!; // single \"{\"\r\n      if (rbrEsc) result = Strings.replaceAll(result, eRBR, \"}\")!; // single \"}\"\r\n\r\n    } else {\r\n      result = template;\r\n    }\r\n\r\n    return result;\r\n  }\r\n  /**\r\n   * Compare the version string `ver1` against the version string `ver2`. A version\r\n   * string looks like: **1.2.3.100** or possibly truncated: **1.2.3** or **1.2**.\r\n   * @param  ver1  First version string\r\n   * @param  ver2  Second version string\r\n   * @returns A positive number if ver1>ver2, _0_ if ver1==ver2 and a negative number if ver1<ver2.\r\n   * @since 0.5.0\r\n   */\r\n   static compareVersions(ver1: StringLike, ver2: StringLike): number | null {\r\n    let rc = 0;\r\n    let thisField, thatField;\r\n    let thisVer, thatVer;\r\n\r\n    if (ver1 == null || ver2 == null) {\r\n      return null;\r\n    }\r\n\r\n    thisVer = ver1.trim();\r\n    thatVer = ver2.trim();\r\n\r\n    if (thisVer !== thatVer) {\r\n      while (thisVer!.length > 0 || thatVer!.length > 0) {\r\n        // Read the first field from the string and\r\n        // remove the first field from the string\r\n        [thisField, thisVer] = Strings.getToken(thisVer, \".\");\r\n        [thatField, thatVer] = Strings.getToken(thatVer, \".\");\r\n\r\n        thisField = Number.parseInt(thisField!);\r\n        thatField = Number.parseInt(thatField!);\r\n\r\n        if (thisField > thatField) {\r\n          rc = 1;\r\n          break;\r\n        } else if (thisField < thatField) {\r\n          rc = -1;\r\n          break\r\n        }\r\n      }\r\n    }\r\n\r\n    return rc;\r\n  }\r\n\r\n}\r\n","//import { ClassCastException } from \"./exception/ClassCastException\";\r\nimport { NullPointerException } from \"./exception/NullPointerException\";\r\nimport { Supplier } from \"./function/Supplier\";\r\nimport { Class } from \"./interface/Class\";\r\nimport { Cloneable } from \"./interface/Cloneable\";\r\nimport { Strings } from \"./Strings\";\r\n\r\nconst ARRAY_TAG = '[object Array]';\r\nconst BOOL_TAG = '[object Boolean]';\r\nconst DATE_TAG = '[object Date]';\r\nconst FUNC_TAG = '[object Function]';\r\nconst NULL_TAG = '[object Null]';\r\nconst NUMBER_TAG = '[object Number]';\r\nconst OBJECT_TAG = '[object Object]';\r\nconst REGEXP_TAG = '[object RegExp]';\r\nconst STRING_TAG = '[object String]';\r\nconst MAP_TAG = '[object Map]';\r\nconst SET_TAG = '[object Set]';\r\nconst UNDEFINED_TAG = '[object Undefined]';\r\n\r\nconst RE_CLASS_NAME = /^\\[object\\s(.*)\\]$/;\r\n\r\nconst FN_TOSTRING = Object.prototype.toString;\r\n/**\r\n * This class consists of the static utility methods for operating on objects, or checking certain conditions before operation\r\n */\r\nexport class Objects {\r\n\r\n  /**\r\n   * Returns a string presentation of any JavaScript object\r\n   * @static\r\n   * @param value JavaScript object/value of any type\r\n   * @returns String in the following format: [object \\<type\\>]\r\n   */\r\n  static toString(value: any): string {\r\n    return FN_TOSTRING.call(value);\r\n  }\r\n  /**\r\n   * Returns a first not _nullable_ value from the specified `values`\r\n   * @param values An array or list of values to check\r\n   * @returns A first not _nullable_ value in the `values` array if any, or _null_ if else.\r\n   */\r\n  static coalesce(...values: any[]): any {\r\n    if (values && values.length) {\r\n      for (let i=0; i < values.length; i++) {\r\n        if (!(values[i]==null)) {\r\n          return values[i];\r\n        }\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n  /**\r\n   *\r\n   * @param v1\r\n   * @param v2\r\n   * @returns\r\n   */\r\n  static ifNull(v1: any, v2: any): any {\r\n    if (v1 === null)\r\n      return v2;\r\n    return v1;\r\n  }\r\n\r\n  static ifUndefined(v1: any, v2: any): any {\r\n    return (v1 === undefined) ? v2 : v1;\r\n  }\r\n\r\n  static ifEmpty(v1: any, v2: any): any {\r\n    if (Objects.isEmpty(v1)) {\r\n      return v2;\r\n    }\r\n    return v1;\r\n  }\r\n\r\n  static ifNotArray(v1: any, v2: any): any {\r\n    if (Objects.isArray(v1)) {\r\n      return v1;\r\n    }\r\n    return v2;\r\n  }\r\n\r\n  static nullIf(v1: any, v2: any): any {\r\n    if (v1 === v2)\r\n      return null;\r\n    return v1;\r\n  }\r\n\r\n  static isArray(value: any): value is Array<any> /*[]*/ {\r\n    return Objects.toString(value) == ARRAY_TAG;\r\n  }\r\n\r\n  static isBoolean(value: any): value is Boolean {\r\n    return Objects.toString(value) == BOOL_TAG;\r\n  }\r\n\r\n  static isCloneable(value: any): value is Cloneable {\r\n    return \"clone\" in value && (typeof value.clone === 'function');\r\n  }\r\n\r\n  static isDate(value: any): value is Date {\r\n    return Objects.toString(value) == DATE_TAG || (value instanceof Date);\r\n  }\r\n\r\n  static isIterable(value: any): value is Iterable<any> {\r\n    return Symbol.iterator in value;\r\n  }\r\n\r\n  static isMap(value: any): value is Map<any,any> {\r\n    return value instanceof Map;\r\n  }\r\n\r\n  static isNull(value: any): value is null {\r\n    return (value === null);\r\n  }\r\n\r\n  static isNumber(value: any): value is number {\r\n    return typeof value === 'number' && isFinite(value);\r\n  }\r\n\r\n  static isSet(value: any): value is Set<any> {\r\n    return value instanceof Set;\r\n  }\r\n\r\n  static isString(value: any): value is String {\r\n    return Objects.toString(value) === STRING_TAG;\r\n  }\r\n\r\n  static isUndefined(value: any): value is undefined {\r\n    return (value === undefined);\r\n  }\r\n\r\n  /**\r\n   * Check if specified value is empty (falsy)\r\n   * @static\r\n   * @param {any} value Any value to check\r\n   * @returns {boolean} true/false\r\n   */\r\n  static isEmpty(value: any): boolean {\r\n    if (value) {\r\n      const type = Objects.toString(value);\r\n      switch (type) {\r\n        case STRING_TAG: return Strings.isEmpty(value);\r\n        case OBJECT_TAG: return Object.keys(value).length == 0;\r\n        case ARRAY_TAG: return value.length == 0;\r\n        case MAP_TAG: return (value as Map<any,any>).size == 0;\r\n        case SET_TAG: return (value as Set<any>).size == 0;\r\n      }\r\n      return false;\r\n    }\r\n    return true;\r\n  }\r\n  /**\r\n   * Return whether the provided value is a function.\r\n   *\r\n   * @static\r\n   * @param {*} value The value to test.\r\n   * @returns {boolean} Whether the provided value is a function.\r\n   * @since 1.0.0\r\n   * @example\r\n   * const a = function () { console.log('foo bar'); };\r\n   * const b = { foo: \"bar\" };\r\n   * console.log(Objects.isFunction(a)); // true\r\n   * console.log(Objects.isFunction(b)); // false\r\n   */\r\n  static isFunction(value: any): value is Function {\r\n    return Objects.toString(value) == FUNC_TAG;\r\n  }\r\n\r\n  static isNumberObject(value: any): value is Number {\r\n    return (Objects.toString(value) === NUMBER_TAG);\r\n  }\r\n  /**\r\n   * Return whether the provided value is an object.\r\n   *\r\n   * @static\r\n   * @param {*} value The value to test.\r\n   * @returns {boolean} Whether the provided value is an object.\r\n   * @since 1.0.0\r\n   *\r\n   * @example\r\n   * const a = { foo: \"bar\" };\r\n   * const b = 'foo bar';\r\n   * console.log(Objects.isObject(a)); // true\r\n   * console.log(Objects.isObject(b)); // false\r\n   */\r\n  static isObject(value: any): value is Object {\r\n    return (value instanceof Object) && !Array.isArray(value);\r\n  }\r\n\r\n  static isPlainObject(value: any): value is Object {\r\n    return !!value && typeof value === 'object' && value.constructor === Object;\r\n  }\r\n\r\n  static isPrimitive(arg: any): boolean {\r\n    return (arg !== Object(arg));\r\n  }\r\n  /**\r\n   * Objects casting with runtime checkings\r\n   * @param obj Object to cast\r\n   * @param AnyClass Target class value or type\r\n   * @returns Object of type `AnyClass` if succeeds, or _undefined_ if the `obj` is not the `AnyClass`' instance\r\n   * @example\r\n   * // %inferred-type: any\r\n   * const parsed = JSON.parse( someJsonObjectString );\r\n   * const p: Person = Objects.cast(parsed, Person);\r\n   */\r\n  static cast<T>(obj: any, AnyClass: Class<T>): T | undefined {\r\n    if ( !(obj instanceof AnyClass) ) {\r\n      return undefined;\r\n    }\r\n    return obj;\r\n  }\r\n  /**\r\n   * Creates an instance of the JavaScript's class value\r\n   * @static\r\n   * @param AnyClass Class value\r\n   * @param args Constructor arguments\r\n   * @returns The instance of the class\r\n   * @example\r\n   * class Person {\r\n   *  constructor(public name: string) {}\r\n   * }\r\n   * // %inferred-type: Person\r\n   * const jane = Objects.createInstance(Person, 'Jane');\r\n   */\r\n  static createInstance<T>(AnyClass: Class<T>, ...args: any[]): T {\r\n    return new AnyClass(args);\r\n  }\r\n  /**\r\n   * Returns constructor object of the specified value/object. If the `value` is _null_ or _undefined_, method returns constructor of an empty object\r\n   * @param value An object for which the class object to return\r\n   * @returns Returns constructor object\r\n   * @static\r\n   * @see {@link getClassName}\r\n   */\r\n  static getClass(value: Object): Function {\r\n    return value.constructor;\r\n  }\r\n  /**\r\n   * Returns class name of the specified value/object\r\n   * @param value A value for which the class name to return\r\n   * @returns The name of the JavaScript class to which the `value` belongs\r\n   * @static\r\n   * @see {@link getClass}\r\n   */\r\n  static getClassName(value: any): string {\r\n    return Objects.toString(value).match(RE_CLASS_NAME)![1];\r\n  }\r\n  /**\r\n   * Tests to see if the prototype property of a constructor appears anywhere in the prototype chain of an object\r\n   * @param value The object to test\r\n   * @param ctor Constructor or a name of the class to test against\r\n   * @returns Boolean value\r\n   * @static\r\n   */\r\n  static isInstanceOf(value: Object, ctor: Class<unknown> | string): boolean {\r\n    if (Objects.isObject(value)) {\r\n      if (typeof ctor === \"string\") {\r\n        ctor = ctor.trim();\r\n        if (ctor == \"\") return false;\r\n        if (value instanceof Function && (value.name === ctor || value.constructor.name === ctor)) return true;\r\n\r\n        let pr = Object.getPrototypeOf(value);\r\n        while (pr) {\r\n          if (pr.name === ctor) {\r\n            return true;\r\n          }\r\n          pr = Object.getPrototypeOf(pr);\r\n        }\r\n      } else {\r\n        return (value instanceof ctor || (value instanceof Function && (value.name === ctor.name || value.constructor.name === ctor.name)));\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * Checks that the specified object reference is not null and throws a customized `NullPointerException` if it is\r\n   * @param obj The object reference to check for nullity\r\n   * @param message Detail message to be used in the event that a `NullPointerException` is thrown\r\n   * @returns `obj` if not null or undefined\r\n   * @throws NullPointerException if `obj` is null\r\n   * @static\r\n   */\r\n  static requireNonNull(obj: any, message?: string | Supplier<string>): any {\r\n    if (obj == null) {\r\n      throw new NullPointerException(typeof message == \"function\" ? message() : message)\r\n    }\r\n    return obj;\r\n  }\r\n\r\n  private static _isPrototypePolluted(key: string): boolean {\r\n    return ['__proto__', 'prototype', 'constructor'].includes(key);\r\n  }\r\n\r\n  /**\r\n   * Returns objects's property value using property's path in hierarchical structure of the object\r\n   *\r\n   * @static\r\n   * @param object  Source object\r\n   * @param path    Path to property point ('.') delimited\r\n   * @param defValue  Optional default value\r\n   * @returns Value of property or undefined if it was not found in object's structure\r\n   *\r\n   * @example\r\n   * let obj = {a:1, b:{c:2, d:3, f:[10,20,30,[{s:100}]]}};\r\n   * console.log(Objects.getValue(obj, \"b.c.d\"));  // undefined\r\n   * console.log(Objects.getValue(obj, \"b.f.3.0.s\"));  // 100\r\n   */\r\n  static getValue(object: any, path: string, defValue?: any): any {\r\n    if (!(Objects.isObject(object) && Objects.isString(path))) {\r\n      return object;\r\n    }\r\n    const parts = path.split('.');\r\n    const partsLen = parts.length;\r\n    let res = object;\r\n    let key: string;\r\n    let i: number = -1;\r\n    while (++i < partsLen) {\r\n      key = parts[i].trim();\r\n      if (key in res) {\r\n        res = res[key]\r\n        if (i < (partsLen - 1) && !Objects.isObject(res)) {\r\n          res = undefined;\r\n          break;\r\n        }\r\n      } else {\r\n        res = undefined;\r\n        break;\r\n      }\r\n    }\r\n    return res ?? defValue;\r\n  }\r\n  /**\r\n   * Checks existance a path to the property in the specified object\r\n   * @static\r\n   * @param object Object to check\r\n   * @param path  Path to the object's property dot (\".\") delimited\r\n   * @returns _true_ if the path is a valid path to the some property in the `object`, _false_ otherwise\r\n   */\r\n  static hasValue(object: any, path: string): boolean {\r\n    if (!(Objects.isObject(object) && Objects.isString(path))) {\r\n      return false;\r\n    }\r\n    const parts = path.split('.');\r\n    const partsLen = parts.length;\r\n    let valid = true;\r\n    let obj = object;\r\n    let key: string;\r\n    let i: number = -1;\r\n    while (++i < partsLen && valid) {\r\n      key = parts[i].trim();\r\n      valid = (key in obj);\r\n      if (valid) {\r\n        obj = obj[key];\r\n        if (i < (partsLen - 1) && !Objects.isObject(obj)) {\r\n          valid = false;\r\n        }\r\n      }\r\n    }\r\n    return valid;\r\n  }\r\n  /**\r\n   * Sets value of object property using its path in the object's structure\r\n   * @static\r\n   * @param object  Target object\r\n   * @param path    String path delimited by dot (\".\")\r\n   * @param newValue New value for the property if it will be found in the object's structure\r\n   * @param force   Optional. Enforce to create the full `path` in the `object` structure if it doesn't exist. Default is _false_.\r\n   * @returns 1 if it succeeds and -1 if an error occurs\r\n   */\r\n  static setValue(object: any, path: string, newValue: any, force: boolean = false): number {\r\n    if (!(Objects.isObject(object) && Objects.isString(path))) {\r\n      return -1;\r\n    }\r\n    const parts = path.split('.');\r\n    const partsLen = parts.length;\r\n    let valid = true;\r\n    let obj = object;\r\n    let key: string;\r\n    let i: number = -1;\r\n    while (++i < partsLen && valid) {\r\n      key = parts[i].trim();\r\n      valid = (key in obj);\r\n      if (valid) {\r\n        obj = obj[key];\r\n        if (i == (partsLen - 1)) {\r\n          if ( !Objects.isObject(obj) ) {\r\n            obj[key] = newValue;\r\n            return 1;\r\n          }\r\n        } else {\r\n          valid = Objects.isObject(obj);\r\n        }\r\n      } else if (force) {\r\n        if (i == (partsLen - 1)) {\r\n          obj[key] = newValue;\r\n        } else {\r\n          obj[key] = {};\r\n        }\r\n        return 1;\r\n      }\r\n    }\r\n    return -1;\r\n  }\r\n  /**\r\n    * Return whether `prop` is matched by any string or regular expression in\r\n    * `blacklist`.\r\n    *\r\n    * @static\r\n    * @param {string} prop The name of a property to check.\r\n    * @param {array} blacklist Array of strings and regular expressions.\r\n    * @returns {boolean} Whether `prop` was matched.\r\n    * @since 1.0.0\r\n    * @example\r\n    * const blacklist = [/^\\$hashKey/g, /^_/g, 'id'];\r\n    * console.log(Objects.isBlacklisted(\"$hashKey\", blacklist)); // true\r\n    * console.log(Objects.isBlacklisted(\"id\", blacklist)); // true\r\n    * console.log(Objects.isBlacklisted(\"_myProp\", blacklist)); // true\r\n    * console.log(Objects.isBlacklisted(\"my_id\", blacklist)); // false\r\n    */\r\n  static isBlacklisted(prop: string, blacklist: any[]): boolean {\r\n    if (!blacklist || !blacklist.length) {\r\n      return false;\r\n    }\r\n    let matches;\r\n    for (var i = 0; i < blacklist.length; i++) {\r\n      if ((String(blacklist[i]) === REGEXP_TAG && blacklist[i].test(prop)) ||\r\n        blacklist[i] === prop) {\r\n        matches = prop;\r\n        return !!matches;\r\n      }\r\n    }\r\n    return !!matches;\r\n  }\r\n  /**\r\n  * Iterate over an object's own enumerable properties.\r\n  *\r\n  * @static\r\n  * @param {object} object The object whose properties are to be enumerated.\r\n  * @param {Function} fn Iteration function.\r\n  * @param {object} [thisArg] Content to which to bind `fn`.\r\n  * @since 1.0.0\r\n  * @example\r\n  * const a = { b: 1, c: 4 };\r\n  * let sum = 0;\r\n  * Objects.forOwn(a, function (value, key) {\r\n  *   sum += value;\r\n  * });\r\n  * console.log(sum); // 5\r\n  */\r\n  static forOwn(object: Object, fn: Function, thisArg?: any): void {\r\n    const keys = Object.keys(object);\r\n    const len = keys.length;\r\n    let i: number = -1;\r\n    while (++i < len) {\r\n      if (fn.call(thisArg, (object as any)[keys[i]], keys[i], object) === false) {\r\n        break;\r\n      }\r\n    }\r\n  }\r\n  /**\r\n  * Shallow copy own enumerable properties from `src` to `dest` that are on\r\n  * `src` but are missing from `dest.\r\n  *\r\n  * @static\r\n  * @param {object} dest The destination object.\r\n  * @param {object} source The source object.\r\n  * @returns {object} The destination object.\r\n  * @since 1.0.0\r\n  *\r\n  * @example\r\n  * const a = { foo: 'bar', beep: 'boop' };\r\n  * const b = { beep: 'bip' };\r\n  * Objects.fillIn(b, a);\r\n  * console.log(b); // {\"foo\":\"bar\",\"beep\":\"bip\"}\r\n  */\r\n  static fillIn(dest: any, ...source: any): any {\r\n    if (source && Objects.isIterable(source)) {\r\n      for (const src of source) {\r\n        Objects.forOwn(src, (value: any, key: string) => {\r\n          if (!Object.hasOwnProperty.call(dest, key) || dest[key] === undefined) {\r\n            dest[key] = value;\r\n          }\r\n        });\r\n      }\r\n    }\r\n    return dest;\r\n  }\r\n  /**\r\n  * Recursively shallow fill in own enumerable properties from `source` to  `dest`.\r\n  *\r\n  * @static\r\n  * @param {object} dest The destination object.\r\n  * @param {object} source The source object.\r\n  * @returns {object} The destination object.\r\n  * @see {@link fillIn}\r\n  * @see {@link deepMixIn}\r\n  * @since 1.0.0\r\n  *\r\n  * @example\r\n  * const a = { foo: { bar: 'baz' }, beep: 'boop' };\r\n  * const b = { beep: 'bip' }\r\n  * Objects.deepFillIn(b, a);\r\n  * console.log(b); // {\"foo\":{\"bar\":\"baz\"},\"beep\":\"bip\"}\r\n  */\r\n  static deepFillIn(dest: any, source: any): any {\r\n    Objects.forOwn(source, (value: any, key: string) => {\r\n      const existing = dest[key];\r\n      if (Objects.isPlainObject(value) && Objects.isPlainObject(existing)) {\r\n        Objects.deepFillIn(existing, value);\r\n      } else if (!Object.hasOwnProperty.call(dest, key) || dest[key] === undefined) {\r\n        dest[key] = value;\r\n      }\r\n    });\r\n    return dest;\r\n  }\r\n  /**\r\n  * Recursively shallow copy enumerable properties from `source` to `dest`.\r\n  *\r\n  * @static\r\n  * @param {object} dest The destination object.\r\n  * @param {object} source The source object.\r\n  * @since 1.0.0\r\n  *\r\n  * @example\r\n  * const a = { foo: { bar: 'baz' }, beep: 'boop' };\r\n  * const b = { beep: 'bip' };\r\n  * Objects.deepMixIn(b, a);\r\n  * console.log(b); // {\"foo\":{\"bar\":\"baz\"},\"beep\":\"boop\"}\r\n  */\r\n  static deepMixIn(dest: any, source: any) {\r\n    if (Objects.isObject(source)) {\r\n      for (const key in source) {\r\n        if (Objects._isPrototypePolluted(key)) continue;\r\n        const value = source[key];\r\n        const existing = dest[key];\r\n        if (Objects.isPlainObject(value) && Objects.isPlainObject(existing)) {\r\n          Objects.deepMixIn(existing, value);\r\n        } else {\r\n          dest[key] = value;\r\n        }\r\n      }\r\n    }\r\n    return dest;\r\n  }\r\n  /**\r\n   * Return whether the two values are the same value\r\n   *\r\n   * @static\r\n   * @param {*} a The first value to compare\r\n   * @param {*} b The second value to compare\r\n   * @returns {boolean} A boolean indicating whether or not the two arguments are the same value\r\n   * @see {@link deepEqual}\r\n   * @since 1.0.0\r\n   *\r\n   * @example\r\n   * console.log( Objects.equals(1, 1) );   // true\r\n   * console.log( Objects.equals(1,'1') );  // false\r\n   * console.log( Objects.equals(93, 66) ); // false\r\n   */\r\n  static equals(a: any, b: any): boolean {\r\n    return Object.is(a, b);\r\n  }\r\n  /**\r\n   * Check whether the two provided objects are deeply equal.\r\n   *\r\n   * @static\r\n   * @param {object} a First object in the comparison.\r\n   * @param {object} b Second object in the comparison.\r\n   * @returns {boolean} Whether the two provided objects are deeply equal.\r\n   * @see {@link equal}\r\n   * @since 1.0.0\r\n   *\r\n   * @example\r\n   * const objA = {\r\n   *   name: 'John',\r\n   *   id: 27,\r\n   *   nested: {\r\n   *     item: 'item 1',\r\n   *     colors: ['red', 'green', 'blue']\r\n   *   }\r\n   * };\r\n   *\r\n   * const objB = {\r\n   *   name: 'John',\r\n   *   id: 27,\r\n   *   nested: {\r\n   *     item: 'item 1',\r\n   *     colors: ['red', 'green', 'blue']\r\n   *   }\r\n   * };\r\n   *\r\n   * console.log(Objects.deepEqual(a,b)); // true\r\n   * objB.nested.colors.add('yellow'); // make a change to a nested object's array\r\n   * console.log(Objects.deepEqual(a,b)); // false\r\n   */\r\n  static deepEqual(a: any, b: any): boolean {\r\n    if (a === b) {\r\n      return true;\r\n    }\r\n    let _equal: boolean = true;\r\n    if (Array.isArray(a) && Array.isArray(b)) {\r\n      if (a.length !== b.length) {\r\n        return false;\r\n      }\r\n      for (let i = a.length - 1; i>=0; i--) {\r\n        if ( !Objects.deepEqual(a[i], b[i]) ) {\r\n          // Exit loop early\r\n          return false;\r\n        }\r\n      }\r\n    } else if (Objects.isObject(a) && Objects.isObject(b)) {\r\n      Objects.forOwn(a, (value: any, key: string) => {\r\n        _equal = Objects.deepEqual(value, b[key]);\r\n        return _equal;\r\n        /*\r\n        if (!(_equal = Objects.deepEqual(value, b[key]))) {\r\n            // Exit loop early\r\n            return false;\r\n        }\r\n        */\r\n      });\r\n      if (_equal) {\r\n        Objects.forOwn(b, (value: any, key: string) => {\r\n          _equal = Objects.deepEqual(value, a[key]);\r\n          return _equal;\r\n          /*\r\n          if (!(_equal = Objects.deepEqual(value, a[key]))) {\r\n              // Exit loop early\r\n              return false;\r\n          }\r\n          */\r\n        });\r\n      }\r\n    } else {\r\n      return false;\r\n    }\r\n    return _equal;\r\n  }\r\n  /**\r\n  * Return a diff of the base object to the comparison object.\r\n  *\r\n  * @static\r\n  * @param {object} newObject Comparison object.\r\n  * @param {object} oldObject Base object.\r\n  * @param {object} [opts] Configuration options.\r\n  * @returns {Object} The diff from the base object to the comparison object.\r\n  * @see {@link areDifferent}\r\n  * @since 1.0.0\r\n  *\r\n  * @example\r\n  * const oldObject = { foo: 'bar', a: 1234 };\r\n  * const newObject = { beep: 'boop', a: 5678 };\r\n  * const diff = Objects.diffObjects.(oldObject, newObject);\r\n  * console.log(diff.added); // {\"beep\":\"boop\"}\r\n  * console.log(diff.changed); // {\"a\":5678}\r\n  * console.log(diff.removed); // {\"foo\":undefined}\r\n  */\r\n  static diffObjects(newObject: any, oldObject: any, opts?: {equalsFn?: Function, ignore?: any[]}): any {\r\n    opts || (opts = {});\r\n    const equalsFn: Function = opts.equalsFn ?? Objects.deepEqual;\r\n    const blacklist = opts.ignore || [];\r\n    const diff = { added: {}, changed: {}, removed: {} };\r\n\r\n    const newKeys = Object.keys(newObject).filter(function (key) {\r\n      return !Objects.isBlacklisted(key, blacklist);\r\n    });\r\n    const oldKeys = Object.keys(oldObject).filter(function (key) {\r\n      return !Objects.isBlacklisted(key, blacklist);\r\n    });\r\n\r\n    // Check for properties that were added or changed\r\n    newKeys.forEach((key) => {\r\n      const oldValue = oldObject[key];\r\n      const newValue = newObject[key];\r\n      if (equalsFn(oldValue, newValue)) {\r\n        return;\r\n      }\r\n      if (oldValue === undefined) {\r\n        (diff.added as any)[key] = newValue;\r\n      } else {\r\n        (diff.changed as any)[key] = newValue;\r\n      }\r\n    });\r\n\r\n    // Check for properties that were removed\r\n    oldKeys.forEach((key) => {\r\n      const oldValue = oldObject[key];\r\n      const newValue = newObject[key];\r\n      if (newValue === undefined && oldValue !== undefined) {\r\n        (diff.removed as any)[key] = undefined;\r\n      }\r\n    });\r\n\r\n    return diff;\r\n  }\r\n  /**\r\n   * Return whether the two objects are deeply different.\r\n   *\r\n   * @static\r\n   * @param {object} newObject Base object.\r\n   * @param {object} oldObject Comparison object.\r\n   * @param {object} [opts] Configuration options.\r\n   * @returns {boolean} Whether the two objects are deeply different.\r\n   * @see {@link diffObjects}\r\n   * @since 1.0.0\r\n   *\r\n   * @example\r\n   * Objects.areDifferent({}, {}); // false\r\n   * Objects.areDifferent({ a: 1 }, { a: 1 }); // false\r\n   * Objects.areDifferent({ foo: 'bar' }, {}); // true\r\n   */\r\n  static areDifferent(newObject: any, oldObject: any, opts: any): boolean {\r\n    opts || (opts = {});\r\n    const diff = Objects.diffObjects(newObject, oldObject, opts);\r\n    const diffCount =\r\n      Object.keys(diff.added).length +\r\n      Object.keys(diff.removed).length +\r\n      Object.keys(diff.changed).length;\r\n    return diffCount > 0;\r\n  }\r\n  /**\r\n   * Deep cloning of the specified object. If the `source` object implements\r\n   * `Cloneable` interface its `clone` method is executed.\r\n   *\r\n   * @static\r\n   * @param {object} source Source object to clone\r\n   * @returns {object} Cloned object.\r\n   * @since 1.0.0\r\n   */\r\n  static deepClone(source: any): any {\r\n    return DeepClone.run(source);\r\n  }\r\n\r\n}\r\n\r\n/**\r\n * This class incapsulates static methods to deep clone properties of the some object.\r\n * The main public static method is `run` which must be called to deep clone the specified object.\r\n */\r\nclass DeepClone {\r\n\r\n  private static cloneOtherType(target: any): any {\r\n    switch (DeepClone.toRawType(target)) {\r\n      case \"Boolean\":\r\n      case \"Number\":\r\n      case \"String\":\r\n      case \"Error\":\r\n      case \"Date\":\r\n        const constrFun = target.constructor;\r\n        return new constrFun(target);\r\n      case \"RegExp\":\r\n        return DeepClone.cloneReg(target);\r\n      case \"Symbol\":\r\n        return DeepClone.cloneSymbol(target);\r\n      case \"Function\":\r\n        return target;\r\n      default:\r\n        if (Objects.isCloneable(target)) {\r\n          return target.clone();\r\n        }\r\n        return null;\r\n    }\r\n  }\r\n\r\n  private static toRawType(value: any): string {\r\n    const str = Objects.toString(value);\r\n    return str.slice(8, -1)\r\n  }\r\n\r\n  private static cloneSymbol(target: Symbol): any {\r\n    return Object(Symbol.prototype.valueOf.call(target));\r\n  }\r\n\r\n  private static cloneReg(target: any): any {\r\n    const reFlags = /\\w*$/;\r\n    const result = new target.constructor(target.source, reFlags.exec(target));\r\n    result.lastIndex = target.lastIndex;\r\n    return result;\r\n  }\r\n\r\n  private static forEach(array: any[], iteratee: Function): any[] {\r\n    let index = -1;\r\n    const length = array.length;\r\n    while (++index < length) {\r\n      iteratee(array[index], index);\r\n    }\r\n    return array;\r\n  }\r\n\r\n  // core function\r\n  public static run(target: any, map = new WeakMap()): any {\r\n\r\n    // clone primitive types\r\n    if (typeof target != \"object\" || target == null) {\r\n      return target;\r\n    }\r\n\r\n    const type = DeepClone.toRawType(target);\r\n    let cloneTarget: any = null;\r\n\r\n    if (map.get(target)) {\r\n      return map.get(target);\r\n    }\r\n    map.set(target, cloneTarget);\r\n\r\n    if (type != \"Set\" && type != \"Map\" && type != \"Array\" && type != \"Object\") {\r\n      return DeepClone.cloneOtherType(target)\r\n    } else if (Objects.isCloneable(target)) {\r\n      return target.clone();\r\n    }\r\n\r\n    // clone Set\r\n    if (type == \"Set\") {\r\n      cloneTarget = new Set();\r\n      (target as Set<any>).forEach((value) => {\r\n        cloneTarget.add(DeepClone.run(value, map));\r\n      });\r\n      return cloneTarget;\r\n    }\r\n\r\n    // clone Map\r\n    if (type == \"Map\") {\r\n      cloneTarget = new Map();\r\n      (target as Map<any, any>).forEach((value, key) => {\r\n        cloneTarget.set(key, DeepClone.run(value, map));\r\n      });\r\n      return cloneTarget;\r\n    }\r\n\r\n    // clone Array\r\n    if (type == \"Array\") {\r\n      cloneTarget = new Array();\r\n      DeepClone.forEach(target, (value: any, index: number) => {\r\n        cloneTarget[index] = DeepClone.run(value, map);\r\n      })\r\n    }\r\n\r\n    // clone normal Object\r\n    if (type == \"Object\") {\r\n      cloneTarget = new Object();\r\n      DeepClone.forEach(Object.keys(target), (key: any, index: number) => {\r\n        cloneTarget[key] = DeepClone.run(target[key], map);\r\n      })\r\n    }\r\n\r\n    return cloneTarget;\r\n  }\r\n\r\n}\r\n\r\n","import { UnsupportedOperationException } from \"../util/exception/UnsupportedOperationException\";\r\nimport { IndexOutOfBoundsException } from \"../util/exception/IndexOutOfBoundsException\";\r\nimport { AbstractList } from \"./AbstractList\";\r\nimport { LinkedListNode } from \"./LinkedList\";\r\nimport { List } from \"./List\";\r\nimport { ListView } from \"./view/ListView\";\r\nimport { Cloneable } from \"../util/interface/Cloneable\";\r\nimport { Collection, Element } from \"./Collection\";\r\nimport { Objects } from \"../util/Objects\";\r\n/**\r\n * Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null.\r\n * In addition to implementing the List interface, this class provides methods to manipulate the size of the array that is used internally to store the list.\r\n */\r\nexport class ArrayList<T> extends AbstractList<T> implements Cloneable {\r\n  private readonly _elems: Element<T>[] = [];\r\n  private _size: number = 0;\r\n\r\n  /**\r\n   * Constructs an empty list with the specified initial capacity (as number), or\r\n   * constructs a list containing the elements of the specified collection, in the order\r\n   * they are returned by the collection's iterator\r\n   * @param capacityOrCollection\r\n   */\r\n  constructor(capacityOrCollection?: Collection<T>|Array<T>|number) {\r\n    super();\r\n    capacityOrCollection = capacityOrCollection ?? 10;\r\n    if (Objects.isNumber(capacityOrCollection)) {\r\n      this._elems = new Array<Element<T>>(Math.max(capacityOrCollection, 0)).fill(null);\r\n    } else {\r\n      const collection = capacityOrCollection;\r\n      this._elems = new Array<Element<T>>(Math.max(collection.length, 0)).fill(null);\r\n      this.appendAll(collection);\r\n      this._modCount = 0;\r\n    }\r\n  }\r\n\r\n  private _checkRange(index: number): void {\r\n    if (index >= 0 && index < this.length) {\r\n      // OK!\r\n    } else\r\n      throw new IndexOutOfBoundsException(`Index '${index}' is out of range`)\r\n  }\r\n\r\n  override *[Symbol.iterator](): IterableIterator<Element<T>> {\r\n    for (const elem of this._elems) {\r\n      yield elem;\r\n    }\r\n  }\r\n\r\n  override [Symbol.toStringTag] = \"ArrayList\";\r\n\r\n  override get size(): number { return this._size }\r\n\r\n  override append(value: Element<T>): boolean {\r\n    this.ensureCapacity(this.length + 1); // Increments modCount!!\r\n    this._elems[this._size++] = value;\r\n    return true;\r\n  }\r\n\r\n  override clear(): void {\r\n    this._modCount++;\r\n    this._elems.fill(null);\r\n    this._size = 0;\r\n  }\r\n\r\n  clone(): ArrayList<T> {\r\n    const aList = new ArrayList<T>(this.size);\r\n    aList.appendAll(this);\r\n    return aList;\r\n  }\r\n\r\n  override contains(value: Element<T>): boolean {\r\n    return this.indexOf(value) >= 0;\r\n  }\r\n  /**\r\n   * @throws IndexOutOfBoundsException\r\n   */\r\n  override get(index: number): Element<T> | undefined {\r\n    this._checkRange(index);\r\n    return this._elems[index];\r\n  }\r\n  /**\r\n   * @throws UnsupportedOperationException\r\n   */\r\n  override getNode(index: number): Readonly<LinkedListNode<T>> | null {\r\n    throw new UnsupportedOperationException(\"Unsupported operation\");\r\n  }\r\n\r\n  override indexOf(value: Element<T>, fromIndex: number = 0): number {\r\n    fromIndex = Math.max(fromIndex, 0);\r\n    const nLen = this.length;\r\n    for (let i = 0; i < nLen; i++) {\r\n      if (this._elems[i] === value) {\r\n        return i;\r\n      }\r\n    }\r\n    return -1;\r\n  }\r\n\r\n  override insert(index: number, value: Element<T>): boolean {\r\n    this._checkRange(index);\r\n    this.ensureCapacity(this.length + 1);\r\n    this._size++;\r\n    this._elems.splice(index, 0, value);\r\n    return true;\r\n  }\r\n\r\n  override lastIndexOf(value: Element<T>, fromIndex: number = 0): number {\r\n    fromIndex = Math.max(fromIndex, 0);\r\n    const nLen = this.length;\r\n    for (let i = nLen - 1; i >= 0; i--) {\r\n      if (this._elems[i] === value) {\r\n        return i;\r\n      }\r\n    }\r\n    return -1;\r\n  }\r\n\r\n  override remove(value: Element<T>): boolean {\r\n    let i = -1;\r\n    let nLen = this.length;\r\n    while (++i < nLen) {\r\n      if (this._elems[i] === value) {\r\n        this._modCount++;\r\n        this._elems.splice(i, 1);\r\n        this._elems[--this._size] = null; // Let gc do its work\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  override removeAt(index: number): Element<T> | undefined {\r\n    this._checkRange(index);\r\n\r\n    this._modCount++;\r\n    const oldValue = this._elems[index];\r\n    this._elems.splice(index, 1);\r\n    this._elems[--this._size] = null; // Let gc do its work\r\n\r\n    return oldValue;\r\n  }\r\n\r\n  override removeRange(fromIndex: number, toIndex?: number): boolean {\r\n    this._checkRange(fromIndex);\r\n    toIndex = toIndex ?? this.length;\r\n    const lastIndex = Math.min(toIndex, this.length);\r\n    if (lastIndex > fromIndex) {\r\n      this._modCount++;\r\n      const oldLen = this._elems.length;\r\n      const delCount = lastIndex - fromIndex;\r\n      this._elems.splice(fromIndex, delCount);\r\n      this._size -= delCount;\r\n      this._elems.length = oldLen;\r\n      this._elems.fill(null, this._size);\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  override set(index: number, value: Element<T>): Element<T> | undefined {\r\n    this._checkRange(index);\r\n    const oldValue = this._elems[index];\r\n    this._elems[index] = value;\r\n    this._modCount++;\r\n    return oldValue;\r\n  }\r\n\r\n  override subList(fromIndex: number, toIndex: number): List<T> {\r\n    return new ListView(this, fromIndex, toIndex);\r\n  }\r\n  /**\r\n   * Increases the capacity of this ArrayList instance, if necessary, to ensure that it can hold at least the number of elements specified by the minimum capacity argument\r\n   * @param minCapacity The desired minimum capacity\r\n   */\r\n  ensureCapacity(minCapacity: number): void {\r\n    const oldCapacity = this._elems.length;\r\n    if (minCapacity > oldCapacity) {\r\n      let newCapacity = Math.ceil((oldCapacity * 3) / 2 + 1);\r\n      if (newCapacity < minCapacity)\r\n        newCapacity = minCapacity;\r\n      this._elems.length = newCapacity;\r\n      this._elems.fill(null, this.length);\r\n      this._modCount++;\r\n    }\r\n  }\r\n  /**\r\n   * Trims the capacity of this ArrayList instance to be the list's current size\r\n   */\r\n  trimToSize(): void {\r\n    const oldCap = this._elems.length;\r\n    if (this.size < oldCap) {\r\n      this._elems.length = this.size;\r\n      this._modCount++;\r\n    }\r\n  }\r\n\r\n  override toArray(): Element<T>[] {\r\n    return this._elems.slice(0, this.size);\r\n  }\r\n}\r\n","import { Observable, Subject } from \"rxjs\";\r\nimport { IllegalArgumentException } from \"../util/exception/IllegalArgumentException\";\r\nimport { Cloneable } from \"../util/interface/Cloneable\";\r\nimport { Element } from \"./Collection\";\r\nimport { AbstractMap } from \"./AbstractMap\";\r\n\r\n/**\r\n * Hash table based implementation of the `Map` interface. This implementation provides all of the optional map operations, and\r\n * permits _null_ values and the _null_ key. Keys with _undefined_ values are prohibited.\r\n */\r\nexport class HashMap<K,V> extends AbstractMap<K,V> implements Cloneable {\r\n  private readonly _map: Map<K,V>;\r\n  public readonly contentChanged$ = new Subject<void>();\r\n\r\n  /**\r\n   * @constructor\r\n   * @param entries\r\n   * @throws IllegalArgumentException\r\n   */\r\n  constructor(entries?: Map<K,V> | Array<[K,V]>) {\r\n    super();\r\n    if (entries) {\r\n      let bErr = false;\r\n      if (Array.isArray(entries)) {\r\n        bErr = (entries.find((value) => value[1] === undefined) !== undefined);\r\n      } else {\r\n        bErr = entries.has(undefined!);\r\n      }\r\n      if (bErr) {\r\n        throw new IllegalArgumentException(\"The argument includes a key with undefined value\");\r\n      }\r\n      this._map = new Map(entries);\r\n    } else {\r\n      this._map = new Map();\r\n    }\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  get contentChanged(): Observable<void> {\r\n    return this.contentChanged$.asObservable();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  get size(): number {\r\n    return this._map.size;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  clear(): void {\r\n    this._map.clear();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  clone(): HashMap<K,V> {\r\n    return new HashMap(this._map);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  containsKey(key: K): boolean {\r\n    return this._map.has(key);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  containsValue(value: V): boolean {\r\n    return [...this._map.values()].indexOf(value) >= 0;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  delete(key: K): boolean {\r\n    return this._map.delete(key);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  *entries(): IterableIterator<[K, V]> {\r\n    yield* this._map.entries();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  forEach(callbackfn: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void {\r\n    this._map.forEach(callbackfn, thisArg);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  get(key: K): V | undefined {\r\n    return this._map.get(key);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  has(key: K): boolean {\r\n    return this._map.has(key);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  *keys(): IterableIterator<K> {\r\n    yield* this._map.keys();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  keySet(): Set<K> {\r\n    const set = new Set<K>();\r\n    this._map.forEach((value, key)=> set.add(key));\r\n    return set;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  put(key: K, value: V): Element<V> | undefined {\r\n    if (key === undefined) {\r\n      throw new IllegalArgumentException(\"Key has an undefined value\");\r\n    }\r\n    const oldVal = this._map.get(key);\r\n    this._map.set(key, value);\r\n    return oldVal;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  putAll<Key extends K, Value extends V>(map: Map<Key, Value>): void {\r\n    for (let entry of map) {\r\n      this.put(entry[0], entry[1]);\r\n    }\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  remove(key: K): Element<V> | undefined {\r\n    const oldVal = this._map.get(key);\r\n    this.delete(key);\r\n    return oldVal;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  set(key: K, value: V): this {\r\n    this.put(key, value);\r\n    return this;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  toString(): string {\r\n    return [...this._map.entries()].toString();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  *values(): IterableIterator<V> {\r\n    yield* this._map.values();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  *[Symbol.iterator](): IterableIterator<[K, V]> {\r\n    yield* this._map.entries();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  [Symbol.toStringTag]: string = \"HashMap\";\r\n\r\n}\r\n","import { IllegalArgumentException } from \"../util/exception/IllegalArgumentException\";\r\nimport { Cloneable } from \"../util/interface/Cloneable\";\r\nimport { Element } from \"./Collection\";\r\nimport { AbstractSet } from \"./AbstractSet\";\r\n\r\n/**\r\n * This class implements the `Set` interface. Set objects are collections of values. You can iterate through the elements of a set in\r\n * insertion order. A value in the `Set` may only occur once; it is unique in the Set's collection.\r\n */\r\nexport class HashSet<K> extends AbstractSet<K> implements Cloneable {\r\n  private readonly _set: Set<K>;\r\n\r\n  /**\r\n   * @constructor\r\n   * @param initSet If an _iterable_ object is passed, all of its elements will be added to the new HashSet.\r\n   *                If you don't specify this parameter, or its value is _null_, the new HashSet is empty.\r\n   * @throws `IllegalArgumentException` if the initial set includes a key which value is _undefined_\r\n   */\r\n  constructor(initSet?: Set<K> | Iterable<K> | null) {\r\n    super();\r\n    if (initSet) {\r\n      let bErr = false;\r\n      if (initSet instanceof Set) {\r\n        bErr = initSet.has(undefined!);\r\n      } else {\r\n        for (const el of initSet) {\r\n          if (el === undefined) {\r\n            bErr = true;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n      if (bErr) {\r\n        throw new IllegalArgumentException(\"Mapped argument has a key with undefined value\");\r\n      }\r\n    }\r\n    this._set = new Set(initSet);\r\n  }\r\n\r\n  override get size(): number {\r\n    return this._set.size;\r\n  }\r\n\r\n  override append(key: K): boolean {\r\n    if (key === undefined) {\r\n      throw new IllegalArgumentException(\"Key has an undefined value\");\r\n    }\r\n    const oldSize = this.size;\r\n    this._set.add(key);\r\n    return oldSize != this.size;\r\n  }\r\n  /**\r\n   * Gets the copy of the current set object\r\n   * @returns A new set object with the same values as this set\r\n   */\r\n  clone(): HashSet<K> {\r\n    return new HashSet<K>(this._set);\r\n  }\r\n\r\n  override delete(key: K): boolean {\r\n    return this._set.delete(key);\r\n  }\r\n\r\n  override has(key: K): boolean {\r\n    return this._set.has(key);\r\n  }\r\n\r\n  override *entries(): IterableIterator<[K, K]> {\r\n    yield* this._set.entries();\r\n  }\r\n\r\n  override *keys(): IterableIterator<K> {\r\n    yield* this._set.keys();\r\n  }\r\n\r\n  override *values(): IterableIterator<K> {\r\n    yield* this._set.values();\r\n  }\r\n\r\n  override forEach(callbackfn: (value: K, value2: K, set: Set<K>) => void, thisArg?: any): void {\r\n    this._set.forEach(callbackfn, thisArg);\r\n  }\r\n\r\n  override *[Symbol.iterator](): IterableIterator<K> {\r\n    yield* this._set.keys();\r\n  }\r\n\r\n  override clear(): void {\r\n    this._set.clear();\r\n  }\r\n\r\n  override contains(key: K): boolean {\r\n    return this._set.has(key);\r\n  }\r\n\r\n  override remove(key: K): boolean {\r\n    return this.delete(key);\r\n  }\r\n\r\n  override toArray(): Element<K>[] {\r\n    return [...this._set.keys()];\r\n  }\r\n  /**\r\n   * Checks if the specified set is the sub set for the current set\r\n   * @param setB Target set object to check\r\n   * @returns _true_ if the target `setB` set is the sub set of this set, _false_ otherwise\r\n   */\r\n  isSubSet(setB: Set<K>): boolean {\r\n    for (const elem of setB) {\r\n      if (!this.has(elem)) {\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n  /**\r\n   * Checks if the specified set is the super set for the current set\r\n   * @param setB Target set object to check\r\n   * @returns _true_ if the target `setB` set is the super set of this set, _false_ otherwise\r\n   */\r\n  isSuperSet(setB: Set<K>): boolean {\r\n    for (const elem of this) {\r\n      if (!setB.has(elem)) {\r\n        return false;\r\n      }\r\n    }\r\n    return true;\r\n  }\r\n  /**\r\n   * Gets the common values (intersection) with another set\r\n   * @param setB Target set object for get the intersection\r\n   * @returns New set object with common values\r\n   * @see {@link retainAll}\r\n   * @see {@link union}\r\n   * @see {@link complement}\r\n   */\r\n  intersection(setB: Set<K>): HashSet<K> {\r\n    const iSet = new HashSet<K>();\r\n    for (let key of this) {\r\n      if (setB.has(key)) {\r\n        iSet.add(key);\r\n      }\r\n    }\r\n    return iSet;\r\n  }\r\n  /**\r\n   * Combines values with another set\r\n   * @param setB Target set object for get the union\r\n   * @returns New set object with combined values\r\n   * @see {@link intersection}\r\n   * @see {@link complement}\r\n   */\r\n  union(setB: Set<K>): HashSet<K> {\r\n    const uSet = new HashSet<K>(this);\r\n    for (let key of setB) {\r\n      if (key !== undefined) {\r\n        uSet.add(key);\r\n      }\r\n    }\r\n    return uSet;\r\n  }\r\n  /**\r\n   * Retrieves values from `this` set that are missing from another (relative complement)\r\n   * @param setB Target set object for get the relative complement\r\n   * @returns New set object of the missing values\r\n   * @see {@link intersection}\r\n   * @see {@link union}\r\n   * @see {@link symmetricDifference}\r\n   */\r\n  complement(setB: Set<K>): HashSet<K> {\r\n    const cSet = new HashSet<K>();\r\n    for (const key of this) {\r\n      if ( !setB.has(key) ) {\r\n        cSet.add(key);\r\n      }\r\n    }\r\n    return cSet;\r\n  }\r\n  /**\r\n   * Extracts values that are a combination of difference values from both sides of the comparison\r\n   * @param setB Target set object for get the symmetric difference\r\n   * @returns New set object of differences\r\n   * @see {@link complement}\r\n   */\r\n  symmetricDifference(setB: Set<K>): HashSet<K> {\r\n    const diffSet = new HashSet<K>(this);\r\n    for (const elem of setB) {\r\n      if (diffSet.has(elem)) {\r\n        diffSet.delete(elem);\r\n      } else if (elem !== undefined) {\r\n        diffSet.add(elem);\r\n      }\r\n    }\r\n    return diffSet;\r\n  }\r\n\r\n  override [Symbol.toStringTag]: string = \"HashSet\";\r\n\r\n}\r\n","import { RunTimeException } from \"./RunTimeException\";\r\n\r\nexport class IllegalStateException extends RunTimeException {\r\n\r\n}\r\n","export type EncodingFormat = \"Base64\" | \"URI\";\r\n\r\n/**\r\n * This class consists exclusively of the static methods that operate on or return results of the different cipher algorythms\r\n */\r\nexport class Ciphers {\r\n  private static UUID_V4_PIC = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.split(\"\");\r\n  /**\r\n   * Generates UUID ver. 4\r\n   * @returns UUID\r\n   */\r\n  static uuid_v4(): string {\r\n    let d = new Date().getTime(); //Timestamp\r\n    let arr = Ciphers.UUID_V4_PIC.map((c) => {\r\n      if (\"-4\".indexOf(c) >= 0) return c;\r\n      let r = Math.random() * 16; //random number between 0 and 16\r\n      if (d > 0) {    //Use timestamp until depleted\r\n        r = (d + r) % 16 | 0;\r\n        d = Math.floor(d / 16);\r\n      } else {        //Use microseconds since page-load if supported\r\n        let d2 = ((typeof performance !== 'undefined') && performance.now && (performance.now() * 1000)) || 0;//Time in microseconds since page-load or 0 if unsupported\r\n        r = (d2 + r) % 16 | 0;\r\n        d2 = Math.floor(d2 / 16);\r\n      }\r\n      return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\r\n    });\r\n    return arr.join(\"\");\r\n  }\r\n  /**\r\n   * Returns the numeric hash value of the some string key\r\n   * @param key String value\r\n   * @param mapSize  A value for modulo division\r\n   * @returns Calculated hash value\r\n   */\r\n  static keyHash(key: string, mapSize: number): number {\r\n    let keyHash = 0;\r\n    let nLen = key.length;\r\n    for (let i = 0; i < nLen; i++) {\r\n      keyHash = (3*keyHash +  key.charCodeAt(i)) % mapSize;\r\n    }\r\n    return keyHash;\r\n  }\r\n  /* https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript        */\r\n  /* https://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/ */\r\n  /**\r\n   * Gets the hash code of the string just like Java's hashCode() method does\r\n   * @param source A string for which you want to get a hash code\r\n   * @returns Numeric hash code of the `source`\r\n   * @see {@link encode}\r\n   */\r\n  static hashCode(source: string): number {\r\n    if (typeof (source) === \"string\") {\r\n      let hash = 0\r\n      let nLen = source.length;\r\n      if (nLen > 0) {\r\n        let chr: number;\r\n        let i: number = -1;\r\n        while (++i < nLen) {\r\n          chr = source.charCodeAt(i);\r\n          hash = ((hash << 5) - hash) + chr;\r\n          hash |= 0; // Convert to 32bit integer\r\n        }\r\n      }\r\n      return hash >>> 0;  // to positive value\r\n    }\r\n    return 0;\r\n  }\r\n  /* Found here: https://gist.github.com/vaiorabbit/5657561 */\r\n  /* Ref.: http://isthe.com/chongo/tech/comp/fnv/           */\r\n  /**\r\n   * Calculate a 32 bit FNV-1a hash\r\n   * @param {string} source the input value\r\n   * @param {integer} [seed] optionally pass the hash of the previous chunk\r\n   * @returns Numeric hash code of the `source`\r\n   */\r\n  static hashFnv32a(source: string, seed?: number): number {\r\n    if (typeof source === \"string\") {\r\n      let nLen = source.length;\r\n      if (nLen > 0) {\r\n        const FNV1_32A_INIT = 0x811c9dc5;\r\n        let hval = FNV1_32A_INIT;\r\n        if (typeof seed === \"number\") {\r\n          hval = seed;\r\n        }\r\n        let i = -1;\r\n        while (++i < nLen) {\r\n          hval ^= source.charCodeAt(i);\r\n          hval += (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + (hval << 24);\r\n        }\r\n        return hval >>> 0;   // to positive value\r\n      }\r\n    }\r\n    return 0;\r\n  }\r\n  /**\r\n   * Decode string that was encoded in `format`\r\n   * @param source  Source encoded string\r\n   * @param format  Encoding format. Default is `Base64`\r\n   * @returns Decoded string if succeededs, or an empty string ('') if some error occurs\r\n   * @see {@link encode}\r\n   */\r\n  static decode(source: string, format: EncodingFormat = \"Base64\"): string {\r\n    if (typeof (source) == \"string\" && typeof (format) == \"string\") {\r\n      switch (format.trim().toLowerCase()) {\r\n        case \"base64\":\r\n          return new TextDecoder().decode(\r\n            new Uint8Array(atob(source).split('').map((char) => char.charCodeAt(0)))\r\n          );\r\n        case \"uri\":\r\n          try {\r\n            return decodeURI(source);\r\n          } catch (error) {\r\n            // URIError\r\n          }\r\n      }\r\n    }\r\n    return \"\";\r\n  }\r\n  /**\r\n   * Encode string to specified format\r\n   * @param source  Source string to encode\r\n   * @param {EncodingFormat} format Encoding format\r\n   * @returns Encoded string if succeeded, or an empty string ('') if some error occurs\r\n   * @see {@link decode}\r\n   * @see {@link hashCode}\r\n   */\r\n  static encode(source: string, format: EncodingFormat = \"Base64\"): string {\r\n    if (typeof (source) == \"string\" && typeof (format) == \"string\") {\r\n      switch (format.trim().toLowerCase()) {\r\n        case \"base64\":\r\n          return btoa(Array.from(new TextEncoder().encode(source))\r\n            .map((n) => String.fromCharCode(n))\r\n            .join(''));\r\n        case \"uri\":\r\n          try {\r\n            return encodeURI(source);\r\n          } catch (error) {\r\n            // URIError\r\n          }\r\n      }\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n}\r\n","import { NullPointerException } from \"../util/exception/NullPointerException\";\r\nimport { IllegalArgumentException } from \"../util/exception/IllegalArgumentException\";\r\nimport { IllegalStateException } from \"../util/exception/IllegalStateException\";\r\nimport { Ciphers } from \"../util/Ciphers\";\r\nimport { ArrayList } from \"./ArrayList\";\r\nimport { Dictionary} from \"./Dictionary\";\r\nimport { Entry } from \"./AbstractMap\";\r\n\r\nconst DEFAULT_HASH_SIZE = 32;\r\nconst MAX_LIST_SIZE = 8192;  // 4096\r\nconst MAX_LOCATIONS = 5\r\n\r\n/**\r\n * **Hash table** (hash map) is a data structure which implements an _associative array_ abstract data type, a structure that can _map keys\r\n * to values_. A hash table uses a _hash function_ to compute an index into an array of buckets or slots,\r\n * from which the desired value can be found\r\n */\r\nexport class HashTable<K,V> implements Dictionary<K,V> {\r\n  private _hashSize = DEFAULT_HASH_SIZE;\r\n  private _buckets: ArrayList<Array<Entry<K,V>>> = new ArrayList();\r\n  private _keys = new Array<K>();\r\n\r\n  constructor() {\r\n    this._initialize(this._hashSize);\r\n  }\r\n\r\n  private _initialize(hashSize: number): void {\r\n    this._buckets.clear();\r\n    for (let i = 0; i < hashSize; i++) {\r\n      this._buckets.add(new Array<Entry<K,V>>());\r\n    }\r\n    this._keys = [];\r\n  }\r\n\r\n  private _resize(): void {\r\n    const oldDic = new ArrayList<Array<Entry<K,V>>>();\r\n    oldDic.appendAll<Array<Entry<K,V>>>(this._buckets);\r\n    this._initialize(Math.min(oldDic.size * 4, MAX_LIST_SIZE));\r\n    this._buckets.appendAll<Array<Entry<K,V>>>(oldDic);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  clear(): void {\r\n    this._initialize(this._hashSize);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  isEmpty(): boolean {\r\n    return this.size == 0;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  get size(): number {\r\n    return this._keys.length;\r\n  }\r\n  /**\r\n   * Returns the value to which the `key` is mapped in this dictionary, or `undefined` if this map contains no mapping for the key\r\n   * @param key The key whose associated value is to be returned\r\n   * @returns The value to which the specified key is mapped, or `undefined` if this map contains no mapping for the key\r\n   */\r\n   get(key: K): V | undefined {\r\n    if (key == null) {\r\n      return undefined;\r\n    }\r\n    const aBucket = this._buckets.get(Ciphers.keyHash(String(key), this._buckets.size));\r\n    if (aBucket) {\r\n      for (let pair of aBucket) {\r\n        if ((pair as Entry<K,V>).key === key) {\r\n          return (pair as Entry<K,V>).value!;\r\n        }\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * Returns the value to which the `key` is mapped in this dictionary, or `defaultValue` if this map contains no mapping for the key\r\n   * @param key The key whose associated value is to be returned\r\n   * @param defaultValue Default value that will be returned if there is no mapping for the `key`\r\n   * @returns The value to which the specified key is mapped, or `defaultValue` if this map contains no mapping for the key\r\n   */\r\n  getOrDefault(key: K, defaultValue: V): V {\r\n    return this.get(key) ?? defaultValue;\r\n  }\r\n  /**\r\n   * Tests if some key maps into the specified value in this hashtable\r\n   * @param key A key value\r\n   * @returns _true_ if the map contains the entry with the key `key`, or _false_ otherwise\r\n   * @see {@link contains}\r\n   * @see {@link containsKey}\r\n   */\r\n  has(key: K): boolean {\r\n    return this.containsKey(key);\r\n  }\r\n  /**\r\n   * Tests if some key maps into the specified value in this hashtable\r\n   * @param key A key value\r\n   * @returns _true_ if the map contains the entry with the key `key`, or _false_ otherwise\r\n   * @see {@link has}\r\n   * @see {@link containsKey}\r\n   */\r\n  contains(key: K): boolean {\r\n    return this.containsKey(key);\r\n  }\r\n  /**\r\n   * @override\r\n   * @see {@link has}\r\n   * @see {@link contains}\r\n   * @see {@link containsValue}\r\n   */\r\n  containsKey(key: K): boolean {\r\n    return (this._keys.indexOf(key) >= 0);\r\n  }\r\n  /**\r\n   * @override\r\n   * @see {@link containsKey}\r\n   */\r\n  containsValue(value: V): boolean {\r\n    for (let aBucket of this._buckets) {\r\n      for (let anEntry of aBucket!) {\r\n        if (anEntry.value === value) {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * Returns a `Set` view of the keys contained in this map\r\n   */\r\n  keySet(): Set<K> {\r\n    let set: Set<K> = new Set();\r\n    this._keys.forEach(key => set.add(key));\r\n    return set;\r\n  }\r\n  /**\r\n   * Maps the specified key to the specified value in this hashtable\r\n   * @param key The hashtable key\r\n   * @param value The value\r\n   * @returns The previous value of the specified key in this hashtable, or `undefined` if it did not have one\r\n   * @throws `IllegalArgumentException` if the `key` or `value` is _null_ or _undefined_\r\n   * @see {@link set}\r\n   */\r\n  put(key: K, value: V): V | undefined {\r\n\r\n    if (key == null || value == null) {\r\n      throw new IllegalArgumentException();\r\n    }\r\n\r\n    const keyHash = Ciphers.keyHash(String(key), this._buckets.size);\r\n    const aBucket = this._buckets.get(keyHash);\r\n    if (!aBucket) {\r\n      throw new IllegalStateException();\r\n    }\r\n\r\n    let count = -1;\r\n    let index = -1;\r\n    for (let pair of aBucket) {\r\n      count++;\r\n      if (pair.key === key) {\r\n        index = count;\r\n        break;\r\n      }\r\n    }\r\n\r\n    let oldValue: V | undefined = undefined;\r\n\r\n    if (index == -1) {\r\n      const pair: Entry<K,V> = { key, value };\r\n      index = aBucket.push(pair);\r\n      this._keys.push(key);\r\n    } else {\r\n      oldValue = aBucket[index].value!;\r\n      aBucket[index].value = value;\r\n    }\r\n\r\n    if (index > MAX_LOCATIONS && this._buckets.size < MAX_LIST_SIZE) {\r\n      // this bucket is big, grow dict\r\n      this._resize();\r\n    }\r\n\r\n    return oldValue;\r\n  }\r\n  /**\r\n   * Copies all the mappings from the specified source map to this map\r\n   * @param map Source `Map` object\r\n   * @throws `NullPointerException` if the `map` is a nullish value\r\n   * @see {@link put}\r\n   */\r\n  putAll(map: Map<K,V>|HashTable<K,V>): void {\r\n    if (map == null) {\r\n      throw new NullPointerException();\r\n    }\r\n    map.forEach((value, key)=>this.put(key, value));\r\n  }\r\n  /**\r\n   * Removes the key (and its corresponding value) from this hashtable\r\n   * @param key The key that needs to be removed\r\n   * @returns _true_ if the entry with the key `key` was deleted, or _false_ otherwise\r\n   * @see {@link remove}\r\n   */\r\n  delete(key: K): boolean {\r\n    if (key == null) return false;\r\n    const aBucket = this._buckets.get(Ciphers.keyHash( String(key), this._buckets.size));\r\n    if (aBucket) {\r\n      let index = -1;\r\n      let keysInd;\r\n      for (let pair of aBucket) {\r\n        index++;\r\n        if (pair.key === key) {\r\n          aBucket.splice(index, 1);\r\n          keysInd = this._keys.indexOf(key);\r\n          if (keysInd >= 0 ) this._keys.splice(keysInd, 1);\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n    return false\r\n  }\r\n  /**\r\n   * Maps the specified key to the specified value in this hashtable and returns a reference to `this` value.\r\n   * If a `key` or a `value` equals to _null_ or _undefined_ value operation is ignored.\r\n   * @param key A key of the key/value pair\r\n   * @param value A value of the key/value pair\r\n   * @returns `this` value\r\n   * @see {@link put}\r\n   */\r\n  set(key:K, value:V): this {\r\n    if (!(key == null || value == null)) {\r\n      this.put(key, value);\r\n    }\r\n    return this;\r\n  }\r\n  /**\r\n   * Removes the key (and its corresponding value) from this hashtable\r\n   * @param key The key that needs to be removed\r\n   * @returns The value to which the key had been mapped in this hashtable, or `null` if the key did not have a mapping\r\n   * @throws `IllegalArgumentException` if the `key` is _null_ or _undefined_\r\n   */\r\n  remove(key: K): V | undefined {\r\n    if (key == null) {\r\n      throw new IllegalArgumentException();\r\n    }\r\n\r\n    const aBucket = this._buckets.get(Ciphers.keyHash( String(key), this._buckets.size));\r\n    if (aBucket) {\r\n      let index = -1;\r\n      let keysInd;\r\n      for (let pair of aBucket) {\r\n        index++;\r\n        if (pair.key === key) {\r\n          const oldEntry = aBucket.splice(index, 1)[0];\r\n          keysInd = this._keys.indexOf(key);\r\n          if (keysInd >= 0 ) this._keys.splice(keysInd, 1);\r\n          return oldEntry.value!;\r\n        }\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  keys(): Array<K> {\r\n    return [...this._keys];\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  values(): Array<V> {\r\n    let arr = new Array<V>();\r\n    this._keys.forEach(key => arr.push(this.get(key)!));\r\n    return arr;\r\n  }\r\n  /**\r\n   * Executes a `callBack` function for each entry in this dictionary\r\n   * @param callBack Function to call\r\n   * @param thisArg A reference to `this` object\r\n   */\r\n  forEach(callBack: (value: V, key: K, map: HashTable<K,V>)=>void, thisArg?: any): void {\r\n    this._keys.forEach(key=>callBack(this.get(key)!, key, this), thisArg );\r\n  }\r\n\r\n}\r\n","import { Compare } from \"./function/Compare\";\r\n\r\n/**\r\n * This utility class contains value's comparison methods using their natural ordering\r\n */\r\nexport class Comparator<T> {\r\n  private static _instance: Comparator<any>;\r\n  private _compare: Compare<T>;\r\n\r\n  /**\r\n   * Constructor.\r\n   * @param compareFunction - It may be custom compare function that, let's say may compare custom objects together.\r\n   *\r\n   */\r\n  constructor(compareFunction?: Compare<T>) {\r\n    this._compare = compareFunction || Comparator.compare;\r\n  }\r\n  /**\r\n   * Default comparison function\r\n   * @param a The first value to compare\r\n   * @param b The second value to compare\r\n   * @returns {number} `0` if the both values are equal, `-1` if the value _a_ is less then _b_, otherwise returns `1`\r\n   * @static\r\n   */\r\n  static compare<T>(a: T, b: T): number {\r\n    if (a === b) {\r\n      return 0;\r\n    }\r\n    return a < b ? -1 : 1;\r\n  }\r\n  /**\r\n   * Gets comparator singleton\r\n   * @returns Singleton object\r\n   * @static\r\n   */\r\n  static getInstance(): Comparator<any> {\r\n    if (!Comparator._instance) {\r\n      Comparator._instance = new Comparator<any>();\r\n    }\r\n    return Comparator._instance;\r\n  }\r\n  /**\r\n   * Checks if two variables are equal.\r\n   * @param {*} a\r\n   * @param {*} b\r\n   * @return {boolean}\r\n   */\r\n  equal(a: T|null, b: T|null): boolean {\r\n    return this._compare(a, b) === 0;\r\n  }\r\n  /**\r\n   * Checks if variable \"a\" is less than \"b\".\r\n   * @param {*} a\r\n   * @param {*} b\r\n   * @return {boolean}\r\n   */\r\n  lessThan(a: T|null, b: T|null): boolean {\r\n    return this._compare(a, b) < 0;\r\n  }\r\n  /**\r\n   * Checks if variable \"a\" is greater than \"b\".\r\n   * @param {*} a\r\n   * @param {*} b\r\n   * @return {boolean}\r\n   */\r\n  greaterThan(a: T|null, b: T|null): boolean {\r\n    return this._compare(a, b) > 0;\r\n  }\r\n  /**\r\n   * Checks if variable \"a\" is less than or equal to \"b\".\r\n   * @param {*} a\r\n   * @param {*} b\r\n   * @return {boolean}\r\n   */\r\n  lessThanOrEqual(a: T|null, b: T|null): boolean {\r\n    return this.lessThan(a, b) || this.equal(a, b);\r\n  }\r\n  /**\r\n   * Checks if variable \"a\" is greater than or equal to \"b\".\r\n   * @param {*} a\r\n   * @param {*} b\r\n   * @return {boolean}\r\n   */\r\n  greaterThanOrEqual(a: T|null, b: T|null): boolean {\r\n    return this.greaterThan(a, b) || this.equal(a, b);\r\n  }\r\n  /**\r\n   * Reverses the comparison order.\r\n   */\r\n  reverse(): void {\r\n    const compareOriginal = this._compare;\r\n    this._compare = (a:T|null, b:T|null) => compareOriginal(b, a);\r\n  }\r\n}\r\n","import { IllegalArgumentException } from '../util/exception/IllegalArgumentException';\r\nimport { IndexOutOfBoundsException } from '../util/exception/IndexOutOfBoundsException';\r\nimport { Comparator } from '../util/Comparator';\r\nimport { AbstractList } from './AbstractList';\r\nimport { Collection, Element } from './Collection';\r\nimport { Deque } from './Deque';\r\nimport { List } from './List';\r\nimport { ListView } from './view/ListView';\r\nimport { Compare } from '../util/function/Compare';\r\nimport { Cloneable } from '../util/interface/Cloneable';\r\n\r\n//type MutableNode<Type> = {-readonly [Property in keyof LinkedListNode<Type>]: LinkedListNode<Type>[Property]};\r\n\r\n/**\r\n * Doubly-linked list implementation of the List and Deque interfaces.\r\n * Implements all optional list operations, and permits all elements (including null).\r\n */\r\nexport class LinkedList<T> extends AbstractList<T> implements Deque<T>, Cloneable {\r\n  private head: LinkedListNode<T> | null;\r\n  private tail: LinkedListNode<T> | null;\r\n  private compare: Compare<T> = Comparator.compare;\r\n  private _size: number = 0;\r\n\r\n  /**\r\n   * @constructor\r\n   */\r\n  constructor(collection?: Collection<T> | Array<T>) {\r\n    super();\r\n    this.head = null;\r\n    this.tail = null;\r\n    if (collection) {\r\n      this.appendAll(collection);\r\n    }\r\n  }\r\n  /**\r\n   * Inserts node to the specified position in the list\r\n   * @param index Ordered number of the node before which we want to insert a new node. To add node to the end of the list set `index` to the `Infinity` or to the value that great or equal to the list's `size` property.\r\n   * @param newNode Inserted node\r\n   * @returns _true_ if the node was inserted, else _false_\r\n   * @protected\r\n   */\r\n  protected insertNode(index: number, newNode: LinkedListNode<T>): boolean {\r\n    index = (index ?? 0) < 0 ? 0 : index;\r\n\r\n    let currentNode = null;\r\n    if ( !(index === Infinity) ) {\r\n      let count = -1;\r\n      currentNode = this.head;\r\n      while (currentNode) {\r\n        count++;\r\n        if (count === index)\r\n          break;\r\n        else if (currentNode == this.tail) {\r\n          currentNode = null;\r\n        } else\r\n          currentNode = currentNode.next;\r\n      }\r\n    }\r\n    if (currentNode) {\r\n      newNode.next = currentNode;\r\n      newNode.prev = currentNode.prev;\r\n      currentNode.prev = newNode;\r\n      if (currentNode == this.head) {\r\n        this.head = newNode;\r\n      }\r\n    } else {\r\n      if (this.tail) {\r\n        //newNode.next = this.tail.next;\r\n        this.tail.next = newNode;\r\n        newNode.prev = this.tail;\r\n        this.tail = newNode;\r\n      } else {\r\n        this.head = this.tail = newNode;\r\n      }\r\n    }\r\n    this._size++;\r\n    this._modCount++;\r\n    this.contentChanged$.next();\r\n    return true;\r\n  }\r\n\r\n  protected removeNode(node: LinkedListNode<T>|null): boolean {\r\n    if (node) {\r\n      if (node == this.tail) {\r\n        this.tail = node.prev;\r\n      }\r\n      if (node == this.head) {\r\n        this.head = node.next;\r\n      }\r\n      if (node.next) {\r\n        node.next.prev = node.prev;\r\n      }\r\n      if (node.prev) {\r\n        node.prev.next = node.next;\r\n      }\r\n      node.next = node.prev = null;\r\n      node.value = null;\r\n\r\n      this._size--;\r\n      this._modCount++;\r\n      this.contentChanged$.next();\r\n\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * @override\r\n   */\r\n  *[Symbol.iterator](): IterableIterator<Element<T>> {\r\n    let node = this.head;\r\n    let nextNode;\r\n    let isTail = false;\r\n    while (node) {\r\n      nextNode = node.next;\r\n      isTail = (node == this.tail);\r\n\r\n      yield node.value;\r\n\r\n      if (isTail)\r\n        break;\r\n      else\r\n        node = nextNode;\r\n    }\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  [Symbol.toStringTag] = \"LinkedList\";\r\n  /**\r\n   * @override\r\n   */\r\n  override get size(): number {return this._size}\r\n  /**\r\n   * @override\r\n   */\r\n  override append(value: Element<T>): boolean {\r\n\r\n    if (value === undefined) return false;\r\n\r\n    return this.insertNode(Infinity, new LinkedListNode(value));\r\n  }\r\n  /**\r\n   * Clones the current collection\r\n   * @returns New cloned collection\r\n   */\r\n  clone(): LinkedList<T> {\r\n    return new LinkedList<T>(this);\r\n  }\r\n  /**\r\n   * Retrieves, but does not remove, the head of this queue, or returns _undefined_ if this queue is empty\r\n   */\r\n  element(): Element<T>|undefined {\r\n    return this.peekFirst();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  override getParent(): LinkedList<T> | null {\r\n      return null;\r\n  }\r\n  /**\r\n   * Loads an array of the collection items\r\n   * @param values - Array of values that need to be converted to linked list.\r\n   */\r\n  loadArray<E extends T>(values: Array<Element<T>>): void {\r\n    values.forEach((value) => this.append(value));\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  override get(index: number): Element<T> | undefined {\r\n    const node = this.getNode(index);\r\n    if (node) {\r\n      return node.value;\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * @override\r\n   * @throws IllegalArgumentException\r\n   */\r\n  override set(index: number, value: Element<T>): Element<T>|undefined {\r\n    if (value === undefined) {\r\n      throw new IllegalArgumentException(\"Undefined value is not allowed\");\r\n    }\r\n\r\n    const node = this.getNode(index);\r\n    if (node) {\r\n      const oldVal = node.value;\r\n      node.setValue(value);\r\n      this.contentChanged$.next();\r\n      return oldVal;\r\n    }\r\n\r\n    throw new IndexOutOfBoundsException();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  override clear(): void {\r\n    let node: LinkedListNode<T>;\r\n    while (this.head) {\r\n      node = this.head;\r\n      this.head = node.next;\r\n      node.next = node.prev = null;\r\n      node.value = null;\r\n    }\r\n\r\n    this.head = null;\r\n    this.tail = null;\r\n\r\n    this._size = 0;\r\n    this._modCount++;\r\n    this.contentChanged$.next();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  override contains(value: Element<T>): boolean {\r\n    return this.indexOf(value) >= 0;\r\n  }\r\n  /**\r\n   * Gets the index of the first item in the collection\r\n   * @param value Searched value\r\n   * @param fromIndex Started index to search. Default is 0.\r\n   * @returns Index number if found, else -1\r\n   */\r\n  indexOf(value: Element<T>, fromIndex?: number): number {\r\n    let index = -1;\r\n    let count = -1;\r\n    fromIndex = fromIndex ?? 0;\r\n    let node: LinkedListNode<T> | null = this.head;\r\n    while (node) {\r\n      count++;\r\n      if (count >= fromIndex && this.compare(node.value, value)==0) {\r\n        index = count;\r\n        break;\r\n      }\r\n      if (node == this.tail) break;\r\n      node = node.next;\r\n    }\r\n    return index;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  override insert(index: number, value: Element<T>): boolean {\r\n\r\n    if (value === undefined) return false;\r\n\r\n    return this.insertNode(index, new LinkedListNode(value));\r\n  }\r\n  /**\r\n   * Gets the index of the last item in the collection\r\n   * @param value Searched value\r\n   * @param fromIndex The index to search starting from the end. Default is 0.\r\n   * @returns Index number if found, else -1\r\n   */\r\n  lastIndexOf(value: Element<T>, fromIndex?: number): number {\r\n    let index = -1;\r\n    let count = -1;\r\n    fromIndex = fromIndex ?? 0;\r\n    let node: LinkedListNode<T> | null = this.tail;\r\n    while (node) {\r\n      count++;\r\n      if (count >= fromIndex && this.compare(node.value, value)==0) {\r\n        index = count;\r\n        break;\r\n      } else if (node == this.head) {\r\n        break;\r\n      }\r\n      node = node.prev;\r\n    }\r\n    return index;\r\n  }\r\n  /**\r\n   * Inserts the specified element into this queue if it is possible\r\n   */\r\n  offer(value: Element<T>): boolean {\r\n    return this.append(value);\r\n  }\r\n  /**\r\n   * Retrieves, but does not remove, the head of this queue, or returns `undefined` if this queue is empty\r\n   */\r\n  peek(): Element<T>|undefined {\r\n    return this.peekFirst();\r\n  }\r\n  /**\r\n   * Retrieves and removes the head of this queue, or returns `undefined` if this queue is empty\r\n   */\r\n  poll(): Element<T>|undefined {\r\n    return this.removeFirst();\r\n  }\r\n  /**\r\n   * Inserts the specified element at the front of this deque\r\n   * @param value\r\n   * @returns\r\n   */\r\n  offerFirst(value: Element<T>): boolean {\r\n    return this.insert(0, value);\r\n  }\r\n  /**\r\n   * Inserts the specified element at the end of this deque\r\n   * @param value\r\n   * @returns\r\n   */\r\n  offerLast(value: Element<T>): boolean {\r\n    return this.offer(value);\r\n  }\r\n  /**\r\n   * Retrieves and removes the first element of this deque, or returns `undefined` if this deque is empty\r\n   * @returns\r\n   */\r\n  pollFirst(): Element<T>|undefined {\r\n    return this.poll();\r\n  }\r\n  /**\r\n   * Retrieves and removes the last element of this deque, or returns `undefined` if this deque is empty\r\n   * @returns\r\n   */\r\n  pollLast(): Element<T>|undefined {\r\n    return this.removeLast();\r\n  }\r\n  /**\r\n   * Removes a single instance of the specified element from this collection, if it is present\r\n   * @param {T} value\r\n   * @return {boolean}\r\n   */\r\n  remove(value: Element<T>): boolean {\r\n    let node: LinkedListNode<T> | null = this.head;\r\n    while (node) {\r\n      if (this.compare(node.value, value)==0) {\r\n        return this.removeNode(node);\r\n      }\r\n      if (node == this.tail) break;\r\n      node = node.next;\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  override removeAt(index: number): Element<T>|undefined {\r\n    const node = this.getNode(index);\r\n    if (node) {\r\n      let oldVal = node.value;\r\n      this.removeNode(node);\r\n      return oldVal;\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * Retrieves and removes the head of this list, or returns `undefined` if this list object is empty\r\n   */\r\n  removeFirst(): Element<T>|undefined { return this.removeAt(0); }\r\n  /**\r\n   * Retrieves and removes the tail of this list, or returns `undefined` if this list object is empty\r\n   */\r\n  removeLast(): Element<T>|undefined {\r\n    if (this.tail) {\r\n      const tailValue = this.tail.value;\r\n      this.removeNode(this.tail);\r\n      return tailValue;\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   *  @override\r\n   */\r\n  override removeRange(fromIndex: number, toIndex: number = Infinity): boolean {\r\n    let nCount = 0;\r\n    fromIndex = Math.max(fromIndex, 0);\r\n    toIndex = Math.min(toIndex, this.size);\r\n    if (fromIndex > toIndex) return false;\r\n    let ind = toIndex;\r\n    while(--ind >= fromIndex) {\r\n      if (this.removeNode( this.getNode(ind) )) {\r\n        nCount++;\r\n      }\r\n    }\r\n    return nCount > 0;\r\n  }\r\n  /**\r\n   * Retrieves, but does not remove, the first element of this list, or returns _undefined_ if this collection is empty\r\n   * @returns\r\n   */\r\n  peekFirst(): Element<T>|undefined {\r\n    if (this.head) {\r\n      return this.head.value;\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * Retrieves, but does not remove, the last element of this list, or returns _undefined_ if this collection is empty\r\n   * @returns\r\n   */\r\n  peekLast(): Element<T>|undefined {\r\n    if (this.tail) {\r\n      return this.tail.value;\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  override subList(fromIndex: number, toIndex: number): List<T> {\r\n    return new ListView(this, fromIndex, toIndex);\r\n  }\r\n\r\n  getHead(): Readonly<LinkedListNode<T>> | null { return this.head }\r\n  getTail(): Readonly<LinkedListNode<T>> | null { return this.tail }\r\n  getNode(index: number): Readonly<LinkedListNode<T>> | null {\r\n    if (index < 0 || index >= this._size) return null;\r\n    let count = -1;\r\n    let node = this.head;\r\n    while (node) {\r\n      if (++count == index) {\r\n        break;\r\n      }\r\n      node = node.next;\r\n    }\r\n    return node;\r\n  }\r\n\r\n  /**\r\n   * @returns {LinkedListNode[]}\r\n   */\r\n  toArray(): Array<Element<T>>  {\r\n    const vals: Array<Element<T>> = [];\r\n\r\n    let currentNode = this.head;\r\n    while (currentNode) {\r\n      vals.push(currentNode.value);\r\n      if (currentNode == this.tail) break;\r\n      currentNode = currentNode.next;\r\n    }\r\n\r\n    return vals;\r\n  }\r\n\r\n}\r\n\r\n/**\r\n * Linked List's Node\r\n */\r\nexport class LinkedListNode<T> {\r\n  value: Element<T>;\r\n  next: LinkedListNode<T> | null = null;\r\n  prev: LinkedListNode<T> | null = null;\r\n\r\n  constructor(value: Element<T>, next: LinkedListNode<T> | null = null, prev: LinkedListNode<T> | null = null) {\r\n    this.value = value;\r\n    this.next = next;\r\n    this.prev = prev;\r\n  }\r\n\r\n  setValue(value: Element<T>): void {\r\n    this.value = value;\r\n  }\r\n\r\n  toString(callback: (v: any) => string): string {\r\n    return callback ? callback(this.value) : `${this.value}`;\r\n  }\r\n\r\n  toJSON(): Element<T> {\r\n    return this.value;\r\n  }\r\n\r\n}\r\n","import { Comparator } from \"../../util/Comparator\";\r\nimport { IndexOutOfBoundsException } from \"../../util/exception/IndexOutOfBoundsException\";\r\nimport { Compare } from \"../../util/function/Compare\";\r\nimport { Element } from \"../Collection\";\r\n\r\n/**\r\n * Abstract parent class for Min and Max Heaps.\r\n * In computer science, a _heap_ is a specialized tree-based data structure that satisfies the heap property described below.\r\n * In a _min_ heap, if `P` is a parent node of `C`, then the key (the value) of `P` is less than or equal to the key of `C`.\r\n * In a _max_ heap, the key of `P` is greater than or equal to the key of `C`.\r\n * @abstract\r\n */\r\nexport abstract class Heap<T> {\r\n    private _heapContainer: Element<T>[] = [];\r\n    protected _compare: Compare<T> = Comparator.compare;\r\n\r\n    constructor(compare?: Compare<T>) {\r\n        if (compare) {\r\n            this._compare = compare;\r\n        }\r\n    }\r\n    /**\r\n     * Returns the size of the heap structure\r\n     */\r\n    get length(): number { return this._heapContainer.length; }\r\n\r\n    /**\r\n     * @param {number} parentIndex\r\n     * @returns {number}\r\n     */\r\n    protected getLeftChildIndex(parentIndex: number): number {\r\n        return (2 * parentIndex) + 1;\r\n    }\r\n    /**\r\n     * @param {number} parentIndex\r\n     * @returns {number}\r\n     */\r\n    protected getRightChildIndex(parentIndex: number): number {\r\n        return (2 * parentIndex) + 2;\r\n    }\r\n    /**\r\n     * @param {number} childIndex\r\n     * @returns {number}\r\n     */\r\n    protected getParentIndex(childIndex: number): number {\r\n        return Math.floor((childIndex - 1) / 2);\r\n    }\r\n    /**\r\n     * @param {number} childIndex\r\n     * @returns {boolean}\r\n     */\r\n    protected hasParent(childIndex: number): boolean {\r\n        return this.getParentIndex(childIndex) >= 0;\r\n    }\r\n    /**\r\n     * @param {number} parentIndex\r\n     * @returns {boolean}\r\n     */\r\n    protected hasLeftChild(parentIndex: number): boolean {\r\n        return this.getLeftChildIndex(parentIndex) < this._heapContainer.length;\r\n    }\r\n    /**\r\n     * @param {number} parentIndex\r\n     * @returns {boolean}\r\n     */\r\n    protected hasRightChild(parentIndex: number): boolean {\r\n        return this.getRightChildIndex(parentIndex) < this._heapContainer.length;\r\n    }\r\n    /**\r\n     * @param {number} parentIndex\r\n     * @returns {*}\r\n     */\r\n    protected leftChild(parentIndex: number): Element<T> {\r\n        return this._heapContainer[this.getLeftChildIndex(parentIndex)];\r\n    }\r\n    /**\r\n     * @param {number} parentIndex\r\n     * @returns {*}\r\n     */\r\n    protected rightChild(parentIndex: number): Element<T> {\r\n        return this._heapContainer[this.getRightChildIndex(parentIndex)];\r\n    }\r\n    /**\r\n     * @param {number} childIndex\r\n     * @returns {*}\r\n     */\r\n    protected parent(childIndex: number): Element<T> {\r\n        return this._heapContainer[this.getParentIndex(childIndex)];\r\n    }\r\n    /**\r\n     * @param {number} indexOne\r\n     * @param {number} indexTwo\r\n     */\r\n    protected swap(indexOne: number, indexTwo: number): void {\r\n        const tmp = this._heapContainer[indexTwo];\r\n        this._heapContainer[indexTwo] = this._heapContainer[indexOne];\r\n        this._heapContainer[indexOne] = tmp;\r\n    }\r\n    /**\r\n     * Gets the heap item by its numeric index value\r\n     * @param index The ordered number of the item\r\n     * @returns The heap item, if the `index` in the bounds of the heap container, otherwise throws exception\r\n     * @throws IndexOutOfBoundsException\r\n     */\r\n    get(index: number): Element<T> {\r\n        if (index < 0 || index >= this.size()) {\r\n            throw new IndexOutOfBoundsException();\r\n        }\r\n        return this._heapContainer[index];\r\n    }\r\n    /**\r\n     * Gets the size of the current heap\r\n     * @returns\r\n     */\r\n    size(): number { return this._heapContainer.length; }\r\n    /**\r\n     * Retrieves, but does not remove the head of this heap, or returns `undefined` if this heap is empty\r\n     * @return {*}\r\n     */\r\n    peek(): Element<T> | undefined {\r\n        if (this.isEmpty()) {\r\n            return undefined;\r\n        }\r\n        return this._heapContainer[0];\r\n    }\r\n    /**\r\n     * Retrieves and removes the head of this heap, or returns `undefined` if this heap is empty\r\n     * @return {*}\r\n     */\r\n    poll(): Element<T> | undefined {\r\n        if (this.isEmpty()) {\r\n            return undefined;\r\n        }\r\n\r\n        if (this._heapContainer.length === 1) {\r\n            return this._heapContainer.pop()!;\r\n        }\r\n\r\n        const item = this._heapContainer[0];\r\n\r\n        // Move the last element from the end to the head.\r\n        this._heapContainer[0] = this._heapContainer.pop()!;\r\n        this.heapifyDown();\r\n\r\n        return item;\r\n    }\r\n    /**\r\n     * Inserts the specified element into this heap\r\n     * @param {CollectionItem} item\r\n     * @returns {boolean}\r\n     */\r\n    add(item: Element<T>): boolean {\r\n        if (item === undefined || item === null) {\r\n            return false;\r\n        }\r\n        this._heapContainer.push(item);\r\n        this.heapifyUp();\r\n        return true;\r\n    }\r\n    /**\r\n     * Removes all of the elements from this heap\r\n     */\r\n    clear(): void {\r\n        this._heapContainer = [];\r\n    }\r\n    /**\r\n     * Returns true if this heap contains the specified element\r\n     * @param item\r\n     * @returns\r\n     */\r\n    contains(item: Element<T>): boolean {\r\n        let index: number = -1;\r\n        let len = this._heapContainer.length;\r\n        while (++index < len) {\r\n            if (this._compare(this._heapContainer[index], item) == 0) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * Removes the item in the specified position in the heap\r\n     * @param indexToRemove The ordered number of the item\r\n     * @returns An old item in the removed position\r\n     * @throws IndexOutOfBoundsException\r\n     */\r\n    removeAt(indexToRemove: number): Element<T> {\r\n\r\n        if (!(indexToRemove >= 0 && indexToRemove < this.size())) {\r\n            throw new IndexOutOfBoundsException(`Index ${indexToRemove} is out of range`);\r\n        }\r\n\r\n        // If we need to remove last child in the heap then just remove it.\r\n        // There is no need to heapify the heap afterwards.\r\n        if (indexToRemove === (this.size() - 1)) {\r\n            return this._heapContainer.pop()!;\r\n        }\r\n\r\n        let oldVal = this._heapContainer[indexToRemove];\r\n        // Move last element in heap to the vacant (removed) position.\r\n        this._heapContainer[indexToRemove] = this._heapContainer.pop()!;\r\n\r\n        // Get parent.\r\n        const parentItem = this.parent(indexToRemove);\r\n\r\n        // If there is no parent or parent is in correct order with the node\r\n        // we're going to delete then heapify down. Otherwise heapify up.\r\n        if (this.hasLeftChild(indexToRemove) && (\r\n            !parentItem\r\n            || this.pairIsInCorrectOrder(parentItem, this._heapContainer[indexToRemove])\r\n        )) {\r\n            this.heapifyDown(indexToRemove);\r\n        } else {\r\n            this.heapifyUp(indexToRemove);\r\n        }\r\n\r\n        return oldVal;\r\n    }\r\n    /**\r\n     * Removes a single instance of the specified element from this heap, if it is present\r\n     * @param {*} item The item to remove\r\n     * @returns {boolean} _true_ if the `item` was removed, else _false_\r\n     */\r\n    remove(item: Element<T>): boolean {\r\n\r\n        if (this.isEmpty() || item === undefined) {\r\n            return false;\r\n        }\r\n\r\n        // Find number of items to remove.\r\n        const numberOfItemsToRemove = this.find(item).length;\r\n        if (numberOfItemsToRemove > 0) {\r\n            for (let iteration = 0; iteration < numberOfItemsToRemove; iteration++) {\r\n                // We need to find item index to remove each time after removal since\r\n                // indices are being changed after each heapify process.\r\n                const indexToRemove = this.find(item).pop()!;\r\n                this.removeAt(indexToRemove);\r\n            }\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    /**\r\n     * @param {*} item\r\n     * @param {Comparator} [comparator]\r\n     * @return {Number[]}\r\n     */\r\n    protected find(item: Element<T>): number[] {\r\n        const foundItemIndices: number[] = [];\r\n        const nLen = this._heapContainer.length;\r\n        for (let itemIndex = 0; itemIndex < nLen; itemIndex++) {\r\n            if (this._compare(item, this._heapContainer[itemIndex]) == 0) {\r\n                foundItemIndices.push(itemIndex);\r\n            }\r\n        }\r\n        return foundItemIndices;\r\n    }\r\n    /**\r\n     * @returns {boolean}\r\n     */\r\n    isEmpty(): boolean {\r\n        return this._heapContainer.length == 0;\r\n    }\r\n    /**\r\n     * Returns an array containing all of the elements in this heap\r\n     * @returns\r\n     */\r\n    toArray(): Array<Element<T>> {\r\n        return [...this._heapContainer];\r\n    }\r\n    /**\r\n     * @returns {string}\r\n     */\r\n    toString(): string {\r\n        return this._heapContainer.toString();\r\n    }\r\n    /**\r\n     *\r\n     * @returns\r\n     */\r\n    toJSON(): Element<T>[] {\r\n        return this.toArray();\r\n    }\r\n    /**\r\n     * @param {number} [customStartIndex]\r\n     */\r\n    heapifyUp(customStartIndex?: number): void {\r\n        // Take the last element (last in array or the bottom left in a tree)\r\n        // in the heap container and lift it up until it is in the correct\r\n        // order with respect to its parent element.\r\n        let currentIndex = customStartIndex || this._heapContainer.length - 1;\r\n\r\n        while (\r\n            this.hasParent(currentIndex)\r\n            && !this.pairIsInCorrectOrder(this.parent(currentIndex), this._heapContainer[currentIndex])\r\n        ) {\r\n            this.swap(currentIndex, this.getParentIndex(currentIndex));\r\n            currentIndex = this.getParentIndex(currentIndex);\r\n        }\r\n    }\r\n    /**\r\n     * @param {number} [customStartIndex]\r\n     */\r\n    heapifyDown(customStartIndex: number = 0) {\r\n        // Compare the parent element to its children and swap parent with the appropriate\r\n        // child (smallest child for MinHeap, largest child for MaxHeap).\r\n        // Do the same for next children after swap.\r\n        let currentIndex = customStartIndex;\r\n        let nextIndex = null;\r\n\r\n        while (this.hasLeftChild(currentIndex)) {\r\n            if (\r\n                this.hasRightChild(currentIndex)\r\n                && this.pairIsInCorrectOrder(this.rightChild(currentIndex), this.leftChild(currentIndex))\r\n            ) {\r\n                nextIndex = this.getRightChildIndex(currentIndex);\r\n            } else {\r\n                nextIndex = this.getLeftChildIndex(currentIndex);\r\n            }\r\n\r\n            if (this.pairIsInCorrectOrder(\r\n                this._heapContainer[currentIndex],\r\n                this._heapContainer[nextIndex],\r\n            )) {\r\n                break;\r\n            }\r\n\r\n            this.swap(currentIndex, nextIndex);\r\n            currentIndex = nextIndex;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Checks if pair of heap elements is in correct order.\r\n     * For MinHeap the first element must be always smaller or equal.\r\n     * For MaxHeap the first element must be always bigger or equal.\r\n     * @param {*} firstElement\r\n     * @param {*} secondElement\r\n     * @return {boolean}\r\n     */\r\n    abstract pairIsInCorrectOrder(firstElement: Element<T>, secondElement: Element<T>): boolean;\r\n}\r\n","import { Element } from \"../Collection\";\r\nimport { Heap } from \"./Heap\";\r\n\r\nexport class MinHeap<T> extends Heap<T> {\r\n  /**\r\n   * Checks if pair of heap elements is in correct order.\r\n   * For MinHeap the first element must be always smaller or equal.\r\n   *\r\n   * @param {*} firstElement\r\n   * @param {*} secondElement\r\n   * @returns {boolean}\r\n   */\r\n  pairIsInCorrectOrder(firstElement: Element<T>, secondElement: Element<T>): boolean {\r\n    return this._compare(firstElement, secondElement) <= 0;\r\n  }\r\n}\r\n","import { Compare } from \"../util/function/Compare\";\r\nimport { AbstractQueue } from \"./AbstractQueue\";\r\nimport { Element } from \"./Collection\";\r\nimport { MinHeap } from \"./heap/MinHeap\";\r\n\r\n/**\r\n * An unbounded priority `Queue` based on a priority heap.  This queue orders elements according to an order specified\r\n * at construction time, which is specified either according to their _natural order_, or according to a\r\n * `Compare` function type, depending on which constructor is used. A priority queue does not permit _null_ and _undefined_ elements.\r\n */\r\nexport class PriorityQueue<T> extends AbstractQueue<T> {\r\n  private _minHeap: MinHeap<T>;\r\n\r\n  constructor(compare?: Compare<T>) {\r\n    super();\r\n    this._minHeap = new MinHeap<T>(compare);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  get length(): number  { return this._minHeap.size() }\r\n  /**\r\n   * @override\r\n   */\r\n  get size(): number    { return this._minHeap.size(); }\r\n  /**\r\n   * @override\r\n   */\r\n  element(): Element<T> | undefined {\r\n    return this._minHeap.peek();\r\n  }\r\n  /**\r\n   * Inserts the specified element into this priority queue\r\n   * @param value\r\n   * @returns\r\n   */\r\n  offer(value: Element<T>): boolean {\r\n    return this._minHeap.add(value);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  peek(): Element<T> | undefined {\r\n    return this._minHeap.peek();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  poll(): Element<T> | undefined {\r\n    return this._minHeap.poll();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  removeFirst(): Element<T> | undefined {\r\n    return this._minHeap.poll();\r\n  }\r\n  /*\r\n  //++ Iterator implemetation\r\n  protected get iteratorFirstItem$(): number { return this._minHeap.size() >= 0 ? 0 : -1 }\r\n  protected iteratorValue$(index: number): Element<T> { return index >= 0 && index < this.size ? this._minHeap.get(index) : null; }\r\n  protected iteratorIterate$(fromIndex: number): number | null {\r\n      if (fromIndex >= 0 && fromIndex < (this._minHeap.size() - 1)) {\r\n          return fromIndex + 1;\r\n      }\r\n      return null;\r\n  }\r\n  //--\r\n  */\r\n\r\n  *[Symbol.iterator](): IterableIterator<Element<T>> {\r\n    const nSize = this.size;\r\n    for (let index: number = 0; index < nSize; index++) {\r\n      yield this._minHeap.get(index);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * @override\r\n   */\r\n  append(value: Element<T>): boolean {\r\n    return this._minHeap.add(value);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  clear(): void {\r\n    this._minHeap.clear();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  contains(value: Element<T>): boolean {\r\n    return this._minHeap.contains(value);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  toArray(): Element<T>[] {\r\n    return this._minHeap.toArray();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  remove(value: Element<T>): boolean {\r\n    return this._minHeap.remove(value);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  removeAt(index: number): Element<T> | undefined {\r\n    return this._minHeap.removeAt(index);\r\n  }\r\n\r\n  [Symbol.toStringTag] = \"PriorityQueue\";\r\n\r\n}\r\n","import { Strings } from \"../util/Strings\";\r\nimport { HashTable } from \"./HashTable\";\r\n/**\r\n * The `Properties` class represents a persistent set of properties. Each key and its corresponding value in the property list is a _string_.\r\n */\r\nexport class Properties extends HashTable<string, string> {\r\n\r\n  constructor(properties?: Properties) {\r\n    super();\r\n    if (properties) {\r\n      this.putAll(properties);\r\n    }\r\n  }\r\n  /**\r\n   * Searches for the property with the specified key in this property list\r\n   * @param key The key whose associated value is to be returned\r\n   * @returns The value to which the specified `key` is mapped, or _undefined_ if this map contains no mapping for the `key`\r\n   */\r\n  getProperty(key: string): string|undefined {\r\n    return this.get(key);\r\n  }\r\n  /**\r\n   * Returns an enumeration of all the keys in this property list\r\n   * @returns Array of the property names (keys)\r\n   */\r\n  propertyNames(): string[] {\r\n    return this.keys();\r\n  }\r\n  /**\r\n   * Load key/value pairs from the global `localStorage` object\r\n   * @returns _true_ if collection was changed, otherwise _false_\r\n   */\r\n  loadLocalStorage(): boolean {\r\n    const nLen = localStorage.length;\r\n    let key;\r\n    let value;\r\n    let count = 0;\r\n    for (let i=0; i < nLen; i++) {\r\n      key = localStorage.key(i);\r\n      if (key != null) {\r\n        value = localStorage.getItem(key);\r\n        if (value != null) {\r\n          this.put(key, value);\r\n          count++;\r\n        }\r\n      }\r\n    }\r\n    return count > 0;\r\n  }\r\n  /**\r\n   * Load key/value pairs from the global `sessionStorage` object\r\n   * @returns _true_ if collection was changed, otherwise _false_\r\n   */\r\n   loadSessionStorage(): boolean {\r\n    const nLen = sessionStorage.length;\r\n    let key;\r\n    let value;\r\n    let count = 0;\r\n    for (let i=0; i < nLen; i++) {\r\n      key = sessionStorage.key(i);\r\n      if (key != null) {\r\n        value = sessionStorage.getItem(key);\r\n        if (value != null) {\r\n          this.put(key, value);\r\n          count++;\r\n        }\r\n      }\r\n    }\r\n    return count > 0;\r\n  }\r\n  /**\r\n   * Writes this property list (key and element pairs) in this {@link Properties} table to the local storage\r\n   * @returns _true_ if something changes in the `localStorage` object, else _false_\r\n   */\r\n  storeToLocalStorage(): boolean {\r\n    let keys = this.keys();\r\n    for (let i=0; i < keys.length; i++) {\r\n      localStorage.setItem(keys[i], this.getProperty(keys[i])||\"\");\r\n    }\r\n    return keys.length > 0;\r\n  }\r\n  /**\r\n   * Writes this property list (key and element pairs) in this {@link Properties} table to the session storage\r\n   * @returns _true_ if something changes in the `sessionStorage` object, else _false_\r\n   */\r\n  storeToSessionStorage(): boolean {\r\n    let keys = this.keys();\r\n    for (let i=0; i < keys.length; i++) {\r\n      sessionStorage.setItem(keys[i], this.getProperty(keys[i])||\"\");\r\n    }\r\n    return keys.length > 0;\r\n  }\r\n  /**\r\n   * Load key/value pairs from the string in `ini`-format\r\n   * @param source The source string with key=value pairs\r\n   * @param separator The separator string of key=value pairs. Default is ';'.\r\n   * @returns _true_ if the dictionary was changed, else _false_\r\n   * @since 0.5.0\r\n   */\r\n  loadIniString(source: string, separator: string = \";\"): boolean {\r\n    const pairs = Strings.getTokens(source, separator);\r\n    let count = 0;\r\n    let p;\r\n    pairs.forEach(s => {\r\n      p = s.indexOf(\"=\");\r\n      if (p >= 0) {\r\n        this.put( s.substring(0, p).trim(), s.substring(p+1).trim());\r\n        count++;\r\n      }\r\n    });\r\n    return count > 0;\r\n  }\r\n\r\n}\r\n","import { Cloneable } from \"../util/interface/Cloneable\";\r\nimport { AbstractList } from \"./AbstractList\";\r\nimport { Collection, Element } from \"./Collection\";\r\nimport { LinkedList, LinkedListNode } from \"./LinkedList\";\r\nimport { List } from \"./List\";\r\n\r\n/**\r\n * The Vector class implements a growable array of objects. Like an array, it contains components that can be accessed using an integer index.\r\n */\r\nexport class Vector<T> extends AbstractList<T> implements Cloneable {\r\n  protected _list: LinkedList<T> = new LinkedList();\r\n\r\n  /*\r\n  //++ Iterator implemetation\r\n  protected get iteratorFirstItem$(): LinkedListNode<T> | null { return this._list.getHead() };\r\n  protected iteratorValue$(node: LinkedListNode<T>): T | null { return node.value; }\r\n  protected iteratorIterate$(node: LinkedListNode<T>): LinkedListNode<T> | null {\r\n    if (node && node != this._list.getTail()) {\r\n      return node.next;\r\n    }\r\n    return null;\r\n  }\r\n  //--\r\n  */\r\n\r\n  *[Symbol.iterator](): IterableIterator<Element<T>> {\r\n    yield* this._list[Symbol.iterator]();\r\n  }\r\n\r\n  constructor(capacity: number = 0) {\r\n    super();\r\n    if (capacity > 0) {\r\n      this.loadArray(Array(capacity).fill(null));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns the number of components in this vector\r\n   */\r\n  get size(): number { return this._list.size; }\r\n\r\n  clone(): Vector<T> {\r\n    const aVector = new Vector<T>(this.size);\r\n    aVector.appendAll(this);\r\n    return aVector;\r\n  }\r\n\r\n  getNode(index: number): Readonly<LinkedListNode<T> | null> {\r\n    return this._list.getNode(index);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  append(value: Element<T>): boolean {\r\n    return this._list.append(value);\r\n  }\r\n  /**\r\n   *  @override\r\n   */\r\n  appendAll<E extends T>(collection: Collection<E>): boolean {\r\n    return this._list.appendAll(collection);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  clear(): void { this._list.clear(); }\r\n  /**\r\n   * @override\r\n   */\r\n  contains(value: Element<T>): boolean {\r\n    return this._list.contains(value);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  get(index: number): Element<T> | undefined {\r\n    return this._list.get(index);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  indexOf(value: Element<T>, fromIndex?: number | undefined): number {\r\n    return this._list.indexOf(value, fromIndex);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  insert(index: number, value: Element<T>): boolean {\r\n    return this._list.insert(index, value);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  lastIndexOf(value: Element<T>, fromIndex?: number | undefined): number {\r\n    return this._list.lastIndexOf(value, fromIndex);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  remove(value: Element<T>): boolean {\r\n    return this._list.remove(value);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  removeAll<E extends T>(collection: Collection<E>): boolean {\r\n    return this._list.removeAll(collection);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  removeAt(index: number): Element<T> | undefined {\r\n    return this._list.removeAt(index);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  removeRange(fromIndex: number, toIndex: number): boolean {\r\n    return this._list.removeRange(fromIndex, toIndex);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  retainAll<E extends T>(collection: Collection<E>): boolean {\r\n    return this._list.retainAll(collection);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  set(index: number, value: Element<T>): Element<T> | undefined {\r\n    return this._list.set(index, value);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  subList(fromIndex: number, toIndex: number): List<T> {\r\n    return this._list.subList(fromIndex, toIndex);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  loadArray<E extends T>(values: Array<Element<T>>): void {\r\n    this._list.loadArray(values);\r\n  }\r\n\r\n  /**\r\n   * @override\r\n   */\r\n  toArray(): Array<Element<T>> {\r\n    return this._list.toArray();\r\n  }\r\n\r\n  [Symbol.toStringTag] = \"Vector\";\r\n\r\n}\r\n","import { Element } from \"./Collection\";\r\nimport { Vector } from \"./Vector\";\r\n\r\n/**\r\n * The LIFO stack\r\n */\r\nexport class Stack<T> extends Vector<T> {\r\n  /**\r\n   * Pushes an item onto the top of this stack\r\n   */\r\n  push(value: Element<T>): boolean {\r\n    return this.insert(0, value);\r\n  }\r\n  /**\r\n   * Removes the object at the top of this stack and returns that object as the value of this function\r\n   */\r\n  pop(): Element<T>|undefined {\r\n    let value = this._list.removeFirst();\r\n    return value;\r\n  }\r\n  /**\r\n   * Looks at the object at the top of this stack without removing it from the stack\r\n   * @returns\r\n   */\r\n  peek(): Element<T>|undefined {\r\n    return this._list.peekFirst();\r\n  }\r\n  /**\r\n   * Returns the 1-based position where an object is on this stack\r\n   * @param value The desired value\r\n   * @returns The 1-based position from the top of the stack where the object is located; the return value -1 indicates that the object is not on the stack\r\n   */\r\n  search(value: Element<T>): number {\r\n    if (this._list.isEmpty()) {\r\n      return 0;\r\n    }\r\n    const index = this._list.indexOf(value);\r\n    if (index >= 0) {\r\n      return index + 1;\r\n    }\r\n    return -1;\r\n  }\r\n\r\n}\r\n","import { Comparator } from \"../../util/Comparator\";\r\nimport { Compare } from \"../../util/function/Compare\";\r\nimport { Element } from \"../Collection\";\r\n\r\nexport class BinaryTreeNode<K = any, V = any> {\r\n  left: BinaryTreeNode<K, V> | null = null;\r\n  right: BinaryTreeNode<K, V> | null = null;\r\n  parent: BinaryTreeNode<K, V> | null = null;\r\n  key: K;\r\n  value: Element<V> = null;\r\n  readonly data: Map<any, any> = new Map();\r\n  protected nodeCompare: Compare<Readonly<BinaryTreeNode<K, V>>> = Comparator.compare;\r\n  protected keyComparator: Comparator<K>;\r\n\r\n  constructor(key: K, value?: Element<V>, comparator?: Comparator<K>) {\r\n    this.value = value === undefined ? null : value;\r\n    this.key = key;\r\n    this.keyComparator = comparator ?? Comparator.getInstance();\r\n  }\r\n\r\n  /**\r\n   * @param {BinaryTreeNode} sourceNode\r\n   * @param {BinaryTreeNode} targetNode\r\n   * @static\r\n   */\r\n  static copyNode(sourceNode: BinaryTreeNode, targetNode: BinaryTreeNode): void {\r\n    targetNode.key = sourceNode.key;\r\n    targetNode.setValue(sourceNode.value);\r\n    targetNode.setLeft(sourceNode.left);\r\n    targetNode.setRight(sourceNode.right);\r\n  }\r\n\r\n  get height(): number {\r\n    return Math.max(this.leftHeight, this.rightHeight);\r\n  }\r\n\r\n  get leftHeight(): number {\r\n    if (!this.left) return 0;\r\n    return this.left.height + 1;\r\n  }\r\n\r\n  get rightHeight(): number {\r\n    if (!this.right) return 0;\r\n    return this.right.height + 1;\r\n  }\r\n\r\n  get balanceFactor(): number {\r\n    return this.leftHeight - this.rightHeight;\r\n  }\r\n  /**\r\n   * Get current node's sibling node if exists\r\n   * @returns {BinaryTreeNode}\r\n   */\r\n  get sibling(): BinaryTreeNode<K, V> | undefined {\r\n    // Check if current node has parent.\r\n    if (!this.parent) {\r\n      return undefined;\r\n    }\r\n    // So for now we know that current node has a parent and this\r\n    // parent has at least one children. Let's find out who is the brother.\r\n    if (this.nodeCompare(this, this.parent.left) == 0) {\r\n      // Right one is a sibling (if exists)\r\n      return this.parent.right ?? undefined;\r\n    }\r\n\r\n    // Left one is a sibling (if exists)\r\n    return this.parent.left ?? undefined;\r\n  }\r\n  /**\r\n   * Get parent's sibling if it exists.\r\n   * @returns {BinaryTreeNode}\r\n   */\r\n  get uncle(): BinaryTreeNode<K, V> | undefined {\r\n    // Check if current node has parent.\r\n    if (!this.parent) {\r\n      return undefined;\r\n    }\r\n\r\n    // Check if current node has grand-parent.\r\n    if (!this.parent.parent) {\r\n      return undefined;\r\n    }\r\n\r\n    // Check if grand-parent has two children.\r\n    if (!this.parent.parent.left || !this.parent.parent.right) {\r\n      return undefined;\r\n    }\r\n\r\n    // So for now we know that current node has grand-parent and this\r\n    // grand-parent has two children. Let's find out who is the uncle.\r\n    if (this.nodeCompare(this.parent, this.parent.parent.left) == 0) {\r\n      // Right one is an uncle.\r\n      return this.parent.parent.right;\r\n    }\r\n\r\n    // Left one is an uncle.\r\n    return this.parent.parent.left;\r\n  }\r\n  /**\r\n   * Gets the child direction of the current node relative to the parent node\r\n   * @returns `0` - if the node is the _left_ child, `1` - if the node is the _right_ child, `NaN` - node hasn't the parent node\r\n   */\r\n  get direction(): number {\r\n    if (this.parent) {\r\n      if (this.parent.left == this) {\r\n        return 0;\r\n      }\r\n      return 1;\r\n    }\r\n    return NaN;\r\n  }\r\n  /**\r\n   * @param {*} value\r\n   * @returns {boolean}\r\n   */\r\n  setValue(value: Element<V>): boolean {\r\n    if (value === undefined) return false;\r\n    this.value = value;\r\n    return true;\r\n  }\r\n  /**\r\n   * Sets a node as a left child node\r\n   * @param {BinaryTreeNode} node A new node to attach\r\n   * @returns {this} `this`\r\n   */\r\n  setLeft(node: BinaryTreeNode<K, V> | null): this {\r\n    // Reset parent for left node since it is going to be detached.\r\n    if (this.left) {\r\n      this.left.parent = null;\r\n    }\r\n\r\n    // Attach new node to the left.\r\n    this.left = node;\r\n\r\n    // Make current node to be a parent for new left one.\r\n    if (this.left) {\r\n      this.left.parent = this;\r\n    }\r\n\r\n    return this;\r\n  }\r\n  /**\r\n   * Sets a node as a right child node\r\n   * @param {BinaryTreeNode} node A new node to attach\r\n   * @returns `this`\r\n   */\r\n  setRight(node: BinaryTreeNode<K, V> | null): this {\r\n    // Reset parent for right node since it is going to be detached.\r\n    if (this.right) {\r\n      this.right.parent = null;\r\n    }\r\n\r\n    // Attach new node to the right.\r\n    this.right = node;\r\n\r\n    // Make current node to be a parent for new right one.\r\n    if (this.right) {\r\n      this.right.parent = this;\r\n    }\r\n\r\n    return this;\r\n  }\r\n  /**\r\n   * Removes a specified node if it was attached to this node as a child\r\n   * @param {BinaryTreeNode} nodeToRemove A node to remove if it is a child node\r\n   * @returns {boolean} _true_ if a node is a child node and it was removed successfully, else _false_\r\n   */\r\n  removeChild(nodeToRemove: BinaryTreeNode<K, V>): boolean {\r\n    if (this.left && this.nodeCompare(this.left, nodeToRemove) == 0) {\r\n      this.left = null;\r\n      return true;\r\n    }\r\n\r\n    if (this.right && this.nodeCompare(this.right, nodeToRemove) == 0) {\r\n      this.right = null;\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n  /**\r\n   * Replaces a child node\r\n   * @param {BinaryTreeNode} nodeToReplace\r\n   * @param {BinaryTreeNode} replacementNode\r\n   * @returns {boolean}\r\n   */\r\n  replaceChild(nodeToReplace: BinaryTreeNode<K, V>, replacementNode: BinaryTreeNode<K, V>): boolean {\r\n    if (!nodeToReplace || !replacementNode) {\r\n      return false;\r\n    }\r\n\r\n    if (this.left && this.nodeCompare(this.left, nodeToReplace) == 0) {\r\n      this.left = replacementNode;\r\n      return true;\r\n    }\r\n\r\n    if (this.right && this.nodeCompare(this.right, nodeToReplace) == 0) {\r\n      this.right = replacementNode;\r\n      return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n  /**\r\n   * @param {*} key\r\n   * @returns {boolean}\r\n   */\r\n  contains(key: K): boolean {\r\n    return !!this.findNode(key);\r\n  }\r\n  /**\r\n   * Finds right most child node\r\n   * @returns {BinaryTreeNode}  The node with the maximum key value\r\n   * @readonly\r\n   */\r\n  findMax(): BinaryTreeNode<K, V> {\r\n    if (!this.right) {\r\n      return this;\r\n    }\r\n    return this.right.findMax();\r\n  }\r\n  /**\r\n   * Finds left most child node\r\n   * @returns {BinaryTreeNode} The node with the minimum key value\r\n   * @readonly\r\n   */\r\n  findMin(): BinaryTreeNode<K, V> {\r\n    if (!this.left) {\r\n      return this;\r\n    }\r\n    return this.left.findMin();\r\n  }\r\n  /**\r\n   * Finds a node by its `key` value\r\n   * @param {K} key   Key of the searching node\r\n   * @returns {BinaryTreeNode|null}   Node object or _null_ if the node was not found\r\n   */\r\n  findNode(key: K): BinaryTreeNode<K, V> | null {\r\n    // Check this\r\n    if (this.keyComparator.equal(this.key, key)) {\r\n      return this;\r\n    }\r\n\r\n    if (this.keyComparator.lessThan(key, this.key) && this.left) {\r\n      // Check left nodes\r\n      return this.left.findNode(key);\r\n    }\r\n\r\n    if (this.keyComparator.greaterThan(key, this.key) && this.right) {\r\n      // Check right nodes\r\n      return this.right.findNode(key);\r\n    }\r\n\r\n    return null;\r\n  }\r\n  /**\r\n   * Traverses tree nodes up starting from the current node\r\n   * @returns {BinaryTreeNode[]} Readonly array of nodes\r\n   * @readonly\r\n   */\r\n  *traverseUpIterator(): IterableIterator<BinaryTreeNode<K, V>> {\r\n    let parentNode = this.parent;\r\n    while (parentNode) {\r\n      yield parentNode;\r\n      parentNode = parentNode.parent;\r\n    }\r\n  }\r\n  /**\r\n   * Traverses tree nodes and generate a stream of the node objects\r\n   * @param orderType\r\n   */\r\n  *traverseDownIterator(orderType: \"PreOrder!\" | \"InOrder!\" | \"PostOrder!\" = \"InOrder!\"): IterableIterator<BinaryTreeNode<K, V>> {\r\n\r\n    if (orderType == \"PreOrder!\") {\r\n      // Add root\r\n      yield this;\r\n    }\r\n\r\n    // Add left nodes\r\n    if (this.left) {\r\n      yield* this.left.traverseDownIterator(orderType);\r\n    }\r\n\r\n    if (orderType == \"InOrder!\") {\r\n      // Add root\r\n      yield this;\r\n    }\r\n\r\n    // Add right nodes\r\n    if (this.right) {\r\n      yield* this.right.traverseDownIterator(orderType);\r\n    }\r\n\r\n    if (orderType == \"PostOrder!\") {\r\n      // Add root\r\n      yield this;\r\n    }\r\n\r\n  }\r\n  /**\r\n   * Traverses tree nodes down starting from the current node\r\n   * @returns {BinaryTreeNode[]} Readonly array of nodes\r\n   * @readonly\r\n   */\r\n  traverse(orderType: \"PreOrder!\" | \"InOrder!\" | \"PostOrder!\" = \"InOrder!\"): ReadonlyArray<BinaryTreeNode<K, V>> {\r\n    return [...this.traverseDownIterator(orderType)];\r\n  }\r\n  /**\r\n   * Iterator\r\n   */\r\n  *[Symbol.iterator](): IterableIterator<BinaryTreeNode<K,V>> {\r\n    yield* this.traverseDownIterator();\r\n  }\r\n  /**\r\n   * Adds a new node to this node\r\n   * @param node New node object\r\n   * @returns New node reference or `this` node if its `key` is identical to the key of `node`\r\n   */\r\n  addNode(node: BinaryTreeNode<K, V>): BinaryTreeNode<K, V> {\r\n    if (node) {\r\n      if (this.keyComparator.lessThan(node.key, this.key)) {\r\n        // Insert to the left.\r\n        if (this.left) {\r\n          return this.left.addNode(node);\r\n        }\r\n        this.setLeft(node);\r\n        return node;\r\n      }\r\n\r\n      if (this.keyComparator.greaterThan(node.key, this.key)) {\r\n        // Insert to the right.\r\n        if (this.right) {\r\n          return this.right.addNode(node);\r\n        }\r\n        this.setRight(node);\r\n        return node;\r\n      }\r\n\r\n      this.setValue(node.value);\r\n    }\r\n\r\n    return this;\r\n  }\r\n  /**\r\n   * Adds a new node to the current node\r\n   * @param key   Key of the node\r\n   * @param value Node's value\r\n   * @returns {BinaryTreeNode}\r\n   */\r\n  add(key: K, value: Element<V>): BinaryTreeNode<K, V> {\r\n    const newNode = new BinaryTreeNode(key, value, this.keyComparator);\r\n    return this.addNode(newNode);\r\n  }\r\n  /**\r\n   * Removes the node with the key `key` from the current node\r\n   * @param {K} key   A key of the node to remove\r\n   * @returns {BinaryTreeNode|null} Removed node or `null` if the node was not found\r\n   */\r\n  remove(key: K): Readonly<BinaryTreeNode<K, V>> | null {\r\n    const nodeToRemove = this.findNode(key) as BinaryTreeNode<K, V>;\r\n\r\n    if (!nodeToRemove) {\r\n      //throw new Error('Item not found in the tree');\r\n      return null;\r\n    }\r\n\r\n    const { parent } = nodeToRemove;\r\n\r\n    if (!nodeToRemove.left && !nodeToRemove.right) {\r\n      // Node is a leaf and thus has no children.\r\n      if (parent) {\r\n        // Node has a parent. Just remove the pointer to this node from the parent.\r\n        parent.removeChild(nodeToRemove);\r\n      } else {\r\n        // Node has no parent. Just erase current node value.\r\n        nodeToRemove.setValue(null);\r\n        nodeToRemove.setLeft(null);\r\n        nodeToRemove.setRight(null);\r\n      }\r\n    } else if (nodeToRemove.left && nodeToRemove.right) {\r\n      // Node has two children.\r\n      // Find the next biggest value (minimum value in the right branch)\r\n      // and replace current value node with that next biggest value.\r\n      const nextBiggerNode = nodeToRemove.right.findMin();\r\n      if (!(this.nodeCompare(nextBiggerNode, nodeToRemove.right) == 0)) {\r\n        this.remove(nextBiggerNode.key);\r\n        nodeToRemove.key = nextBiggerNode.key;\r\n        nodeToRemove.value = nextBiggerNode.value;\r\n      } else {\r\n        // In case if next right value is the next bigger one and it doesn't have left child\r\n        // then just replace node that is going to be deleted with the right node.\r\n        nodeToRemove.key = nodeToRemove.right.key;\r\n        nodeToRemove.value = nodeToRemove.right.value;\r\n        nodeToRemove.setRight(nodeToRemove.right.right);\r\n      }\r\n    } else {\r\n      // Node has only one child.\r\n      // Make this child to be a direct child of current node's parent.\r\n      const childNode = nodeToRemove.left || nodeToRemove.right;\r\n\r\n      if (childNode) {\r\n        if (parent) {\r\n          parent.replaceChild(nodeToRemove, childNode);\r\n          nodeToRemove.setLeft(null);\r\n          nodeToRemove.setRight(null);\r\n          nodeToRemove.setValue(null);\r\n        } else {\r\n          BinaryTreeNode.copyNode(childNode, nodeToRemove);\r\n        }\r\n      }\r\n    }\r\n\r\n    // Clear the parent of removed node.\r\n    nodeToRemove.parent = null;\r\n\r\n    return nodeToRemove;\r\n  }\r\n  /**\r\n   * Returns the comma delimited string of tree keys\r\n   * @returns {string} String\r\n   */\r\n   toString(): string {\r\n    return this.traverse().map(node => node.key).toString();\r\n  }\r\n\r\n}\r\n","import { Comparator } from \"../../util/Comparator\";\r\nimport { Element } from \"../Collection\";\r\nimport { BinaryTreeNode } from \"./BinaryTreeNode\";\r\n\r\n/**\r\n * In computer science, binary search trees (BST), sometimes called ordered or sorted binary trees,\r\n * are a particular type of container: data structures that store \"items\" (such as numbers, names etc.)\r\n * in memory. They allow fast lookup, addition and removal of items, and can be used to implement\r\n * either dynamic sets of items, or lookup tables that allow finding an item by its key\r\n * (e.g., finding the phone number of a person by name).\r\n */\r\nexport class BinarySearchTree<K, V=K> {\r\n  protected root: BinaryTreeNode<K, V> | null = null;\r\n  readonly keyComparator: Comparator<K>;\r\n\r\n  constructor(comparator?: Comparator<K>) {\r\n    this.keyComparator = comparator ?? Comparator.getInstance();\r\n  }\r\n\r\n  clear(): void {\r\n    this.forEach((value, key) => { this.remove(key) });\r\n  }\r\n\r\n  count(): number {\r\n    let nCount = 0;\r\n    this.forEach(()=>nCount++);\r\n    return nCount;\r\n  }\r\n\r\n  height(): number {\r\n    if (this.root) {\r\n      return this.root.height;\r\n    }\r\n    return 0;\r\n  }\r\n\r\n  /**\r\n   * Test the tree for empness\r\n   * @returns _true_ if the tree doesn't have child nodes, else _false_\r\n   */\r\n  isEmpty(): boolean {\r\n    return (this.root == null);\r\n  }\r\n  /**\r\n   * Inserts a new element to the tree\r\n   * @param {K} key\r\n   * @param {*} value\r\n   * @returns {BinaryTreeNode}\r\n   */\r\n  add(key: K, value: Element<V>): BinaryTreeNode<K, V> {\r\n    if (this.root) {\r\n      return this.root.add(key, value);\r\n    }\r\n    this.root = new BinaryTreeNode<K, V>(key, value, this.keyComparator);\r\n    return this.root;\r\n  }\r\n  /**\r\n   * @param {*} key\r\n   * @return {boolean}\r\n   */\r\n  contains(key: K): boolean {\r\n    if (this.root)\r\n      return this.root.contains(key);\r\n    return false;\r\n  }\r\n  /**\r\n   *\r\n   * @param key\r\n   * @returns\r\n   */\r\n  get(key: K): Element<V> | undefined {\r\n    if (this.root) {\r\n      const node = this.root.findNode(key);\r\n      if (node) {\r\n        return node.value;\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * @param {K} key\r\n   * @returns {Element|undefined}\r\n   */\r\n  remove(key: K): Element<V> | undefined {\r\n    if (this.root) {\r\n      const removedNode = this.root.remove(key);\r\n      if (removedNode) {\r\n        return removedNode.value;\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * @return {string}\r\n   */\r\n  toString(): string {\r\n    if (this.root)\r\n      return this.root.toString();\r\n    return \"\";\r\n  }\r\n  /**\r\n   * Executes a `callBack` function for each entry in this dictionary\r\n   * @param callBack  Function to call on each tree item\r\n   * @param thisArg   An object to which the `this` keyword can refer in the `callBack` function. If `thisArg` is omitted, undefined is used as the `this` value\r\n   */\r\n  forEach(callBack: (value: Element<V>, key: K, node: BinaryTreeNode<K, V>) => void, thisArg?: any): void {\r\n    if (this.root) {\r\n      this.root.traverse().forEach(node => callBack(node.value, node.key, node), thisArg);\r\n    }\r\n  }\r\n  /**\r\n   * Gets an array of the children keys for the specified `key`\r\n   * @param key\r\n   * @returns\r\n   */\r\n  childrenKeys(key: K): Array<K> {\r\n    let keys: K[] = [];\r\n    const keyNode = this.root?.findNode(key);\r\n    if (keyNode) {\r\n      keyNode.traverse(\"PreOrder!\").forEach(node => keys.push(node.key), this);\r\n    }\r\n    return keys.slice(1);\r\n  }\r\n  /**\r\n   * Gets an array of the parent keys for the specified `key`\r\n   * @param key\r\n   * @returns\r\n   */\r\n  parentKeys(key: K): Array<K> {\r\n    let keys: K[] = [];\r\n    const keyNode = this.root?.findNode(key);\r\n    if (keyNode) {\r\n      /*\r\n      let it = keyNode.traverseUpIterator();\r\n      let res: IteratorResult<BinaryTreeNode<K,V>>;\r\n      res = it.next();\r\n      while (!res.done) {\r\n        keys.push(res.value.key);\r\n        res = it.next();\r\n      }\r\n      */\r\n      for (let node of keyNode.traverseUpIterator()) {\r\n        keys.push(node.key);\r\n      }\r\n    }\r\n    return keys.reverse();\r\n  }\r\n  /** Returns the first (lowest) key currently in this map */\r\n  firstKey(): K | undefined {\r\n    if (this.root) {\r\n      return this.root.findMin().key;\r\n    }\r\n    return undefined;\r\n  }\r\n  /** Returns the last (highest) key currently in this map */\r\n  lastKey(): K | undefined {\r\n    if (this.root) {\r\n      return this.root.findMax().key;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  keySet(): Set<K> {\r\n    let set = new Set<K>();\r\n    this.forEach((value, key) => set.add(key));\r\n    return set;\r\n  }\r\n\r\n  keys(): Array<K> {\r\n    if (this.root) {\r\n      return this.root.traverse().map(node => node.key);\r\n    }\r\n    return [];\r\n  }\r\n\r\n  values(): Array<Element<V>> {\r\n    if (this.root) {\r\n      return this.root.traverse().map(node => node.value);\r\n    }\r\n    return [];\r\n  }\r\n\r\n  *[Symbol.iterator](): IterableIterator<BinaryTreeNode<K, V>> {\r\n    if (this.root) {\r\n      yield* this.root.traverseDownIterator();\r\n    }\r\n  }\r\n\r\n  print(parentNode: BinaryTreeNode<K, V> | null = null, indent: number = 0): string {\r\n    parentNode = parentNode ?? this.root;\r\n    if (parentNode) {\r\n      let height\r\n      let output = parentNode.key+\"\\r\\n\";\r\n      if (parentNode.left) {\r\n        height = parentNode.left.height;\r\n        output += \"LEFT\\r\\n\";\r\n        for (let node of parentNode.left.traverseDownIterator(\"PreOrder!\")) {\r\n          output += \"\\t\".repeat(height - node.height -1+ node.parent!.direction + node.direction) + node.key + (node.direction==1?\"R\":\"L\") + \"\\r\\n\";\r\n        }\r\n      }\r\n      if (parentNode.right) {\r\n        height = parentNode.right.height;\r\n        output += \"RIGHT\\r\\n\";\r\n        for (let node of parentNode.right.traverseDownIterator(\"PreOrder!\")) {\r\n          output += \"\\t\".repeat(height - node.height -1+ node.parent!.direction +node.direction) + node.key + (node.direction==1?\"R\":\"L\") + \"\\r\\n\";\r\n        }\r\n      }\r\n      return output;\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n}\r\n","import { BinarySearchTree } from \"./BinarySearchTree\";\r\nimport { Element } from \"../Collection\";\r\nimport { BinaryTreeNode } from \"./BinaryTreeNode\";\r\n\r\n/**\r\n * In computer science, an `AVL tree` (named after inventors Adelson-Velsky and Landis) is a\r\n * self-balancing binary search tree. It was the first such data structure to be invented.\r\n * In an AVL tree, the heights of the two child subtrees of any node differ by at most one;\r\n * if at any time they differ by more than one, rebalancing is done to restore this property.\r\n * Lookup, insertion, and deletion all take O(log n) time in both the average and worst cases,\r\n * where n is the number of nodes in the tree prior to the operation. Insertions and deletions\r\n * may require the tree to be rebalanced by one or more tree rotations.\r\n */\r\nexport class AvlTree<K, V=K> extends BinarySearchTree<K, V> {\r\n\r\n  /**\r\n   * @param {K} key\r\n   * @param {Element} value\r\n   */\r\n  add(key: K, value: Element<V>): BinaryTreeNode<K, V> {\r\n    // Do the normal BST insert.\r\n    const node = super.add(key, value);\r\n\r\n    // Let's move up to the root and check balance factors along the way.\r\n    let currentNode: BinaryTreeNode<K, V> | null = node;\r\n    while (currentNode) {\r\n      this.balance(currentNode);\r\n      currentNode = currentNode.parent;\r\n    }\r\n\r\n    return node;\r\n  }\r\n  /**\r\n   * @param {K} key\r\n   * @return {boolean}\r\n   */\r\n  remove(key: K): Element<V> | undefined {\r\n    if (this.root) {\r\n      // Do standard BST removal.\r\n      const removedElement = super.remove(key);\r\n      if (removedElement) {\r\n        // Balance the tree starting from the root node.\r\n        this.balance(this.root);\r\n      }\r\n      return removedElement;\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * @param {BinaryTreeNode} node\r\n   */\r\n  private balance(node: BinaryTreeNode<K, V>): void {\r\n    if (!node) return;\r\n    // If balance factor is not OK then try to balance the node.\r\n    if (node.balanceFactor > 1 && node.left) {\r\n      // Left rotation.\r\n      if (node.left.balanceFactor > 0) {\r\n        // Left-Left rotation\r\n        this.rotateLeftLeft(node);\r\n      } else if (node.left.balanceFactor < 0) {\r\n        // Left-Right rotation.\r\n        this.rotateLeftRight(node);\r\n      }\r\n    } else if (node.balanceFactor < -1 && node.right) {\r\n      // Right rotation.\r\n      if (node.right.balanceFactor < 0) {\r\n        // Right-Right rotation\r\n        this.rotateRightRight(node);\r\n      } else if (node.right.balanceFactor > 0) {\r\n        // Right-Left rotation.\r\n        this.rotateRightLeft(node);\r\n      }\r\n    }\r\n  }\r\n  /**\r\n   * @param {BinaryTreeNode} rootNode\r\n   */\r\n  private rotateLeftLeft(rootNode: BinaryTreeNode<K, V>): void {\r\n    // Detach left node from root node.\r\n    const leftNode = rootNode.left as BinaryTreeNode<K, V>;\r\n    rootNode.setLeft(null);\r\n\r\n    // Make left node to be a child of rootNode's parent.\r\n    if (rootNode.parent) {\r\n      rootNode.parent.setRight(leftNode);\r\n    } else if (rootNode === this.root) {\r\n      // If root node is root then make left node to be a new root.\r\n      this.root = leftNode;\r\n    }\r\n\r\n    // If left node has a right child then detach it and\r\n    // attach it as a left child for rootNode.\r\n    const leftRightNode = leftNode.right;\r\n\r\n    // Attach rootNode to the right of leftNode.\r\n    leftNode.setRight(rootNode);\r\n\r\n    if (leftRightNode) {\r\n      rootNode.setLeft(leftRightNode);\r\n    }\r\n\r\n  }\r\n  /**\r\n   * @param {BinaryTreeNode} rootNode\r\n   */\r\n  private rotateLeftRight(rootNode: BinaryTreeNode<K, V>): void {\r\n    // Detach left node from rootNode since it is going to be replaced.\r\n    const leftNode = rootNode.left as BinaryTreeNode<K, V>;\r\n    rootNode.setLeft(null);\r\n\r\n    // Detach right node from leftNode.\r\n    const leftRightNode = leftNode.right;\r\n    leftNode.setRight(null);\r\n\r\n    if (leftRightNode && leftRightNode.left) {\r\n      // Preserve leftRightNode's left subtree.\r\n      leftNode.setRight(leftRightNode.left);\r\n      // Attach leftNode as left node for leftRight node.\r\n      leftRightNode.setLeft(null);\r\n    }\r\n\r\n    // Attach leftRightNode to the rootNode.\r\n    rootNode.setLeft(leftRightNode);\r\n\r\n    // Do left-left rotation.\r\n    this.rotateLeftLeft(rootNode);\r\n  }\r\n  /**\r\n   * @param {BinaryTreeNode} rootNode\r\n   */\r\n  private rotateRightLeft(rootNode: BinaryTreeNode<K, V>): void {\r\n    // Detach right node from rootNode since it is going to be replaced.\r\n    const rightNode = rootNode.right as BinaryTreeNode<K, V>;\r\n    rootNode.setRight(null);\r\n\r\n    // Detach left node from rightNode.\r\n    const rightLeftNode = rightNode.left;\r\n    rightNode.setLeft(null);\r\n\r\n    if (rightLeftNode) {\r\n      if (rightLeftNode.right) {\r\n        rightNode.setLeft(rightLeftNode.right);\r\n        //rightLeftNode.setRight(null);\r\n    }\r\n      // Attach rightNode as right node for rightLeft node.\r\n      rightLeftNode.setRight(rightNode);\r\n    }\r\n\r\n    // Attach rightLeftNode to the rootNode.\r\n    rootNode.setRight(rightLeftNode);\r\n\r\n    // Attach rightNode as right node for rightLeft node.\r\n    //rightLeftNode!.setRight(rightNode);\r\n\r\n    // Do right-right rotation.\r\n    this.rotateRightRight(rootNode);\r\n  }\r\n  /**\r\n   * @param {BinaryTreeNode} rootNode\r\n   */\r\n  private rotateRightRight(rootNode: BinaryTreeNode<K, V>): void {\r\n    // Detach right node from root node.\r\n    const rightNode = rootNode.right as BinaryTreeNode<K, V>;\r\n    rootNode.setRight(null);\r\n\r\n    // Make right node to be a child of rootNode's parent.\r\n    if (rootNode.parent) {\r\n      rootNode.parent.setLeft(rightNode);\r\n    } else if (rootNode === this.root) {\r\n      // If root node is root then make right node to be a new root.\r\n      this.root = rightNode;\r\n    }\r\n\r\n    // If right node has a left child then detach it and\r\n    // attach it as a right child for rootNode.\r\n    const rightLeftNode = rightNode.left;\r\n\r\n    // Attach rootNode to the left of rightNode.\r\n    rightNode.setLeft(rootNode);\r\n\r\n    if (rightLeftNode) {\r\n      rootNode.setRight(rightLeftNode);\r\n    }\r\n\r\n  }\r\n}\r\n","import { Observable, Subject } from \"rxjs\";\r\nimport { Dictionary } from \"./Dictionary\";\r\nimport { AvlTree } from \"./tree/AvlTree\";\r\nimport { Element } from \"./Collection\";\r\nimport { BinarySearchTree } from \"./tree/BinarySearchTree\";\r\nimport { Comparator } from \"../util/Comparator\";\r\nimport { AbstractMap } from \"./AbstractMap\";\r\nimport { NavigableMap } from \"./NavigableMap\";\r\nimport { Cloneable } from \"../util/interface/Cloneable\";\r\nimport { IllegalArgumentException } from \"../util/exception/IllegalArgumentException\";\r\n\r\n/**\r\n * An AVL-tree based `NavigableMap` implementation. The map is sorted according to the natural ordering of its keys, or by a `Comparator` provided at map creation time, depending on which constructor is used.\r\n */\r\nexport class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable {\r\n  private readonly _tree: BinarySearchTree<K,V>;\r\n  private _size: number = 0;\r\n  public readonly contentChanged$ = new Subject<void>();\r\n\r\n  constructor(comparator?: Comparator<K>) {\r\n    super();\r\n    this._tree = new AvlTree<K,V>(comparator);\r\n  }\r\n\r\n  get comparator(): Comparator<K> {return this._tree.keyComparator;}\r\n\r\n  override get contentChanged(): Observable<void> { return this.contentChanged$.asObservable() }\r\n\r\n  override get size(): number { return this._size; }\r\n\r\n  override clear(): void {\r\n    if (!this.isEmpty()) {\r\n      this._tree.clear();\r\n      this._size = this._tree.count();\r\n      this.contentChanged$.next();\r\n    }\r\n  }\r\n\r\n  clone(): TreeMap<K,V> {\r\n    const tMap = new TreeMap<K,V>(this._tree.keyComparator);\r\n    tMap.putAll(this);\r\n    return tMap;\r\n  }\r\n  /** Returns the first (lowest) key currently in this map */\r\n  firstKey(): K | undefined {\r\n    return this._tree.firstKey();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  firstEntry(): [K,V] | undefined {\r\n    const key = this.firstKey();\r\n    if (key !== undefined) {\r\n      return [key, this.get(key)!];\r\n    }\r\n    return undefined;\r\n  }\r\n  /** Returns the last (highest) key currently in this map */\r\n  lastKey(): K | undefined {\r\n    return this._tree.lastKey();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  lastEntry(): [K,V] | undefined {\r\n    const key = this.lastKey();\r\n    if (key !== undefined) {\r\n      return [key, this.get(key)!];\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  pollLastEntry(): [K,V] | undefined {\r\n    const entry = this.lastEntry();\r\n    if (entry) {\r\n      this.delete(entry[0]);\r\n    }\r\n    return entry;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  pollFirstEntry(): [K,V] | undefined {\r\n    const entry = this.firstEntry();\r\n    if (entry) {\r\n      this.delete(entry[0]);\r\n    }\r\n    return entry;\r\n  }\r\n  /** Returns the maximal level of the tree */\r\n  height(): number {\r\n    return this._tree.height();\r\n  }\r\n  /**\r\n   * Gets the keys of this tree as a `Set` collection\r\n   * @returns Set\r\n   */\r\n  override keySet(): Set<K> {\r\n    return this._tree.keySet();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  ceilingKey(key: K): K | undefined {\r\n    let findKey:  K | undefined = undefined;\r\n    for (let currKey of this.keys()) {\r\n      if (this._tree.keyComparator.greaterThanOrEqual(currKey, key)) {\r\n        findKey = currKey;\r\n        break;\r\n      }\r\n    }\r\n    return findKey;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  floorKey(key: K): K | undefined {\r\n    let findKey:  K | undefined = undefined;\r\n    for(let currKey of this.keys()) {\r\n      if (this._tree.keyComparator.lessThanOrEqual(currKey, key)) {\r\n        findKey = currKey;\r\n      } else {\r\n        break;\r\n      }\r\n    }\r\n    return findKey;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  lowerKey(key: K): K | undefined {\r\n    let findKey:  K | undefined = undefined;\r\n    for (let currKey of this.keys()) {\r\n      if (this._tree.keyComparator.lessThan(currKey, key)) {\r\n        findKey = currKey;\r\n      } else {\r\n        break;\r\n      }\r\n    }\r\n    return findKey;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  higherKey(key: K): K | undefined {\r\n    let findKey:  K | undefined = undefined;\r\n    for (let currKey of this.keys()) {\r\n      if (this._tree.keyComparator.greaterThan(currKey, key)) {\r\n        findKey = currKey;\r\n        break;\r\n      }\r\n    }\r\n    return findKey;\r\n  }\r\n  /**\r\n   * Gets array of the keys\r\n   * @returns Array\r\n   */\r\n  override *keys(): IterableIterator<K> {\r\n    for (let key of this._tree.keys()) {\r\n      yield key;\r\n    }\r\n  }\r\n  /**\r\n   * Gets array of the values\r\n   * @returns Array\r\n   */\r\n  override *values(): IterableIterator<V> {\r\n    for (let val of this._tree.values()) {\r\n      yield val!;\r\n    }\r\n  }\r\n  /**\r\n   * Gets array of the tree entries\r\n   * @returns Array\r\n   */\r\n  override *entries(): IterableIterator<[K, V]> {\r\n    yield* this[Symbol.iterator]();\r\n  }\r\n  /**\r\n   * Returns _true_ if this tree contains a mapping for the specified `key`\r\n   * @see {@link has}\r\n   */\r\n  containsKey(key: K): boolean {\r\n    return this._tree.contains(key);\r\n  }\r\n  /** Returns _true_ if this tree contains a value, _false_ otherwise */\r\n  containsValue(value: V): boolean {\r\n    return [...this.values()].indexOf(value) >= 0;\r\n  }\r\n  /** Returns the value to which the `key` is mapped in this tree */\r\n  override get(key: K): V | undefined {\r\n    return this._tree.get(key)!;\r\n  }\r\n  /** Returns the value to which the `key` is mapped in this tree, or `defaultValue` if this tree contains no mapping for the key */\r\n  getOrDefault(key: K, defaultValue: Element<V>): Element<V> {\r\n    return this._tree.get(key) ?? defaultValue;\r\n  }\r\n  /**\r\n   * Tests the tree for the `key` existence\r\n   * @param key A key value to test\r\n   * @returns _true_ if this tree contains a mapping for the specified `key`, _false_ otherwise\r\n   * @see {@link containsKey}\r\n   */\r\n  override has(key: K): boolean {\r\n    return this._tree.contains(key);\r\n  }\r\n  /**\r\n   * Maps the specified `key` to the specified `value` in this tree and returns previous value of the mapping\r\n   * @param key A key value of the mapping\r\n   * @param value New value to assign for the `key`\r\n   * @returns Old value of the `key` or _undefined_ if it was not set before\r\n   * @throws IllegalArgumentException\r\n   */\r\n  put(key: K, value: V): V | undefined {\r\n    if (key === undefined || value === undefined) {\r\n      throw new IllegalArgumentException(\"Undefined key/value is not allowed in 'put()' operation\");\r\n    }\r\n    const oldElem = this._tree.get(key)!;\r\n    this._tree.add(key, value);\r\n    if (oldElem === undefined) {\r\n      this._size++;\r\n    }\r\n    this.contentChanged$.next();\r\n    return oldElem;\r\n  }\r\n  /** Copies all of the mappings from the specified map to this tree */\r\n  putAll<Key extends K, Value extends V>(map: Dictionary<Key, Value> | Map<Key, Value>): void {\r\n    const aKeys = map.keys() as K[];\r\n    aKeys.forEach(key => this.put(key, this.get(key)!));\r\n  }\r\n  /** Removes the `key` (and its corresponding value) from this tree */\r\n  remove(key: K): Element<V> | undefined {\r\n    const elem = this._tree.remove(key);\r\n    if ( elem !== undefined ) {\r\n      this._size--;\r\n      this.contentChanged$.next();\r\n    }\r\n    return elem;\r\n  }\r\n  /**\r\n   * @override\r\n   * @throws IllegalArgumentException\r\n   */\r\n  override set(key: K, value: V): this {\r\n    this.put(key, value);\r\n    return this;\r\n  }\r\n  /**\r\n   * Performs the specified action for each element in the tree.\r\n   * @param callBack  Function to call on each tree item\r\n   * @param thisArg   An object to which the `this` keyword can refer in the `callBack` function. If `thisArg` is omitted, undefined is used as the `this` value\r\n   */\r\n  override forEach(callBack: (value: V, key: K, map: Map<K, V>) => void, thisArg?: any): void {\r\n    this._tree.forEach((value, key) => callBack(value as V, key, this), thisArg);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  [Symbol.toStringTag]: string = \"TreeMap\";\r\n  /**\r\n   * @override\r\n   */\r\n  override *[Symbol.iterator](): IterableIterator<[K,V]> {\r\n    for (let node of this._tree) {\r\n      yield [node.key, node.value!];\r\n    }\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  toString(): string {\r\n    return this._tree.toString();\r\n  }\r\n\r\n  print(): string {\r\n    return this._tree.print();\r\n  }\r\n\r\n}\r\n","import { Comparator } from \"../util/Comparator\";\r\nimport { Cloneable } from \"../util/interface/Cloneable\";\r\nimport { AbstractSet } from \"./AbstractSet\";\r\nimport { Collection } from \"./Collection\";\r\nimport { NavigableSet } from \"./NavigableSet\";\r\nimport { TreeMap } from \"./TreeMap\";\r\n\r\n/**\r\n * A `NavigableSet` implementation based on a `TreeMap`. The elements are ordered using their natural ordering, or\r\n * by a `Comparator` provided at set creation time, depending on which constructor is used.\r\n */\r\nexport class TreeSet<K> extends AbstractSet<K> implements NavigableSet<K>, Cloneable {\r\n  private tMap: TreeMap<K, null>;\r\n\r\n  constructor(comparator?: Comparator<K>) {\r\n    super();\r\n    this.tMap = new TreeMap<K, null>(comparator);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  get size(): number {\r\n    return this.tMap.size;\r\n  }\r\n  /**\r\n   * Gets a key comparator\r\n   */\r\n  get comparator(): Comparator<K> {\r\n    return this.tMap.comparator;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  append(key: K): boolean {\r\n    return (this.tMap.put(key, null) !== undefined);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  appendAll<E extends K>(collection: Collection<E>): boolean {\r\n    let nCount = 0;\r\n    if (collection) {\r\n      for (let el of collection) {\r\n        if (el != null && this.append(el)) {\r\n          nCount++;\r\n        }\r\n      }\r\n    }\r\n    return nCount > 0;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  clone(): TreeSet<K> {\r\n    const ts = new TreeSet<K>(this.tMap.comparator);\r\n    ts.appendAll(this);\r\n    return ts;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  clear(): void {\r\n    this.tMap.clear();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  contains(key: K): boolean {\r\n    return this.tMap.has(key);\r\n  }\r\n  /**\r\n   * Deletes the key/value pair from the collection. This method is the member of the JavaScript's `Set` interface.\r\n   * @param key The key value to remove mapping\r\n   * @returns _true_ if the mapping for the  `key` was deleted, _false_ otherwise\r\n   * @see {@link remove}\r\n   */\r\n  delete(key: K): boolean {\r\n    return this.tMap.delete(key);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  *entries(): IterableIterator<[K, K]> {\r\n    for (let key of this) {\r\n      yield [key, key];\r\n    }\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  forEach(callbackfn: (value: K, value2: K, set: Set<K>) => void, thisArg?: any): void {\r\n    for (let key of this) {\r\n      callbackfn(key, key, this);\r\n    }\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  has(key: K): boolean {\r\n    return this.tMap.has(key);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  *keys(): IterableIterator<K> {\r\n    yield* this.tMap.keys();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  *values(): IterableIterator<K> {\r\n    yield* this.tMap.keys();\r\n  }\r\n  /**\r\n   * @override\r\n   * @see {@link delete}\r\n   */\r\n  remove(key: K): boolean {\r\n    return this.tMap.remove(key) !== undefined;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  [Symbol.toStringTag]: string = \"TreeSet\";\r\n  /**\r\n   * @override\r\n   */\r\n  *[Symbol.iterator](): IterableIterator<K> {\r\n    for (let key of this.tMap.keys()) {\r\n      yield key;\r\n    }\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  first(): K | undefined {\r\n    return this.tMap.firstKey();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  last(): K | undefined {\r\n    return this.tMap.lastKey();\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  ceiling(key: K): K | undefined {\r\n    return this.tMap.ceilingKey(key);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  floor(key: K): K | undefined {\r\n    return this.tMap.floorKey(key);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  higher(key: K): K | undefined {\r\n    return this.tMap.higherKey(key);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  lower(key: K): K | undefined {\r\n    return this.tMap.lowerKey(key);\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  pollFirst(): K | undefined {\r\n    const key = this.first();\r\n    if (key !== undefined) {\r\n      this.delete(key);\r\n    }\r\n    return key;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  pollLast(): K | undefined {\r\n    const key = this.last();\r\n    if (key !== undefined) {\r\n      this.delete(key);\r\n    }\r\n    return key;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  toArray(): K[] {\r\n    return [...this.keys()];\r\n  }\r\n\r\n}\r\n","import { HttpClient, HttpErrorResponse } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { Observable, ObservableInput, throwError } from \"rxjs\";\r\nimport { catchError, retry } from \"rxjs/operators\";\r\n\r\nexport type HttpRetryOptions = {count: number, delay: number};\r\n\r\n/**\r\n * Wrapper class for Angular's HttpClient class\r\n */\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class HttpService {\r\n\r\n  constructor(private _http: HttpClient) {}\r\n\r\n  /** Internal `HttpClient` object */\r\n  get httpClient(): HttpClient {\r\n    return this._http;\r\n  }\r\n\r\n  /*\r\n  private handleError(error: HttpErrorResponse) {\r\n    let errorMessage = 'Unknown error!';\r\n    if (error.error instanceof ErrorEvent) {\r\n      // Client-side errors\r\n      errorMessage = `Error: ${error.error.message}`;\r\n    } else {\r\n      // Server-side errors\r\n      errorMessage = `Error status: ${error.status} (${error.statusText})\\n\\nDescription:\\n${error.message}`;\r\n    }\r\n    // TODO: Make a message service!\r\n    window.alert(errorMessage);\r\n\r\n    return throwError(error);\r\n  }\r\n  */\r\n\r\n  /** Default error handler function */\r\n  handleError: (err: HttpErrorResponse, caught: Observable<any>)=>ObservableInput<any> = (err, caught)=>{return throwError(()=>{return err});}\r\n\r\n  get<T=any>(url: string, options?: Object, retries?: HttpRetryOptions): Observable<T> {\r\n    return this._http.get<T>(url, options).pipe(\r\n      retry({delay:retries?.delay || 1000, count: retries?.count || 0}),\r\n      catchError(this.handleError)\r\n    );\r\n  }\r\n\r\n  delete<T=any>(url: string, options?: Object, retries?: HttpRetryOptions): Observable<T> {\r\n    return this._http.delete<T>(url, options).pipe(\r\n      retry({delay:retries?.delay || 1000, count: retries?.count || 0}),\r\n      catchError(this.handleError)\r\n    );\r\n  }\r\n\r\n  post<T=any>(url: string, body: any, options?: Object, retries?: HttpRetryOptions): Observable<T> {\r\n    return this._http.post<T>(url, body, options).pipe(\r\n      retry({delay:retries?.delay || 1000, count: retries?.count || 0}),\r\n      catchError(this.handleError)\r\n    );\r\n  }\r\n\r\n  put<T=any>(url: string, body: any, options?: Object, retries?: HttpRetryOptions): Observable<T> {\r\n    return this._http.put<T>(url, body, options).pipe(\r\n      retry({delay:retries?.delay || 1000, count: retries?.count || 0}),\r\n      catchError(this.handleError)\r\n    );\r\n  }\r\n\r\n  /*\r\n  private request(method: string, url: string, options?: any) {\r\n    console.log('options', options);\r\n    return new Observable((observer: any) => {\r\n      const requestBeginTime = Date.now();\r\n      this._http.request(new HttpRequest(method, url, options)).subscribe(\r\n        (response) => {\r\n          //this.logTime(requestBeginTime, `${url}`, method),\r\n          observer.next(response);\r\n          observer.complete();\r\n        },\r\n        (error) => {\r\n          switch (error.status) {\r\n            case 403:\r\n              observer.complete();\r\n              break;\r\n            default:\r\n              observer.error(error);\r\n              break;\r\n          }\r\n        }\r\n      );\r\n    });\r\n  }\r\n  */\r\n}\r\n","/**\n *  An abstract base class for formatting locale-sensitive information such as dates, messages, and numbers.\n */\nexport abstract class Format {\n  /**\n   * Formats a `value` to produce a string\n   * @param value The value to format\n   * @returns Formatted string\n   */\n  format(value: any): string {\n    return String(value);\n  }\n\n}\n","import { Format } from \"./Format\";\n\nexport abstract class DateFormat extends Format {\n  public static DEFAULT     = \"[default]\";\n  public static SHORTDATE   = \"[shortdate]\";\n  public static MEDIUMDATE  = \"[mediumdate]\";\n  public static LONGDATE    = \"[longdate]\";\n  public static FULLDATE    = \"[fulldate]\";\n  public static ISODATE     = \"[isodate]\";\n  public static TIME        = \"[time]\";\n  public static SHORTTIME   = \"[shorttime]\";\n  public static MEDIUMTIME  = \"[mediumtime]\";\n  public static LONGTIME    = \"[longtime]\";\n  public static FULLTIME    = \"[fulltime]\";\n  public static ISOTIME     = \"[isotime]\";\n  public static SHORTTIMEAGO= \"[shorttimeago]\";\n  public static LONGTIMEAGO = \"[longtimeago]\";\n  public static DATETIME    = \"[datetime]\";\n  public static ISODATETIME = \"[isodatetime]\";\n  public static ISODATETIMETZ  = \"[isodatetimetz]\";\n  public static ISODATETIMEUTC = \"[isodatetimeutc]\";\n\n}\n","import { ArrayList } from \"../collections/ArrayList\";\r\nimport { List } from \"../collections/List\";\r\nimport { Comparator } from \"./Comparator\";\r\nimport { Compare } from \"./function/Compare\";\r\nimport { Objects } from \"./Objects\";\r\nimport {from, Observable} from \"rxjs\";\r\n\r\nexport type TypedArray = Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array;\r\n\r\n/**\r\n * This class consists exclusively of static methods that operate on or return arrays\r\n */\r\nexport class Arrays {\r\n  /**\r\n   * Returns a list object initialized with specified values\r\n   * @param args Initial values by which the list will be backed\r\n   * @returns A new list object that contains the specifies values\r\n   * @static\r\n   */\r\n  static asList<T>(...args: T[]): List<T> {\r\n    return new ArrayList<T>(args);\r\n  }\r\n  /**\r\n   * Searches the specified array for the specified value using the binary search algorithm. The array must be sorted\r\n   * prior to making this call. If it is not sorted, the results are undefined. If the array contains multiple elements with\r\n   * the specified value, there is no guarantee which one will be found.\r\n   * @param sortedArray  The array to be searched\r\n   * @param key The value to be searched for\r\n   * @param compareFn Optional compare function\r\n   * @returns Index of the search key, if it is contained in the array; otherwise -1\r\n   * @static\r\n   * @since 0.5.0\r\n   */\r\n  static binarySearch<T>(sortedArray: Array<T>, key: T, compareFn?: Compare<T>): number {\r\n    // Let's create comparator from the compareFn function.\r\n    // Comparator object will give us common comparison methods like equal() and lessThen().\r\n    const comparator = compareFn ? new Comparator(compareFn) : Comparator.getInstance();\r\n\r\n    // These two indices will contain current array (sub-array) boundaries.\r\n    let startIndex = 0;\r\n    let endIndex = sortedArray.length - 1;\r\n    let middleIndex: number;\r\n\r\n    // Let's continue to split array until boundaries are collapsed\r\n    // and there is nothing to split anymore.\r\n    while (startIndex <= endIndex) {\r\n      // Let's calculate the index of the middle element.\r\n      middleIndex = startIndex + Math.floor((endIndex - startIndex) / 2);\r\n\r\n      // If we've found the element just return its position.\r\n      if (comparator.equal(sortedArray[middleIndex], key)) {\r\n        return middleIndex;\r\n      }\r\n\r\n      // Decide which half to choose for seeking next: left or right one.\r\n      if (comparator.lessThan(sortedArray[middleIndex], key)) {\r\n        // Go to the right half of the array.\r\n        startIndex = middleIndex + 1;\r\n      } else {\r\n        // Go to the left half of the array.\r\n        endIndex = middleIndex - 1;\r\n      }\r\n    }\r\n    // Return -1 if we have not found anything.\r\n    return -1;\r\n  }\r\n  /**\r\n   * Returns `true` if the two specified arrays are deeply equal to one another.\r\n   * @param a1  one array to be tested for equality\r\n   * @param a2  the other array to be tested for equality\r\n   * @returns `true` if the two arrays are equal\r\n   * @since 0.5.0\r\n   */\r\n  static deepEquals<T=any>(a1: Array<T>|null, a2: Array<T>|null): boolean {\r\n    return Objects.deepEqual(a1, a2);\r\n  }\r\n  /**\r\n   * Returns _true_ if the two specified arrays of chars are _equal_ to one another. Two arrays are considered equal if both arrays contain the same\r\n   * number of elements, and all corresponding pairs of elements in the two arrays are equal. In other words, two arrays are equal if they contain\r\n   * the same elements in the same order. Also, two array references are considered equal if both are _null_.\r\n   * @param arr1 one array to be tested for equality\r\n   * @param arr2 the other array to be tested for equality\r\n   * @returns _true_ if the two arrays are equal\r\n   * @since 0.5.0\r\n   */\r\n  static equals<T=any>(arr1: Array<T>, arr2: Array<T>): boolean {\r\n    let eq: boolean = ((arr1 == null && arr2 == null) || arr1 === arr2);\r\n    if (!eq) {\r\n      eq = Objects.deepEqual(arr1, arr2);\r\n    }\r\n    return eq;\r\n  }\r\n  /**\r\n   * Pads the source array with a given `filler` value (possibly repeated) so that the array's size reaches a given length `len`.\r\n   * Filling is performed from the end of the source array.\r\n   * @param arr Source array\r\n   * @param len Required minimum size of the source array\r\n   * @param filler The value to be filled in\r\n   * @returns Source array with modified length\r\n   * @static\r\n   * @since 0.5.0\r\n   * @see {@link padStart}\r\n   */\r\n  static padEnd<T>(arr: T[], len: number, filler: T): Array<T> {\r\n    if (len > arr.length) {\r\n      const oldLen = arr.length;\r\n      arr.length = len;\r\n      return arr.fill(filler, oldLen);\r\n    }\r\n    return arr;\r\n  }\r\n  /**\r\n   * Pads the source array with a given `filler` value (possibly repeated) so that the array's size reaches a given length `len`.\r\n   * Filling is performed from the start of the source array.\r\n   * @param arr Source array\r\n   * @param len Required minimum size of the source array\r\n   * @param filler The value to be filled in\r\n   * @returns Source array with modified length\r\n   * @static\r\n   * @since 0.5.0\r\n   * @see {@link padEnd}\r\n   */\r\n  static padStart<T>(arr: T[], len: number, filler: T): Array<T> {\r\n    if (len > arr.length) {\r\n      const vals = Array(len - arr.length).fill(filler);\r\n      arr.unshift(...vals);\r\n    }\r\n    return arr;\r\n  }\r\n  /**\r\n   * Copies the specified array, truncating or padding with null characters (if necessary), so the copy has the specified length\r\n   * @param arr The array to be copied\r\n   * @param newLength  The length of the copy to be returned\r\n   * @returns a copy of the original array, truncated or padded with null characters to obtain the specified length\r\n   * @static\r\n   * @since 0.5.0\r\n   */\r\n  static copyOf<T>(arr: T[], newLength?: number): Array<T | null> {\r\n    if (newLength != null && newLength > 0) {\r\n      if (newLength <= arr.length) {\r\n        return arr.slice(0, newLength);\r\n      }\r\n      const copyArr = arr.slice();\r\n      return Arrays.padEnd(copyArr, newLength, null);\r\n    }\r\n    return arr.slice();\r\n  }\r\n  /**\r\n   * Returns a sequential `Observable` object with the specified array as its source\r\n   * @param arr The array, assumed to be unmodified during use\r\n   * @returns An Observable for the array `arr`\r\n   * @since 0.5.0\r\n   */\r\n  static stream<T>(arr: T[]): Observable<T> {\r\n    return from(arr);\r\n  }\r\n}\r\n","import { Cloneable } from \"../interface/Cloneable\";\n\n/**\n * Object that represents a _Unicode_ locale identifier and is inherited from the JavaScript's `Intl.Locale` class\n */\nexport class Locale extends Intl.Locale implements Cloneable {\n  private static localeMap: Map<string, Locale> | undefined;\n\n  public static get ENGLISH(): Locale {return Locale.of(\"en\")};\n  public static get FRANCE(): Locale {return Locale.of(\"fr-FR\")};\n  public static get FRENCH(): Locale {return Locale.of(\"fr\")};\n  public static get CHINESE(): Locale {return Locale.of(\"zh\")};\n  public static get SIMPLIFIED_CHINESE(): Locale {return Locale.of(\"zh-CN\")};\n  public static get TRADITIONAL_CHINESE(): Locale {return Locale.of(\"zh-TW\")};\n  public static get CHINA(): Locale {return Locale.SIMPLIFIED_CHINESE};\n  public static get TAIWAN(): Locale {return Locale.TRADITIONAL_CHINESE};\n  public static get GERMAN(): Locale {return Locale.of(\"de\")};\n  public static get GERMANY(): Locale {return Locale.of(\"de-DE\")};\n  public static get ITALIAN(): Locale {return Locale.of(\"it\")};\n  public static get ITALY(): Locale {return Locale.of(\"it-IT\")};\n  public static get JAPANESE(): Locale {return Locale.of(\"ja\")};\n  public static get JAPAN(): Locale {return Locale.of(\"ja-JP\")};\n  public static get KOREAN(): Locale {return Locale.of(\"ko\")};\n  public static get KOREA(): Locale {return Locale.of(\"ko-KR\")};\n  public static get CANADA(): Locale {return Locale.of(\"en-CA\")};\n  public static get CANADA_FRENCH(): Locale {return Locale.of(\"fr-CA\")};\n  public static get RPC(): Locale {return Locale.SIMPLIFIED_CHINESE};\n  public static get RU(): Locale {return Locale.of(\"ru-RU\")};\n  public static get UK(): Locale {return Locale.of(\"en-GB\")};\n  public static get US(): Locale {return Locale.of(\"en-US\")};\n  /** The key for the private use extension ('...-x-...') */\n  public static readonly PRIVATE_USE_EXTENSION = 'x';\n  /** The key for Unicode locale extension ('...-u-...') */\n  public static readonly UNICODE_LOCALE_EXTENSION = 'u';\n\n  private _fullName: string;\n\n  /**\n   * @constructor\n   * @param tag\n   * @param options\n   * @throws Error if incorrect locale information provided\n   */\n  constructor(tag?: string, options?: Intl.LocaleOptions ) {\n    super(tag ?? Locale.getDefaultLanguage(), options);\n    this._fullName = this.maximize().baseName!;\n  }\n  /**\n   * Gets the browser navigator's language tag\n   * @returns Language tag\n   * @static\n   */\n  static getDefaultLanguage(): string {\n    return (navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language);\n  }\n  /**\n   * Factory method that returns singleton Locale object\n   * @param tag A language tag\n   * @param options An object with some or all of options of the locale\n   * @returns Locale object\n   * @throws Error if incorrect locale information provided\n   * @static\n   */\n  static of(tag: string, options?: Intl.LocaleOptions): Locale {\n    return Locale.getLocale(tag, options);\n  }\n  /**\n   * Locale's factory method\n   * @param tag A language tag\n   * @param options An object with some or all of options of the locale\n   * @returns Locale object\n   * @throws Error if incorrect locale information provided\n   * @private\n   * @static\n   */\n  private static getLocale(tag: string, options?: Intl.LocaleOptions): Locale {\n    if (Locale.localeMap === undefined) {\n      Locale.localeMap = new Map();\n    }\n    const tempLocale = new Locale(tag, options);\n    const name = tempLocale.maximize().toString();\n    let locale: Locale | undefined = Locale.localeMap.get(name);\n    if (locale === undefined) {\n      locale = tempLocale;\n      Locale.localeMap.set(name, locale);\n    }\n    return locale;\n  }\n  /**\n   * Gets the character that is used as the decimal point designation\n   * @returns Delimiter character\n   */\n  get decimalsDelimiter(): string {\n    const s = (new Intl.NumberFormat(this.toString())).format(0.1);\n    return s.charAt(1);\n  }\n  /**\n   * Gets the character that is used as the thousand groups delimiter\n   * @returns Delimiter character\n   */\n  get thousandsDelimiter(): string {\n    const s = (new Intl.NumberFormat(this.toString())).format(1234) ;\n    const c = s.charAt(1);\n    return (c=='2' ? \"\" : c);\n  }\n  /**\n   * Gets an expanded locale name in the `language-script-region` format\n   * @returns Expanded locale name\n   * @since 0.5.0\n   */\n  get fullName(): string {\n    return this._fullName;\n  }\n  /**\n   * Makes a clone of the current locale object\n   * @returns A cloned locale object\n   * @since 0.5.0\n   */\n  clone(): Locale {\n    return new Locale( this.fullName );\n  }\n  /**\n   * Gets a string representing a Locale's extension information\n   * @returns Locale's extension string\n   * @since 0.5.0\n   */\n  getExtension(): string {\n    const str = this.maximize().toString();\n    const uPos = str.indexOf(`-${Locale.UNICODE_LOCALE_EXTENSION}-`);\n    if (uPos >= 0) {\n      const xPos = str.indexOf(`-${Locale.PRIVATE_USE_EXTENSION}-`, uPos + 1);\n      if (xPos > 0) {\n        return str.substring(uPos + 3, xPos);\n      }\n      return str.substring(uPos + 3);\n    }\n    return \"\";\n  }\n  /**\n   * Gets a string representing a Locale's private use extension information\n   * @returns Locale's private use extension string\n   * @since 0.5.0\n   */\n  getPrivateExtension(): string {\n    const str = this.maximize().toString();\n    const xPos = str.indexOf(`-${Locale.PRIVATE_USE_EXTENSION}-`);\n    if (xPos >= 0) {\n      const uPos = str.indexOf(`-${Locale.UNICODE_LOCALE_EXTENSION}-`, xPos + 1);\n      if (uPos > 0) {\n        return str.substring(xPos + 3, uPos);\n      }\n      return str.substring(xPos + 3);\n    }\n    return \"\";\n  }\n  /**\n   * Returns _true_ if this Locale has any extensions.\n   * @returns _true_ if this Locale has any extensions\n   * @since 0.5.0\n   */\n  hasExtensions(): boolean {\n    const str = this.maximize().toString();\n    return str.indexOf(`-${Locale.PRIVATE_USE_EXTENSION}-`) >= 0 || str.indexOf(`-${Locale.UNICODE_LOCALE_EXTENSION}-`) >= 0;\n  }\n\n}\n\n","\r\n/**\r\n * This class consists exclusively of the static methods that operate on or return date/time values\r\n */\r\nexport class Dates {\r\n  private static msPerDay: number = 8.64e7;\r\n  /**\r\n   * Gets the current date and time\r\n   * @returns Current date/time value\r\n   */\r\n  static getDate(): Date {\r\n    return new Date();\r\n  }\r\n  /**\r\n   * Calculates the number of days in the month\r\n   * @param date Base date\r\n   * @returns Count of days\r\n   */\r\n  static daysInMonth(date: Date): number {\r\n    if (date == null)\r\n      return NaN;\r\n    const yy = date.getFullYear();\r\n    const mm = date.getMonth();\r\n    return Dates.toDays(Date.UTC(yy, mm + 1, 1) - Date.UTC(yy, mm, 1));\r\n  }\r\n  /**\r\n   * Calculates the number of days in the `quarter`\r\n   * @param year The number of the year.\r\n   * @param quarter The number of the quarter.\r\n   * @returns Count of days\r\n   */\r\n  static daysInQuarter(year?: number, quarter?: number): number {\r\n    const today = Dates.getDate();\r\n    year = year ?? today.getFullYear();\r\n    quarter = quarter ?? Dates.getQuarter(today)!;\r\n    return Dates.toDays(Date.UTC(year, (quarter + 1) * 3, 1) - Date.UTC(year, (quarter * 3), 1));\r\n  }\r\n  /**\r\n   * Calculates the number of days in the `year`\r\n   * @param year The number of the year. Default is the current year.\r\n   * @returns Count of days\r\n   */\r\n  static daysInYear(year?: number): number {\r\n    year = year ?? new Date(Date.now()).getFullYear();\r\n    return (Dates.toDays(Date.UTC(year + 1, 0, 1) - Date.UTC(year, 0, 1)));\r\n  }\r\n  /**\r\n   * Calculates the date of the first week's day in the month\r\n   * @param day Day of the week in range 0 Sunday to 6 Saturday\r\n   * @param month Month\r\n   * @param year Year\r\n   * @returns Date\r\n   */\r\n  static firstDayInMonth(day: 0 | 1 | 2 | 3 | 4 | 5 | 6, month: number, year: number): Date {\r\n    // day is in range 0 Sunday to 6 Saturday\r\n    const today = Dates.getDate();\r\n    year = year ?? today.getFullYear();\r\n    month = month ?? today.getMonth();\r\n    return new Date(year, month, 1 +\r\n      (day - new Date(year, month, 1).getDay() + 7) % 7);\r\n  }\r\n  /**\r\n   * Calculates the date of n-th week's day in the month\r\n   * @param n Ordered number\r\n   * @param day Day of week in range 0 Sunday to 6 Saturday\r\n   * @param month Month\r\n   * @param year Year\r\n   * @returns Date\r\n   */\r\n  static nthDayInMonth(n: number, day: 0 | 1 | 2 | 3 | 4 | 5 | 6, month: number, year: number): Date {\r\n    // day is in range 0 Sunday to 6 Saturday\r\n    const today = Dates.getDate();\r\n    year = year ?? today.getFullYear();\r\n    month = month ?? today.getMonth();\r\n    const d = Dates.firstDayInMonth(day, month, year);\r\n    return new Date(d.getFullYear(), d.getMonth(), d.getDate() + (n - 1) * 7);\r\n  }\r\n  /**\r\n   * Calculates the number of days to fixed `day` number\r\n   * @param day The day number in the current month\r\n   * @returns Number of days\r\n   */\r\n  static daysFromFixedDay(day: number): number {\r\n    const today = Dates.getDate();\r\n    const y = today.getFullYear();\r\n    const m = today.getMonth();\r\n    const d2 = today.getDate();\r\n    const dInPrevMonth = Dates.daysInMonth(new Date(y, m - 1, 1));\r\n    return (Dates.toDays(Date.UTC(y, m, d2) - Date.UTC(y, m, day)) + dInPrevMonth) % dInPrevMonth;\r\n  }\r\n  /**\r\n   * Determines the number of days one date occurs after another.\r\n   * @param date1 A date value that is the start date of the interval being measured\r\n   * @param date2 A date value that is the end date of the interval\r\n   * @returns {number} Returns a number of days date2 occurs after date1. If date2 occurs before date1, DaysAfter returns a negative number. If any argument's value is null, DaysAfter returns null.\r\n   */\r\n  static daysAfter(date1: Date, date2: Date): number | null {\r\n    if (date1 == null || date2 == null)\r\n      return null;\r\n    //var diff = new Date(+date2).setHours(12) - new Date(+date1).setHours(12);\r\n    //return Math.round(diff / Dates.msPerDay);\r\n    return Dates.toDays(Dates.toUTC(date2) - Dates.toUTC(date1));\r\n  }\r\n  /**\r\n   * Determines the number of seconds one date occurs after another.\r\n   * @param date1 A date value that is the start date of the interval being measured\r\n   * @param date2 A date value that is the end date of the interval\r\n   * @returns {number} Returns a number of seconds date2 occurs after date1. If date2 occurs before date1, DaysAfter returns a negative number. If any argument's value is null, DaysAfter returns null.\r\n   */\r\n  static secondsAfter(date1: Date, date2: Date): number | null {\r\n    if (date1 == null || date2 == null)\r\n      return null;\r\n    // var diff = new Date(+date2).getTime() - new Date(+date1).getTime();\r\n    const diff = Dates.toUTC(date2) - Dates.toUTC(date1);\r\n    return Math.round(diff / 1000);\r\n  }\r\n  /**\r\n   * Obtains the date that occurs a specified number of days after or before another date\r\n   * @param date A value of type date\r\n   * @param days An integer indicating a number of days\r\n   * @returns The date that occurs `days` after date if `days` is greater than 0. Returns the date that occurs `days` before date if `days` is less than 0. If any argument's value is null, {@link relativeDate} returns null.\r\n   * @see {@link relativeTime}\r\n   */\r\n  static relativeDate(date: Date, days: number): Date | null {\r\n    if (date == null || days == null)\r\n      return null;\r\n    let dt = new Date(date);\r\n    dt.setDate(dt.getDate() + days);\r\n    return dt;\r\n  }\r\n  /**\r\n   * Obtains a time that occurs a specified number of seconds after or before another time within a 24-hour period\r\n   * @param date A value of type time\r\n   * @param secs A long number of seconds\r\n   * @returns The time that occurs `secs` seconds after time if `secs` is greater than 0. Returns the time that occurs `secs` seconds before time if `secs` is less than 0. The maximum return value is 23:59:59. If any argument's value is null, {@link relativeTime} returns null\r\n   * @see {@link relativeDate}\r\n   */\r\n  static relativeTime(date: Date, secs: number): Date | null {\r\n    if (date == null || secs == null)\r\n      return null;\r\n    let dt = new Date(date);\r\n    dt.setSeconds(dt.getSeconds() + secs);\r\n    return dt;\r\n  }\r\n  /**\r\n   * Converts milliseconds to number of days\r\n   * @param ms Number of milliseconds\r\n   * @returns Number/interval of days\r\n   */\r\n  static toDays(ms: number): number {\r\n    return ms / Dates.msPerDay;\r\n  }\r\n  /**\r\n   * Converts date to UTC\r\n   * @param date The base date\r\n   * @returns The number of milliseconds, or `NaN` if the `date` is _null_.\r\n   */\r\n  static toUTC(date: Date | null): number {\r\n    if (date == null)\r\n      return NaN;\r\n    return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\r\n  }\r\n  /**\r\n   * Converts Date to localized ISO-string\r\n   */\r\n  static toString(date: Date | null, showTime: boolean = true): string | null {\r\n    if (date == null)\r\n      return null;\r\n\r\n    return [date.getFullYear(), ('0' + (date.getMonth() + 1)).slice(-2), ('0' + date.getDate()).slice(-2)].join('-') +\r\n      ((showTime) ?\r\n        \"T\" + [('0' + date.getHours()).slice(-2), ('0' + date.getMinutes()).slice(-2), (\"0\" + date.getSeconds()).slice(-2)].join(\":\") +\r\n        \".\" + date.getMilliseconds()\r\n        : \"\");\r\n    /*\r\n    let isoDate = date.toISOString();\r\n    if (!showTime) {\r\n      const pT = isoDate.indexOf(\"T\");\r\n      if (pT >= 0)\r\n        isoDate = isoDate.substring(0, pT);\r\n    }\r\n\r\n    return isoDate;\r\n    */\r\n  }\r\n  /**\r\n   * Gets the first date of the month\r\n   * @param date The base date. Default is the current date.\r\n   * @returns The calculated date, or _null_ if the `date` is _null_\r\n   * @see {@link dateEOM}\r\n   */\r\n  static dateBOM(date?: Date | null): Date | null {\r\n    if (date === null) return null;\r\n    date = date ?? Dates.getDate();\r\n    return new Date(date.getFullYear(), date.getMonth(), 1);\r\n  }\r\n  /**\r\n   * Gets the last date of the month\r\n   * @param date The base date. Default is the current date.\r\n   * @returns The calculated date, or _null_ if the `date` is _null_.\r\n   * @see {@link dateBOM}\r\n   */\r\n  static dateEOM(date?: Date | null): Date | null {\r\n    if (date === null) return null;\r\n    date = date ?? Dates.getDate();\r\n    return new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n  }\r\n  /**\r\n   * Gets the first date of the year\r\n   * @param date The base date. Default is the current date.\r\n   * @returns The calculated date, or _null_ if the `date` is _null_.\r\n   * @see {@link dateEOY}\r\n   */\r\n  static dateBOY(date?: Date | null): Date | null {\r\n    if (date === null) return null;\r\n    date = date ?? Dates.getDate();\r\n    return new Date(date.getFullYear(), 0, 1);\r\n  }\r\n  /**\r\n   * Gets the last date of the year\r\n   * @param date The base date. Default is the current date.\r\n   * @returns The calculated date, or _null_ if the `date` is _null_.\r\n   * @see {@link dateBOY}\r\n   */\r\n  static dateEOY(date?: Date | null): Date | null {\r\n    if (date === null) return null;\r\n    date = date ?? Dates.getDate();\r\n    return new Date(date.getFullYear(), 11, 31);\r\n  }\r\n  /**\r\n   * Gets the first date of quarter\r\n   * @param date The base date. Default is the current date.\r\n   * @returns The calculated date, or _null_ if the `date` is _null_.\r\n   * @see {@link dateEOQ}\r\n   */\r\n  static dateBOQ(date?: Date | null): Date | null  {\r\n    if (date === null) return null;\r\n    date = date ?? Dates.getDate();\r\n    let quart: number = Dates.getQuarter(date)!;\r\n    let month: number = quart * 3;\r\n    return new Date(date.getFullYear(), month, 1);\r\n  }\r\n  /**\r\n   * Gets the last date of the quarter\r\n   * @param date The base date. Default is the current date.\r\n   * @returns The calculated date, or _null_ if the `date` is _null_.\r\n   * @see {@link dateBOQ}\r\n   */\r\n  static dateEOQ(date?: Date | null): Date | null {\r\n    if (date === null) return null;\r\n    date = date ?? Dates.getDate();\r\n    let quart: number = Dates.getQuarter(date)!;\r\n    let month: number = quart * 3;\r\n    return new Date(date.getFullYear(), month + 3, 0);\r\n  }\r\n  /**\r\n   * Gets the quarter number to which the `date` belongs\r\n   * @param date The base date. Default is the current date.\r\n   * @returns The quarter number starting from 0, or _null_ if the `date` is _null_.\r\n   */\r\n  static getQuarter(date?: Date | null): number | null {\r\n    if (date === null) return null;\r\n    date = date ?? Dates.getDate();\r\n    let quart: number;\r\n    switch (date.getMonth()) {\r\n      case 0:\r\n      case 1:\r\n      case 2:\r\n        quart = 0; break;\r\n      case 3:\r\n      case 4:\r\n      case 5:\r\n        quart = 1; break;\r\n      case 6:\r\n      case 7:\r\n      case 8:\r\n        quart = 2; break;\r\n      case 9:\r\n      case 10:\r\n      case 11:\r\n        quart = 3; break;\r\n      default:\r\n        quart = NaN; break;\r\n    }\r\n    return quart;\r\n  }\r\n  /**\r\n   * Return whether the provided year is a leap year\r\n   * @param year Year number to check\r\n   * @returns _true_ if `year` is a leap year, else _false_.\r\n   */\r\n  static isLeapYear(year: number): boolean {\r\n    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\r\n  }\r\n  /**\r\n   * Returns the result of checking whether the number of hours in the specified date is less than 12\r\n   * @param date Date to check. Default is the current date\r\n   * @returns _true_ if hours of `date` is less than 12, else _false_.\r\n   */\r\n  static isAM(date?: Date | null): boolean | null {\r\n    if (date === null) return null;\r\n    date = date ?? Dates.getDate();\r\n    return date.getHours() < 12;\r\n  }\r\n  /**\r\n   * Returns the result of checking whether the number of hours in the specified date is greater than or equal to 12\r\n   * @param date Date to check. Default is the current date\r\n   * @returns _true_ if hours of `date` is greater than or equal to 12, else _false_.\r\n   */\r\n  static isPM(date?: Date | null): boolean | null {\r\n    if (date === null) return null;\r\n    date = date ?? Dates.getDate();\r\n    return date.getHours() >= 12;\r\n  }\r\n  /**\r\n   * Get ISO-8601 numeric representation of the day of the week\r\n   * 1 (for Monday) through 7 (for Sunday)\r\n   * @param  date Source date. Default is current date.\r\n   * @returns The day of the week starting from 1, or _null_ if the `date` is _null_.\r\n   * @since 0.5.0\r\n   */\r\n  static getDayOfWeek(date?: Date | null): number | null {\r\n    if (date === null) return null;\r\n    date = date ?? Dates.getDate();\r\n    let dow = date.getDay();\r\n    if (dow === 0) {\r\n      dow = 7;\r\n    }\r\n    return dow;\r\n  };\r\n  /**\r\n   * Gets a day number in year\r\n   * @param date Source date. Default is the current date\r\n   * @returns Day number in year, or _null_ if the `date` is _null_.\r\n   * @since 0.5.0\r\n   */\r\n  static getDayOfYear(date?: Date): number | null {\r\n    if (date === null) return null;\r\n    date = date ?? Dates.getDate();\r\n    return Math.floor( Dates.daysAfter(Dates.dateBOY(date)!, date)! + 1 );\r\n  }\r\n  /**\r\n   * Gets a week number of month\r\n   * @param date Source date. Default is the current date\r\n   * @returns Week number of month, or _null_ if the `date` is _null_.\r\n   * @since 0.5.0\r\n   */\r\n  static getWeekOfMonth(date?: Date | null): number | null {\r\n    if (date === null) return null;\r\n    const d = date ?? Dates.getDate();\r\n    const firstDay = new Date(d.getFullYear(), d.getMonth(), 1).getDay();\r\n    return Math.ceil((d.getDate() + (firstDay - 1)) / 7);\r\n  }\r\n  /**\r\n   * Get the ISO 8601 week number of year\r\n   * Based on comments from\r\n   * http://techblog.procurios.nl/k/n618/news/view/33796/14863/Calculate-ISO-8601-week-and-year-in-javascript.html\r\n   *\r\n   * @param  date Source date. Default is the current date\r\n   * @returns ISO 8601 week number of year, or _null_ if the `date` is _null_.\r\n   * @since 0.5.0\r\n   */\r\n  static getWeek(date?: Date | null): number | null {\r\n    if (date === null) return null;\r\n    date = date ?? Dates.getDate();\r\n    // Remove time components of date\r\n    const targetThursday = new Date(\r\n      date.getFullYear(),\r\n      date.getMonth(),\r\n      date.getDate()\r\n    );\r\n\r\n    // Change date to Thursday same week\r\n    targetThursday.setDate(\r\n      targetThursday.getDate() - ((targetThursday.getDay() + 6) % 7) + 3\r\n    );\r\n\r\n    // Take January 4th as it is always in week 1 (see ISO 8601)\r\n    const firstThursday = new Date(targetThursday.getFullYear(), 0, 4);\r\n\r\n    // Change date to Thursday same week\r\n    firstThursday.setDate(\r\n      firstThursday.getDate() - ((firstThursday.getDay() + 6) % 7) + 3\r\n    );\r\n\r\n    // Check if daylight-saving-time-switch occurred and correct for it\r\n    const ds = targetThursday.getTimezoneOffset() - firstThursday.getTimezoneOffset();\r\n    targetThursday.setHours(targetThursday.getHours() - ds);\r\n\r\n    // Number of weeks between target Thursday and first Thursday\r\n    const weekDiff = (<any>targetThursday - <any>firstThursday) / (86400000 * 7);\r\n    return 1 + Math.floor(weekDiff);\r\n  };\r\n\r\n}\r\n","const reTime: RegExp = /[\\sTt][0-9]{1,2}:[0-9]{1,2}:{0,1}[0-9]{0,2}/; //[Z]{0,1}$/;\r\n\r\nexport class Time {\r\n    private _ms:number = 0;\r\n\r\n    constructor(date?: Date|Time|string|number) {\r\n        if (date) {\r\n            if (typeof(date) === \"string\") {\r\n                //this._ms = (new Date(date)).getTime();\r\n                const tmPos = date.search(reTime);\r\n                if (tmPos >= 0) {\r\n                    let timeStr = date.substring(tmPos + 1);\r\n                    // hh:mm:ss.fff\r\n                    let arr:string[] = timeStr.split(\":\");\r\n                    this._ms = +arr[0] * 3600 * 1000;\r\n                    if (arr.length > 1) {\r\n                        this._ms += +arr[1] * 60 * 1000;\r\n                    }\r\n                    if (arr.length == 3) {\r\n                        this._ms += +arr[2] * 1000;\r\n                    }\r\n                    this._ms += (new Date()).getTimezoneOffset() * 60 * 1000;\r\n                }\r\n            }\r\n            else\r\n                this.add(date);\r\n        }\r\n    }\r\n\r\n    private add (value: Time|Date|number): Time {\r\n        var d:Date = new Date(this._ms);\r\n        d.setTime( d.getTime() + value.valueOf());\r\n        this._ms = (d.getHours()*3600 + d.getMinutes()*60 + d.getSeconds()) * 1000 +\r\n                    d.getMilliseconds();\r\n        return this;\r\n    }\r\n\r\n    valueOf(): number {\r\n        return this._ms;\r\n    }\r\n\r\n    toString(): string {\r\n        const dt:Date = new Date(this._ms);\r\n        return [(\"0\"+dt.getHours()).slice(-2), (\"0\"+dt.getMinutes()).slice(-2), (\"0\"+dt.getSeconds()).slice(-2)].join(\":\");\r\n    }\r\n\r\n    toJSON(): string {\r\n        return '\"'+this.toString()+'\"';\r\n    }\r\n\r\n    toDate(): Date {\r\n      return new Date(this._ms);\r\n    }\r\n\r\n}\r\n","import { Objects } from \"../../Objects\";\nimport { Arrays } from \"../../Arrays\";\nimport { Strings } from \"../../Strings\";\nimport { Locale } from \"../Locale\";\nimport { Dates } from \"../../Dates\";\nimport { Time } from \"../../type/Time\";\nimport { DateFormat } from \"./DateFormat\";\n\nexport type DateTimeFormatOptions = Intl.DateTimeFormatOptions & { locales?: string | Locale };\n\nconst NUMBER_OF_PATTERNS = 2;\n\n// Regexes and supporting functions are cached through closure\n//const tokenRe = /d{1,4}|D{3,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\\1?|W{1,2}|[LlopSZN]|\"[^\"]*\"|'[^']*'/g;\nconst tokenRe = /d{1,2}|E{1,4}|M{1,4}|T{2,4}|yy(?:yy)?|([Hhms])\\1?|w{1,2}|W{1,2}|S{1,3}|X{1,3}|[uaAzZD]|\"[^\"]*\"|'[^']*'/g;\nconst timezoneRe = /\\b(?:[A-Z]{1,3}[A-Z][TC])(?:[-+]\\d{4})?|((?:Australian )?(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time)\\b/g;\nconst timezoneClipRe = /[^-+\\dA-Z]/g;\n\n// Internationalization strings\nexport const i18n = {\n  \"de\": {\n    shortDayNames: [\"So.\", \"Mo.\", \"Di.\", \"Mi.\", \"Do.\", \"Fr.\", \"Sa.\"],\n    longDayNames: [\"Sonntag\", \"Montag\", \"Dienstag\", \"Mittwoch\", \"Donnerstag\", \"Freitag\", \"Samstag\"],\n    shortMonthNames: [\"Jan.\", \"Feb.\", \"März\", \"Apr.\", \"Mai\", \"Juni\", \"Juli\", \"Aug.\", \"Sept.\", \"Okt.\", \"Nov.\", \"Dez.\"],\n    longMonthNames: [\"Januar\", \"Februar\", \"März\", \"April\", \"Mai\", \"Juni\", \"Juli\", \"August\", \"September\", \"Oktober\", \"November\", \"Dezember\"],\n  },\n  \"en\": {\n    shortDayNames: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n    longDayNames: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n    shortMonthNames: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n    longMonthNames: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  },\n  \"fr\": {\n    shortDayNames: [\"dim.\", \"lun.\", \"mar.\", \"mer.\", \"jeu.\", \"ven.\", \"sam.\"],\n    longDayNames: [\"dimanche\", \"lundi\", \"mardi\", \"mercredi\", \"jeudi\", \"vendredi\", \"samedi\"],\n    shortMonthNames: [\"janv.\", \"févr.\", \"mars\", \"avr.\", \"mai\", \"juin\", \"juil.\", \"août\", \"sept.\", \"oct.\", \"nov.\", \"déc.\"],\n    longMonthNames: [\"janvier\", \"février\", \"mars\", \"avril\", \"mai\", \"juin\", \"juillet\", \"août\", \"septembre\", \"octobre\", \"novembre\", \"décembre\"],\n  },\n  \"ru\": {\n    shortDayNames: [\"вс\", \"пн\", \"вт\", \"ср\", \"чт\", \"пт\", \"сб\"],\n    longDayNames: [\"воскресенье\", \"понедельник\", \"вторник\", \"среда\", \"четверг\", \"пятница\", \"суббота\"],\n    shortMonthNames: [\"янв.\", \"февр.\", \"март\", \"апр.\", \"май\", \"июнь\", \"июль\", \"авг.\", \"сент.\", \"окт.\", \"нояб.\", \"дек.\"],\n    longMonthNames: [\"январь\", \"февраль\", \"март\", \"апрель\", \"май\", \"июнь\", \"июль\", \"август\", \"сентябрь\", \"октябрь\", \"ноябрь\", \"декабрь\"],\n  },\n};\n\nconst pad: Function = (val: any, len = 2) => String(val).padStart(len, '0');\n\nconst parts: Function = (date: any, utc: boolean): any => {\n  const _ = () => (utc ? \"getUTC\" : \"get\");\n  return {\n    d: () => date[_() + \"Date\"](),\n    D: () => date[_() + \"Day\"](),\n    M: () => date[_() + \"Month\"](),\n    y: () => date[_() + \"FullYear\"](),\n    H: () => date[_() + \"Hours\"](),\n    m: () => date[_() + \"Minutes\"](),\n    s: () => date[_() + \"Seconds\"](),\n    S: () => date[_() + \"Milliseconds\"](),\n    o: () => (utc ? 0 : date.getTimezoneOffset()),\n    w: () => Dates.getWeek(date),\n    W: () => Dates.getWeekOfMonth(date),\n    u: () => Dates.getDayOfWeek(date),\n    V: () => Dates.getDayOfYear(date),\n  };\n};\n\nconst DIVISIONS: { amount: number, name: Intl.RelativeTimeFormatUnit }[] = [\n  { amount: 60, name: 'seconds' },\n  { amount: 60, name: 'minutes' },\n  { amount: 24, name: 'hours' },\n  { amount: 7, name: 'days' },\n  { amount: 4.34524, name: 'weeks' },\n  { amount: 12, name: 'months' },\n  { amount: Number.POSITIVE_INFINITY, name: 'years' }\n];\n\n/*\n * This class is based on: https://github.com/felixge/node-dateformat and\n * Steven Levithan's excellent [dateFormat()](https://blog.stevenlevithan.com/archives/javascript-date-format) function\n * (c) 2007-2009 Steven Levithan stevenlevithan.com, MIT license\n */\n/**\n * Java compatible class for date/time formatting subclasses which formats and parses dates and/or time in a language-independent manner.\n * Date and time formats are specified by date and time _pattern strings_. Within date and time pattern strings, unquoted letters from 'A' to 'Z' and from 'a' to 'z' are interpreted as pattern letters representing the components of a date or time string.\n *\n * Date and time display formats can have two sections. The first is required and contains the format for dates and times; the second is optional and specifies how to represent nulls:\n * `date-time-format;null-format`\n *\n * Characters with special meaning in _date_ section of display format:\n * |Character| Meaning                                     | Example |\n * |---      | ---                                         | ---     |\n * | `d`     | Day number with no leading zero             | 9       |\n * | `dd`    | Day number with leading zero if appropriate | 09      |\n * | `D`     | Day number in year                          | 189     |\n * | `E`     | Day name in week, gives starting 1 letter   | M       |\n * | `EEE`   | Day name in week, gives starting 2 letters  | Mo      |\n * | `EEE`   | Day name in week, gives starting 3 letters  | Mon     |\n * | `EEEE`  | Day name in week                            | Monday  |\n * | `M`     | Month number with no leading zero           | 6       |\n * | `MM`    | Month number with leading zero if appropriate| 06     |\n * | `MMM`   | Month name abbreviation                     | Jun     |\n * | `MMMM`  | Month name                                  | June    |\n * | `yy`    | Two-digit year                              | 97      |\n * | `yyyy`  | Four-digit year                             | 1997    |\n * | `u`     | ISO 8601 day number of the week (1 = Monday, ..., 7 = Sunday)   | 1      |\n * | `w`     | ISO 8601 week number of the year            | 8       |\n * | `ww`    | ISO 8601 week number of the year, leading zero for single-digit | 08     |\n * | `W`     | ISO 8601 week number of the month           | 3       |\n * | `WW`    | ISO 8601 week number of the month, leading zero for single-digit| 03     |\n *\n * Colons, slashes, and spaces display as entered in the mask.\n *\n * You can use the following keywords as date display formats when you want to determine a localized appropriate format to use:\n * - [Default]\n * - [ShortDate]\n * - [MediumDate]\n * - [LongDate]\n * - [FullDate]\n * - [IsoDate]\n *\n * Note that [Date] is not a valid display format.\n *\n * Character meaning in _time_ section of the display format:\n *\n * |Character| Meaning                                          | Example |\n * |---      | ---                                              | ---     |\n * |`h`      | Hours; no leading zero for single-digit hours (12-hour clock)    | 1       |\n * |`hh`     | Hours; leading zero for single-digit hours (12-hour clock)       | 01      |\n * |`H`      | Hours; no leading zero for single-digit hours (24-hour clock)    | 3       |\n * |`HH`     | Hours; leading zero for single-digit hours (24-hour clock)       | 03      |\n * |`m`      | Minute with no leading zero (must follow h or hh)| 5   |\n * |`mm`     | Minute with leading zero if appropriate (must follow h or hh)| 05  |\n * |`s`      | Second with no leading zero (must follow m or mm)| 7   |\n * |`ss`     | Second with leading zero (must follow m or mm)   | 07  |\n * |`S`      | Milliseconds; gives 1 digits                     | 3   |\n * |`SS`     | Milliseconds; gives 2 digits                     | 25  |\n * |`SSS`    | Milliseconds; gives 3 digits                     | 248 |\n * |`a`      | Am/pm marker in lower case                       | am  |\n * |`A`      | Am/pm marker in upper case                       | PM  |\n * |`z`      | Timezone abbreviation, e.g. GMT+0700, UTC        | GMT-05:00 |\n * |`Z`      | RFC 822 timezone offset, e.g. -0500 or +0230     | +0400 |\n * |`X`      | ISO 8601 timezone offset, e.g. Z, +04            | +04   |\n * |`XX`     | ISO 8601 timezone offset, e.g. Z, -0500          | +0400 |\n * |`XXX`    | ISO 8601 timezone offset, e.g. Z, +02:30         | +04:00|\n * |`TT`     | Time between the date and the current date (narrow style)| -8 h        |\n * |`TTT`    | Time between the date and the current date (short style) | in 10 hr.   |\n * |`TTTT`   | Time between the date and the current date (long style)  | in 10 hours |\n *\n * Colons, slashes, and spaces display as entered in the mask.\n *\n * You can use the following keywords as a time display formats when you want to determine a localized appropriate format to use:\n * - [Time]\n * - [ShortTime]\n * - [LongTime]\n * - [IsoTime]\n * - [LongTimeAgo]\n * - [ShortTimeAgo]\n *\n * For display both date and time values apply the following keywords:\n * - [DateTime]\n * - [IsoDateTime]\n * - [IsoDateTimeTZ]\n * - [IsoDateTimeUTC]\n * @example\n * console.log( new DateTimeFormat(\"EEEE, MMMM dd, yyyy, h:mm:ss a\").format(Date.now()) ); // Saturday, June 09, 2007, 5:46:21 PM\n * @since 0.5.0\n * @license MIT, (c) 2022 ALEXANDER STRELKOV, alv.strelkov@gmail.com\n */\nexport class SimpleDateFormat extends DateFormat {\n\n  private _dtFormatter: Intl.DateTimeFormat | undefined;\n  private _rtFormatter: Array<Intl.RelativeTimeFormat | undefined> = [undefined, undefined, undefined];\n  private _options: DateTimeFormatOptions;\n  private _locale: Locale;\n  private _pattern: string;\n  private _subpatterns: string[] = [];\n  private _utcgmt: undefined | \"UTC\" | \"GMT\" = undefined;\n\n  constructor(pattern: string = \"[Default]\", options?: DateTimeFormatOptions) {\n    super();\n\n    const locales = options?.locales instanceof Locale ? options.locales.fullName : options?.locales;\n    this._locale = new Locale(locales, options);\n    this._options = { ...options };\n\n    this._pattern = Strings.trimAll(pattern) || \"[Default]\";\n    this._subpatterns = Arrays.padEnd(this._pattern.split(\";\"), NUMBER_OF_PATTERNS, \"\");\n    this._subpatterns.map((val, idx, arr) => arr[idx] = val.trim());\n\n    if (this._subpatterns[0].charAt(0) == \"[\") {\n      let keyword = this._subpatterns[0].toLowerCase();\n      keyword = Strings.replaceAll(keyword, \" \", \"\")!;\n      switch (keyword) {\n        //case \"[date]\":\n        case DateFormat.SHORTDATE:\n          this._dtFormatter = new Intl.DateTimeFormat(locales, { dateStyle: \"short\" });\n          break;\n        case DateFormat.MEDIUMDATE:\n          this._dtFormatter = new Intl.DateTimeFormat(locales, { dateStyle: \"medium\" });\n          break;\n        case DateFormat.LONGDATE:\n          this._dtFormatter = new Intl.DateTimeFormat(locales, { dateStyle: \"long\" });\n          break;\n        case DateFormat.FULLDATE:\n          this._dtFormatter = new Intl.DateTimeFormat(locales, { dateStyle: \"full\" });\n          break;\n        case DateFormat.ISODATE:\n          this._subpatterns[0] = \"yyyy-MM-dd\";\n          break;\n        case DateFormat.TIME:\n          this._subpatterns[0] = \"HH:mm:ss.SSS\";\n          break;\n        case DateFormat.LONGTIMEAGO:\n          this._subpatterns[0] = \"TTTT\";\n          break;\n        case DateFormat.SHORTTIMEAGO:\n          this._subpatterns[0] = \"TTT\";\n          break;\n        case DateFormat.ISOTIME:\n        case DateFormat.MEDIUMTIME:\n          this._dtFormatter = new Intl.DateTimeFormat(locales, { timeStyle: \"medium\" });\n          break;\n        case DateFormat.SHORTTIME:\n          this._dtFormatter = new Intl.DateTimeFormat(locales, { timeStyle: \"short\" });\n          break;\n        case DateFormat.LONGTIME:\n          this._dtFormatter = new Intl.DateTimeFormat(locales, { timeStyle: \"long\" });\n          break;\n        case DateFormat.FULLTIME:\n          this._dtFormatter = new Intl.DateTimeFormat(locales, { timeStyle: \"full\" });\n          break;\n        case DateFormat.DATETIME:\n          this._dtFormatter = new Intl.DateTimeFormat(locales, { dateStyle: \"short\", timeStyle: \"medium\" });\n          break;\n        case DateFormat.ISODATETIME:\n          this._subpatterns[0] = \"yyyy-MM-dd'T'HH:mm:ss\";\n          break;\n        case DateFormat.ISODATETIMETZ:\n          this._subpatterns[0] = \"yyyy-MM-dd'T'HH:mm:ssXX\";\n          break;\n        case DateFormat.ISODATETIMEUTC:\n          this._subpatterns[0] = \"UTC:yyyy-MM-dd'T'HH:mm:ss'Z'\";\n          break;\n        case \"[expiresheaderformat]\":\n          this._subpatterns[0] = \"EEE, dd MMM yyyy HH:mm:ss Z\";\n          break;\n        default:\n          this._dtFormatter = new Intl.DateTimeFormat(locales, { dateStyle: \"full\", timeStyle: \"full\", ...this._options });\n      }\n    } else {\n      // Allow setting the utc/gmt argument via the mask\n      const maskSlice = pattern.slice(0, 4);\n      if (maskSlice === \"UTC:\" || maskSlice === \"GMT:\") {\n        this._subpatterns[0] = pattern.slice(4);\n        this._utcgmt = maskSlice.slice(0, 3) as typeof undefined | \"UTC\" | \"GMT\";\n      }\n    }\n  }\n\n  private _decompose(date: Date): { [key: string]: Function } {\n    const utc = this._utcgmt !== undefined;\n    const $ = parts(date, utc);\n    const localeName: string = this._locale.language||\"en\";\n    const I18N = (localeName in i18n) ? i18n[localeName as keyof typeof i18n] : i18n[\"en\"];\n    return {\n      d: () => $.d(),\n      dd: () => pad($.d()),\n      E: () => Strings.left(I18N.shortDayNames[$.D()], 1),\n      EE: () => Strings.left(I18N.shortDayNames[$.D()], 2),\n      EEE: () => I18N.shortDayNames[$.D()],\n      EEEE: () => I18N.longDayNames[$.D()],\n      TT: () => this.formatTimeAgo(date, \"narrow\"),\n      TTT: () => this.formatTimeAgo(date, \"short\"),\n      TTTT: () => this.formatTimeAgo(date, \"long\"),\n      D: () => $.V(),\n      M: () => $.M() + 1,\n      MM: () => pad($.M() + 1),\n      MMM: () => I18N.shortMonthNames[$.M()],\n      MMMM: () => I18N.longMonthNames[$.M()],\n      yy: () => String($.y()).slice(2),\n      yyyy: () => pad($.y(), 4),\n      h: () => $.H() % 12 || 12,\n      hh: () => pad($.H() % 12 || 12),\n      H: () => $.H(),\n      HH: () => pad($.H()),\n      m: () => $.m(),\n      mm: () => pad($.m()),\n      s: () => $.s(),\n      ss: () => pad($.s()),\n      S: () => Math.floor($.S() / 100),\n      SS: () => pad(Math.floor($.S() / 10), 2),\n      SSS: () => pad($.S(), 3),\n      a: () => $.H() < 12 ? 'am' : 'pm',\n      A: () => $.H() < 12 ? 'AM' : 'PM',\n      z: () =>\n        utc\n          ? this._utcgmt\n          : SimpleDateFormat.formatTimezone(date),\n      Z: () => { // \"GMT+05:30\" => \"+0530\"\n        const tzo = $.o();\n        return (tzo > 0 ? \"-\" : \"+\") + pad(Math.floor(Math.abs(tzo) / 60) * 100 + (Math.abs(tzo) % 60), 4);\n      },\n      X: () => { // \"GMT+05:30\" => \"+05\"\n        const tzo = $.o();\n        return tzo === 0 ? \"Z\" : (tzo > 0 ? \"-\" : \"+\") + pad(Math.floor(Math.abs(tzo) / 60), 2);\n      },\n      XX: () => { // \"GMT+05:30\" => \"+0530\"\n        const tzo = $.o();\n        return tzo === 0 ? \"Z\" : (tzo > 0 ? \"-\" : \"+\") + pad(Math.floor(Math.abs(tzo) / 60), 2) + pad(Math.floor(Math.abs(tzo) % 60), 2);\n      },\n      XXX: () => { // \"GMT+05:30\" => \"+05:30\"\n        const tzo = $.o();\n        return tzo === 0 ? \"Z\" : (tzo > 0 ? \"-\" : \"+\") + pad(Math.floor(Math.abs(tzo) / 60), 2) + \":\" + pad(Math.floor(Math.abs(tzo) % 60), 2);\n      },\n      /*\n      S: () => {\n        const d = $.d();\n        return [\"th\", \"st\", \"nd\", \"rd\"][\n          d % 10 > 3 ? 0 : ((d % 100 - d % 10) != 10 ? 1 : 0) * d % 10\n        ]\n      },\n      */\n      u: () => $.u(),\n      w: () => $.w(),\n      ww: () => pad($.w()),\n      W: () => $.W(),\n      WW: () => pad($.W()),\n    };\n  };\n\n  private formatTimeAgo(date: Date, style: \"long\" | \"short\" | \"narrow\" = \"long\"): string {\n    let duration = (date.getTime() - Date.now()) / 1000;\n\n    let formatter;\n    switch (style) {\n      case \"short\":\n        if (!this._rtFormatter[1]) {\n          this._rtFormatter[1] = new Intl.RelativeTimeFormat(this._locale.baseName, { numeric: \"auto\", style: \"short\" });\n        }\n        formatter = this._rtFormatter[1];\n        break;\n      case \"narrow\":\n        if (!this._rtFormatter[2]) {\n          this._rtFormatter[2] = new Intl.RelativeTimeFormat(this._locale.baseName, { numeric: \"auto\", style: \"narrow\" });\n        }\n        formatter = this._rtFormatter[2];\n        break;\n      default:\n        if (!this._rtFormatter[0]) {\n          this._rtFormatter[0] = new Intl.RelativeTimeFormat(this._locale.baseName, { numeric: \"auto\", style: \"long\" });\n        }\n        formatter = this._rtFormatter[0];\n        break;\n    }\n\n    for (let i = 0; i < DIVISIONS.length; i++) {\n      const division = DIVISIONS[i];\n      if (Math.abs(duration) < division.amount) {\n        return formatter.format(Math.round(duration), division.name);\n      }\n      duration /= division.amount;\n    }\n\n    return \"???\";\n  }\n  /**\n   * Get proper timezone abbreviation or timezone offset.\n   *\n   * This will fall back to `GMT+xxxx` if it does not recognize the\n   * timezone within the `timezone` RegEx above. Currently only common\n   * American and Australian timezone abbreviations are supported.\n   *\n   * @param  {String | Date} date\n   * @return {String}\n   */\n  static formatTimezone(date: Date): string {\n    return (String(date).match(timezoneRe) || [\"\"])\n      .pop()!\n      .replace(timezoneClipRe, \"\")\n      .replace(/GMT\\+0000/g, \"UTC\");\n  };\n  /**\n   * @override\n   */\n  override format(value: Date | Time | string | number | null): string {\n\n    if (value == null) {\n      return this._subpatterns[1] || \"\";\n    } else if (Objects.isNumber(value) && !Number.isInteger(value)) {\n      return this._subpatterns[1] || \"\";\n    }\n\n    if (!(value instanceof Date)) {\n      if (value instanceof Time) {\n        value = value.toDate();\n      } else {\n        value = new Date(value);\n      }\n    }\n\n    if (this._dtFormatter) {\n      return this._dtFormatter.format(value);\n    }\n\n    const funcs = this._decompose(value);\n    const pattern = this._subpatterns[0];\n\n    return pattern.replace(tokenRe, (match) => {\n      if (match in funcs) {\n        return funcs[match]();\n      }\n      return match.slice(1, match.length - 1);\n    });\n\n  }\n\n}\n","import { Injectable, InjectionToken } from '@angular/core';\nimport { debounceTime, filter, Subject, Subscription } from 'rxjs';\nimport { DateFormat } from '../util/i18n/text/DateFormat';\nimport { SimpleDateFormat } from '../util/i18n/text/SimpleDateFormat';\n\nexport const LOGGER = new InjectionToken<LogService>(\"logger\");\n\nexport enum LogLevel {\n  DEBUG,\n  INFO,\n  LOG,\n  WARN,\n  ERROR,\n  FATAL\n}\n\nenum LoggerEvents {\n  Flush = 1\n}\n\ninterface LogEntry {\n  timestamp: string;\n  level: LogLevel;\n  message: string;\n  data?: any;\n}\n\n/**\n * A logging service class that is able to send logs to the browser console and to the server URL address\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class LogService {\n\n  private static _map = new Map<string, LogService>();\n\n\n  logLevel: LogLevel = LogLevel.INFO;\n  serverLogLevel: LogLevel = LogLevel.WARN;\n  serverEndPoint: string | undefined;\n\n  name?: string;\n  useServer: boolean = false;\n\n  private _buffer: LogEntry[] = [];\n  private _flush = new Subject<LoggerEvents>();\n  private _dateFormat = new SimpleDateFormat(DateFormat.ISODATETIMETZ);\n  private _subscription: Subscription;\n\n  constructor() {\n    this._subscription = this._flush\n      .pipe(\n        debounceTime(5000),\n        filter((event) => event === LoggerEvents.Flush))\n      .subscribe(\n        () => this.flushBuffer()\n      );\n  }\n\n  static getLogger(name: string): LogService {\n    let logger: LogService | undefined = this._map.get(name);\n    if (!logger) {\n      logger = new LogService();\n      logger.name = name;\n      this._map.set(name, logger);\n    }\n    return logger;\n  }\n\n  private flushBuffer() {\n    const data = this._buffer.splice(0);\n\n    if (data.length === 0) {\n      return;\n    }\n\n    const body = \"[\"\n                  + data\n                    .map((entry) => this.buildLogString(entry))\n                    .reduce((json, entry) => (json += entry + \",\"), '')\n                  + \"]\";\n\n    const xobj = new XMLHttpRequest();\n    xobj.onerror = (err) => console.error(err);\n    xobj.open('POST', this.serverEndPoint!, true);\n    xobj.send(body);\n\n  }\n\n  protected buildLogString(entry: LogEntry): string {\n    return JSON.stringify(entry);\n  }\n\n  debug(message: string) {\n    this.logMessage(LogLevel.DEBUG, message);\n  }\n\n  log(message: string) {\n    this.logMessage(LogLevel.LOG, message);\n  }\n\n  info(message: string) {\n    this.logMessage(LogLevel.INFO, message);\n  }\n\n  warn(message: string) {\n    this.logMessage(LogLevel.WARN, message);\n  }\n\n  error(message: string) {\n    this.logMessage(LogLevel.ERROR, message);\n  }\n\n  fatal(message: string) {\n    this.logMessage(LogLevel.FATAL, message);\n  }\n\n  logMessage(level: LogLevel, message: string) {\n    const timestamp = this._dateFormat.format(Date.now());\n    if (this.useServer && this.serverEndPoint) {\n      if (level >= this.serverLogLevel) {\n        this._buffer.push({ timestamp, level, message });\n        this._flush.next(LoggerEvents.Flush);\n      }\n    } else if (level >= this.logLevel) {\n      const msg = `${timestamp} ${this.name} ${LogLevel[level]}: ${message}`;\n      switch (level) {\n        case LogLevel.DEBUG:  console.debug(msg); break;\n        case LogLevel.INFO:   console.info(msg);  break;\n        case LogLevel.WARN:   console.warn(msg);  break;\n        case LogLevel.ERROR:\n        case LogLevel.FATAL:  console.error(msg); break;\n        default:\n          console.log(msg);\n      }\n    }\n  }\n\n  destroy() {\n    this._subscription.unsubscribe();\n  }\n\n}\n","// - Common return value constants:\r\nexport const FAILURE = -1;\r\nexport const SUSSESS = 1;\r\nexport const NO_ACTION = 0;\r\n// - Continue/Prevent return value constants:\r\nexport const CONTINUE_ACTION = 1;\r\nexport const PREVENT_ACTION  = 0;\r\n\r\nexport type ReturnStatus = number;\r\n\r\nexport abstract class AbstractController {\r\n    onInit(): void {}\r\n    onDestroy(): void {}\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { AbstractController} from \"./AbstractController\";\r\nimport { DataWindow} from \"../datawindow/datawindow.component\";\r\nimport { DwDeleteRowEvent,\r\n  DwDoubleClickedEvent,\r\n  DwEditChangedEvent,\r\n  DwInsertRowEvent,\r\n  DwItemChangedEvent,\r\n  DwItemErrorEvent,\r\n  DwItemFocusChangedEvent,\r\n  DwProcessEnterEvent,\r\n  DwRetrieveEndEvent,\r\n  DwRetrieveStartEvent,\r\n  DwRowChangedEvent,\r\n  DwRowFocusChangedEvent,\r\n  DwRowFocusChangingEvent,\r\n  DwUpdateEndEvent,\r\n  DwUpdateStartEvent} from \"../datastore/events\";\r\n\r\n@Injectable()\r\nexport class DwController extends AbstractController {\r\n    private _dw: DataWindow | undefined;\r\n\r\n    setDataWindow(dw: DataWindow) {\r\n        this._dw = dw;\r\n    }\r\n\r\n    get model(): DataWindow | undefined {return this._dw;}\r\n\r\n    /**\r\n     * @abstract\r\n     */\r\n    onAfterViewInit(): void {}\r\n\r\n    onBeforeDeleteRow(event: DwDeleteRowEvent): void {}\r\n\r\n    onBeforeInsertRow(event: DwInsertRowEvent): void {}\r\n\r\n    onDoubleClicked(event: DwDoubleClickedEvent): void {}\r\n\r\n    onEditChanged(event: DwEditChangedEvent): void {}\r\n\r\n    onGetFocus(): void {}\r\n\r\n    onItemChanged(event: DwItemChangedEvent): void {}\r\n\r\n    onItemFocusChanged(event: DwItemFocusChangedEvent): void {}\r\n\r\n    onItemError(event: DwItemErrorEvent): void {}\r\n\r\n    onLoseFocus(): void {}\r\n\r\n    onRetrieveStart(event: DwRetrieveStartEvent): void {}\r\n\r\n    onRetrieveEnd(event: DwRetrieveEndEvent): void {}\r\n\r\n    onRowChanged(event: DwRowChangedEvent): void {}\r\n\r\n    onRowFocusChanged(event: DwRowFocusChangedEvent): void {}\r\n    /**\r\n     * Occurs when the current row is about to change in the DataWindow.\r\n     *\r\n     * @param currentRow {number}  The number of the row that is current (before the row is deleted or its number changes).\r\n     *                             If the DataWindow object is empty, currentrow is -1 to indicate there is no current row.\r\n     * @param newRow {number} The number of the row that is about to become current. If the new row is going to be an inserted row, NewRow is -1 to indicate that it does not yet exist.\r\n     * @returns Set the return code to affect the outcome of the event:\r\n     *           0  Prevent the current row from changing\r\n     *           1  Continue processing (setting the current row)\r\n     */\r\n    onRowFocusChanging(event: DwRowFocusChangingEvent): void {}\r\n    /**\r\n     *\r\n     * @param event\r\n     *\r\n     * @abstract\r\n     */\r\n    onShowProperties(event: DwProcessEnterEvent): void {}\r\n\r\n    onTimer(): void {}\r\n\r\n    onUpdateStart(event: DwUpdateStartEvent): void {}\r\n\r\n    onUpdateEnd(event: DwUpdateEndEvent): void {}\r\n\r\n}\r\n","import { Collection, Element } from \"../collections/Collection\";\r\nimport {ImmutableList, List} from \"../collections/List\";\r\nimport { Comparator } from \"./Comparator\";\r\nimport { NullPointerException } from \"./exception/NullPointerException\";\r\nimport {ImmutableSet} from \"../collections/AbstractSet\";\r\nimport {HashSet} from \"../collections/HashSet\";\r\nimport {ArrayList} from \"../collections/ArrayList\";\r\nimport {HashMap} from \"../collections/HashMap\";\r\nimport {ImmutableMap} from \"../collections/AbstractMap\";\r\n\r\n/**\r\n * This class consists exclusively of static methods that operate on or return collections.\r\n */\r\nexport class Collections {\r\n  /**\r\n   * Adds all of the specified elements to the specified collection\r\n   * @param c Collection object\r\n   * @param elements Elements to add to the collection `c`\r\n   * @returns _true_ if the collection changed as a result of this call, or _false_ otherwise\r\n   */\r\n  static addAll<T>(c: Collection<T>, ...elements: Element<T>[]): boolean {\r\n    if (!c) {\r\n      throw new NullPointerException();\r\n    }\r\n    let nCount=0;\r\n    for (let el of elements) {\r\n      if (c.add(el)) {\r\n        nCount++;\r\n      }\r\n    }\r\n    return nCount > 0;\r\n  }\r\n  /**\r\n   * Returns the number of elements in the specified collection equal to the specified object\r\n   * @param c The collection in which to determine the frequency of o\r\n   * @param o The object whose frequency is to be determined\r\n   * @returns The number of elements in c equal to o\r\n   */\r\n  static frequency<T>(c: Collection<T>, o: Element<T>): number {\r\n    let nCount = 0;\r\n    for (const elem of c) {\r\n      if ( Object.is(elem, o) ) {\r\n        nCount++;\r\n      }\r\n    }\r\n    return nCount;\r\n  }\r\n  /**\r\n   * Returns the maximum element of the given collection, according to the _natural ordering_ of its elements or to the order induced by the specified comparator\r\n   * @param c The collection whose maximum element is to be determined\r\n   * @param comparator The comparator with which to determine the maximum element. An _undefined_ value indicates that the elements' natural ordering should be used.\r\n   * @returns The maximum element of the given collection, according to the specified comparator. Returns _undefined_ if the collection `c` is empty.\r\n   */\r\n  static max<T>(c: Collection<T>, comparator?: Comparator<T>): Element<T> | undefined {\r\n    let maxElem: Element<T> | undefined = undefined;\r\n    if (c && c.size > 0) {\r\n      comparator = comparator ?? Comparator.getInstance();\r\n      for (const elem of c) {\r\n        if (maxElem === undefined) {\r\n          maxElem = elem;\r\n        } else if (comparator.greaterThan(elem, maxElem)) {\r\n          maxElem = elem;\r\n        }\r\n      }\r\n    }\r\n    return maxElem;\r\n  }\r\n  /**\r\n   * Returns the minimum element of the given collection, according to the _natural ordering_ of its elements or to the order induced by the specified comparator\r\n   * @param c The collection whose minimum element is to be determined\r\n   * @param comparator The comparator with which to determine the minimum element. An _undefined_ value indicates that the elements' natural ordering should be used.\r\n   * @returns The minimum element of the given collection, according to the specified comparator. Returns _undefined_ if the collection `c` is empty.\r\n   */\r\n  static min<T>(c: Collection<T>, comparator?: Comparator<T>): Element<T> | undefined {\r\n    let minElem: Element<T> | undefined = undefined;\r\n    if (c && c.size > 0) {\r\n      comparator = comparator ?? Comparator.getInstance();\r\n      for (const elem of c) {\r\n        if (minElem === undefined) {\r\n          minElem = elem;\r\n        } else if (comparator.lessThan(elem, minElem)) {\r\n          minElem = elem;\r\n        }\r\n      }\r\n    }\r\n    return minElem;\r\n  }\r\n  /**\r\n   * Replaces all occurrences of one specified value in a list with another\r\n   * @param list The list in which replacement is to occur\r\n   * @param oldVal The old value to be replaced\r\n   * @param newVal The new value with which `oldVal` is to be replaced\r\n   * @returns _true_ if the `list` was changed, _false_ otherwise\r\n   */\r\n  static replaceAll<T>(list: List<T>, oldVal: Element<T>, newVal: Element<T>): boolean {\r\n    let nCount = 0;\r\n    if (list && oldVal !== newVal) {\r\n      list.every((value, index) => {\r\n        if (value === oldVal) {\r\n          nCount++;\r\n          list.set(index, newVal);\r\n        }\r\n        return true;\r\n      });\r\n    }\r\n    return nCount > 0;\r\n  }\r\n  /**\r\n   * Reverses the order of the elements in the specified list\r\n   * @param list The list whose elements are to be reversed\r\n   * @returns The list argument itself\r\n   */\r\n  static reverse<T>(list: List<T>): List<T> {\r\n    if (list && list.size > 0) {\r\n      const arr = list.toArray().reverse();\r\n      for (let i=0; i < arr.length; i++) {\r\n        list.set(i, arr[i]);\r\n      }\r\n    }\r\n    return list;\r\n  }\r\n  /**\r\n   * Returns an immutable set containing only the specified object\r\n   * @param object The sole object to be stored in the returned set\r\n   * @returns An immutable set containing only the specified object\r\n   * @since 0.5.0\r\n   */\r\n  static singleton<T=unknown>(object: T): ImmutableSet<T> {\r\n    const set: HashSet<T> = new HashSet([object]);\r\n    return <ImmutableSet<T>> set;\r\n  }\r\n  /**\r\n   * Returns an immutable list containing only the specified object.\r\n   * @param object The sole object to be stored in the returned list\r\n   * @returns An immutable list containing only the specified object\r\n   * @since 0.5.0\r\n   */\r\n  static singletonList<T=unknown>(object: T): ImmutableList<T> {\r\n    const list: List<T> = new ArrayList([object]);\r\n    return <ImmutableList<T>> list;\r\n  }\r\n  /**\r\n   * Returns an _immutable_ map, mapping only the specified key to the specified value.\r\n   * @param key The sole key to be stored in the returned map\r\n   * @param value The value to which the returned map maps key\r\n   * @returns An immutable map containing only the specified key-value mapping\r\n   * @since 0.5.0\r\n   */\r\n  static singletonMap<K,V>(key: K, value:V): ImmutableMap<K,V> {\r\n    const map: HashMap<K,V> = new HashMap([[key, value]]);\r\n    return <ImmutableMap<K,V>> map;\r\n  }\r\n\r\n}\r\n","export abstract class NumericTypedArray {\r\n    protected _view: any = null;\r\n\r\n    constructor(v?: number) {}\r\n\r\n    valueOf(): number | null {\r\n        if (this._view)\r\n            return this._view[0].valueOf();\r\n        return null;\r\n    }\r\n\r\n    toString(): string | null {\r\n        if (this._view)\r\n            return this._view[0].toString();\r\n        return null;\r\n    }\r\n\r\n    toJSON(): number | null {\r\n      return this.valueOf();\r\n    }\r\n\r\n}\r\n","import { NumericTypedArray } from \"./NumericTypedArray\";\r\n\r\nexport class Byte extends NumericTypedArray {\r\n    constructor (v?: number) {\r\n        super(v);\r\n        if ( Number.isFinite(v)) {\r\n            this._view = new Int8Array( [ v! ] );\r\n        }\r\n    }\r\n}\r\n","import { Dates } from \"../Dates\";\r\n\r\nexport class DateISO extends Date {\r\n    constructor (value?: any) {\r\n        super(value);\r\n    }\r\n\r\n    toString(): string {\r\n        //return this.toISOString();\r\n        return Dates.toString(this, false) || \"\";\r\n    }\r\n}\r\n","import { Dates } from \"../Dates\";\r\n\r\nexport class DateTime extends Date {\r\n\r\n    constructor (value?: any) {\r\n        super(value);\r\n    }\r\n\r\n    toString(): string {\r\n        //return this.toISOString();\r\n        return Dates.toString(this, true) || \"\";\r\n    }\r\n\r\n}\r\n","import { NumericTypedArray } from \"./NumericTypedArray\";\r\n\r\nexport class Decimal extends NumericTypedArray {\r\n\r\n  constructor(v?: number, prec: number = 20) {\r\n    super(v);\r\n    if (Number.isFinite(v) && Number.isFinite(prec)) {\r\n      this._view = [ +(v!).toFixed(prec) ];\r\n    }\r\n  }\r\n}\r\n","import { NumericTypedArray } from \"./NumericTypedArray\";\r\n\r\nexport class Double extends NumericTypedArray {\r\n    constructor (v?: number) {\r\n        super(v);\r\n        if ( Number.isFinite(v) ) {\r\n            this._view = new Float64Array( [ v! ] );\r\n        }\r\n    }\r\n}\r\n","import { NumericTypedArray } from \"./NumericTypedArray\";\r\n\r\nexport class Float extends NumericTypedArray {\r\n    constructor (v?: number) {\r\n        super(v);\r\n        if ( Number.isFinite(v) ) {\r\n            this._view = new Float32Array( [ v! ] );\r\n        }\r\n    }\r\n}\r\n","import { NumericTypedArray } from \"./NumericTypedArray\";\r\n\r\nexport class Integer extends NumericTypedArray {\r\n    constructor (v?: number) {\r\n        super(v);\r\n        if ( Number.isFinite(v) ) {\r\n            this._view = new Int16Array( [ v! ] );\r\n        }\r\n    }\r\n}\r\n","import { NumericTypedArray } from \"./NumericTypedArray\";\r\n\r\nexport class Long extends NumericTypedArray {\r\n    constructor (v?: number) {\r\n        super(v);\r\n        if ( Number.isFinite(v) ) {\r\n            this._view = new Int32Array( [ v! ] );\r\n        }\r\n    }\r\n}\r\n","import { NumericTypedArray } from \"./NumericTypedArray\";\r\n\r\nexport class UByte extends NumericTypedArray {\r\n    constructor (v?: number) {\r\n        super(v);\r\n        if ( Number.isFinite(v) ) {\r\n            this._view = new Uint8Array( [ v! ] );\r\n        }\r\n    }\r\n}\r\n","import { NumericTypedArray } from \"./NumericTypedArray\";\r\n\r\nexport class UInt extends NumericTypedArray {\r\n    constructor (v?: number) {\r\n        super(v);\r\n        if ( !(v==null || v===undefined) ) {\r\n            this._view = new Uint16Array( [ v ] );\r\n        }\r\n    }\r\n}\r\n","import { NumericTypedArray } from \"./NumericTypedArray\";\r\n\r\nexport class ULong extends NumericTypedArray {\r\n    constructor (v?: number) {\r\n        super(v);\r\n        if ( !(v==null || v===undefined) ) {\r\n            this._view = new Uint32Array( [ v ] );\r\n        }\r\n    }\r\n}\r\n","export class XmlDocs {\r\n\r\n  /**\r\n   * Function that parses a string with specified mime type into an XML DOM, throwing an Error if XML parsing fails\r\n   *\r\n   * @param source String to be parsed\r\n   * @param mime  Supported mime-type\r\n   * @returns XML Document object\r\n   *\r\n   * @private\r\n   * @static\r\n   */\r\n  private static _parse_xml(source: string, mime: DOMParserSupportedType): XMLDocument {\r\n    const parser = new DOMParser();\r\n    const doc = parser.parseFromString(source, mime);\r\n    const errorNode = doc.querySelector(\"parseerror\");\r\n    if (errorNode) {\r\n      const msg = errorNode.nodeValue;\r\n      throw new Error('Parsing error: '+msg);\r\n    }\r\n    return doc;\r\n  }\r\n  /**\r\n   * Function that parses a XML-string into an XML DOM, throwing an Error if XML parsing fails\r\n   * @param source XML-string to be parsed\r\n   * @returns XML DOM object\r\n   * @static\r\n   */\r\n  static parseXML(source: string): XMLDocument {\r\n    /*\r\n    // https://stackoverflow.com/questions/11563554/how-do-i-detect-xml-parsing-errors-when-using-javascripts-domparser-in-a-cross\r\n    // Parse a simple intentionally Invalid XML source to get namespace of <parsererror>:\r\n    const parser = new DOMParser();\r\n    const docError = parser.parseFromString('INVALID', 'application/xml');\r\n    const parsererrorNS = docError.getElementsByTagName(\"parsererror\")[0].namespaceURI;\r\n    // Parse xmlString:  (XMLDocument object)\r\n    const doc = parser.parseFromString(source, \"application/xml\");\r\n    const errNode = doc.getElementsByTagNameNS(parsererrorNS, 'parsererror');\r\n    if (errNode) {\r\n      const msg = errNode[0].nodeValue;\r\n      throw new Error('Parsing error: '+msg);\r\n    }\r\n    */\r\n\r\n    return this._parse_xml(source, \"application/xml\");\r\n  }\r\n  /**\r\n   * Function that parses a SVG-string into an XML DOM, throwing an Error if XML parsing fails\r\n   *\r\n   * @param source SVG-string to be parsed\r\n   * @returns XML DOM object\r\n   * @static\r\n   */\r\n  static parseSVG(source: string): XMLDocument {\r\n    return this._parse_xml(source, \"image/svg+xml\");\r\n  }\r\n  /**\r\n   * Transforms XML node object to plain JavaScript object\r\n   * @param node XML node object\r\n   * @returns Object\r\n   */\r\n  static nodeToObject(node: ChildNode): Object | null {\r\n    let obj: any = {};\r\n    if (!node) return null;\r\n\r\n    let props: NodeListOf<ChildNode> = node.childNodes;\r\n    if (props) {\r\n      for (let i:number=0; i < props.length; i++) {\r\n        let propName = props[i].nodeName;\r\n        obj[propName] = props[i].nodeValue;\r\n      }\r\n    }\r\n\r\n    return obj;\r\n  }\r\n  /**\r\n   * Changes the special xml-characters (if any) to its escaped counterparts\r\n   * @param source The source string\r\n   * @returns New string\r\n   */\r\n  static escapeChars(source: string | null): string | null {\r\n    if (source == null)  return source;\r\n    return source.replace('&', \"&amp;\")\r\n                .replace('\"', \"&quot;\")\r\n                .replace(\"'\", \"&apos;\")\r\n                .replace('<', \"&lt;\")\r\n                .replace('>', \"&gt;\");\r\n  }\r\n  /**\r\n   * Changes the escaped special xml-characters (if any) to its normal view\r\n   * @param source The source string\r\n   * @returns New string\r\n   */\r\n  static unescapeChars(source: string | null): string | null {\r\n    if (source == null)  return source;\r\n    return source.replace(\"&amp;\", \"&\")\r\n                  .replace(\"&quot;\", '\"')\r\n                  .replace(\"&apos;\", \"'\")\r\n                  .replace(\"&lt;\", '<')\r\n                  .replace(\"&gt;\", '>');\r\n  }\r\n\r\n}\r\n","import { Byte } from \"./type/Byte\";\r\nimport { DateISO } from \"./type/DateISO\";\r\nimport { DateTime } from \"./type/DateTime\";\r\nimport { Decimal } from \"./type/Decimal\";\r\nimport { Double } from \"./type/Double\";\r\nimport { Float } from \"./type/Float\";\r\nimport { Integer } from \"./type/Integer\";\r\nimport { Long } from \"./type/Long\";\r\nimport { Time } from \"./type/Time\";\r\nimport { UByte } from \"./type/UByte\";\r\nimport { UInt } from \"./type/UInt\";\r\nimport { ULong } from \"./type/ULong\";\r\nimport { Dates } from \"./Dates\";\r\nimport { Strings } from \"./Strings\";\r\nimport { XmlDocs } from \"./XmlDocs\";\r\n\r\nconst INFINITY = 1 / 0;\r\n\r\n/**\r\n * This class consists exclusively of the static methods that operate on the types of the specified values\r\n */\r\nexport class Types {\r\n  /**\r\n   * Converts a value to the `string` data type\r\n   * @param value Source value\r\n   * @returns New value of the type `string`, or _null_ if the specified value has a _null_ value or _undefined_\r\n   */\r\n  static toString(value: any): string | null {\r\n    if (value == null)\r\n      return null;\r\n    if (value instanceof Date)\r\n      return Dates.toString(value);\r\n    return String(value);\r\n  }\r\n  /**\r\n   * Converts a value to the `number` data type and truncates decimal values if any\r\n   * @param value Source value\r\n   * @returns New `number` value as an _integer_, or _null_ if the specified `value` has a _null_ value or _undefined_\r\n   */\r\n  static toInteger(value: any): number | null {\r\n    if (value == null)\r\n      return null;\r\n    if (!value)\r\n      return 0;\r\n    // Coerce to number\r\n    value = +value;\r\n    if (value === INFINITY || value === -INFINITY) {\r\n      const sign = value < 0 ? -1 : 1;\r\n      return sign * Number.MAX_VALUE;\r\n    }\r\n    const remainder = value % 1;\r\n    return value === value ? (remainder ? value - remainder : value) : 0;\r\n  }\r\n  /**\r\n   * Converts a value to the JavaScript's `number` data type\r\n   * @param value Source value\r\n   * @returns A value of type `number`, or _null_ if the source `value` has a _null_ value or _undefined_\r\n   */\r\n  static toNumber(value: any): number | null {\r\n    if (value == null)\r\n      return null;\r\n    if (!value)\r\n      return 0;\r\n    switch (typeof (value)) {\r\n      case \"string\": return Number.parseFloat(value); break;\r\n    }\r\n    return Number(value);\r\n  }\r\n  /**\r\n   *\r\n   * @param value\r\n   * @param prec\r\n   * @returns\r\n   */\r\n  static toDecimal(value: any, prec: number = 20): Decimal | null {\r\n    if (value == null)\r\n      return null;\r\n    if (!value)\r\n      return new Decimal(0);\r\n    switch (typeof (value)) {\r\n      case \"string\": value = Number.parseFloat(value); break;\r\n    }\r\n    return new Decimal(value, prec);\r\n  }\r\n  /**\r\n   * Converts a value to the JavaScript's `boolean` data type\r\n   * @param value Source value\r\n   * @returns A value of type `boolean`, or _null_ if the source `value` has a _null_ value or _undefined_\r\n   */\r\n  static toBoolean(value: any): boolean | null {\r\n    if (value == null)\r\n      return null;\r\n    if (typeof value === \"string\") {\r\n      switch (value.trim().toLowerCase()) {\r\n        case \"true\":\r\n        case \"yes\":\r\n        case \"y\":\r\n        case \"1\":\r\n        case \"ok\":\r\n          value = true;\r\n          break;\r\n        case \"false\":\r\n        case \"no\":\r\n        case \"n\":\r\n        case \"0\":\r\n          value = false;\r\n          break;\r\n      }\r\n    }\r\n    return Boolean(value); // ? true : false;\r\n  }\r\n  /**\r\n   * Converts a value to the JavaScript's `date` data type\r\n   * @param value Source value\r\n   * @returns A value of type `date`, or _null_ if the source `value` has a _null_ value or _undefined_\r\n   */\r\n  static toDate(value: any): Date | null {\r\n    if (value == null)\r\n      return null;\r\n    const type = typeof (value);\r\n    if (type === \"string\" || type === \"number\" || value instanceof Date)\r\n      return new DateISO(value);\r\n    return null;\r\n  }\r\n  /**\r\n   *\r\n   * @param value\r\n   * @returns\r\n   */\r\n  static toTime(value: any): Time | null {\r\n    if (value == null)\r\n      return null;\r\n    const type = typeof (value);\r\n    if (type === \"string\" || type === \"number\" || value instanceof Date || value instanceof Time)\r\n      return new Time(value);\r\n    return null;\r\n  }\r\n  /**\r\n   *\r\n   * @param value\r\n   * @returns\r\n   */\r\n  static toDateTime(value: any): DateTime | null {\r\n    if (value == null)\r\n      return null;\r\n    const type = typeof (value);\r\n    if (type === \"string\" || type === \"number\" || value instanceof Date)\r\n      return new DateTime(value);\r\n    return null;\r\n  }\r\n  /**\r\n   * Converts a value to the specified data type\r\n   * @param value Source value\r\n   * @param type Type of the result value needed\r\n   * @returns A value of specified `type`, or _null_ if the source `value` has a _null_ value or _undefined_\r\n   */\r\n  static toType(value: any, type: string): any {\r\n    if (value == null)\r\n      return value;\r\n    if (!(typeof type === \"string\")) {\r\n      type = \"string\";\r\n    }\r\n    type = type.trim().toLowerCase();\r\n    let res: any = null;\r\n    let prec: number = 20;\r\n    const leftPar: number = type.indexOf(\"(\");\r\n    if (leftPar >= 0) {\r\n      // char(N), decimal(N), numeric(M,N) ...\r\n      const rightPar = type.indexOf(\")\", leftPar + 1);\r\n      const dims = type.substring(leftPar + 1, Math.max(rightPar, type.length));\r\n      let [decim] = Strings.getLastToken(dims, \",\");\r\n      prec = (new UInt(Math.max(+decim!, 0))).valueOf()!;\r\n      type = type.substring(0, leftPar).trim();\r\n    }\r\n    switch (type) {\r\n      case \"c\":\r\n      case \"string\":\r\n      case \"char\":\r\n      case \"character\":\r\n      case \"varchar\":\r\n      case \"text\":\r\n        res = Types.toString(value);\r\n        break;\r\n      case \"n\":\r\n      case \"number\":\r\n      case \"numeric\":\r\n      case \"num\":\r\n        res = Types.toNumber(value);\r\n        break;\r\n      case \"decimal\":\r\n      case \"dec\":\r\n        res = Types.toDecimal(value, prec);\r\n        break;\r\n      case \"money\":\r\n        res = Types.toDecimal(value, prec || 2);\r\n        break;\r\n      case \"double\":\r\n        res = Types.toNumber(value);\r\n        //res = (new Double(res)).valueOf();\r\n        res = new Double(res);\r\n        break;\r\n      case \"float\":\r\n      case \"real\":\r\n        res = Types.toNumber(value);\r\n        //res = (new Float(res)).valueOf();\r\n        res = new Float(res);\r\n        break;\r\n      case \"long\":\r\n        res = Types.toNumber(value);\r\n        //res = (new Long(res)).valueOf();\r\n        res = new Long(res);\r\n        break;\r\n      case \"bigint\":\r\n      case \"longlong\":\r\n        //res = BigInt(value); // es2020\r\n        res = Types.toInteger(value);\r\n        break;\r\n      case \"unsignedlong\":\r\n      case \"ulong\":\r\n        res = Types.toNumber(value);\r\n        //res = (new ULong(res)).valueOf();\r\n        res = new ULong(res);\r\n        break;\r\n      case \"unsignedinteger\":\r\n      case \"unsignedint\":\r\n      case \"uint\":\r\n        res = Types.toNumber(value);\r\n        //res = (new UInt(res)).valueOf();\r\n        res = new UInt(res);\r\n        break;\r\n      case \"int\":\r\n      case \"integer\":\r\n        res = Types.toNumber(value);\r\n        //res = (new Integer(res)).valueOf();\r\n        res = new Integer(res);\r\n        break;\r\n      case \"byte\":\r\n        res = Types.toNumber(value);\r\n        //res = (new Byte(res)).valueOf();\r\n        res = new Byte(res);\r\n        break;\r\n      case \"ubyte\":\r\n        res = Types.toNumber(value);\r\n        //res = (new UByte(res)).valueOf();\r\n        res = new UByte(res);\r\n        break;\r\n      case \"b\":\r\n      case \"bool\":\r\n      case \"boolean\":\r\n      case \"logical\":\r\n        res = Types.toBoolean(value);\r\n        break;\r\n      case \"d\":\r\n      case \"date\":\r\n        res = Types.toDate(value);\r\n        break;\r\n      case \"t\":\r\n      case \"time\":\r\n        res = Types.toTime(value);\r\n        break;\r\n      case \"e\":\r\n      case \"datetime\":\r\n      case \"timestamp\":\r\n        res = Types.toDateTime(value);\r\n        break;\r\n      case \"blob\":\r\n      case \"image\":\r\n        res = new Blob(value);\r\n        break;\r\n      case \"json\":\r\n        res = JSON.stringify(value);\r\n        break;\r\n      case \"xml\":\r\n        if (value instanceof XMLDocument) {\r\n          res = value;\r\n        } else {\r\n          try {\r\n            res = XmlDocs.parseXML(String(value));\r\n          } catch (error) {\r\n            res = null;\r\n          }\r\n        }\r\n        break;\r\n      default:\r\n        res = null;\r\n    }\r\n    return res;\r\n  }\r\n\r\n}\r\n","\nexport class Helpers {\n\n  /**\n   *\n   * @param milliseconds\n   * @returns\n   */\n  static async sleep(milliseconds: number): Promise<unknown> {\n    let resolve: (value?: unknown) => void;\n    let promise = new Promise((_resolve) => {\n      resolve = _resolve;\n    });\n    setTimeout(() => resolve(), milliseconds);\n    return promise;\n  }\n\n}\n","/**\r\n * This class consists exclusively of the static methods that operate on or return numeric values\r\n */\r\nexport class Numbers {\r\n  private static readonly ROUND_PRECISION = 16;\r\n  /**\r\n   * Rounds a number to the specified number of decimal places\r\n   * @param value The number you want to round\r\n   * @param ndec The number of decimal places to which you want to round a `value`. Default is 0.\r\n   * @returns The result of the roundation if it succeeds and _NaN_ if it fails or if any argument is _NaN_\r\n   * @example\r\n   * Number.round(2.5724, 3); // 2.572\r\n   * Number.round(1.005, 2);  // 1.01\r\n   * Number.round(12345, -2); // 12300\r\n   */\r\n  static round(value: number, ndec: number = 0): number {\r\n    let res = NaN;\r\n    ndec = ndec ?? 0;\r\n    if (Number.isFinite(value) || Number.isFinite(ndec)) {\r\n      const pwr = 10 ** ndec;\r\n      // EPSILON is added to resolve cases like this: console.log(Numbers.round(1.005, 2)); // 1  !!!???\r\n      if (value > 0)\r\n        res = Math.round((value+Number.EPSILON) * pwr) / pwr;\r\n      else if (value < 0)\r\n        res = -(Math.round(-(value-Number.EPSILON) * pwr) / pwr);\r\n      else\r\n        res = Math.round(value);\r\n      if (ndec < 0) {\r\n        res = Math.trunc(res);\r\n      }\r\n    }\r\n    return res;\r\n  }\r\n  /**\r\n   * Truncates a number to the specified number of decimal places\r\n   * @param value The number you want to truncate\r\n   * @param ndec The number of decimal places to which you want to truncate a `value`. Default is 0.\r\n   * @returns The result of the truncation if it succeeds and _NaN_ if it fails or if any argument is _NaN_\r\n   */\r\n  static truncate(value: number, ndec: number = 0): number {\r\n    ndec = ndec ?? 0;\r\n    if (Number.isFinite(value) || Number.isFinite(ndec)) {\r\n      if (ndec == 0) {\r\n        return Math.trunc(value);\r\n      }\r\n      const pwr = 10 ** ndec;\r\n      return Math.trunc(value * pwr) / pwr;\r\n    }\r\n    return NaN;\r\n  }\r\n  /**\r\n   * Gets the fraction part of the `value`\r\n   * @param value Source value\r\n   * @param roundTo Optional number of decimal places to round\r\n   * @returns Fraction value\r\n   */\r\n  static fraction(value: number, roundTo?: number): number {\r\n    if (Number.isFinite(value)) {\r\n      const res = value % 1;\r\n      return res <= Number.EPSILON ? 0 : Numbers.round(res, roundTo ?? Numbers.ROUND_PRECISION);\r\n    }\r\n    return NaN\r\n  }\r\n  /**\r\n   * Checks the specified value for `NaN` and returns this value if the result of testing is falsy or another value when else.\r\n   * @param v1 Value to check\r\n   * @param v2 Value to return if `v1` is `NaN`\r\n   * @returns `v1` itself if `v1` is a finite number or `v2` if it is a `NaN`\r\n   */\r\n  static ifNaN(v1: any, v2: any): any {\r\n    return (Number.isNaN(v1)) ? v2 : v1;\r\n  }\r\n  /**\r\n   * Return whether the provided value is in the range of the two specified values\r\n   *\r\n   * @param value The value to test.\r\n   * @param lowBound  Low boundary's value\r\n   * @param uppBound  Upper boundary's value\r\n   * @returns Boolean value, or _null_ if error occurs\r\n   */\r\n  static inRange(value: number, lowBound: number, uppBound: number): boolean | null {\r\n    if (Number.isFinite(value) && Number.isFinite(lowBound) && Number.isFinite(uppBound)) {\r\n      return value >= lowBound && value <= uppBound;\r\n    }\r\n    return null;\r\n  }\r\n\r\n}\r\n","const ALL = undefined;\r\n\r\nexport type WordMappins = { word: string, values?: number[] };\r\nexport type NumberParts = { integer: WordMappins[], fraction: WordMappins[] };\r\nexport type CurrencyOptions = { parts: NumberParts, useExacts?: boolean, point?: string, only?: string };\r\nexport type DigitalWordsConfig = {\r\n  groups: { [n: number]: WordMappins[] },\r\n  ones: string[],\r\n  tens: string[],\r\n  teens: string[],\r\n  hundreds: string[],\r\n  exactWordsMapping?: { [n: number]: string },\r\n  currency: { [code: string]: CurrencyOptions },\r\n  texts: { minus?: string, tenSplitter?: string, delim1000?: string}\r\n};\r\n\r\n/** Russian */\r\nconst ru_RU: DigitalWordsConfig = {\r\n  groups: {\r\n    1: [\r\n      { word: \"квадриллион\", values: [1] },\r\n      { word: \"квадриллиона\", values: [2, 3, 4] },\r\n      { word: \"квадриллионов\", values: [0, 5, 6, 7, 8, 9] },\r\n    ],\r\n    2: [\r\n      { word: \"триллион\", values: [1] },\r\n      { word: \"триллиона\", values: [2, 3, 4] },\r\n      { word: \"триллионов\", values: [0, 5, 6, 7, 8, 9] },\r\n    ],\r\n    3: [\r\n      { word: \"миллиард\", values: [1] },\r\n      { word: \"миллиарда\", values: [2, 3, 4] },\r\n      { word: \"миллиардов\", values: [0, 5, 6, 7, 8, 9] },\r\n    ],\r\n    4: [\r\n      { word: \"миллион\", values: [1] },\r\n      { word: \"миллиона\", values: [2, 3, 4] },\r\n      { word: \"миллионов\", values: [0, 5, 6, 7, 8, 9] },\r\n    ],\r\n    5: [\r\n      { word: \"тысяча\", values: [1] },\r\n      { word: \"тысячи\", values: [2, 3, 4] },\r\n      { word: \"тысяч\", values: [0, 5, 6, 7, 8, 9] },\r\n    ],\r\n  },\r\n  ones: [\"ноль\", \"один\", \"два\", \"три\", \"четыре\", \"пять\", \"шесть\", \"семь\", \"восемь\", \"девять\"],\r\n  tens: [\"десять\", \"двадцать\", \"тридцать\", \"сорок\", \"пятьдесят\", \"шестьдесят\", \"семьдесят\", \"восемьдесят\", \"девяносто\"],\r\n  teens: [\"одиннадцать\", \"двенадцать\", \"тринадцать\", \"четырнадцать\", \"пятнадцать\", \"шестнадцать\", \"семнадцать\", \"восемнадцать\", \"девятнадцать\"],\r\n  hundreds: [\"сто\", \"двести\", \"триста\", \"четыреста\", \"пятьсот\", \"шестьсот\", \"семьсот\", \"восемьсот\", \"девятьсот\"],\r\n  exactWordsMapping: { 1: \"одна\", 2: \"две\" },\r\n  currency: {\r\n    \"RUB\": {\r\n      parts: {\r\n        integer: [\r\n          { word: \"рубль\", values: [1] },\r\n          { word: \"рубля\", values: [2, 3, 4] },\r\n          { word: \"рублей\", values: [0, 5, 6, 7, 8, 9] },\r\n        ],\r\n        fraction: [\r\n          { word: \"копейка\", values: [1] },\r\n          { word: \"копейки\", values: [2, 3, 4] },\r\n          { word: \"копеек\", values: [0, 5, 6, 7, 8, 9] },\r\n        ],\r\n      }\r\n    },\r\n    \"USD\": {\r\n      parts: {\r\n        integer: [\r\n          { word: \"доллар\", values: [1] },\r\n          { word: \"доллара\", values: [2, 3, 4] },\r\n          { word: \"долларов\", values: [0, 5, 6, 7, 8, 9] },\r\n        ],\r\n        fraction: [\r\n          { word: \"цент\", values: [1] },\r\n          { word: \"цента\", values: [2, 3, 4] },\r\n          { word: \"центов\", values: [0, 5, 6, 7, 8, 9] },\r\n        ],\r\n      },\r\n      useExacts: false,\r\n      point: \"и\"\r\n    },\r\n    \"EUR\": {\r\n      parts: {\r\n        integer: [{ word: \"евро\", values: ALL }],\r\n        fraction: [{ word: \"евроцент\", values: [1] }, { word: \"евроцента\", values: [2,3,4] }, { word: \"евроцентов\", values: ALL }]\r\n      },\r\n      useExacts: false,\r\n      point: \"и\"\r\n    },\r\n  },\r\n  texts: {\r\n    minus: \"минус\",\r\n  }\r\n};\r\n/** American English */\r\nconst en_US: DigitalWordsConfig = {\r\n  groups: {\r\n    1: [{ word: \"quadrillion\", values: ALL }],\r\n    2: [{ word: \"trillion\", values: ALL }],\r\n    3: [{ word: \"billion\", values: ALL }],\r\n    4: [{ word: \"million\", values: ALL }],\r\n    5: [{ word: \"thousand\", values: ALL }]\r\n  },\r\n  ones: [\"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\"],\r\n  tens: [\"ten\", \"twenty\", \"thirty\", \"forty\", \"fifty\", \"sixty\", \"seventy\", \"eighty\", \"ninety\"],\r\n  hundreds: [\"hundred\"],\r\n  teens: [\"eleven\", \"twelve\", \"thirteen\", \"fourteen\", \"fifteen\", \"sixteen\", \"seventeen\", \"eighteen\", \"nineteen\"],\r\n  currency: {\r\n    \"USD\": {\r\n      parts: {\r\n        integer: [{ word: \"dollar\", values: [1] }, { word: \"dollars\", values: ALL }],\r\n        fraction: [{ word: \"cent\", values: [1] }, { word: \"cents\", values: ALL }]\r\n      },\r\n      point: \"and\",\r\n      only: \"only\"\r\n    },\r\n    \"EUR\": {\r\n      parts: {\r\n        integer: [{ word: \"euro\", values: ALL }],\r\n        fraction: [{ word: \"eurocent\", values: [1] }, { word: \"eurocents\", values: ALL }]\r\n      },\r\n      point: \"and\"\r\n    },\r\n  },\r\n  texts: {\r\n    minus: \"minus\",\r\n    tenSplitter: \"-\",\r\n    delim1000: \",\"\r\n  }\r\n}\r\n/** British English */\r\nconst en_GB: DigitalWordsConfig = {\r\n  groups: {\r\n    1: [{ word: \"quadrillion\", values: ALL }],\r\n    2: [{ word: \"trillion\", values: ALL }],\r\n    3: [{ word: \"billion\", values: ALL }],\r\n    4: [{ word: \"million\", values: ALL }],\r\n    5: [{ word: \"thousand\", values: ALL }]\r\n  },\r\n  ones: [\"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\"],\r\n  tens: [\"ten\", \"twenty\", \"thirty\", \"forty\", \"fifty\", \"sixty\", \"seventy\", \"eighty\", \"ninety\"],\r\n  hundreds: [\"hundred\"],\r\n  teens: [\"eleven\", \"twelve\", \"thirteen\", \"fourteen\", \"fifteen\", \"sixteen\", \"seventeen\", \"eighteen\", \"nineteen\"],\r\n  currency: {\r\n    \"GBP\": {\r\n      parts: {\r\n        integer: [{ word: \"pound sterling\", values: [1] }, { word: \"pounds sterling\", values: ALL }],\r\n        fraction: [{ word: \"penny\", values: [1] }, { word: \"pennies\", values: ALL }]\r\n      },\r\n      point: \"and\",\r\n      only: \"only\"\r\n    },\r\n    \"EUR\": {\r\n      parts: {\r\n        integer: [{ word: \"euro\", values: ALL }],\r\n        fraction: [{ word: \"eurocent\", values: [1] }, { word: \"eurocents\", values: ALL }]\r\n      },\r\n      point: \"and\"\r\n    },\r\n    \"USD\": {\r\n      parts: {\r\n        integer: [{ word: \"dollar\", values: [1] }, { word: \"dollars\", values: ALL }],\r\n        fraction: [{ word: \"cent\", values: [1] }, { word: \"cents\", values: ALL }]\r\n      },\r\n      point: \"and\"\r\n    }\r\n  },\r\n  texts: {\r\n    minus: \"minus\",\r\n    tenSplitter: \"-\",\r\n    delim1000: \",\"\r\n  }\r\n}\r\n/** Dictionary of localized digital words for `NumberSpeller` class */\r\nexport const NumberSpellerDictionary = new Map<string, Readonly<DigitalWordsConfig>>([\r\n  [\"ru\", ru_RU], [\"ru-RU\", ru_RU],\r\n  [\"en\", en_US], [\"en-US\", en_US], [\"en-GB\", en_GB],\r\n]);\r\n","import { Strings } from \"../../Strings\";\nimport { Locale } from \"../Locale\";\nimport { CurrencyOptions, DigitalWordsConfig, NumberSpellerDictionary } from \"./NumberSpellerDictionary\";\n/**\n * This utility class consists exclusively of the static methods that operate on numeric values with localization taking into account\n * @since 0.4.0\n * @license MIT, (c) 2022 ALEXANDER STRELKOV, alv.strelkov@gmail.com\n */\nexport class NumberSpeller {\n  /**\n   *\n   * @param amount\n   * @param thousandGroup\n   * @param words\n   * @param options\n   * @returns\n   */\n  private static _digitGroup(amount: number, thousandGroup: number | undefined, words: Readonly<DigitalWordsConfig>, options: { currency?: string, isFraction?: boolean, fractionAsNumber?: boolean }): string {\n    let res = \"\";\n    let nBase = 1000000000000000.00, v = 0, srcAmount = amount;\n\n    for (let nGrp = 1; nGrp <= 5; nGrp++) {\n      v = Math.trunc(amount / nBase);\n      if (v > 0) {\n        amount -= Math.trunc(v * nBase);\n        res += this._digitGroup(v, nGrp, words, options);\n        if (amount > 0) {\n          res += words.texts.delim1000 || \"\";\n        }\n        res += \" \";\n      }\n      nBase = Math.trunc(nBase / 1000);\n    }\n    // hundreds\n    v = Math.trunc(amount / 100);\n    if (v > 0) {\n      amount -= Math.trunc(v * 100);\n      if (words.hundreds.length == 1) {\n        res += (words.ones[v] + \" \" + words.hundreds[0] + \" \");\n      } else {\n        res += (words.hundreds[v - 1] + \" \");\n      }\n    }\n    // tens\n    let fractions = \"\";\n    v = Math.trunc(amount / 10);\n    if (v > 0) {\n      amount -= Math.trunc(v * 10);\n      if (v == 1 && amount > 0) {\n        // 11-19\n        fractions += (words.teens[amount - 1] + \" \");\n        amount = 0;\n      } else {\n        fractions += words.tens[v - 1];\n        if (v > 1 && amount > 0 && words.texts.tenSplitter) {\n          fractions += words.texts.tenSplitter;\n        } else {\n          fractions += \" \";\n        }\n      }\n    }\n    // units\n    let item;\n    let more = \"\";\n    let pointWord = \"\";\n    let useExacts = true;\n    let currOptions: CurrencyOptions | undefined = undefined;\n    if (thousandGroup !== undefined) {\n      item = words.groups[thousandGroup].find(obj => obj.values === undefined || obj.values.indexOf(amount) >= 0);\n    } else if (options.currency) {\n      currOptions = words.currency[options.currency];\n      if (currOptions) {\n        useExacts = currOptions.useExacts ?? true;\n        if (options.isFraction) {\n          item = currOptions.parts?.fraction.find(obj => obj.values === undefined || obj.values.indexOf(amount) >= 0);\n          pointWord = Strings.trimAll(currOptions.point) || \"\";\n          pointWord = (pointWord != \"\" ? pointWord + \" \" : \"\");\n        } else {\n          item = currOptions.parts?.integer.find(obj => obj.values === undefined || obj.values.indexOf(amount) >= 0);\n        }\n      }\n    }\n    if (item) {\n      more = item.word;\n    }\n\n    if (amount > 0) {\n      let word = words.ones[amount];\n      if (useExacts && words.exactWordsMapping && (options.isFraction || thousandGroup == 5)) {\n        word = words.exactWordsMapping[amount] ?? word;\n      }\n      fractions += word;\n    } else if (srcAmount == 0) {\n      fractions += words.ones[0];\n    }\n\n    return (res + pointWord + (options.isFraction && options.fractionAsNumber ? Strings.right(\"0\" + String(srcAmount), 2) : fractions)).trimEnd() + \" \" + more;\n  }\n  /**\n   * Converts an integer value in words\n   * @param value A number to convert\n   * @param options An object containing certain properties and their values\n   * @returns String\n   * @static\n   */\n  static spellInteger(value: number, options?: { locale?: string | Locale }): string {\n    const oLocale = options?.locale instanceof Locale ? options.locale : new Locale(options?.locale);\n\n    const words = NumberSpellerDictionary.get(oLocale.baseName!);\n    if (!words) {\n      return String(value);\n    }\n    if (!Number.isFinite(value)) {\n      return String(value);\n    }\n    let signWord = \"\";\n    if (value < 0) {\n      value = Math.abs(value);\n      signWord = words.texts?.minus ?? \"-\";\n    }\n\n    return signWord + this._digitGroup(Math.trunc(value), undefined, words, {}).trimEnd();\n  }\n  /**\n   * Converts amount of money in words\n   * @param value  Sum to convert\n   * @param options Configuration object\n   * @returns String\n   * @throws Error if the _locale_ value is invalid in `options`\n   * @static\n   */\n  static spellCurrency(value: number, options?: { currency?: string, locale?: string | Locale, fractionAsNumber?: boolean }): string {\n    const oLocale = options?.locale instanceof Locale ? options.locale : new Locale(options?.locale);\n    const words = NumberSpellerDictionary.get(oLocale.baseName!);\n\n    if (!words) {\n      throw new TypeError(`Unknown locale: ${oLocale.baseName}`);\n    }\n\n    let currency = options?.currency ?? \"\";\n    if (currency.trim() == \"\" && Object.keys(words.currency).length > 0) {\n      currency = Object.keys(words.currency)[0];\n    }\n\n    if (!words.currency[currency]) {\n      throw new TypeError(`Unknown currency '${currency}' in locale '${oLocale.baseName}'`);\n    }\n    if (!Number.isFinite(value)) {\n      throw new RangeError(`Invalid value: ${value}`);\n    }\n\n    let signWord = \"\";\n    if (value < 0) {\n      value = Math.abs(value);\n      signWord = (words.texts?.minus ?? \"-\") + \" \";\n    }\n\n    const intPart = Math.trunc(value);\n    const decPart = Math.round((value - intPart) * 100);\n\n    let sVal = signWord + this._digitGroup(intPart, undefined, words, { currency, isFraction: false });\n    if (sVal != \"\") {\n      sVal += \" \";\n    }\n    return sVal + (decPart == 0 && words.currency[currency].only\n                      ? words.currency[currency].only\n                      : this._digitGroup(decPart, undefined, words,\n                                    { currency, isFraction: true, fractionAsNumber: options?.fractionAsNumber ?? true }\n                        )\n                  );\n  }\n  /**\n   * Gets the result of the specified _unit_ formatting\n   * @param value A value in units\n   * @param unit Required value in unit formatting. Possible values are [core unit identifiers](https://tc39.es/proposal-unified-intl-numberformat/section6/locales-currencies-tz_proposed_out.html#sec-issanctionedsimpleunitidentifier) that was selected for use in ECMAScript. Pairs of simple units can be concatenated with \"-per-\" to make a compound unit.\n   * @param options Configuration object\n   * @returns String\n   * @throws Error if the _locale_ value is invalid in `options`\n   * @static\n   */\n  static spellUnit(value: number, unit: string, options?: { locale?: string | Locale, unitDisplay?: \"long\"|\"short\"|\"narrow\", valueAsNumber?: boolean}): string {\n    const oLocale = options?.locale instanceof Locale ? options.locale : new Locale(options?.locale);\n    let output = (new Intl.NumberFormat(oLocale.baseName, {style: \"unit\", unit, unitDisplay: options?.unitDisplay ?? \"long\"})).format(value);\n    if ( !(options?.valueAsNumber??false) && Number.isInteger(value) ) {\n      output = NumberSpeller.spellInteger(value, {locale: options?.locale}) + \" \"+ Strings.getLastToken(output, \" \")[0];\n    }\n    return output;\n  }\n\n}\n","import { Format } from \"./Format\";\n\n/**\n * The abstract base class for all number formats. This class provides the interface for formatting and parsing numbers.\n */\nexport abstract class NumberFormat extends Format {\n\n  public static DEFAULT = \"[default]\";\n  public static DECIMAL = \"[decimal]\";\n  public static CURRENCY = \"[currency]\";\n  public static PERCENT = \"[percent]\";\n  public static UNIT = \"[unit]\";\n\n  /**\n   * @override\n   */\n  override format(value: number): string {\n    return super.format(value);\n  }\n\n}\n","/**\n *                    This class is based on the following excellent work:\n ***********************************************************************************************\n * Javascript-number-formatter\n * Lightweight & Fast JavaScript Number Formatter\n *\n * @preserve IntegraXor Web SCADA - JavaScript Number Formatter (http://www.integraxor.com/)\n * @author KPL\n * @maintainer Rob Garrison\n * @copyright 2019 ecava\n * @license MIT\n * @link http://mottie.github.com/javascript-number-formatter/\n * @version 2.0.9\n ***********************************************************************************************/\n\nimport { Arrays } from \"../../Arrays\";\nimport { Numbers } from \"../../Numbers\";\nimport { Strings } from \"../../Strings\";\nimport { Locale } from \"../Locale\";\nimport { NumberFormat } from \"./NumberFormat\";\n\ntype MaskObject = {\n  integer: string,\n  fraction: string,\n  decimal?: string,\n  separator?: string,\n  prefix: string,\n  suffix: string,\n  mask: string,\n  maskHasNegativeSign?: boolean,\n  maskHasPositiveSign?: boolean\n};\n\ntype ValueObject = {\n  value: number | string,\n  integer: string,\n  fraction: string,\n  sign: string,\n  result?: string\n};\n\nexport type DecimalFormatOptions = Omit<Intl.NumberFormatOptions, \"style\"> & { locales?: string | string[] | Locale };\n\nconst maskRegex = /[0-9\\-+#]/;\nconst notMaskRegex = /[^\\d\\-+#]/g;\n\nconst DEFAULT_PATTERN       = \"[Default]\";\nconst MAX_DECIMAL_PATTERNS  = 4;\n\n/**\n * Decimal number formatter is a concrete subclass of `NumberFormat` that formats decimal numbers.\n * It has a variety of features designed to make it possible to parse and format numbers in any locale. It also supports different kinds of\n * numbers, including integers (123), fixed-point numbers (123.4), scientific notation (1.23E4), percentages (12%), and\n * currency amounts ($123).\n *\n * A number display format can have up to four _sections_. Only the first is required. The three other sections determine how the data displays if its value is negative, zero, or _null_. The sections are separated by semi-colons:\n * `positive-format;negative-format;zero-format;null-format`. For example:  #,##0.00;(#,##0.00);-;empty\n *\n * You can use special characters:\n * - \\# - A number\n * - 0 - A required number; a number will display for every 0 in the mask\n *\n * Percent signs, decimal points, parentheses, and spaces display as entered in the mask.\n *\n * In general, a number display format should include at least one 0. If users enter 0 in a field with the mask ###, the field will appear to be blank if you do not provide a zero-format section. If the mask is ###.##, only the period displays. If you want two decimal places to display even if both are 0, use the mask ##0.00.\n *\n * You can use a few _keywords_ also. Enclose display format keywords in square brackets ([]). For example, you can use the keyword [General] or [Default] when you want to determine the localized format for a decimal number. Four other available keywords are\n * _Decimal_, _Currency_, _Unit_ and _Percent_. All keywords are case insensitive.\n * @since 0.5.0\n * @license MIT, (c) 2022 ALEXANDER STRELKOV, alv.strelkov@gmail.com\n */\nexport class DecimalFormat extends NumberFormat {\n\n  private _formatter: Intl.NumberFormat | undefined;\n  private _error: Error | undefined;\n  private _pattern: string;\n  private _subpatterns: string[];\n  private _maskObjects: MaskObject[] = Array(MAX_DECIMAL_PATTERNS).fill({});\n  private _options: DecimalFormatOptions;\n\n  constructor(pattern: string = DEFAULT_PATTERN, options?: DecimalFormatOptions) {\n    super();\n\n    const locales = options?.locales instanceof Locale ? options.locales.fullName : options?.locales;\n\n    this._options = { ...options };\n    this._pattern = (Strings.trimAll(pattern) || DEFAULT_PATTERN);\n    this._subpatterns = Arrays.padEnd(this._pattern.split(\";\"), MAX_DECIMAL_PATTERNS, \"\");\n    this._subpatterns.map((val, idx, arr) => arr[idx] = val.trim());\n\n    try {\n      const checkMask = Strings.replaceAll(this._pattern, \" \", \"\")!.toLowerCase()\n      switch (checkMask) {\n        case NumberFormat.DEFAULT:\n        case NumberFormat.DECIMAL:\n        case \"[general]\":\n          this._formatter = new Intl.NumberFormat(locales, options);\n          this._subpatterns.length = 0;\n          break;\n        case NumberFormat.CURRENCY:\n          this._formatter = new Intl.NumberFormat(locales, { style: \"currency\", currency: options?.currency });\n          this._subpatterns.length = 0;\n          break;\n        case NumberFormat.UNIT:\n          this._formatter = new Intl.NumberFormat(locales, { style: \"unit\", unit: options?.unit });\n          this._subpatterns.length = 0;\n          break;\n        case NumberFormat.PERCENT:\n          this._formatter = new Intl.NumberFormat(locales, { style: \"percent\" });\n          this._subpatterns.length = 0;\n          break;\n        default:\n          // do masks' parsing ourself\n          this._maskObjects.map((val, idx, arr) => { arr[idx] = this._parseDisplayMask(this._subpatterns[idx]) });\n      }\n    } catch (e) {\n      // May be one of these conditions occurs:\n      // 1) 'style' is \"currency\", but 'currency' property value is not valid or empty\n      // 2) 'style' is \"unit\", but 'unit' property value is not valid or empty\n      // So, we apply default decimal formatter for now, but will append '[?]' text to the end of 'format()'s method output\n      this._error = e as Error;\n      this._options.currency = this._options.unit = undefined;\n      this._formatter = new Intl.NumberFormat(locales, this._options);\n      this._subpatterns.length = 0;\n    }\n  }\n\n  private _getIndex(mask: string): number {\n    return mask.search(maskRegex);\n  }\n\n  private _parseDisplayMask(mask: string = \"#.##\"): MaskObject {\n    const maskObj: MaskObject = { integer: \"\", fraction: \"\", mask: \"\", prefix: \"\", suffix: \"\" };\n    const len = mask.length;\n\n    if (len == 0) {\n      return maskObj;\n    }\n\n    const start = this._getIndex(mask);\n    if (start < 0) {\n      maskObj.prefix = mask;\n      maskObj.mask = \"\";\n      return maskObj;\n    }\n    maskObj.prefix = start > 0 ? mask.substring(0, start) : \"\";\n\n    // Reverse string: not an ideal method if there are surrogate pairs\n    const end = this._getIndex(mask.split(\"\").reverse().join(\"\"));\n    const offset = len - end;\n    const substr = mask.substring(offset, offset + 1);\n    // Add 1 to offset if mask has a trailing decimal/comma\n    const indx = offset + (\".,\".indexOf(substr) >= 0 ? 1 : 0);\n    maskObj.suffix = end > 0 ? mask.substring(indx, len) : \"\";\n\n    maskObj.mask = mask.substring(start, indx);\n    maskObj.maskHasNegativeSign = maskObj.mask.charAt(0) === \"-\";\n    maskObj.maskHasPositiveSign = maskObj.mask.charAt(0) === \"+\";\n\n    // Search for group separator & decimal; anything not digit,\n    // not +/- sign, and not #\n    let result = maskObj.mask.match(notMaskRegex);\n    // Treat the right most symbol as decimal\n    maskObj.decimal = (result && result[result.length - 1]) || \".\";\n    // Treat the left most symbol as group separator\n    maskObj.separator = (result && result[1] && result[0]) || \",\";\n\n    // Split the decimal for the format string if any\n    let splittedDec = maskObj.mask.split(maskObj.decimal);\n    maskObj.integer = splittedDec[0] || \"\";\n    maskObj.fraction = splittedDec[1] || \"\";\n    return maskObj;\n  }\n\n  private _processValue(value: number, maskObj: MaskObject, options: Intl.NumberFormatOptions & { enforceMaskSign?: boolean }) {\n    const valObj: ValueObject = { value, integer: \"\", fraction: \"\", sign: \"\" };\n    let isNegative = (value < 0);\n    if (isNegative) {\n      // Process only abs(), and turn on flag.\n      valObj.value = -value;\n      valObj.sign = \"-\";\n    }\n\n    let multiplier = 1.0;\n    if (maskObj.suffix.trim() == \"%\" || maskObj.prefix.trim() == \"%\") {\n      multiplier = 100.0;\n    }\n    valObj.value = Numbers.round(+valObj.value * multiplier, maskObj.fraction.length);\n    // Convert number to string to trim off *all* trailing decimal zero(es)\n    //valObj.value = Number(valObj.value).toString();\n    valObj.value = String(valObj.value);\n\n    // Fill back any trailing zero according to format\n    // look for last zero in format\n    const posTrailZero = maskObj.fraction.lastIndexOf(\"0\") || -1;\n    let [valInteger = \"0\", valFraction = \"\"] = valObj.value.split(\".\");\n    if (!valFraction || (valFraction && valFraction.length <= posTrailZero)) {\n      valFraction = posTrailZero < 0\n        ? \"\"\n        : (Number(\"0.\" + valFraction).toFixed(posTrailZero + 1)).replace(\"0.\", \"\");\n    }\n\n    valObj.integer = valInteger;\n    valObj.fraction = valFraction;\n    this._addSeparators(valObj, maskObj);\n\n    // Remove negative sign if result is zero\n    if (valObj.result === \"0\" || valObj.result === \"\") {\n      // Remove negative sign if result is zero\n      isNegative = false;\n      valObj.sign = \"\";\n    }\n\n    if (!isNegative && maskObj.maskHasPositiveSign) {\n      valObj.sign = \"+\";\n    } else if (isNegative && maskObj.maskHasPositiveSign) {\n      valObj.sign = \"-\";\n    } else if (isNegative) {\n      valObj.sign = options.enforceMaskSign && !maskObj.maskHasNegativeSign\n        ? \"\"\n        : \"-\";\n    }\n\n    return valObj;\n  }\n\n  private _addSeparators(valObj: ValueObject, maskObj: MaskObject): void {\n    valObj.result = \"\";\n    // Look for separator\n    const szSep = maskObj.integer.split(maskObj.separator || \"\");\n    // Join back without separator for counting the pos of any leading 0\n    const maskInteger = szSep.join(\"\");\n\n    const posLeadZero = maskInteger.indexOf(\"0\");\n    if (posLeadZero > -1) {\n      valObj.integer = valObj.integer.padStart(maskInteger.length - posLeadZero, \"0\");\n    } else if (Number(valObj.integer) === 0) {\n      valObj.integer = \"\";\n    }\n\n    // Process the first group separator from decimal (.) only, the rest ignore.\n    // get the length of the last slice of split result.\n    const posSeparator = (szSep[1] && szSep[szSep.length - 1].length);\n    if (posSeparator) {\n      const len = valObj.integer?.length || 0;\n      const offset = len % posSeparator;\n      for (let indx = 0; indx < len; indx++) {\n        valObj.result += valObj.integer.charAt(indx);\n        // -posSeparator so that won't trail separator on full length\n        if (!((indx - offset + 1) % posSeparator) && indx < len - posSeparator) {\n          valObj.result += maskObj.separator;\n        }\n      }\n    } else {\n      valObj.result = valObj.integer;\n    }\n\n    valObj.result += (maskObj.fraction && valObj.fraction)\n      ? maskObj.decimal + valObj.fraction\n      : \"\";\n\n  }\n  /**\n   * @override\n   */\n  override format(value: number | null): string {\n\n    if (value == null || isNaN(Number(value))) {\n      // Null or invalid inputs\n      return (this._subpatterns[3] || \"\");\n    }\n\n    if (this._formatter) {\n      // Intl formatter was defined\n      return this._formatter.format(value) + (this._error ? \" [?]\" : \"\");\n    }\n\n    let enforceMaskSign = false;\n    let maskObj = this._maskObjects[0];\n    if (value == 0 && this._subpatterns[2] != \"\") {\n      maskObj = this._maskObjects[2];\n    } else if (value < 0 && this._subpatterns[1] != \"\") {\n      maskObj = this._maskObjects[1];\n      enforceMaskSign = true;\n    }\n\n    //const maskObj = this._parseDisplayMask(pattern);\n    const valObj = this._processValue(value, maskObj, { ...this._options, enforceMaskSign });\n    return `${maskObj.prefix}${valObj.sign}${valObj.result}${maskObj.suffix}`;\n  };\n\n}\n","import { Arrays } from \"../../Arrays\";\nimport { Strings } from \"../../Strings\";\nimport { Format } from \"./Format\";\n\n/**\n * String display formats can have three sections. The first is required and contains the format for strings, the second is optional and specifies how to represent nulls, the third is optional too and specifies a fill character (placeholder): `string-format[;null-format[;placeholder]]`.\n * In a string format mask, each at-sign (@) represents a character in the string and all other characters represent themselves.\n * @since 0.5.0\n * @license MIT, (c) 2022 ALEXANDER STRELKOV, alv.strelkov@gmail.com\n */\nexport class StringFormat extends Format {\n  /**\n   * Returns a string value that was formatted with a string format mask `pattern`\n   * @param value Source string or _null_ value\n   * @param pattern Format mask devided by sections (optional)\n   * @returns Formatted string\n   * @static\n   * @example\n   * console.log( StringFormat.format(\"1234567890\", \"+7(@@@)@@@-@@-@@\") );  // +7(123)456-78-90\n   * console.log( StringFormat.format(null, \"+7(@@@)@@@-@@-@@;None\") );     // None\n   * console.log( StringFormat.format(\"\", \"+7(@@@)@@@-@@-@@;?;_\") );        // +7(___)___-__-__\n   */\n  static format(value: string | null, pattern?: string): string {\n\n    pattern = pattern?.trim() || \"\";\n    if ( !pattern || ('[general],[default],'.indexOf(pattern.toLowerCase()+\",\") >= 0) ) {\n      return String(value);\n    }\n\n    const subpatterns = Arrays.padEnd(pattern.split(\";\"), 3, \"\");\n    subpatterns.map((val,idx,arr)=>arr[idx] = val.trim());\n\n    if (value == null) {\n      return subpatterns[1] || \"\";\n    }\n\n    let out = '';\n    let k;\n    for (let char of value) {\n      k = subpatterns[0].indexOf(\"@\");\n      if (k >= 0) {\n        out += subpatterns[0].slice(0, k) + char;\n        subpatterns[0] = subpatterns[0].slice(k+1);\n      } else {\n        out += subpatterns[0];\n        subpatterns[0] = \"\";\n        break;\n      }\n    }\n\n    if (subpatterns[0].length > 0) {\n      out += Strings.replaceAll(subpatterns[0], \"@\", subpatterns[2].slice(0,1) || \" \")!;\n    }\n\n    return out;\n  }\n\n}\n","import { Time } from \"./Time\";\r\n\r\nexport class Interval {\r\n    private readonly msPerDay: number = 8.64e7;\r\n    private _ms = 0;\r\n\r\n    constructor(v?: Date|Interval|Time|number) {\r\n        if (v instanceof Interval || v instanceof Date || v instanceof Time) {\r\n            this._ms = v.valueOf();\r\n        } else if (Number.isInteger(v)) {\r\n            this._ms = v!;\r\n        }\r\n    }\r\n\r\n    compare(v: Date|Interval|Time|number): number {\r\n        if (v == null)  return NaN;\r\n        return this._ms == v.valueOf() ? 0 : (this._ms > v.valueOf() ? 1: -1);\r\n    }\r\n\r\n    getTime(): number {\r\n        return this.valueOf();\r\n    }\r\n\r\n    getDays(): number {\r\n        return this.getHours() / 24;\r\n    }\r\n\r\n    getHours(): number {\r\n        return this.getSeconds() / 60;\r\n    }\r\n\r\n    getSeconds(): number {\r\n        return this._ms / 1000;    \r\n    }\r\n\r\n    add(v: Interval|Date|Time|number): Interval {\r\n        if (v != null) {\r\n            this._ms = this.getTime() + v.valueOf();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    subtruct(v: Interval|Date|Time|number): Interval {\r\n        if (v != null) {\r\n            this._ms = this.getTime() - v.valueOf();\r\n        }\r\n        return this;\r\n    }\r\n\r\n    valueOf(): number {\r\n        return this._ms;    \r\n    }\r\n\r\n    toJSON(): number {\r\n        return this.valueOf();\r\n    }\r\n\r\n    toString(): string {\r\n        const days = Math.floor( this.getDays() );\r\n        const msec = days * this.msPerDay;\r\n        const d = new Date(this._ms - msec);\r\n        return days+\" Day(s) and \"+ d.getUTCHours()+\r\n                        \":\"+d.getUTCMinutes()+\r\n                        \":\"+d.getUTCSeconds()+\r\n                        \":\"+d.getUTCMilliseconds();\r\n    }\r\n\r\n}","export enum ResultCode {\r\n    FAILURE = -1,\r\n    NOTHING = 0,\r\n    SUCCESS = 1\r\n}\r\n","export var isIdentifier = function (ast:any) {\r\n    return ast.type === 'Identifier';\r\n};\r\nexport var isBinaryExpression = function (ast:any) {\r\n    return ast.type === 'BinaryExpression';\r\n};\r\nexport var isMemberExpression = function (ast:any) {\r\n    return ast.type === 'MemberExpression';\r\n};\r\nexport var isNumericLiteral = function (ast:any) {\r\n    return ast.type === 'NumericLiteral';\r\n};\r\nexport var isBigIntLiteral = function (ast:any) {\r\n  return ast.type === 'BigIntLiteral';\r\n};\r\nexport var isStringLiteral = function (ast:any) {\r\n    return ast.type === 'StringLiteral';\r\n};\r\nexport var isBooleanLiteral = function (ast:any) {\r\n    return ast.type === 'BooleanLiteral';\r\n};\r\nexport var isRegExpLiteral = function (ast:any) {\r\n    return ast.type === 'RegExpLiteral';\r\n};\r\nexport var isNullLiteral = function (ast:any) {\r\n    return ast.type === 'NullLiteral';\r\n};\r\nexport var isArrayExpression = function (ast:any) {\r\n    return ast.type === 'ArrayExpression';\r\n};\r\nexport var isCallExpression = function (ast:any) {\r\n    return ast.type === 'CallExpression';\r\n};\r\nexport var isLogicalExpression = function (ast:any) {\r\n    return ast.type === 'LogicalExpression';\r\n};\r\nexport var isUnaryExpression = function (ast:any) {\r\n    return ast.type === 'UnaryExpression';\r\n};\r\nexport var isThisExpression = function (ast:any) {\r\n    return ast.type === 'ThisExpression';\r\n};\r\nexport var isConditionalExpression = function (ast:any) {\r\n    return ast.type === 'ConditionalExpression';\r\n};\r\nexport var isV8IntrinsicIdentifier = function (node:any) {\r\n    return node.type === 'V8IntrinsicIdentifier';\r\n};\r\nexport var isObjectExpression = function (ast:any) {\r\n    return ast.type === 'ObjectExpression';\r\n};\r\nexport var isObjectProperty = function (ast:any) {\r\n    return ast.type === 'ObjectProperty';\r\n};\r\n","import { Time } from \"../type/Time\";\r\nimport { Types } from \"../Types\";\r\nimport { Dates } from \"../Dates\";\r\nimport { Numbers } from \"../Numbers\";\r\nimport { Objects } from \"../Objects\";\r\nimport { Strings } from \"../Strings\";\r\nimport { Ciphers, EncodingFormat } from \"../Ciphers\";\r\n\r\nexport class Functions {\r\n    private static _sysFunc = new Map<string, Function>();\r\n    private static _userFunc = new Map<string, Function>();\r\n\r\n    static registerSystemFunction(name:string, func: Function): void {\r\n        name = name.trim()\r\n        Functions._sysFunc.set(name.toUpperCase(), func);\r\n    }\r\n\r\n    static registerUserFunction(name:string, func: Function): void {\r\n        name = name.trim();\r\n        Functions._userFunc.set(name.toUpperCase(), func);\r\n    }\r\n\r\n    static registerNamedUserFunction(func: Function): void {\r\n        if (func) {\r\n            Functions._userFunc.set(func.name.toUpperCase(), func);\r\n        }\r\n    }\r\n\r\n    static registerSystemFunctions(funcs: {name:string, func: Function}[]): void {\r\n        let len = funcs.length;\r\n        for (let i=0; i < len; i++) {\r\n            Functions.registerSystemFunction(funcs[i].name, funcs[i].func)\r\n        }\r\n    }\r\n\r\n    static registerUserFunctions(funcs: {name:string, func: Function}[]): void {\r\n        let len = funcs.length;\r\n        for (let i=0; i < len; i++) {\r\n            Functions.registerUserFunction(funcs[i].name, funcs[i].func);\r\n        }\r\n    }\r\n\r\n    static registerNamedUserFunctions(funcs: Function[]): void {\r\n        let len = funcs.length;\r\n        for (let i=0; i < len; i++) {\r\n            Functions.registerNamedUserFunction(funcs[i]);\r\n        }\r\n    }\r\n\r\n    static unregisterUserFunction(name:string): boolean {\r\n        name = name.trim()\r\n        return this._userFunc.delete(name.toUpperCase())\r\n    }\r\n\r\n    static getFunction(name: string): Function|undefined {\r\n        name = name.trim().toUpperCase();\r\n        if (Functions._sysFunc.has(name)) {\r\n            return Functions._sysFunc.get(name);\r\n        }\r\n        return Functions._userFunc.get(name);\r\n    }\r\n}\r\n\r\nlet isString  = (v:any):boolean => {return typeof(v)===\"string\"};\r\nlet isDate    = (v:any):boolean => {return (v && (v instanceof Date))};\r\n\r\n// register custom system functions\r\nFunctions.registerSystemFunctions([\r\n    /* general functions */\r\n    {name:'between',    func: (v:any, b1:any, b2:any): boolean => { return v >= b1 && v <= b2; } },\r\n    {name:'fork',       func: (v:any, opts:any, def: any = null): any => {return (v!=null && Objects.isObject(opts)) ? opts[v] : def;}},\r\n    {name:'ifnan',      func: (v1:any, v2:any) => { return Numbers.ifNaN(v1, v2)} },\r\n    {name:'ifnull',     func: (v1:any, v2:any) => { return Objects.ifNull(v1, v2);} },\r\n    {name:'iif',        func: (cond:boolean, v1:any, v2:any) => {return cond ? v1 : v2;} },\r\n    {name:'inlist',     func: (v: any, ...opts: any[]) => {return opts.includes(v);}},\r\n    {name:'isnull',     func: (v:any)=>{return (v===null)}},\r\n    {name:'isnumber',   func: (v:any)=>{return Objects.isNumber(v);}},\r\n    {name:'nullif',     func: (v1:any, v2:any) => { return Objects.nullIf(v1, v2);} },\r\n    {name:'rgb',        func: (r:number, g:number, b:number) => { return (r << 16) + (g << 8) + (b);} },\r\n    {name:'String',     func: (v:any) => {return String(v)} }, //{ return (v) ? \"\"+v  : null;} },\r\n    /* string functions */\r\n    {name:'asc',            func: (s:string) => {if(s==null) return null; return s.charCodeAt(0);} },\r\n    {name:'char',           func: (n:number) => {if(n==null) return null; return String.fromCharCode(n);} },\r\n    {name:'charAt',         func: (s:string, index:number) => {if(s==null) return null; return (''+s).charAt(index);} },\r\n    {name:'dec',            func: (s:string)=>{return Types.toDecimal(s);}},\r\n    {name:'decode',         func: (s:string, f: EncodingFormat=\"Base64\")=>{return Ciphers.decode(s, f)}},\r\n    {name:'encode',         func: (s:string, f: EncodingFormat=\"Base64\")=>{return Ciphers.encode(s, f)}},\r\n    {name:'endsWith',       func: (s:string, searchFor:string, size?:number) => {if(s==null) return null; return (''+s).endsWith(searchFor, size);} },\r\n    {name:'fill',           func: (s:string, count:number) => {if(!isString(s)) return null; return Strings.left(s.repeat(count), count);}},\r\n    {name:'format',         func: (t:string, ...x:any[])=>{return Strings.format(t, ...x)} },\r\n    {name:'hex',            func: (n:number) => {return (Objects.isNumber(n))?n.toString(16):\"\";}},\r\n    {name:'integer',        func: (s:string)=>{return Types.toInteger(s);}},\r\n    {name:'isdate',         func: (s:string)=>{return !isNaN(Date.parse(s));}},\r\n    {name:'isnumber',       func: (s:string)=>{return !isNaN(+s);}},\r\n    {name:'lasttoken',      func: (s:string, d:string)=>{if(!isString(s)||!isString(d)) return null; let [token, rest] = Strings.getLastToken(s,d); return token; }},\r\n    {name:'len',            func: (s?:string)=>{if(!isString(s)) return null; return s?.length}},\r\n    {name:'like',           func: (s:string, searchFor:string)=>{return Strings.like(s, searchFor)}},\r\n    {name:'left',           func: (s:string, count:number) => {return Strings.left(s, count);} },\r\n    {name:'leftTrim',       func: (s:string, chars?: string) => { return Strings.trimLeft(s, chars);} },\r\n    {name:'long',           func: (s:string)=>{return Types.toType(s, \"long\");}},\r\n    {name:'lower',          func: (s:string) => {if(!isString(s)) return null;  return s.toLowerCase();} },\r\n    {name:'match',          func: (s:string, regExp: RegExp): boolean|null => {if(!isString(s)) return null;  return s.search(regExp) >= 0;} },\r\n    {name:'mid',            func: (s:string, from:number, count?:number) => {if(!isString(s)) return null; return s.substring(from, typeof(count)===\"number\"?from+count:undefined);} },\r\n    {name:'number',         func: (s:string)=>{return Types.toNumber(s);}},\r\n    {name:\"padLeft\",        func: (s:string, size:number, padStr?:string) => {if(!isString(s)) return null; return `${s}`.padStart(size, padStr);} },\r\n    {name:\"padRight\",       func: (s:string, size:number, padStr?:string) => {if(!isString(s)) return null; return (''+s).padEnd(size, padStr);} },\r\n    {name:'pos',            func: (s:string, searchFor:string, index?:number) => {if(!isString(s)) return null; return s.indexOf(searchFor, index);} },\r\n    {name:'posr',           func: (s:string, searchFor:string, index?:number) => {if(!isString(s)) return null;  return s.lastIndexOf(searchFor, index);} },\r\n    {name:'real',           func: (s:string) => {return Types.toNumber(s)}},\r\n    {name:'repeat',         func: (s:string, count:number) => {if(!isString(s)) return null;  return s.repeat(count);} },\r\n    {name:'replace',        func: (s:string, searchFor:string, replaceWith:string, global?:boolean) => {if(!isString(s)) return null; return global ? s.replace(searchFor, replaceWith): s.replace(searchFor, replaceWith);} },\r\n    {name:'reverse',        func: (s:string)=>{return Strings.reverse(s);}},\r\n    {name:'right',          func: (s:string, count:number) => {return Strings.right(s, count);} },\r\n    {name:'rightTrim',      func: (s:string, chars?: string) => { return Strings.trimRight(s, chars);} },\r\n    {name:'space',          func: (n:number=1) => {if (n<0) {return '';} return ' '.repeat(n);}},\r\n    {name:'startsWith',     func: (s:string, searchFor:string, size?:number) => {if(!isString(s)) return null;  return s.startsWith(searchFor, size);} },\r\n    {name:'substr',         func: (s:string, from:number, to?:number) => {if(!isString(s)) return null; return s.substring(from, to);} },\r\n    {name:'token',          func: (s:string, d:string)=>{if(!isString(s)||!isString(d)) return null; let [token, rest] = Strings.getToken(s,d); return token; }},\r\n    {name:'trim',           func: (s:string, chars?: string) => {if(!isString(s)) return null;  return Strings.trimAll(s, chars);} },\r\n    {name:'trimEnd',        func: (s:string, chars?: string) => { return Strings.trimRight(s, chars);} },\r\n    {name:'trimStart',      func: (s:string, chars?: string) => { return Strings.trimLeft(s, chars);} },\r\n    {name:'upper',          func: (s:string) => {if(!isString(s)) return null;  return s.toUpperCase();} },\r\n    {name:'wordcap',        func: (s:string) => {if(!isString(s)) return null;  return s.toLowerCase().split(' ').map(word=>word.charAt(0).toUpperCase()+word.slice(1)).join(' ')}},\r\n\r\n    /* date/time functions */\r\n    {name:'date',           func: (v?:string|number|Date) => { return (v)? new Date(v) : new Date();} },\r\n    {name:'datetime',       func: (v?:string|number|Date) => { return (v)? new Date(v) : new Date();} },\r\n    {name:'day',            func: (d?:Date) => {d = d??(new Date()); return isDate(d)?d.getDate():null} },\r\n    {name:'dayname',        func: (d?:Date) => {d = d??(new Date()); return isDate(d)?d.toLocaleString('en-us', {weekday:'long'}):null} },\r\n    {name:'daynumber',      func: (d?:Date) => {d = d??(new Date()); return isDate(d)?d.getDay():null} },\r\n    {name:'daysafter',      func: (d1:Date, d2:Date) => { return Dates.daysAfter(d1, d2);} },\r\n    {name:'hour',           func: (d?:Date) => {d = d??(new Date()); return isDate(d)?d.getHours():null} },  /* A'la PowerBuilder */\r\n    {name:'hours',          func: (d?:Date) => {d = d??(new Date()); return isDate(d)?d.getHours():null} },\r\n    {name:'milliseconds',   func: (d?:Date) => {d = d??(new Date()); return isDate(d)?d.getMilliseconds():null} },\r\n    {name:'minutes',        func: (d?:Date) => {d = d??(new Date()); return isDate(d)?d.getMinutes():null} },\r\n    {name:'month',          func: (d?:Date) => {d = d??(new Date()); return isDate(d)?d.getMonth():null} },\r\n    {name:'now',            func: () => {return Date.now();} },\r\n    {name:'relativedate',   func: (d:Date, n:number) => {return Dates.relativeDate(d, n)} },\r\n    {name:'relativetime',   func: (d:Date, s:number) => {return Dates.relativeTime(d, s)} },\r\n    {name:'seconds',        func: (d?:Date) => {d = d??(new Date()); return isDate(d)?d.getSeconds():null} },\r\n    {name:'secondsafter',   func: (d1:Date, d2:Date)=>{return Dates.secondsAfter(d1, d2)}},\r\n    {name:'time',           func: (v:any) => {return new Time(v);} },\r\n    {name:'today',          func: () => {return new Date()} },\r\n    {name:'tzoffset',       func: () => {return (new Date()).getTimezoneOffset()} },\r\n    {name:'weekday',        func: (d?:Date) => {d = d??(new Date()); return isDate(d)?d.getDay():null} },\r\n    {name:'ymd',            func: (y:number,m?:number,d?:number) => { return new Date(y,m??0,d??1);} },\r\n    {name:'year',           func: (d?:Date) => {d = d??(new Date()); return isDate(d)?d.getFullYear():null} },\r\n    /* numeric functions */\r\n    {name:'abs',            func: (x:number) => {let v = Math.abs(x); if (v < Number.EPSILON) v = 0; return v;} },\r\n    {name:'atan',           func: (n:number)=>{return Math.atan(n)}},\r\n    {name:'ceil',           func: (x:number) => { return Math.ceil(x);} },\r\n    {name:'cos',            func: (n:number)=>{return Math.cos(n)}},\r\n    {name:'exp',            func: (n:number)=>{return Math.exp(n)}},\r\n    {name:'floor',          func: (x:number) => { return Math.floor(x);} },\r\n    {name:'greater',        func: (...x:number[]) => { return Math.max(...x);} },\r\n    {name:'int',            func: (x:number) => { return Math.round(x);} },\r\n    {name:'lesser',         func: (...x:number[]) => { return Math.min(...x);} },\r\n    {name:'log',            func: (x:number) => { return Math.log(x);} },\r\n    {name:'pi',             func: (x?:number) => {return Math.PI*((x===undefined)?1:x);} },\r\n    {name:'rand',           func: (x?:number) => {return Math.ceil(Math.random()*(x ?? 1))}},\r\n    {name:'round',          func: (x:number, d:number=0) => { return Numbers.round(x,d);} },\r\n    {name:'sign',           func: (n:number)=>{return n>0?1:(n<0?-1:0)}},\r\n    {name:'sin',            func: (n:number)=>{return Math.sin(n)}},\r\n    {name:'sqrt',           func: (x:number) => {return Math.sqrt(x);} },\r\n    {name:'tan',            func: (n:number)=>{return Math.tan(n)}},\r\n    {name:'truncate',       func: (x:number, d:number=0) => {return Numbers.truncate(x,d)}},\r\n]);\r\n","import * as t from './t';\r\nimport { parseExpression } from '@babel/parser';\r\nimport { Functions } from './Functions';\r\nimport { Strings } from '../Strings';\r\n\r\ntype ExpressionType =\r\n  \"BinaryExpression\"\r\n  | \"ConditionalExpression\"\r\n  | \"LogicalExpression\"\r\n  | \"UnaryExpression\"\r\n  | \"Identifier\"\r\n  | \"CallExpression\"\r\n  | \"MemberExpression\"\r\n  | \"ThisExpression\"\r\n  | \"NumericLiteral\"\r\n  | \"BigIntLiteral\"\r\n  | \"StringLiteral\"\r\n  | \"BooleanLiteral\"\r\n  | \"NullLiteral\"\r\n  | \"ArrayExpression\"\r\n  | \"ObjectExpression\";\r\n//  | \"ObjectProperty\";\r\n\r\n\r\nexport class CodeBlock {\r\n  private _error: string | null = null;\r\n  private _expr: string | null = null;\r\n  private _ast: any | null = null;\r\n  private _bindContext: boolean = false;\r\n  private _objFunc = new Map<string, Function>();\r\n  /**\r\n   * @constructor\r\n   * @param input   String expression to evaluate\r\n   * @param bindContext Allow to bind a context object to the `this` keyword in the object's methods (if defined)\r\n   */\r\n  constructor(input: string | null, bindContext: boolean = true) {\r\n    try {\r\n      this._bindContext = bindContext ?? true;\r\n\r\n      if (typeof input === \"string\") {\r\n        this._expr = Strings.trimAll(input) as string;\r\n        this._ast = parseExpression(this._expr || \"undefined\");\r\n      }\r\n    } catch (err: any) {\r\n      this._error = `Parser error: ${err}\\nExpression: ${input}`;\r\n    }\r\n  }\r\n  /**\r\n   * @readonly\r\n   */\r\n  get error(): string | null { return this._error; }\r\n  /**\r\n   * @readonly\r\n   */\r\n  get expression(): string | null { return this._expr; }\r\n  /**\r\n   * @readonly\r\n   */\r\n  get bindContext(): boolean { return this._bindContext; }\r\n  /**\r\n   * Evaluates expression on specified context object\r\n   * @param {Object} context    Any object on which you want to evaluate expression. If context is not specified only Global/Window properties enabled.\r\n   * @param {any} environment   Any additional options\r\n   * @returns Result of evaluation\r\n   */\r\n  eval(context: Object = {}, environment?: any): any {\r\n    // {} - global context\r\n    if (this.error) {\r\n      throw this.error;\r\n    }\r\n    let res: any = undefined;\r\n    if (this._ast && context) {\r\n      res = this.evaluate(this._ast, context, environment);\r\n    }\r\n    return res;\r\n  }\r\n  /**\r\n   * Registers function that will be understandable in the expression\r\n   * @param name Function name\r\n   * @param func Function object\r\n   */\r\n  registerFunction(name: string, func: Function): void {\r\n    name = name.trim().toUpperCase();\r\n    this._objFunc.set(name, func);\r\n  }\r\n  /**\r\n   * Registers named function that will be understandable in the expression\r\n   * @param func Function object\r\n   */\r\n  registerNamedFunction(func: Function): void {\r\n    if (func) {\r\n      let name = func.name.toUpperCase();\r\n      this._objFunc.set(name, func);\r\n    }\r\n  }\r\n  /**\r\n   * Gets function object by its name.\r\n   * @param name The case insensitive name of the function.\r\n   * @returns Function object if it was registered, else undefined\r\n   */\r\n  private getFunction(name: string): Function | undefined {\r\n    name = (name.trim()).toUpperCase();\r\n    return this._objFunc.get(name);\r\n  }\r\n  /**\r\n   * Evaluate expression that was set in constructor\r\n   * @param ast\r\n   * @param context\r\n   * @returns {*}\r\n   *\r\n   * @ignore\r\n   */\r\n  protected evaluate(ast: any, context: any, environment?: any): any {\r\n    //return this.Handlers[ast.type as keyof typeof Handlers](ast, context);\r\n    return this._handlers[ast.type as ExpressionType](ast, context, environment);\r\n  }\r\n  /**\r\n   *\r\n   * @param func\r\n   * @param astArgs\r\n   * @param context\r\n   * @returns\r\n   */\r\n  protected callFunc(func: Function, astArgs: any[], context: any, environment?: any) {\r\n    let thisArg = undefined;\r\n    if (this.bindContext) {\r\n      thisArg = context;\r\n    }\r\n    let args = astArgs.map((arg: any) => {\r\n      return this.evaluate(arg, context, environment);\r\n    });\r\n    return func.bind(thisArg)(...args);\r\n  }\r\n\r\n  private _handlers = {\r\n    BinaryExpression: (ast: any, context: any, environment?: any) => {\r\n      switch (ast.operator) {\r\n        case '+':\r\n          return this.evaluate(ast.left, context, environment) + this.evaluate(ast.right, context, environment);\r\n        case '-':\r\n          return this.evaluate(ast.left, context, environment) - this.evaluate(ast.right, context, environment);\r\n        case '**':  /*+ Exponent */\r\n          return Math.pow(this.evaluate(ast.left, context, environment), this.evaluate(ast.right, context, environment));\r\n        case '*':\r\n          return this.evaluate(ast.left, context, environment) * this.evaluate(ast.right, context, environment);\r\n        case '/':\r\n          return this.evaluate(ast.left, context, environment) / this.evaluate(ast.right, context, environment);\r\n        case '%':   /* modules */\r\n          return this.evaluate(ast.left, context, environment) % this.evaluate(ast.right, context, environment);\r\n        case '??':  /* if (null || undefined, exp2, exp1) */\r\n          return this.evaluate(ast.left, context, environment) ?? this.evaluate(ast.right, context, environment);\r\n        case '===':\r\n          return this.evaluate(ast.left, context, environment) === this.evaluate(ast.right, context, environment);\r\n        case '==':\r\n          return this.evaluate(ast.left, context, environment) == this.evaluate(ast.right, context, environment);\r\n        case '!==':\r\n          return this.evaluate(ast.left, context, environment) !== this.evaluate(ast.right, context, environment);\r\n        case '!=':\r\n          return this.evaluate(ast.left, context, environment) != this.evaluate(ast.right, context, environment);\r\n        case '>':\r\n          return this.evaluate(ast.left, context, environment) > this.evaluate(ast.right, context, environment);\r\n        case '>=':\r\n          return this.evaluate(ast.left, context, environment) >= this.evaluate(ast.right, context, environment);\r\n        case '<':\r\n          return this.evaluate(ast.left, context, environment) < this.evaluate(ast.right, context, environment);\r\n        case '<=':\r\n          return this.evaluate(ast.left, context, environment) <= this.evaluate(ast.right, context, environment);\r\n        case 'in': {\r\n          var right = this.evaluate(ast.right, context, environment);\r\n          if (!right)\r\n            return false;\r\n          if (typeof right === 'object' && right instanceof Array) {\r\n            return right.indexOf(this.evaluate(ast.left, context, environment)) !== -1;\r\n          }\r\n          return false;\r\n        }\r\n        case '&':\r\n          return this.evaluate(ast.left, context, environment) & this.evaluate(ast.right, context, environment);\r\n        case '|':\r\n          return this.evaluate(ast.left, context, environment) | this.evaluate(ast.right, context, environment);\r\n        case '^':\r\n          return this.evaluate(ast.left, context, environment) ^ this.evaluate(ast.right, context, environment);\r\n        case '>>>':\r\n          return this.evaluate(ast.left, context, environment) >> this.evaluate(ast.right, context, environment);\r\n        case '>>':\r\n          return this.evaluate(ast.left, context, environment) >> this.evaluate(ast.right, context, environment);\r\n        case '<<':\r\n          return this.evaluate(ast.left, context, environment) << this.evaluate(ast.right, context, environment);\r\n        default:\r\n          throw new SyntaxError(`Unknown binary expression: ${ast.operator}`);\r\n      }\r\n    },\r\n\r\n    ConditionalExpression: (ast: any, context: any, environment?: any) => {\r\n      return this.evaluate(ast.test, context, environment) ? this.evaluate(ast.consequent, context, environment) : this.evaluate(ast.alternate, context, environment);\r\n    },\r\n\r\n    LogicalExpression: (ast: any, context: any, environment?: any) => {\r\n      switch (ast.operator) {\r\n        case '&&':  /* AND */\r\n          return this.evaluate(ast.left, context, environment) && this.evaluate(ast.right, context, environment);\r\n        case '||':  /* OR */\r\n          return this.evaluate(ast.left, context, environment) || this.evaluate(ast.right, context, environment);\r\n        case '??':  /* ?? */\r\n          return this.evaluate(ast.left, context, environment) ?? this.evaluate(ast.right, context, environment);\r\n        default:\r\n          throw new SyntaxError(`Unknown logical expression: ${ast.operator}`);\r\n      }\r\n    },\r\n\r\n    UnaryExpression: (ast: any, context: any, environment?: any) => {\r\n      switch (ast.operator) {\r\n        case '!':\r\n          return !this.evaluate(ast.argument, context, environment);\r\n        case '-':\r\n          return -this.evaluate(ast.argument, context, environment);\r\n        case '+':   /* converts to Number */\r\n          return +this.evaluate(ast.argument, context, environment);\r\n        case '~':   /* bits invertion */\r\n          return ~this.evaluate(ast.argument, context, environment);\r\n        case 'typeof':   /*  */\r\n          return typeof this.evaluate(ast.argument, context, environment);\r\n        case 'void':   /*  */\r\n          return void this.evaluate(ast.argument, context, environment);\r\n        default:\r\n          throw new SyntaxError(`Unknown unary expression: ${ast.operator}`);\r\n      }\r\n    },\r\n\r\n    Identifier: (ast: any, context: any, environment?: any) => {\r\n      switch (ast.name) {\r\n        case 'undefined':\r\n          return undefined;\r\n        //case 'null':\r\n        //    return null;\r\n        default:\r\n          return context[ast.name];\r\n      }\r\n      // throw new Error(\"Unknown identifier\");\r\n    },\r\n\r\n    CallExpression: (ast: any, context: any, environment?: any) => {\r\n      if (!t.isV8IntrinsicIdentifier(ast.callee) && t.isIdentifier(ast.callee)) {\r\n        let func: Function | undefined;\r\n\r\n        if (typeof (context[ast.callee.name]) === \"function\") {\r\n          func = context[ast.callee.name] as Function;\r\n        } else {\r\n          func = this.getFunction(ast.callee.name) ||\r\n            Functions.getFunction(ast.callee.name);\r\n        }\r\n\r\n        if (func) {\r\n          return this.callFunc(func, ast.arguments, context, environment);\r\n        }\r\n        throw new SyntaxError(`Function '${ast.callee.name}' did not be resigtered.`);\r\n        /*\r\n        var self = this;\r\n        var args = ast.arguments.map(function (arg:any) {\r\n            return self.evaluate(arg, context);\r\n        });\r\n        return func.call.apply(func,[null, ...args]);\r\n        */\r\n      }\r\n      throw new SyntaxError(`Unknown call expression: ${ast.callee.name}`);\r\n    },\r\n\r\n    MemberExpression: (ast: any, context: any, environment?: any) => {\r\n      var obj = this.evaluate(ast.object, context, environment);\r\n      if (!obj)\r\n        return undefined;\r\n      if (t.isIdentifier(ast.property)) {\r\n        return this.evaluate(ast.property, obj, environment);\r\n      }\r\n      if (t.isMemberExpression(ast.property)) {\r\n        return obj[this.evaluate(ast.property, context, environment)];\r\n      }\r\n      if (t.isNumericLiteral(ast.property) || t.isStringLiteral(ast.property)) {\r\n        return obj[ast.property.value];\r\n      }\r\n      if ((t.isBinaryExpression(ast.property) || t.isLogicalExpression(ast.property)) && typeof obj.filter === 'function') {\r\n        let self = this;\r\n        return obj.filter(function (item: any) { return self.evaluate(ast.property, { context: context, __scope: item }, environment); });\r\n      }\r\n      throw new SyntaxError(`Unknown member expression: ${ast.property}`);\r\n    },\r\n\r\n    ThisExpression: (ast: any, context: any, environment?: any) => {\r\n      return context.__scope;\r\n    },\r\n\r\n    NumericLiteral: (ast: any) => {\r\n      return ast.value;\r\n    },\r\n    BigIntLiteral: (ast: any) => {\r\n      /* es2020\r\n        return BigInt(ast.value);\r\n      */\r\n      return ast.value;\r\n    },\r\n    StringLiteral: (ast: any) => {\r\n      return ast.value;\r\n    },\r\n\r\n    BooleanLiteral: (ast: any) => {\r\n      return ast.value;\r\n    },\r\n\r\n    NullLiteral: (ast: any) => {\r\n      return null;\r\n    },\r\n\r\n    RegExpLiteral: (ast: any) => {\r\n      return new RegExp(ast.value);\r\n    },\r\n\r\n    ArrayExpression: (ast: any, context: any, environment?: any) => {\r\n      let self = this;\r\n      return ast.elements.map(function (elem: any) {\r\n        return self.evaluate(elem, context, environment);\r\n      });\r\n    },\r\n\r\n    ObjectExpression: (ast: any, context: any, environment?: any) => {\r\n      let obj: any = {};\r\n      let len: number = ast.properties.length;\r\n      let name: string;\r\n      let val;\r\n      let child;\r\n      for (let i = 0; i < len; i++) {\r\n        child = ast.properties[i];\r\n        if (t.isObjectProperty(child)) {\r\n          if (t.isIdentifier(child.key)) {\r\n            name = child.key.name;\r\n          } else {\r\n            name = this.evaluate(child.key, context, environment);\r\n          }\r\n          val = this.evaluate(child.value, context, environment);\r\n          obj[name] = val;\r\n        }\r\n      }\r\n      return obj;\r\n    }\r\n\r\n  }\r\n\r\n}\r\n\r\n","import { RunTimeException } from \"./RunTimeException\";\r\n\r\nexport class ClassCastException extends RunTimeException {\r\n\r\n}\r\n","import { RunTimeException } from \"./RunTimeException\";\r\n\r\nexport class IllegalJsonException extends RunTimeException {\r\n\r\n}\r\n","import { RunTimeException } from \"./RunTimeException\";\r\n\r\n/**\r\n * Thrown by various accessor methods to indicate that the element being requested does not exist\r\n */\r\nexport class NoSuchElementException extends RunTimeException {\r\n\r\n}\r\n","import { RunTimeException } from \"./RunTimeException\";\n\nexport class ParseException extends RunTimeException {\n\n}\n","import { HttpParams } from \"@angular/common/http\";\nimport { Ciphers } from \"../Ciphers\";\nimport { Objects } from \"../Objects\";\n\nexport const JSONRPC_VERSION_2: string = \"2.0\";\nexport const JSONRPC_VERSION = JSONRPC_VERSION_2;\n/** Type of `id` property. The value SHOULD normally not be Null and Numbers SHOULD NOT contain fractional parts */\nexport type JsonRpcId = number | string | null;  // null - can be interpreted by the server side as a notification call\n/** Parameters for the rpc call MUST be provided as a Structured value. Either by-position through an Array or by-name through an Object. */\nexport type JsonRpcParams = {[key:string]: any} | [];\n/** Type of JSON-RPC `Request` object */\nexport type JsonRpcRequest = { jsonrpc: typeof JSONRPC_VERSION_2, method: string, id: JsonRpcId, params?: JsonRpcParams};\n/** Type of JSON-RPC `Notification` object */\nexport type JsonRpcNotification = Omit<JsonRpcRequest, \"id\">;\n/** When a rpc call encounters an error, the Response Object MUST contain the error member with a value that is an Object */\nexport type JsonRpcError = {code: number, message: string, data?: any};\n/** Type of JSON-RPC `Response` object. `result` member is REQUIRED on success. `error` member is REQUIRED on error. */\nexport type JsonRpcResponse = { jsonrpc: typeof JSONRPC_VERSION_2, id: JsonRpcId, result?: any, error?: JsonRpcError };\n/** Type of JSON-RPC `Result` Response object */\nexport type JsonRpcResultResponse = Omit<JsonRpcResponse, \"error\">;\n/** Type of JSON-RPC `Error` Response object */\nexport type JsonRpcErrorResponse = Omit<JsonRpcResponse, \"result\">;\n\n/**\n * This class consists exclusively of the static methods that operate on or return Request/Response objects that follow [JSON-RPC 2.0 Specification](https://www.jsonrpc.org/specification)\n * @since 0.5.0\n */\nexport class JsonRpc {\n\n  /**\n   * Creates a `Request` object to a Server that follows JSON-RPC protocol\n   * @param method A String containing the name of the method to be invoked. Method names that begin with the word rpc followed by a period character (U+002E or ASCII 46) are reserved for rpc-internal methods and extensions and MUST NOT be used for anything else.\n   * @param params A Structured value that holds the parameter values to be used during the invocation of the method. This member MAY be omitted.\n   * @param id An identifier established by the Client that MUST contain a String, Number, or NULL value if included.\n   * @returns `Request` object in JSON-RPC 2.0 specification\n   */\n  static createRequest<T extends JsonRpcRequest>(method: string, params?: JsonRpcParams | HttpParams | string, id?: JsonRpcId): T {\n    let args: any = undefined;\n    id = id ?? Ciphers.hashCode( Ciphers.uuid_v4() );\n    if (params) {\n      args = {};\n      if (typeof params === \"string\") {\n        params = new HttpParams({fromString: params});\n      }\n      if (params instanceof HttpParams) {\n        let arr;\n        params.keys().forEach(key=>{\n          arr = (<HttpParams>params).getAll(key);\n          if (arr) {\n            args[key] = arr.length > 1 ? [...arr] : arr[0];\n          } else {\n            args[key] = null;\n          }\n        });\n      } else {\n        args = {...params};\n      }\n    }\n    return { jsonrpc: JSONRPC_VERSION_2, method, params: args, id } as T;\n  }\n  /**\n   * Creates a `Notification` object to a Server that follows JSON-RPC protocol\n   * @param method A String containing the name of the method to be invoked. Method names that begin with the word rpc followed by a period character (U+002E or ASCII 46) are reserved for rpc-internal methods and extensions and MUST NOT be used for anything else.\n   * @param params A Structured value that holds the parameter values to be used during the invocation of the method. This member MAY be omitted.\n   * @returns `Notification` object in JSON-RPC 2.0 specification\n   */\n  static createNotification<T extends JsonRpcNotification>(method: string, params?: JsonRpcParams | HttpParams | string): T {\n    let args: any = undefined;\n    if (params) {\n      args = {};\n      if (typeof params === \"string\") {\n        params = new HttpParams({fromString: params});\n      }\n      if (params instanceof HttpParams) {\n        let arr;\n        params.keys().forEach(key=>{\n          arr = (<HttpParams>params).getAll(key);\n          if (arr) {\n            args[key] = arr.length > 1 ? [...arr] : arr[0];\n          } else {\n            args[key] = null;\n          }\n        });\n      } else {\n        args = {...params};\n      }\n    }\n    return { jsonrpc: JSONRPC_VERSION_2, method, params: args } as T;\n  }\n  /**\n   * Creates a `Response` object to a Server that follows JSON-RPC protocol\n   * @param id An identifier established by the Client that MUST contain a String, Number, or NULL value if included.\n   * @param data A value that is applied to a _result_ or an _error_ property depending on the `success` value\n   * @param success A boolean value that determines the type of the `Response` object\n   * @returns `Response` object in JSON-RPC 2.0 specification\n   */\n  static createResponse<T extends JsonRpcResponse>(id: JsonRpcId, data?: any, success: boolean = true): T {\n    return { jsonrpc: JSONRPC_VERSION_2, id, result: (success ? data : undefined), error: (!success ? data : undefined) } as T;\n  }\n\n  private static toResultResponse(obj: { id: JsonRpcId, result?: any }): JsonRpcResultResponse {\n    return JsonRpc.createResponse(obj.id, obj.result, true);\n  }\n\n  private static toErrorResponse(obj: { id: JsonRpcId, error?: any }): JsonRpcErrorResponse {\n    return JsonRpc.createResponse(obj.id, obj.error, false);\n  }\n  /**\n   * Converts a specified object to a valid JSON-RPC `Response` object\n   * @param obj  Object to transform\n   * @returns `Response` object in JSON-RPC 2.0 specification\n   */\n  static toResponse<T extends JsonRpcResponse>(obj: { id: JsonRpcId, result?: any, error?: any }): T {\n    if (JsonRpc.isResponseObject(obj)) {\n      return obj as T;\n    } if (obj.error !== undefined) {\n      return JsonRpc.toErrorResponse(obj) as T;\n    }\n    return JsonRpc.toResultResponse(obj) as T;\n  }\n  /**\n   * Checks if the specified object `obj` is a valid `Request` object of the JSON-RPC 2.0 specification\n   * @param obj Object to test\n   * @returns _true_ if the object `obj` is a valid JSON-RPC 2.0 `Request` object, else _false_\n   */\n  static isRequestObject(obj: any): obj is JsonRpcRequest {\n    return Objects.isObject(obj)\n      && obj.jsonrpc === JSONRPC_VERSION_2\n      && obj.method\n      && obj.id != null;\n      //&& obj.id !== undefined;\n  }\n  /**\n   * Checks if the specified object `obj` is a valid `Notification` object of the JSON-RPC 2.0 specification\n   * @param obj Object to test\n   * @returns _true_ if the object `obj` is a valid JSON-RPC 2.0 `Notification` object, else _false_\n   */\n  static isNotificationObject(obj: any): obj is JsonRpcNotification {\n    return Objects.isObject(obj)\n      && obj.jsonrpc === JSONRPC_VERSION_2\n      && obj.method\n      && obj.id == null;\n      //&& obj.id === undefined;\n  }\n  /**\n   * Checks if the specified object `obj` is a valid `Response` object of the JSON-RPC 2.0 specification\n   * @param obj Object to test\n   * @returns _true_ if the object `obj` is a valid JSON-RPC 2.0 `Response` object, else _false_\n   */\n  static isResponseObject(obj: any): obj is JsonRpcResponse {\n    return Objects.isObject(obj)\n      && obj.jsonrpc === JSONRPC_VERSION_2\n      && obj.id !== undefined\n      && (obj.result !== undefined || obj.error !== undefined);\n  }\n\n  static isResultResponse(obj: any): boolean {\n    return JsonRpc.isResponseObject(obj) && (obj.result !== undefined && obj.error === undefined);\n  }\n\n  static isErrorResponse(obj: any): boolean {\n    return JsonRpc.isResponseObject(obj) && (obj.error !== undefined);\n  }\n\n}\n","import {asyncScheduler, observeOn, of, scheduled, Subject} from \"rxjs\";\r\n\r\nexport class EventProducer<T> extends Subject<T> {\r\n\r\n  produce(value: T) {\r\n    this.next(value);\r\n  }\r\n\r\n  trigger(value: T) {\r\n    this.next(value);\r\n  }\r\n\r\n  post(value: T, delay: number = 0) {\r\n    setTimeout(() => { this.next(value) }, delay || 0);\r\n    // TODO: Select from\r\n    //scheduled(of(value), asyncScheduler).subscribe((v)=>this.next(v));\r\n    //of(value).pipe(observeOn(asyncScheduler, delay)).subscribe((v)=>this.next(v));\r\n    //of(value).pipe(subscribeOn(asyncScheduler, delay)).subscribe((v)=>this.next(v));\r\n    //asyncScheduler.schedule(()=>this.next(value), delay);\r\n  }\r\n\r\n}\r\n","import { MonoTypeOperatorFunction, Observable } from 'rxjs';\r\nimport { delay as delayOperator, retryWhen, scan, tap, retry } from 'rxjs/operators';\r\n\r\n/**\r\n * @deprecated\r\n * @param delay\r\n * @param count\r\n * @returns MonoTypeOperatorFunction\r\n */\r\nexport function retryWithDelay<T>(\r\n    delay: number,\r\n    count: number = 1\r\n): MonoTypeOperatorFunction<T> {\r\n    return (input: Observable<T>) =>\r\n        input.pipe(\r\n            retryWhen((errors: Observable<T>) =>\r\n                errors.pipe(\r\n                    scan((acc, error) => ({ count: acc.count + 1, error }), {\r\n                        count: 0,\r\n                        error: undefined as any,\r\n                    }),\r\n                    tap((current) => {\r\n                        if (current.count > count) {\r\n                            throw current.error;\r\n                        }\r\n                    }),\r\n                    delayOperator(delay)\r\n                )\r\n            )\r\n        );\r\n}\r\n","import { HttpParams } from \"@angular/common/http\";\r\nimport { Observable } from \"rxjs\";\r\nimport { JsonRpcRequest, JsonRpcResponse } from \"../util/net/JsonRpc\";\r\nimport { DwColumnProperties, TableColumn } from \"./TableColumn\";\r\nimport { TableParam } from \"./TableParam\";\r\n\r\nexport type DwStyle = \"Grid\"|\"Form\"|\"Card\"|\"Graph\";\r\nexport type BufferType  = \"Primary!\" | \"Delete!\" | \"Filter!\";\r\nexport type ItemStatus  = \"DataModified!\" | \"New!\" | \"NewModified!\" | \"NotModified!\";\r\nexport type SaveAsType  = \"Text!\" | \"CSV!\" | \"XML!\" | \"JSON!\";\r\n\r\nexport enum UpdateWhereClause {KeyCols=0, KeyAndUpdatableCols=1, KeyAndModifiedCols=2}\r\n\r\nexport type RpcMethodContext = {baseUrl?: string, dwCode?: string}\r\n\r\nexport type SelectMethodSignature<T=any[]> = (params?: HttpParams, context?: RpcMethodContext) => Observable<T | JsonRpcResponse>;\r\nexport type RpcMethodSignature  = (body: JsonRpcRequest | JsonRpcRequest[], context?: RpcMethodContext) => Observable<JsonRpcResponse | JsonRpcResponse[]>;\r\n\r\nexport type DwExpression = string;\r\nexport type DwAlignmentMode = \"left\"|\"center\"|\"right\"|\"justify\";\r\nexport type DwBandType = \"detail\"|\"footer\"|\"header\"|\"header.1\"|\"header.2\"|\"header.3\"|\"summary\"|\"trailer.1\"|\"trailer.2\"|\"trailer.3\"|\"tree.level.1\"|\"tree.level.2\"|\"tree.level.3\"|\"foreground\"|\"background\";\r\nexport type DwButtonAction = \"None!\"|\"Sort!\"|\"Filter!\"|\"Print!\"|\"InsertRow!\"|\"DeleteRow!\"|\"EditRow!\";\r\nexport type DwCharCase = \"any\"|\"upper\"|\"lower\";\r\nexport type DwControlType = \"column\"|\"compute\"|\"button\"|\"hyperlink\"|\"bitmap\"|\"graph\"|\"tableblob\";\r\nexport type DwContentType = \"color\"|\"email\"|\"file\"|\"image\"|\"month\"|\"tel\"|\"url\"|\"week\";\r\nexport type DwDisplayStyle = \"default\"|\"picture\"|\"button\"|\"hyperlink\"|\"chiplist\";\r\nexport type DwStickyPosition = \"left\"|\"right\";\r\n\r\nexport type DwBandProperties = {height?: number, $style?: DwExpression};\r\nexport type DwPaginatorProperties = {pageSize?: number, showFirstLastPage?: boolean, pageSizeOptions?: number[]};\r\n/** Column edit styles */\r\nexport type ChipListStyle = {name:\"chiplist\", allowedit?: boolean, charcase?: DwCharCase, limit?: number, nillisnull?: boolean, sorted?: boolean, vscrollbar?: boolean, placeholder?: string};\r\nexport type EditStyle = {name:\"edit\", autohscroll?: boolean, autocomplete?: boolean, autoselect?: boolean, autovscroll?: boolean, charcase?: DwCharCase, readonly?: boolean, format?: string, limit?: number, nillisnull?: boolean, password?: boolean, validatecode?: boolean, placeholder?: string};\r\nexport type EditMaskStyle = {name:\"editmask\", autoskip?: boolean, codetable?: boolean, spin?: boolean, spinincr?: number, spinrange?: [any, any],  mask?: string, useformat?: boolean, placeholder?: string};\r\nexport type DDLBStyle = {name:\"ddlb\", allowedit?: boolean, charcase?: DwCharCase, limit?: number, nillisnull?: boolean, sorted?: boolean, vscrollbar?: boolean, placeholder?: string};\r\nexport type DDPLBStyle = {name:\"ddplb\", allowedit?: boolean, charcase?: DwCharCase, limit?: number, nillisnull?: boolean, sorted?: boolean, vscrollbar?: boolean, placeholder?: string};\r\nexport type DDDWStyle = {name:\"dddw\", allowedit?: boolean, autohscroll?: boolean, autoretrieve?: boolean, ctor?: any, datacolumn?: string, displaycolumn?: string, charcase?: DwCharCase, hscrollbar?: boolean, lines?: number, limit?: number, nullisnull?: boolean, percentwidth?: number, vscrollbar?: boolean, useasborder?: boolean, placeholder?: string};\r\nexport type CheckBoxStyle = {name:\"checkbox\", on?: any, off?: any, other?: any, threestates?: boolean, lefttext?: boolean};\r\nexport type RadioButtonsStyle = {name:\"radiobuttons\", lefttext?: boolean, columns?: number};\r\nexport type RichEditStyle = {name:\"richedit\", autoselect?: boolean, displayonly?: boolean, limit?: number, nillisnull?: boolean, vscrollbar?: boolean};\r\n\r\nexport type DwEditStyle = EditStyle|EditMaskStyle|DDLBStyle|DDPLBStyle|DDDWStyle|ChipListStyle|CheckBoxStyle|RadioButtonsStyle|RichEditStyle;\r\n\r\nexport interface DwControlProperties {\r\n                /** Type of DataWindow/DataStore control. Required. */\r\n                type: DwControlType;\r\n                /** The band or layer in the DataWindow object that contains the control */\r\n                band?: DwBandType;\r\n                /** Table/Grid column header. Default is Control's name. */\r\n                header?: string;\r\n                /** Form's control label. Default is Control's name. */\r\n                label?: string;\r\n                /** Some descriptive text (hint) */\r\n                microhelp?: string;\r\n                /** Reference to the Table `Column` object for controls with column's type value. _Null_ for others.  */\r\n                column?: TableColumn | null;   /* readonly */\r\n                /** The datatype of the column or computed field.*/\r\n                coltype?: string;               /* readonly */\r\n                /** The type of the content that this control should contain */\r\n                content?:   DwContentType;\r\n                /** Style of the UI element that will be applied when the parent row will be in the edit/insert state */\r\n                editstyle?: DwEditStyle;\r\n                /** How to display this control? */\r\n                displayas?: DwDisplayStyle;\r\n                /** Control's expression. Required for computed items. */\r\n                expression?: string;\r\n                /** Whether this control is required in the edit form. Default is _false_. */\r\n                required?:  boolean;\r\n                /** When a column is protected, the user cannot edit it even if the column's tab order is equal or greater than 0. */\r\n                protect?:   DwExpression|boolean;\r\n                /** Whether the specified control in the DataWindow is visible. Default is _true_. */\r\n                visible?:   DwExpression|boolean;\r\n                /** Whether the specified control in the DataWindow is sortable. Default is _true_.*/\r\n                sortable?:  boolean;\r\n                /** Whether this control in the DataWindow is resizeable. Default is _true_. */\r\n                resizeable?: boolean;\r\n                /** Whether this control in the DataWindow is moveable. */\r\n                moveable?: boolean;\r\n                summable?: boolean;\r\n                action?: DwExpression | DwButtonAction;\r\n                badge?: DwExpression;\r\n                badgecolor?: DwExpression;\r\n                /** Icon name, for example material icon */\r\n                icon?: DwExpression;\r\n                /** CSS style expression */\r\n                $style?: DwExpression;\r\n                /** CSS class expression */\r\n                $class?: DwExpression;\r\n                /** Color palette */\r\n                palette?: DwExpression;\r\n                /** */\r\n                role?: \"title\"|\"subtitle\"|\"avatar\";\r\n                /** Horizontal alignment */\r\n                alignment?: DwAlignmentMode;\r\n                /** Sticky position */\r\n                sticky?: DwStickyPosition;\r\n                /*\r\n                wrap?: Expr|boolean,\r\n                height?: string|number,\r\n                */\r\n                /** Width in pixels */\r\n                width?: number;\r\n                /** Width in the _Form_ style in pixels */\r\n                //fwidth?: number;\r\n                format?: string;\r\n                cursor?: string;\r\n                /** Any value you need for this control. */\r\n                tag?: any;\r\n\r\n}\r\n\r\nexport type DwObject = {name: string} & DwControlProperties;\r\n\r\nexport type DwGridStyleOptions = {\r\n  lines?:0|1|2|3,\r\n  selection?: boolean,\r\n  columnMove?: boolean,\r\n};\r\n\r\nexport interface DwGeneralOptions {\r\n    code?: string;\r\n    name?: string;\r\n    /** DataWindow's presentation style */\r\n    style?: DwStyle;\r\n    /** Internal timer interval */\r\n    timer?: number;\r\n    /** Grid options */\r\n    grid?: DwGridStyleOptions;\r\n    /** Header of Table */\r\n    thead?: DwBandProperties;\r\n    /** Body of Table */\r\n    tbody?: DwBandProperties;\r\n    /** Footer of Table */\r\n    tfoot?: DwBandProperties;\r\n    /** Group headers */\r\n    ghead?: DwBandProperties[];\r\n    /** Group footers */\r\n    gfoot?: DwBandProperties[];\r\n    /** Is DataWindow readonly? */\r\n    readonly?: boolean;\r\n    /** Paginator options */\r\n    paginator?: DwPaginatorProperties;\r\n  }\r\n\r\nexport interface DwTableOptions {\r\n  /** Table columns definition array. Required  */\r\n  columns: TableColumn[] | {[name: string]: DwColumnProperties};\r\n  /** Query parameters for the data selection */\r\n  parameters?: TableParam[];\r\n  /** Start data filter expression */\r\n  startFilter?: DwExpression;\r\n  /** Start data sort condition */\r\n  startSort?: string;\r\n  /** Array of the group levels' expressions */\r\n  groups?: DwExpression[],\r\n  /** A string specifying the name of the database table used to build the Update syntax. If it undefined DataStore is not updatable. */\r\n  updateTable?: string;\r\n  /** A string specifying the alias of the database table used to build the Update syntax. Default is a value of *updateTable* */\r\n  updateAlias?: string;\r\n  /** An integer indicating which columns will be included in the **WHERE** clause of the Update statement. Default is **0**. */\r\n  updateWhere?: UpdateWhereClause;\r\n  /** Whether the key column can be updated in place or the row has to be deleted and reinserted. Default is *true*. */\r\n  updateKeyInPlace?: boolean;\r\n  /** Whether the insert/update commands should return current values of ALL columns from the backend. Default is *false* */\r\n  returningAllFields?: boolean;\r\n  /**\r\n   * Rpc request's `method` format (`action` is one of the _update_|_insert_|_delete_ commands):\r\n   * - `0` - _table_name_`.`_action_. Single request object in the batch array.\r\n   * - `1` - _table_name_`_`_action_. Single request object in the batch array.\r\n   * - `2` - *action***Row** & params: {table: *table_name*, ...}. Single request object in the batch array.\r\n   * - `3` - Only one json-rpc request object in the following format:\r\n   * ```ts\r\n   * //++ pseudo types:\r\n   * type ColumnName  = string;\r\n   * type ValuesMap   = {[key: string]: any};\r\n   * type InsertedRow = {values: ValuesMap, returning?: ColumnName[]|[\"*\"], id:number};\r\n   * type UpdatedRow  = {set: ValuesMap, where: ValuesMap, returning?: ColumnName[]|[\"*\"], id:number};\r\n   * type DeletedRow  = {where: ValuesMap, id:number};\r\n   * //--\r\n   * // Json-rpc request object will be the following:\r\n   * {jsonrpc:\"2.0\", method:\"executeBatch\", params:{table:string, inserts:InsertedRow[], updates:UpdatedRow[], deletes:DeletedRow[]}, id:string}\r\n   * //\r\n   * ```\r\n   * *All values of `id`'s are auto generated values. Just send it back to the client unchanged.*\r\n   *\r\n   * Format of the rpc-response's `result` property:\r\n   *\r\n   * ```ts\r\n   * //++ pseudo types:\r\n   * type ActionResult = {sqlnrows?: number, id: number};\r\n   * type RowsDeleted = ActionResult;\r\n   * type RowsUpdated = ActionResult;\r\n   * type RowsInserted = ActionResult;\r\n   * //--\r\n   * {jsonrpc:\"2.0\", result:{inserts:RowsInserted[], updates:RowsUpdated[], deletes:RowsDeleted[]}, id:string}\r\n   * ```\r\n   */\r\n  rpcMethodFormat?: 0|1|2|3;\r\n  /** Read data function reference */\r\n  selectMethod?: SelectMethodSignature;\r\n  /** Accesses the database to retrieve values for all columns in a row. Result: `{data: [key:string]: any}` */\r\n  reselectRowMethod?: RpcMethodSignature;\r\n  /** Insert rows function reference. Result: `{sqlnrows: number, returning?: [key:string]:any}`  */\r\n  insertMethod?: RpcMethodSignature;\r\n  /** Update rows function reference. Result: `{sqlnrows: number, returning?: [key:string]:any}` */\r\n  updateMethod?: RpcMethodSignature;\r\n  /** Delete rows function reference */\r\n  deleteMethod?: RpcMethodSignature;\r\n  /** Batch update function reference. Result: `{sqlnrows: number, returning?: [key:string]:any}` */\r\n  batchMethod? : RpcMethodSignature;\r\n}\r\n\r\nexport abstract class DataStoreOptions {\r\n    release?: string = \"1.0\";\r\n    datawindow?:    DwGeneralOptions;\r\n    table?:         DwTableOptions;\r\n    controls?:      {[key:string]:DwControlProperties} = {};\r\n}\r\n\r\nexport const DEFAULT_CONTROL_OPTIONS: DwControlProperties = {type: \"column\", band: \"detail\", editstyle: {name: \"edit\"}, displayas: \"default\", required: false, protect: false, visible: true, resizeable: true, moveable:false, sortable: true, alignment:\"left\" };\r\nexport const DEFAULT_EDITSTYLE_OPTIONS: EditStyle = {name: \"edit\", autoselect: false, charcase: \"any\", readonly: false, password: false, limit: 0, nillisnull: true, validatecode: false};\r\nexport const DEFAULT_EDITMASKSTYLE_OPTIONS: EditMaskStyle = {name: \"editmask\", autoskip: false, codetable: false, spin: false, spinincr: 1, spinrange: [0, 0],  mask: \"\", useformat: false};\r\nexport const DEFAULT_CHIPLISTSTYLE_OPTIONS: ChipListStyle = {name:\"chiplist\", allowedit: false, charcase: \"any\", limit: 0, sorted: false, vscrollbar: true, nillisnull: true};\r\nexport const DEFAULT_DDLBSTYLE_OPTIONS: DDLBStyle = {name:\"ddlb\", allowedit: false, charcase: \"any\", limit: 0, sorted: false, vscrollbar: true, nillisnull: true};\r\nexport const DEFAULT_DDPLBSTYLE_OPTIONS: DDPLBStyle = {name:\"ddplb\", allowedit: false, charcase: \"any\", limit: 0, sorted: false, vscrollbar: true, nillisnull: true};\r\nexport const DEFAULT_DDDWSTYLE_OPTIONS: DDDWStyle = {name:\"dddw\", allowedit: false, autohscroll: true, autoretrieve: true, charcase: \"any\", hscrollbar: false, limit: 0, nullisnull: true, percentwidth: 100, vscrollbar: true, useasborder: false};\r\nexport const DEFAULT_CHECKBOXSTYLE_OPTIONS: CheckBoxStyle = {name: \"checkbox\", threestates: false, lefttext: false};\r\nexport const DEFAULT_RADIOBUTTONSSTYLE_OPTIONS: RadioButtonsStyle = {name: \"radiobuttons\", lefttext: false, columns: 1};\r\nexport const DEFAULT_RICHEDITSTYLE_OPTIONS: RichEditStyle = {name: \"richedit\", autoselect: false, displayonly: false, limit: 0, nillisnull: true, vscrollbar: false};\r\n","import { CodeBlock } from \"../util/evaluator/CodeBlock\";\r\nimport { Strings } from \"../util/Strings\";\r\nimport { IDataStore } from \"./IDataStore\";\r\n\r\nexport class DSCodeBlock extends CodeBlock {\r\n\r\n  private _ds: IDataStore<any>;\r\n\r\n  constructor(input: string, ds: IDataStore<any>, bindContext: boolean = false) {\r\n    super(input, bindContext);\r\n    this._ds = ds;\r\n    this.registerDSFunctions();\r\n  }\r\n\r\n  /** @private */\r\n  private _getRangeName(func: Function, astArgs: any[], context: any, environment?: any): string {\r\n    if (astArgs.length > 1) {\r\n      let v = this.evaluate(astArgs[1], context, environment);\r\n      if (typeof (v) === \"object\" && typeof (v.range) === \"string\") {\r\n        let r: string = v.range;\r\n        r = r.trim().toLowerCase();\r\n        return r;\r\n      }\r\n    }\r\n    return \"all\";\r\n  }\r\n\r\n  private _getRangeRows(rangeName: string, row: number, defaultRange: [number,number]): [number, number] {\r\n    if (rangeName.startsWith(\"group_\")) {\r\n      const [token] = Strings.getLastToken(rangeName, \"_\");\r\n      const gn = parseInt(token!);\r\n      if (gn >= 0 && gn < this._ds.groupCount()) {\r\n        const oGrp = this._ds.getGroups()[gn];\r\n        return oGrp.getRowRange(row);\r\n      }\r\n    }\r\n    return defaultRange;\r\n  }\r\n\r\n  // CumulativeSum, CumulativePercent\r\n  // Example: CumulativeSum( column [, {range: \"group_N\"|\"all\"}] )\r\n  /** @private */\r\n  private _callCumFunction(func: Function, astArgs: any[], context: any, environment?: any): any {\r\n\r\n    const rowCount = this._ds.rowCount();\r\n    if (rowCount == 0 || astArgs.length == 0) return 0;\r\n\r\n    let result: number = 0;\r\n    let [firstRow, lastRow] = [0, rowCount - 1];\r\n\r\n    const row: number = environment ?? this._ds.indexOf(context);\r\n\r\n    let rngName = this._getRangeName(func, astArgs, context, environment);\r\n    [firstRow, lastRow] = this._getRangeRows(rngName, row, [firstRow, lastRow]);\r\n\r\n    if (firstRow >= 0 && lastRow >= 0) {\r\n      let val;\r\n      let totals: number = 0;\r\n      let runningTotal: number = 0;\r\n\r\n      let index = firstRow - 1;\r\n      while (++index <= row) {\r\n        val = this.evaluate(astArgs[0], this._ds.data[index], environment);\r\n        if (Number.isFinite(val)) {\r\n          runningTotal = func(runningTotal, val);\r\n        }\r\n      }\r\n\r\n      if (Number.isFinite(runningTotal)) {\r\n        if (func.name == \"cumPcnt\") {\r\n          totals = runningTotal;\r\n          index--;\r\n          while (++index <= lastRow) {\r\n            val = this.evaluate(astArgs[0], this._ds.data[index], environment);\r\n            if (Number.isFinite(val)) {\r\n              totals = func(totals, val);\r\n            }\r\n          }\r\n          result = runningTotal / totals * 100;\r\n        } else {\r\n          result = runningTotal;\r\n        }\r\n      }\r\n    }\r\n\r\n    return isNaN(result) ? 0 : result;\r\n  }\r\n\r\n  // Sum, Avg, Min, Max, Count\r\n  // Example: Sum( column [, {range: \"group_N\"|\"all\"}] )\r\n  /** @private */\r\n  private _callAggFunction(func: Function, astArgs: any[], context: any, environment?: any): any {\r\n\r\n    const rowCount = this._ds.rowCount();\r\n    if (rowCount == 0 || astArgs.length == 0) return 0;\r\n\r\n    let result: number = 0;\r\n    let [firstRow, lastRow] = [0, rowCount - 1];\r\n\r\n    const row: number = environment ?? this._ds.indexOf(context);\r\n\r\n    let rngName = this._getRangeName(func, astArgs, context, environment);\r\n    [firstRow, lastRow] = this._getRangeRows(rngName, row, [firstRow, lastRow]);\r\n\r\n    if (firstRow >= 0 && lastRow >= 0) {\r\n      let val;\r\n      let index: number = firstRow - 1;\r\n      while (++index <= lastRow) {\r\n        val = this.evaluate(astArgs[0], this._ds.data[index], environment);\r\n        if (Number.isFinite(val) ) {\r\n          result = func(result, val);\r\n        }\r\n      }\r\n\r\n      if (func.name == \"aggAvg\" /* && Number.isFinite(result)*/) {\r\n        result = result / (lastRow - firstRow + 1);\r\n      }\r\n    }\r\n\r\n    return isNaN(result) ? 0 : result;\r\n  }\r\n\r\n  // First, Last\r\n  // Example: First( column [, {range: \"group_N\"|\"all\"}] )\r\n  /** @private */\r\n  private _callValFunction(func: Function, astArgs: any[], context: any, environment?: any): any {\r\n\r\n    const rowCount = this._ds.rowCount();\r\n    if (rowCount == 0 || astArgs.length == 0) return 0;\r\n\r\n    let result: any = undefined;\r\n    let [firstRow, lastRow] = [0, rowCount - 1];\r\n\r\n    const row: number = environment ?? this._ds.indexOf(context);\r\n\r\n    let rngName = this._getRangeName(func, astArgs, context, environment);\r\n    [firstRow, lastRow] = this._getRangeRows(rngName, row, [firstRow, lastRow]);\r\n\r\n    if (firstRow >= 0 && lastRow >= 0) {\r\n      switch (func.name) {\r\n        case \"valFirst\":\r\n          result = this.evaluate(astArgs[0], this._ds.data[firstRow], environment);\r\n          result = func(result);\r\n          break;\r\n        case \"valLast\":\r\n          result = this.evaluate(astArgs[0], this._ds.data[lastRow], environment);\r\n          result = func(result);\r\n          break;\r\n        case \"valPercent\":\r\n          let val;\r\n          let totals: number = 0\r\n          let index: number = firstRow - 1;\r\n          while (++index <= lastRow) {\r\n            val = this.evaluate(astArgs[0], this._ds.data[index], environment);\r\n            if (Number.isFinite(val)) {\r\n              totals = totals + (+val);\r\n            }\r\n          }\r\n\r\n          val = this.evaluate(astArgs[0], context, environment);\r\n          if (Number.isFinite(val) && Number.isFinite(totals)) {\r\n            result = val / totals * 100;\r\n          } else {\r\n            result = null;\r\n          }\r\n          break;\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  // StDev, StDevP\r\n  // Example: StDev( column [, {range: \"group_N\"|\"all\"}] )\r\n  /** @private */\r\n  private _callStDevFunction(func: Function, astArgs: any[], context: any, environment?: any): any {\r\n    const rowCount = this._ds.rowCount();\r\n    if (rowCount == 0 || astArgs.length == 0) return 0;\r\n\r\n    let result: any = undefined;\r\n    let [firstRow, lastRow] = [0, rowCount - 1];\r\n\r\n    const row: number = environment ?? this._ds.indexOf(context);\r\n\r\n    let rngName = this._getRangeName(func, astArgs, context, environment);\r\n    [firstRow, lastRow] = this._getRangeRows(rngName, row, [firstRow, lastRow]);\r\n\r\n    if (firstRow >= 0 && lastRow >= 0) {\r\n      let i = -1;\r\n      let val;\r\n      let vals = [];\r\n      let totals: number = 0\r\n      let index: number = firstRow - 1;\r\n      while (++index <= lastRow) {\r\n        val = this.evaluate(astArgs[0], this._ds.data[index], environment);\r\n        if (Number.isFinite(val)) {\r\n          vals[++i] = val;\r\n          totals = totals + (+val);\r\n        }\r\n      }\r\n\r\n      const N = vals.length;\r\n      if (N > 0) {\r\n        const mean = totals / N;\r\n\r\n        let sqs = 0;\r\n        i = -1;\r\n        while (++i < N) {\r\n          sqs += Math.pow(vals[i] - mean, 2);\r\n        }\r\n\r\n        if (func.name == \"stdevp\") {\r\n          result = Math.sqrt(sqs / N);\r\n        } else {\r\n          // StDev\r\n          result = Math.sqrt(sqs / (N - 1));\r\n        }\r\n      } else {\r\n        result = null;\r\n      }\r\n\r\n    }\r\n\r\n    return result;\r\n  }\r\n\r\n  // VarE, VarP\r\n  // Example: VarE( column [, {range: \"group_N\"|\"all\"}] )\r\n  /** @private */\r\n  private _callVarFunction(func: Function, astArgs: any[], context: any, environment?: any): any {\r\n    const rowCount = this._ds.rowCount();\r\n    if (rowCount == 0 || astArgs.length == 0) return 0;\r\n\r\n    let result: any = undefined;\r\n    let [firstRow, lastRow] = [0, rowCount - 1];\r\n\r\n    const row: number = environment ?? this._ds.indexOf(context);\r\n\r\n    let rngName = this._getRangeName(func, astArgs, context, environment);\r\n    [firstRow, lastRow] = this._getRangeRows(rngName, row, [firstRow, lastRow]);\r\n\r\n    if (firstRow >= 0 && lastRow >= 0) {\r\n      let i = -1;\r\n      let val;\r\n      let vals = [];\r\n      let totals: number = 0\r\n      let index: number = firstRow - 1;\r\n      while (++index <= lastRow) {\r\n        val = this.evaluate(astArgs[0], this._ds.data[index], environment);\r\n        if (Number.isFinite(val)) {\r\n          vals[++i] = val;\r\n          totals = totals + (+val);\r\n        }\r\n      }\r\n\r\n      const N = vals.length;\r\n      if (N > 0) {\r\n        const mean = totals / N;\r\n\r\n        let sqs = 0;\r\n        i = -1;\r\n        while (++i < N) {\r\n          sqs += Math.pow(vals[i] - mean, 2);\r\n        }\r\n\r\n        if (func.name == \"varp\") {\r\n          result = sqs / N;\r\n        } else {\r\n          // Var(E)\r\n          result = sqs / (N - 1);\r\n        }\r\n      } else {\r\n        result = null;\r\n      }\r\n\r\n    }\r\n\r\n    return result;\r\n  }\r\n  /**\r\n   * @override\r\n   */\r\n  protected callFunc(func: Function, astArgs: any[], context: any, environment?: any): any {\r\n\r\n    if (func.name.startsWith(\"agg\")) {\r\n      return this._callAggFunction(func, astArgs, context, environment);\r\n    } else if (func.name.startsWith(\"cum\")) {\r\n      return this._callCumFunction(func, astArgs, context, environment);\r\n    } else if (func.name.startsWith(\"val\")) {\r\n      return this._callValFunction(func, astArgs, context, environment);\r\n    } else if (func.name.startsWith(\"stdev\")) {\r\n      return this._callStDevFunction(func, astArgs, context, environment);\r\n    } else if (func.name.startsWith(\"var\")) {\r\n      return this._callVarFunction(func, astArgs, context, environment);\r\n    } else {\r\n      const row: number | undefined = environment;\r\n      switch (func.name) {\r\n        case \"getrow\": return func(context, row);\r\n        case \"isrownew\": return func(context);\r\n        case \"isrowmodified\": return func(context);\r\n        case \"isselected\": return func(context);\r\n      }\r\n    }\r\n    return super.callFunc(func, astArgs, context, environment);\r\n  }\r\n\r\n  private registerDSFunctions() {\r\n\r\n    // Not in validation rules or filter expressions !!!\r\n    // You cannot use this or other aggregate functions in validation rules or filter expressions.\r\n    // ++\r\n    const aggSum: Function = (p: number, v: any) => { return p + (+v) };\r\n    const aggAvg: Function = (p: number, v: any) => { return p + (+v) };\r\n    const aggMin: Function = (p: any, v: any) => { return p <= v ? p : v };\r\n    const aggMax: Function = (p: any, v: any) => { return p >= v ? p : v };\r\n    const aggCount: Function = (p: number, v: any) => { return p + 1 };\r\n    const cumSum: Function = (p: number, v: any) => { return p + (+v) };\r\n    const cumPcnt: Function = (p: number, v: any) => { return p + (+v) };\r\n    const valFirst: Function = (v: any) => {return v};\r\n    const valLast: Function = (v: any) => {return v};\r\n    const valPercent: Function = (v: any) => {return v};\r\n    const stDev: Function = (v: any) => {return v};\r\n    const stDevP: Function = (v: any) => {return v};\r\n    const varE: Function = (v: any) => {return v};\r\n    const varP: Function = (v: any) => {return v};\r\n\r\n    this.registerFunction(\"sum\", aggSum);\r\n    this.registerFunction(\"avg\", aggAvg);\r\n    this.registerFunction(\"min\", aggMin);\r\n    this.registerFunction(\"max\", aggMax);\r\n    this.registerFunction(\"count\", aggCount);\r\n    this.registerFunction(\"cumulativeSum\", cumSum);\r\n    this.registerFunction(\"cumulativePercent\", cumPcnt);\r\n    this.registerFunction(\"first\", valFirst);\r\n    this.registerFunction(\"last\", valLast);\r\n    this.registerFunction(\"percent\", valPercent);\r\n    this.registerFunction(\"stdev\", stDev);\r\n    this.registerFunction(\"stdeve\", stDev);\r\n    this.registerFunction(\"stdevp\", stDevP);\r\n    this.registerFunction(\"vare\", varE);\r\n    this.registerFunction(\"varp\", varP);\r\n    // --\r\n\r\n    //\r\n    //const getrow = function (row:number) {return row}\r\n    const describe: Function = (s: string) => { return this._ds.describe(s); };\r\n    this.registerNamedFunction(describe);\r\n    const getrow: Function = (context: any, row: number) => { return (typeof row === \"number\") ? row : this._ds.indexOf(context); };\r\n    this.registerNamedFunction(getrow);\r\n    const currentrow: Function = () => { return this._ds.getRow(); };\r\n    this.registerNamedFunction(currentrow);\r\n    const isrownew: Function = (context: any) => { return this._ds.isRowNew(context); };\r\n    this.registerNamedFunction(isrownew);\r\n    const isrowmodified: Function = (context: any) => { return this._ds.isRowModified(context); };\r\n    this.registerNamedFunction(isrowmodified);\r\n    const isselected: Function = (context: any) => { return this._ds.isSelected(context); }\r\n    this.registerNamedFunction(isselected);\r\n    const rowcount: Function = () => { return this._ds.rowCount(); };\r\n    this.registerNamedFunction(rowcount);\r\n    const lookupdisplay: Function = (col: string, val: any) => { return this._ds.getDisplayValue(col, val); }\r\n    this.registerNamedFunction(lookupdisplay);\r\n  }\r\n\r\n}\r\n","import { HttpErrorResponse } from \"@angular/common/http\";\r\nimport { BufferType, DwObject } from \"./DataStoreOptions\";\r\nimport { JsonRpcErrorResponse } from \"../util/net/JsonRpc\";\r\n\r\nexport class CuteEvent {\r\n  private   _defaultPrevented: boolean = false;\r\n  protected _cancelable: boolean = true;\r\n  public readonly timeStamp: number = Date.now();\r\n  constructor(\r\n    /** Event identifier */\r\n    public readonly type?: string,\r\n    /** Any useful data */\r\n    public tag?: any\r\n\r\n  ) { }\r\n\r\n  /** A boolean value indicating whether the event is cancelable. */\r\n  get cancelable(): boolean {return this._cancelable}\r\n\r\n  /** Indicates whether an event has already been canceled */\r\n  get defaultPrevented(): boolean {return this._defaultPrevented;}\r\n\r\n  /** Stops all related default actions that are usually performed after the event dispatch has been completed*/\r\n  preventDefault(): void { if (this.cancelable) {this._defaultPrevented = true;} }\r\n\r\n}\r\n\r\nexport class DwEvent extends CuteEvent {\r\n  constructor() { super() }\r\n}\r\n/*\r\nexport class DwSignalEvent extends DwEvent {\r\n  constructor() { super() }\r\n}\r\n*/\r\nexport class DwButtonClickedEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** The number of the row the user clicked.  */\r\n    public readonly row: number,\r\n    /** A reference to the control within the DataWindow under the pointer when the user clicked.  */\r\n    public readonly dwo: DwObject,\r\n    /** Mutable. The value returned by the action performed by the button. Default is 0 (UserDefined). */\r\n    public actionCode: number = 0,\r\n\r\n  ) { super() }\r\n}\r\n\r\nexport class DwClickedEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** DataWindow clicked row number */\r\n    public readonly row: number,\r\n    /** DataWindow current control */\r\n    public readonly dwo: DwObject,\r\n    /** Source event object */\r\n    public readonly $event: MouseEvent\r\n\r\n  ) { super() }\r\n}\r\n/**\r\n * Occurs when a database error occurs in the DataWindow or DataStore.\r\n */\r\nexport class DwDbmsErrorEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** A database-specific error code. */\r\n    public readonly errCode: number,\r\n    /** A database-specific error message. */\r\n    public readonly errText: string,\r\n    /** The buffer containing the row involved in the database activity that caused the error. */\r\n    public readonly dwBuffer?: BufferType,\r\n    /** The number of the row involved in the database activity that caused the error */\r\n    public readonly row?: number,\r\n    /** An error object returned on the Observable response stream */\r\n    public readonly reason?: HttpErrorResponse | JsonRpcErrorResponse\r\n\r\n  ) { super() }\r\n}\r\n\r\nexport class DwDeleteRowEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** DataWindow row number to delete */\r\n    public readonly row: number,\r\n    /** Drop only flag (mutable) */\r\n    public dropOnly: boolean = false\r\n\r\n  ) { super() }\r\n}\r\n\r\nexport class DwDoubleClickedEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** DataWindow clicked row number */\r\n    public readonly row: number,\r\n    /** DataWindow current control */\r\n    public readonly dwo: DwObject | null,\r\n    /** Source event object */\r\n    public readonly $event: MouseEvent\r\n\r\n  ) { super() }\r\n}\r\n/**\r\n * Occurs for each keystroke the user types in an edit control in the DataWindow.\r\n */\r\nexport class DwEditChangedEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** The number of the row containing the item whose value is being changed. */\r\n    public readonly row: number,\r\n    /** The name of the column containing the item.  */\r\n    public readonly name: string,\r\n    /** The new data the user has specified for the item. */\r\n    public readonly data: any,\r\n\r\n  ) { super() }\r\n  }\r\n\r\nexport class DwInsertRowEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** Number of new row */\r\n    public readonly newRow: number\r\n\r\n  ) { super() }\r\n}\r\n/**\r\n * Occurs when a field in a DataWindow control has been modified and loses focus (for example, the user presses Enter, the Tab key, or\r\n * an arrow key or clicks the mouse on another field within the DataWindow).\r\n */\r\nexport class DwItemChangedEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** The number of the row containing the item whose value is being changed. */\r\n    public readonly row: number,\r\n    /** The name of the column containing the item.  */\r\n    public readonly name: string,\r\n    /** The new data the user has specified for the item. */\r\n    public readonly data: any,\r\n\r\n  ) {super()}\r\n}\r\n/**\r\n * Occurs when a field has been modified, the field loses focus (for example, the user presses Enter, Tab, or an arrow key or\r\n * clicks the mouse on another field in the DataWindow), and the data in the field does not pass the validation rules for its column.\r\n */\r\nexport class DwItemErrorEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** The number of the row containing the item whose new value has failed validation */\r\n    public readonly row: number,\r\n    /** The name of the column containing the item.  */\r\n    public readonly name: string,\r\n    /** The new data the user has specified for the item. */\r\n    public readonly data: any,\r\n    /**\r\n     * Mutable. The return code to affect the outcome of the event:\r\n     ** 0 - (Default) Reject the data value and show an error message box\r\n     ** 1 - Reject the data value with no message box\r\n     ** 2 - Accept the data value\r\n     ** 3 - Reject the data value but allow focus to change\r\n     */\r\n    public actionCode: 0|1|2|3 = 0,\r\n\r\n  ) {super()}\r\n}\r\n/**\r\n * Occurs when a field in a DataWindow control has been modified and loses focus (for example, the user presses Enter, the Tab key, or\r\n * an arrow key or clicks the mouse on another field within the DataWindow). It occurs before the change is applied to the item.\r\n * DwItemChangingEvent can also occur when the AcceptText or Update method is called for a DataWindow control or DataStore object.\r\n */\r\nexport class DwItemChangingEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** The number of the row containing the item whose value is being changed. */\r\n    public readonly row: number,\r\n    /** The name of the column containing the item.  */\r\n    public readonly name: string,\r\n    /** The new data the user has specified for the item. */\r\n    public readonly data: any,\r\n    /** Allow focus to change when resultCode property has a prevented code (mutable) */\r\n    public changeFocusOnReject: boolean = false,\r\n\r\n  ) {super()}\r\n}\r\n/**\r\n * Occurs when the current item in the control changes.\r\n */\r\nexport class DwItemFocusChangedEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** DataWindow current/active row number */\r\n    public readonly row: number,\r\n    /** The name of the column containing the item.  */\r\n    public readonly name: string,\r\n\r\n    ) {super()}\r\n  }\r\n/**\r\n * Occurs when the user presses Enter or double-clicks the mouse within DataWindow\r\n */\r\nexport class DwProcessEnterEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** DataWindow current/active row number */\r\n    public readonly row: number,\r\n    /** DataWindow current control */\r\n    public readonly dwo: DwObject | null,\r\n    /** Source event object */\r\n    public readonly $event?: KeyboardEvent,\r\n\r\n  ) { super() }\r\n}\r\n/**\r\n * Occurs when the retrieval for the DataWindow or DataStore is complete\r\n */\r\nexport class DwRetrieveEndEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** The number of rows that were retrieved. */\r\n    public readonly rowCount: number\r\n\r\n  ) { super() }\r\n}\r\n/**\r\n * Occurs when the retrieval for the DataWindow or DataStore is about to begin.\r\n */\r\nexport class DwRetrieveStartEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** Modified. Do not reset the rows and buffers before retrieving data */\r\n    public clearBuffers: boolean = true\r\n\r\n  ) { super() }\r\n}\r\n/**\r\n * Occurs when something changed in the row object\r\n */\r\nexport class DwRowChangedEvent extends DwEvent {\r\n  constructor(\r\n    /** Changed row number */\r\n    public readonly row: number\r\n  ) { super() }\r\n}\r\n/**\r\n * Occurs when the current row changes in the DataWindow.\r\n * @see {@link DwRowFocusChangingEvent}\r\n */\r\nexport class DwRowFocusChangedEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** The number of the row that has just become current. */\r\n    public readonly newRow: number\r\n\r\n  ) { super() }\r\n}\r\n/**\r\n * Occurs when the current row is about to change in the DataWindow.\r\n * @see {@link DwRowFocusChangedEvent}\r\n */\r\nexport class DwRowFocusChangingEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** The number of the row that is current (before the row is deleted or its number changes). If the DataWindow object is empty, CurrentRow is -1 to indicate there is no current row. */\r\n    public readonly currentRow: number,\r\n    /**The number of the row that is about to become current. If the new row is going to be an inserted row, NewRow is -1 to indicate that it does not yet exist.  */\r\n    public readonly newRow: number,\r\n\r\n  ) { super() }\r\n}\r\n/**\r\n * Occurs after a script calls the Update method and just before changes in the DataWindow or DataStore are sent to the database.\r\n */\r\nexport class DwUpdateStartEvent extends DwEvent {\r\n  constructor() { super() }\r\n}\r\n/**\r\n * Occurs when all the updates to the database from the DataWindow (or DataStore) are complete.\r\n */\r\nexport class DwUpdateEndEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** The number of rows inserted. */\r\n    public readonly rowsInserted: number,\r\n    /** The number of rows updated. */\r\n    public readonly rowsUpdated: number,\r\n    /** The number of rows deleted. */\r\n    public readonly rowsDeleted: number,\r\n\r\n  ) { super() }\r\n}\r\n/**\r\n * Occurs when visible columns list has been changed\r\n */\r\nexport class DwColumnsChangeEvent extends DwEvent {\r\n  constructor(\r\n\r\n    /** The array of new visible columns */\r\n    public readonly columnNames: string[],\r\n\r\n  ) { super() }\r\n}\r\n","import { DataStore } from \"./DataStore\";\r\n\r\nexport class DataStoreService {\r\n  private _ds: DataStore<any>;\r\n\r\n  constructor(ds: DataStore<any>) {\r\n    this._ds = ds;\r\n  }\r\n\r\n\r\n}\r\n","import { JsonRpcErrorResponse } from \"../net/JsonRpc\";\r\nimport { RunTimeException } from \"./RunTimeException\";\r\n\r\nexport class JsonRpcException extends RunTimeException {\r\n\r\n  constructor(message: string, public reason: JsonRpcErrorResponse) {\r\n    super(message);\r\n  }\r\n\r\n}\r\n","import { HttpErrorResponse, HttpParams } from \"@angular/common/http\";\r\nimport { Observable, EMPTY, Subscription, BehaviorSubject, concat } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs/operators\";\r\nimport {\r\n  DwControlProperties, DataStoreOptions,\r\n  DEFAULT_CHECKBOXSTYLE_OPTIONS,\r\n  DEFAULT_CONTROL_OPTIONS,\r\n  DEFAULT_DDDWSTYLE_OPTIONS,\r\n  DEFAULT_DDLBSTYLE_OPTIONS,\r\n  DEFAULT_DDPLBSTYLE_OPTIONS,\r\n  DEFAULT_EDITMASKSTYLE_OPTIONS,\r\n  DEFAULT_EDITSTYLE_OPTIONS,\r\n  DEFAULT_RADIOBUTTONSSTYLE_OPTIONS,\r\n  DEFAULT_RICHEDITSTYLE_OPTIONS,\r\n  DwObject, BufferType, ItemStatus, SaveAsType, UpdateWhereClause, RpcMethodSignature, DwBandType, RpcMethodContext\r\n} from \"./DataStoreOptions\";\r\nimport { HttpService } from \"../services/http.service\";\r\nimport { ResultCode } from \"../util/enum/ResultCode\";\r\nimport { CodeBlock } from \"../util/evaluator/CodeBlock\";\r\nimport { DSCodeBlock } from \"./DSCodeBlock\";\r\nimport { TableParam } from \"./TableParam\";\r\nimport { IDataStore } from \"./IDataStore\";\r\nimport { CodeTableItem, TableColumn } from \"./TableColumn\";\r\nimport { Objects } from \"../util/Objects\";\r\nimport { Types } from \"../util/Types\";\r\nimport { Strings } from \"../util/Strings\";\r\nimport { Ciphers } from \"../util/Ciphers\";\r\nimport { XmlDocs } from \"../util/XmlDocs\";\r\nimport { Decimal } from \"../util/type/Decimal\";\r\nimport { DateTime } from \"../util/type/DateTime\";\r\nimport { Time } from \"../util/type/Time\";\r\nimport { EventProducer } from \"../util/rxjs/EventProducer\";\r\nimport { DwDbmsErrorEvent, DwItemChangedEvent, DwItemErrorEvent, DwRetrieveEndEvent, DwRetrieveStartEvent, DwRowChangedEvent, DwUpdateEndEvent, DwUpdateStartEvent } from \"./events\";\r\nimport { DataStoreService } from \"./DataStoreService\";\r\nimport { IllegalJsonException } from \"../util/exception/IllegalJsonException\";\r\nimport { TreeSet } from \"../collections/TreeSet\";\r\nimport { JsonRpc, JsonRpcRequest, JsonRpcResponse } from \"../util/net/JsonRpc\";\r\nimport { JsonRpcException } from \"../util/exception/JsonRpcException\";\r\n\r\nexport const ROW_ID_KEY: string = \"$row_id$\";\r\nexport const ROW_STATUS_KEY: string = \"$row_stts$\";\r\n//export const ROW_ISEDIT_KEY: string = \"$row_edit$\";\r\n\r\ntype ChangedRow = { status: ItemStatus, deleted: boolean, data: {}, originals?: {} };\r\ntype ChangesInfo = { timestamp?: number, uuid?: string, rows: ChangedRow[] };\r\n\r\ntype ColumnName = string;\r\ntype ValuesMap = { [key: string]: any };\r\ntype InsertedRow = { values: ValuesMap, table?: string, returning?: ColumnName[] | \"*\" };\r\ntype UpdatedRow = { set: ValuesMap, where: ValuesMap, table?: string, returning?: ColumnName[] | \"*\" };\r\ntype DeletedRow = { where: ValuesMap, table?: string };\r\ntype ReselectRow = { where: ValuesMap, table?: string };\r\n\r\ntype JsonRpcInsert = JsonRpcRequest & { params: InsertedRow };\r\ntype JsonRpcUpdate = JsonRpcRequest & { params: UpdatedRow };\r\ntype JsonRpcDelete = JsonRpcRequest & { params: DeletedRow };\r\ntype JsonRpcReselectRow = JsonRpcRequest & { params: ReselectRow };\r\n\r\ntype JsonRpcSingleRequest = JsonRpcRequest & {\r\n  params: {\r\n    table: string,\r\n    inserts?: Array<InsertedRow & { id: number | string | null }>,\r\n    updates?: Array<UpdatedRow & { id: number | string | null }>,\r\n    deletes?: Array<DeletedRow & { id: number | string | null }>\r\n  }\r\n};\r\n\r\n/**\r\n * A DataStore is a nonvisual DataWindow control. DataStores act just like DataWindow controls except that\r\n * many of the visual properties associated with DataWindow controls do not apply to DataStores. Because you can\r\n * print DataStores, **@cute-dw** provides some events and functions for DataStores that pertain to\r\n * the visual presentation of the data.\r\n * @version 1.0.0\r\n * @author Alexander V. Strelkov  <alv.strelkov@gmail.com>\r\n * @copyright © ALEXANDER STRELKOV 2022\r\n * @license MIT\r\n * @see DataWindow\r\n */\r\nexport class DataStore<T extends Object> implements IDataStore<T> {\r\n\r\n  private _data: {\r\n    primary: Array<T>,\r\n    filtered: Array<T>,\r\n    deleted: Array<T>\r\n  } = { primary: [], filtered: [], deleted: [] };\r\n  private _params: TableParam[] = [];\r\n  private _filter: string = \"\";\r\n  private _sort: string | null = null;\r\n  //private _locale: string | undefined;  // Sort\r\n  private _lastFind: [string | null, DSCodeBlock?] = [null];\r\n  //private _lastEval: [string | null, DSCodeBlock?] = [null];\r\n  private _evalCache = new Map<string, DSCodeBlock>();\r\n  private _config: DataStoreOptions = {}; // | null = null;\r\n  private _service: DataStoreService;\r\n  private _controls: {[key: string]: DwControlProperties } = {};\r\n  private _columns:  TableColumn[] = [];\r\n  private _groups: Array<DSRowGroup<T>> = [];\r\n  private _httpService: Readonly<HttpService> | undefined;\r\n\r\n  private _sharedMainDS: DataStore<T> | null = null;\r\n  private _sharedChilds: Set<DataStore<T>> = new Set();\r\n  private _selectedRows = new WeakSet();\r\n  private _newRowSet = new WeakSet();\r\n  private _originalsMap = new WeakMap();          // Row's object -> Object with cloned original values\r\n  private _rowIndexes = new WeakMap();            // Row's object -> Row's index\r\n  //private _rowIds = new Map();\r\n\r\n  //private _retrievePromise: Promise<T[]> | null = null;\r\n  //private _retrieveObservable: Observable<T[]> | null = null;\r\n  /**\r\n  * Subscription to the changes that should trigger an update to the table's rendered rows, such\r\n  * as filtering, sorting, pagination, or base data changes.\r\n  */\r\n  private _dataStreamSubscription: Subscription | null = null;\r\n  /** Stream emitting rendering data to the table (depends on ordered data changes). */\r\n  private readonly dataStream$ = new BehaviorSubject<T[]>([]);\r\n\r\n  private _loading: boolean = false;\r\n  private _updating: boolean = false;\r\n  private _currentRow: number = -1;\r\n  private _currentCol: number = -1;\r\n  private _lastRowID: number = -1;        // Row IDs counter\r\n  private _getChangesTimestamp: number = -1;\r\n  private _creationStamp: string = \"\";     // UUID of create() function\r\n  private _UUID = Ciphers.uuid_v4();      // UUID of the instance\r\n\r\n  // EVENTS\r\n  private readonly createEvent$ = new EventProducer<void>();\r\n  private readonly dbCancelEvent$ = new EventProducer<void>();\r\n  private readonly dbErrorEvent$ = new EventProducer<DwDbmsErrorEvent>();\r\n  private readonly dwErrorEvent$ = new EventProducer<any>();\r\n  private readonly httpErrorEvent$ = new EventProducer<HttpErrorResponse>();\r\n  private readonly itemChangedEvent$ = new EventProducer<DwItemChangedEvent>();\r\n  private readonly itemErrorEvent$ = new EventProducer<DwItemErrorEvent>();\r\n  private readonly retrieveEndEvent$ = new EventProducer<DwRetrieveEndEvent>();\r\n  private readonly retrieveStartEvent$ = new EventProducer<DwRetrieveStartEvent>();\r\n  private readonly rowChangedEvent$ = new EventProducer<DwRowChangedEvent>();\r\n  private readonly updateEndEvent$ = new EventProducer<DwUpdateEndEvent>();\r\n  private readonly updateStartEvent$ = new EventProducer<DwUpdateStartEvent>();\r\n  private readonly setParams$ = new EventProducer<void>();\r\n\r\n  readonly onCreate = this.createEvent$.asObservable();\r\n  readonly onDbCancel = this.dbCancelEvent$.asObservable();\r\n  readonly onDbError = this.dbErrorEvent$.asObservable();\r\n  readonly onDwError = this.dwErrorEvent$.asObservable();\r\n  readonly onHttpError = this.httpErrorEvent$.asObservable();\r\n  readonly onItemChanged = this.itemChangedEvent$.asObservable();\r\n  readonly onItemError = this.itemErrorEvent$.asObservable();\r\n  readonly onRetrieveEnd = this.retrieveEndEvent$.asObservable();\r\n  readonly onRetrieveStart = this.retrieveStartEvent$.asObservable();\r\n  readonly onRowChanged = this.rowChangedEvent$.asObservable();\r\n  readonly onUpdateEnd = this.updateEndEvent$.asObservable();\r\n  readonly onUpdateStart = this.updateStartEvent$.asObservable();\r\n  readonly onSetParams = this.setParams$.asObservable();\r\n\r\n  /**\r\n   * @constructor\r\n   */\r\n  constructor(options?: DataStoreOptions, http?: Readonly<HttpService>) {\r\n\r\n    this._service = new DataStoreService(this);\r\n    this.setHttpService(http);\r\n    this.create(options ?? {});\r\n\r\n    this._dataStreamSubscription = this.dataStream.subscribe(data => {\r\n      if (data.length == 0) {\r\n        this._currentRow = -1;\r\n      }\r\n    });\r\n  }\r\n  /**\r\n   * Returns initialization status\r\n   */\r\n  private get isInitialized(): boolean {\r\n    return !Objects.isEmpty(this._config);\r\n  }\r\n  /**\r\n   * Creates an internal controls array\r\n   */\r\n  private createControls(): void {\r\n    let controlsObject = this._config.controls ?? {};\r\n    let control: DwControlProperties;\r\n    this._controls = {};\r\n    if (Object.keys(<Object>controlsObject).length == 0) {\r\n      // Controls were not specified in the config data\r\n      // Create their from column's list\r\n      let cols = this.getColumns();\r\n      for (let i = 0; i < cols.length; i++) {\r\n        control = { ...DEFAULT_CONTROL_OPTIONS };\r\n        control.coltype = cols[i].type;\r\n        control.width = 100;\r\n        this._controls[cols[i].name] = control;\r\n      }\r\n    } else {\r\n      for (const key in controlsObject) {\r\n        this._controls[key] = Objects.fillIn({}, controlsObject[key], DEFAULT_CONTROL_OPTIONS);\r\n        this._controls[key].coltype = undefined;  // Manual definition is not allowed and ignored!\r\n      }\r\n    }\r\n    let oCol: DwControlProperties;\r\n    for (const key in this._controls) {\r\n      oCol = this._controls[key];\r\n      if (!oCol.band)   oCol.band = \"detail\";\r\n      if (!oCol.label)  oCol.label = key;\r\n      if (!oCol.header) oCol.header = oCol.label;\r\n      if (!oCol.displayas) oCol.displayas = \"default\";\r\n      if (!oCol.editstyle) oCol.editstyle = { ...DEFAULT_EDITSTYLE_OPTIONS };\r\n      if (typeof oCol.expression === \"string\")\r\n        oCol.expression = Strings.trimAll(oCol.expression) || \"undefined\";\r\n      else\r\n        oCol.expression = \"undefined\";\r\n\r\n      if (oCol.type == \"column\") {\r\n        if (oCol.coltype === undefined) {\r\n          oCol.coltype = this.getColumnType(key);\r\n        }\r\n        oCol.column = this.getColumnObject(key);\r\n      } else {\r\n        oCol.column = null;\r\n        oCol.coltype = undefined;\r\n      }\r\n      Object.defineProperty(oCol, \"column\", { writable: false });\r\n      Object.defineProperty(oCol, \"coltype\", { writable: false });\r\n\r\n      switch (oCol.editstyle.name) {\r\n        case \"edit\": Objects.fillIn(oCol.editstyle, DEFAULT_EDITSTYLE_OPTIONS); break;\r\n        case \"editmask\": Objects.fillIn(oCol.editstyle, DEFAULT_EDITMASKSTYLE_OPTIONS); break;\r\n        case \"ddlb\": Objects.fillIn(oCol.editstyle, DEFAULT_DDLBSTYLE_OPTIONS); break;\r\n        case \"ddplb\": Objects.fillIn(oCol.editstyle, DEFAULT_DDPLBSTYLE_OPTIONS); break;\r\n        case \"dddw\": Objects.fillIn(oCol.editstyle, DEFAULT_DDDWSTYLE_OPTIONS); break;\r\n        case \"checkbox\": Objects.fillIn(oCol.editstyle, DEFAULT_CHECKBOXSTYLE_OPTIONS); break;\r\n        case \"radiobuttons\": Objects.fillIn(oCol.editstyle, DEFAULT_RADIOBUTTONSSTYLE_OPTIONS); break;\r\n        case \"richedit\": Objects.fillIn(oCol.editstyle, DEFAULT_RICHEDITSTYLE_OPTIONS); break;\r\n      }\r\n    }\r\n  }\r\n  /**\r\n   * Creates a new row object and initializes it\r\n   *\r\n   * @returns Empty row object\r\n   */\r\n  private createRowObject(rowID: number, withFields: boolean = false): T {\r\n    let oRow: T = <T>{};\r\n    Object.defineProperty(oRow, ROW_ID_KEY, { value: rowID });\r\n    Object.defineProperty(oRow, ROW_STATUS_KEY, { value: undefined, writable: true });\r\n    /*\r\n    Object.defineProperties(oRow, {\r\n      ROW_ID_KEY: { value: rowID },\r\n      ROW_STATUS_KEY: {value: undefined, writable: true},\r\n      ROW_ISEDIT_KEY: {value: false, writable: true}\r\n    });\r\n    */\r\n\r\n    if (withFields) {\r\n      let colCount = this.columnCount();\r\n      let oCol: TableColumn;\r\n      let colName: string;\r\n      let j = -1;\r\n      while (++j < colCount) {\r\n        oCol = this.getColumnObject(j)!;\r\n        colName = oCol.name;\r\n        (oRow as any)[colName] = null;\r\n      }\r\n    }\r\n    return oRow;\r\n  }\r\n  /**\r\n   * Gets target DataStore (shared/Main)\r\n   * @returns\r\n   */\r\n  getMainDS(): DataStore<T> {\r\n    // let primaryDS = this._sharedMainDS;\r\n    // while (primaryDS && primaryDS._sharedMainDS) {\r\n    //   primaryDS = primaryDS._sharedMainDS;\r\n    // }\r\n    // return primaryDS ?? this;\r\n    return this._sharedMainDS ?? this;\r\n  }\r\n  /**\r\n   * Reports if DataWindow/DataStore updateable or not\r\n   * @returns boolean\r\n   */\r\n  private isUpdateable(): boolean {\r\n    const target = this.getMainDS();\r\n    const readonly = target._config.datawindow?.readonly || false;\r\n    const updateTable = target._config.table?.updateTable || \"\";\r\n    return !readonly && (typeof (updateTable) === \"string\" && updateTable.trim().length > 0);\r\n  }\r\n  /**\r\n   * Resets each group in the defined group list\r\n   * @private\r\n   */\r\n  private resetGroups(): void {\r\n    this._groups.map((g) => g.reset());\r\n  }\r\n  /**\r\n   * Finds a group object by its name\r\n   * @private\r\n   */\r\n  private findGroup(name: string): DSRowGroup<T> | undefined {\r\n    name = name.trim().toLowerCase();\r\n    return this._groups.find(g => g.name == name);\r\n  }\r\n  /**\r\n   * Resets the internal map of the DataWindow row's data indexes\r\n   */\r\n  private resetRowIndexes(): void {\r\n    this._rowIndexes = new WeakMap();\r\n  }\r\n  /**\r\n   *\r\n   */\r\n  private toLiteralValue(s: string): any {\r\n    let v: any;\r\n    if ([\"true\", \"false\"].includes(s))\r\n      v = Boolean(s);\r\n    else if ([\"null\", \"undefined\"].includes(s))\r\n      v = null;\r\n    else if (Objects.isNumber(s))\r\n      v = +s;\r\n    else\r\n      v = s || \"\";\r\n    return v;\r\n  }\r\n  /**\r\n   * Gets the value of specified control that must be a column or computed type\r\n   *\r\n   * @param context Data object\r\n   * @param key     Control's key\r\n   * @returns Control's value\r\n   *\r\n   * @private\r\n   */\r\n  private getControlValue(context: T, key: string): any | null {\r\n    if (context && key && (key in this._controls)) {\r\n      const control: DwControlProperties = this._controls[key] || DEFAULT_CONTROL_OPTIONS;\r\n      switch (control.type) {\r\n        case \"column\": {\r\n          let val: any = (context as any)[key];\r\n          if (this.hasCodeTable(key)) {\r\n            val = this.getDisplayValue(key, String(val));\r\n          }\r\n          return val;\r\n        }\r\n        case \"compute\": {\r\n          let cbk = (control as any).$cbk;\r\n          if (cbk && cbk instanceof DSCodeBlock) {\r\n            if (cbk.error) {\r\n              return \"ERR!\";\r\n            }\r\n          } else {\r\n            cbk = new DSCodeBlock(control.expression || \"\", this); //.getMainDS());\r\n            if (cbk.error) {\r\n              this.dwErrorEvent$.trigger(cbk.error);\r\n              return \"ERR!\";\r\n            }\r\n            Object.defineProperty(control, \"$cbk\", { value: cbk, writable: true });\r\n          }\r\n          return cbk.eval(context);\r\n        }\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n  /**\r\n   * Returns control object by its name or null if it was not found\r\n   * @private\r\n   */\r\n  private getControl(key: string): DwControlProperties | null {\r\n    if (key in this._controls) {\r\n      return this._controls[key]\r\n    }\r\n    return null;\r\n  }\r\n  /**\r\n   * Clears original value in the originals Map object\r\n   * @param rowobj  Row Object\r\n   * @param column  Column name or \"*\" for clear all values\r\n   * @returns true/false\r\n   * @private\r\n   */\r\n  private clearOriginalValue(rowobj: Object, column: string | \"*\"): boolean {\r\n    const target = this.getMainDS();\r\n    if (target._originalsMap.has(rowobj)) {\r\n      const origData = target._originalsMap.get(rowobj);\r\n      if (column == \"*\") {\r\n        return target._originalsMap.delete(rowobj);\r\n      } else if (!(origData[column] === undefined)) {\r\n        delete origData[column];\r\n        if (Object.keys(origData).length == 0) {\r\n          target._originalsMap.delete(rowobj);\r\n        }\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * Proxify decorator\r\n   * @private\r\n   */\r\n  private proxify(oRow: any): any {\r\n    let oProxyRow: any = new Proxy(oRow, {\r\n      get: (target, prop, receiver) => {\r\n        if (prop in target || typeof prop === \"symbol\")\r\n          return Reflect.get(target, prop, receiver);\r\n        //console.log(\"PropGet: \" + String(prop));\r\n        return this.getControlValue(oProxyRow, <string>prop);\r\n      },\r\n      set: (target, prop, val): boolean => {\r\n        if (prop in target) {\r\n          if (typeof prop === \"string\") {\r\n            let type: string | null = null;\r\n            const col = this.getColumnObject(prop);\r\n            if (col) {\r\n              type = col.type;\r\n            }\r\n\r\n            const oldVal = target[prop];\r\n            val = Types.toType(val, type || typeof (oldVal));\r\n\r\n            if (oldVal !== val) {\r\n              const ds = this.getMainDS();\r\n              if (!ds._originalsMap.has(oProxyRow))\r\n                ds._originalsMap.set(oProxyRow, {});\r\n              let origData = ds._originalsMap.get(oProxyRow);\r\n              if (origData[prop] === undefined)\r\n                origData[prop] = oldVal;\r\n              else if (origData[prop] === val) {\r\n                // returns to original value\r\n                delete origData[prop];\r\n                if (Object.keys(origData).length == 0) {\r\n                  ds._originalsMap.delete(<Object>oProxyRow);\r\n                }\r\n              }\r\n            }\r\n\r\n          }\r\n          return Reflect.set(target, prop, val);\r\n        }\r\n        return true; // Silent ignore   //\r\n      }\r\n    });\r\n    /*\r\n    if (oRow[ROW_ID_KEY] instanceof Number) {\r\n        this._rowIds.set(oRow[ROW_ID_KEY], oProxyRow);\r\n    }\r\n    */\r\n    return oProxyRow;\r\n  }\r\n  /**\r\n   * Clears internal row buffers\r\n   * @param clearPrimary {boolean} Clear or not Primary! buffer. Default is true\r\n   *\r\n   * @private\r\n   */\r\n  private clearBuffers(clearPrimary: boolean = true): void {\r\n    const target = this.getMainDS();\r\n    if (clearPrimary) {\r\n      target._data.primary = [];\r\n    }\r\n    target._data.filtered = [];\r\n    target._data.deleted = [];\r\n  }\r\n  /**\r\n   * Fills internal primary row buffer\r\n   *\r\n   * @private\r\n   */\r\n  private setData(newData: any[] | null, clearBuffers: boolean = true) {\r\n\r\n    if (!newData)\r\n      newData = [];\r\n\r\n    if (clearBuffers) {\r\n      this.reset();\r\n    }\r\n\r\n    const rows = newData.length;\r\n    const cols = this.columnCount();\r\n    if (!(cols && rows)) {\r\n      return;\r\n    }\r\n\r\n    let i: number = -1;\r\n    let j: number;\r\n    let oCol: TableColumn;\r\n    let oRow: any;\r\n    let colName: string;\r\n    let buffer = this.getBuffer(\"Primary!\");\r\n\r\n    let colArray: TableColumn[] = [];\r\n    j = -1;\r\n    while (++j < cols) {\r\n      colArray[j] = this.getColumnObject(j)!;\r\n    }\r\n\r\n    buffer.length += rows;\r\n    while (++i < rows) {\r\n      oRow = this.createRowObject(newData[i][ROW_ID_KEY] || ++this._lastRowID);\r\n      j = -1;\r\n      while (++j < cols) {\r\n        oCol = colArray[j];\r\n        colName = oCol.name;\r\n        if (newData[i][colName] === undefined)\r\n          oRow[colName] = null;\r\n        else\r\n          oRow[colName] = Types.toType(newData[i][colName], oCol.type || \"string\");\r\n      }\r\n      buffer[i] = this.proxify(oRow);\r\n    }\r\n    // Start filter value applying\r\n    if (Strings.isEmpty(this.filterValue)) {\r\n      let startFilter = this._config.table?.startFilter ?? \"\";\r\n      if (typeof startFilter == \"string\" && !Strings.isEmpty(startFilter)) {\r\n        this.filterValue = startFilter;\r\n        this.applyFilterSync();\r\n        // clear filter buffer\r\n        this._data.filtered = [];\r\n        this.filterValue = \"\";\r\n      }\r\n    } else {\r\n      this.applyFilterSync();\r\n    }\r\n\r\n    // Start sorting apply, if any\r\n    if (Strings.isEmpty(this.sortValue)) {\r\n      let startSort = this._config.table?.startSort ?? \"\";\r\n      if (typeof startSort == \"string\" && !Strings.isEmpty(startSort)) {\r\n        this.sortValue = startSort;\r\n      }\r\n    }\r\n    this.applySortSync();\r\n\r\n    this.resetRowIndexes();\r\n\r\n    /*\r\n    // clear not primary buffers\r\n    this.clearBuffers(false);\r\n    this.filterValue = \"\";\r\n    */\r\n\r\n    if (this.rowCount() > 0) {\r\n      this.setRow(0); // ??\r\n    }\r\n\r\n    // post data to observers\r\n    this.emitDataStream();\r\n\r\n  }\r\n  /**\r\n   * Gets an array of Table parameter objects\r\n   * @private\r\n   */\r\n  private getParams(): TableParam[] {\r\n    return this._params;\r\n  }\r\n  /**\r\n   * Gets an array of column objects\r\n   * @private\r\n   */\r\n  private getColumns(): TableColumn[] {\r\n    return this._columns;\r\n  }\r\n  /**\r\n   * Gets the key columns of the updatable table\r\n   * @returns Array of `TableColumn` objects\r\n   * @private\r\n   */\r\n  private getKeyColumns(): TableColumn[] {\r\n    const target = this.getMainDS();\r\n    const cols = target.getColumns();\r\n    let keyCols: TableColumn[] = [];\r\n    cols.forEach(col => {\r\n      if (col.key && this.isMainTableColumn(col)) {\r\n        keyCols.push(col);\r\n      }\r\n    });\r\n    return keyCols;\r\n  }\r\n  /**\r\n   * Gets database column name for column object\r\n   * @private\r\n   */\r\n  private getColumnDbName(col: TableColumn): string {\r\n    if (col) {\r\n      const dbName = col.dbname || col.name;\r\n      let [name] = Strings.getLastToken(dbName, \".\");\r\n      name = name!.trim();\r\n      return name;\r\n    }\r\n    return \"!\";\r\n  }\r\n  /**\r\n   * Checks the column for it belonging to the main (updatable) table\r\n   * @param column `TableColumn` object\r\n   * @returns true/false\r\n   * @private\r\n   */\r\n  private isMainTableColumn(column: TableColumn): boolean {\r\n    if (column) {\r\n      const target = this.getMainDS();\r\n      const tbl = target._config.table;\r\n      if (tbl) {\r\n        const tAlias: string = Objects.coalesce(tbl.updateAlias, tbl.updateTable, \"\").trim();\r\n        let cAlias: string|undefined;\r\n        if (column.dbname && column.dbname.indexOf(\".\") > 0) {\r\n          [cAlias] = Strings.getToken(column.dbname||\"\", \".\");\r\n          cAlias = (cAlias!.trim()) || tAlias;\r\n        } else {\r\n          cAlias = tAlias;\r\n        }\r\n        return (cAlias.toLowerCase() == tAlias.toLowerCase());\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * Checks the column if it updatable now\r\n   * @param column `TableColumn` object\r\n   * @returns true/false\r\n   * @private\r\n   */\r\n  private isColumnUpdatable(column: TableColumn | string | number | undefined): boolean {\r\n    if (typeof column == \"string\" || typeof column == \"number\") {\r\n      const target = this.getMainDS();\r\n      column = target.getColumnObject(column);\r\n    }\r\n    if (column && (column.updatable ?? true)) {\r\n      return this.isMainTableColumn(column);\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * Gets auto synchronized column names\r\n   * @param includeIdentity Include `identity` column or not\r\n   * @returns Array of the column names\r\n   * @private\r\n   */\r\n  private getAutoSyncColumns(includeIdentity: boolean = true): Array<string> {\r\n    const cols = this.getColumns();\r\n    const colLen = cols.length;\r\n    let colNames: string[] = [];\r\n\r\n    const returningAllFields = this._config.table?.returningAllFields || false;\r\n\r\n    if (returningAllFields) {\r\n      colNames.push(\"*\");\r\n    } else {\r\n      for (let i = 0; i < colLen; i++) {\r\n        if ((includeIdentity && cols[i].identity) || cols[i].autosync) {\r\n          colNames.push(cols[i].name);\r\n        }\r\n      }\r\n    }\r\n    return colNames;\r\n  }\r\n  /**\r\n   * Gets a column object by its name/index or `undefined` if the object was not found\r\n   * @private\r\n   */\r\n  private getColumnObject(index: number | string): TableColumn | undefined {\r\n    const cols = this.getColumns();\r\n    if (cols.length > 0) {\r\n      if (typeof index === \"string\") {\r\n        index = index.trim().toLowerCase();\r\n        index = cols.findIndex(col => col.name == index);\r\n      }\r\n      if (index >= 0 && index < cols.length) {\r\n        return cols[index];\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * Gets a row buffer array of the specified type\r\n   * @private\r\n   */\r\n  private getBuffer(bufferType: BufferType): Array<T> {\r\n    let buffer: T[];\r\n    const target = this.getMainDS();\r\n    switch (bufferType) {\r\n      case \"Filter!\": buffer = target._data.filtered;\r\n        break;\r\n      case \"Delete!\": buffer = target._data.deleted;\r\n        break;\r\n      default: buffer = target._data.primary;\r\n        break;\r\n    }\r\n    return buffer;\r\n  }\r\n  /**\r\n   * Posts data of `Primary!` buffer to primary and secondary DataStore/DataWindow observers\r\n   * @private\r\n   */\r\n  private emitDataStream() {\r\n    const target = this.getMainDS();\r\n    this.dataStream$.next(target.data);\r\n    this._sharedChilds.forEach(child => Object.is(child, target) ? null : child.emitDataStream());\r\n  }\r\n  /**\r\n   * Emulates and posts an empty data array to observers.\r\n   * This method was exposed to solve the screen gluch when generating group headers in the DataWindow (in @angular/material's table)\r\n   *\r\n   * @private\r\n   */\r\n  private emitEmptyDataStream() {\r\n    const target = this.getMainDS();\r\n    target.dataStream$.next([]);\r\n  }\r\n  /**\r\n   * @private\r\n   */\r\n  private createRpcRequestObject(action: string, table: string, params: DeletedRow | InsertedRow | UpdatedRow | ReselectRow, id: number): any {\r\n    let methodFormat = this._config.table?.rpcMethodFormat ?? 0;\r\n    let methodName = `${table}.${action}`;\r\n    switch (methodFormat) {\r\n      case 1: methodName = `${table}_${action}`; break;\r\n      case 2:\r\n      case 3: /* Updating actions will be transformed later to single updating request */\r\n        if (Strings.right(action, 3) == \"Row\") {\r\n          action = Strings.left(action, action.length - 3)!;\r\n        }\r\n        methodName = `${action}Row`;  // --> insertRow, deleteRow, updateRow, reselectRow\r\n        params[\"table\"] = table;\r\n        break;\r\n    }\r\n    return JsonRpc.createRequest(methodName, params, id);  //{ jsonrpc: JSONRPC_VERSION, method: methodName, params, id };\r\n  }\r\n  /**\r\n   * Gets an array of columns for the `WHERE` clause\r\n   * @param obj  Row object\r\n   * @param forDelete `DELETE` statement/method will be used\r\n   * @returns Array of the table columns that must participate in the `WHERE` clause\r\n   * @private\r\n   */\r\n  private getWhereClauseColumns(obj: T, forDelete: boolean = false): TableColumn[] {\r\n    const target = this.getMainDS();\r\n    const tableCols = target.getColumns();\r\n    const colLen = tableCols.length;\r\n    let whereClause: UpdateWhereClause = this._config.table?.updateWhere ?? UpdateWhereClause.KeyCols;  // Update method\r\n    let cols: TableColumn[] = [];\r\n    let i;\r\n\r\n    const originals = target._originalsMap.get(<Object>obj);\r\n    if (originals === undefined && forDelete && whereClause == UpdateWhereClause.KeyAndModifiedCols) {\r\n      // Row is not modified, do more fast db search\r\n      whereClause = UpdateWhereClause.KeyCols;\r\n    }\r\n\r\n    switch (whereClause) {\r\n      case UpdateWhereClause.KeyCols:\r\n        // Key columns only (risk of overwriting another user's changes, but fast).\r\n        for (i = 0; i < colLen; i++) {\r\n          if (tableCols[i].key && this.isMainTableColumn(tableCols[i])) {\r\n            cols.push(tableCols[i]);\r\n          }\r\n        }\r\n        break;\r\n      case UpdateWhereClause.KeyAndUpdatableCols:\r\n        // Key columns and all updatable columns (risk of preventing valid updates; slow because SELECT statement is longer)\r\n        for (i = 0; i < colLen; i++) {\r\n          if (this.isMainTableColumn(tableCols[i]) &&\r\n            (tableCols[i].key ||\r\n              ((tableCols[i].updatable ?? true) && (tableCols[i].updatewhereclause ?? true))\r\n            )\r\n          ) {\r\n            cols.push(tableCols[i]);\r\n          }\r\n        }\r\n        break;\r\n      case UpdateWhereClause.KeyAndModifiedCols:\r\n        // Key and modified columns (allows more valid updates than 1 and is faster, but not as fast as 0)\r\n        {\r\n          if (obj) {\r\n            for (i = 0; i < colLen; i++) {\r\n              if (this.isMainTableColumn(tableCols[i]) &&\r\n                (\r\n                  tableCols[i].key ||\r\n                  (\r\n                    (tableCols[i].updatable ?? true) && (tableCols[i].updatewhereclause ?? true)\r\n                    && (originals ? !Objects.isUndefined(originals[tableCols[i].name]) : false)\r\n                  )\r\n                )\r\n              ) {\r\n                cols.push(tableCols[i]);\r\n              }\r\n            }\r\n          }\r\n        }\r\n        break;\r\n    }\r\n    return cols;\r\n  }\r\n  /**\r\n   * Save original value(s)\r\n   * @private\r\n   */\r\n  private makeOriginals(obj: Object, oCol?: TableColumn): void {\r\n    const target = this.getMainDS();\r\n    if (!target._originalsMap.has(obj))\r\n      target._originalsMap.set(obj, {});\r\n    const originals: any = target._originalsMap.get(obj);\r\n    let colName;\r\n    if (oCol) {\r\n      colName = oCol.name;\r\n      if (originals[colName] === undefined) {\r\n        originals[colName] = (obj as any)[colName];\r\n      }\r\n    } else {\r\n      const colCount = this.columnCount();\r\n      for (let i = 0; i < colCount; i++) {\r\n        colName = this.columnName(i);\r\n        if (originals[colName] === undefined)\r\n          originals[colName] = (obj as any)[colName];\r\n      }\r\n    }\r\n  }\r\n\r\n  /* PROPERTIES */\r\n\r\n  //get retrievePromise(): Promise<T[]> | null { return this._retrievePromise; }\r\n  //set retrievePromise(value: Promise<T[]> | null) { this._retrievePromise = value; }\r\n\r\n  /**\r\n   * Gets current loading status\r\n   * @readonly\r\n   * @since 0.0.0\r\n   * @see {@link retrieve}\r\n   */\r\n  get loading(): boolean {\r\n    const target = this.getMainDS();\r\n    return target._loading;\r\n  }\r\n  /**\r\n   * Checks for any updates that may be pending\r\n   * @readonly\r\n   * @since 0.0.0\r\n   * @see {@link update}\r\n   * @see {@link updating}\r\n   */\r\n  get updatesPending(): boolean {\r\n    if (this.isUpdateable()) {\r\n      return this.deletedCount() > 0 || this.getNextModified(-1, \"Primary!\")! >= 0 || this.getNextModified(-1, \"Filter!\")! >= 0;\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * Gets current updating status\r\n   * @readonly\r\n   * @since 0.0.0\r\n   * @see {@link update}\r\n   */\r\n  get updating(): boolean {\r\n    const target = this.getMainDS();\r\n    return target._updating;\r\n  }\r\n  /**\r\n   * Gets the data from the primary buffer\r\n   * @readonly\r\n   * @since 0.0.0\r\n   */\r\n  get data(): T[] { return this.getBuffer(\"Primary!\"); }\r\n  /**\r\n   * Gets the data stream as the Observable object\r\n   * @readonly\r\n   * @since 0.0.0\r\n   */\r\n  get dataStream(): Observable<T[]> {\r\n    const target = this.getMainDS();\r\n    return target.dataStream$.asObservable();\r\n  }\r\n  /**\r\n   * Returns internal http service object\r\n   * @since 0.0.0\r\n   */\r\n  get httpService(): Readonly<HttpService> | undefined { return this._httpService; }\r\n  /**\r\n   * Gets the current filter value\r\n   * @since 0.0.0\r\n   * @see {@link applyFilter}\r\n   */\r\n  get filterValue(): string { const target = this.getMainDS(); return target._filter; }\r\n  /**\r\n   * Sets filter expression\r\n   * @since 0.0.0\r\n   * @see {@link applyFilter}\r\n   */\r\n  set filterValue(express: string | null) {\r\n    const target = this.getMainDS();\r\n    target._filter = Strings.trimAll(express) ?? \"\";\r\n  }\r\n  /**\r\n   * Current sort value\r\n   * @since 0.0.0\r\n   * @see {@link applySort}\r\n   */\r\n  get sortValue(): string | null { const target = this.getMainDS(); return target._sort; }\r\n  /**\r\n   * Specifies sort criteria for a DataWindow control or DataStore.\r\n   * A DataStore object can have sort criteria specified as part of its definition.\r\n   * Set `sortValue` overrides the definition, providing new sort criteria for the DataStore.\r\n   * However, it does not actually sort the rows. Call the {@link applySort} method to perform the actual sorting.\r\n   * @example\r\n   * this.sortValue = \"emp_name asc, div_code desc\";\r\n   * this.sortValue = \"upper(client_address)\";   // ascending by default\r\n   * this.sortValue = \"article_title \\t left(String(post_date,'yyyymmdd'),4) desc\";\r\n   * this.applySort();\r\n   * @since 0.0.0\r\n   */\r\n  set sortValue(express: string | null) {\r\n    const target = this.getMainDS();\r\n    target._sort = (express) ? Objects.nullIf(Strings.trimAll(express, ' '), \"\") : null;\r\n  }\r\n  /**\r\n   * Gets copy of configured Controls as a plain objects' array\r\n   * @readonly\r\n   * @since 0.0.0\r\n   */\r\n  get controls(): DwObject[] {\r\n    const arr: any[] = [];\r\n    let i: number = -1;\r\n    for (const key in this._controls) {\r\n      arr[++i] = Objects.deepFillIn({ name: key }, this._controls[key]);\r\n    }\r\n    return arr;\r\n  }\r\n  /**\r\n   * The number of milliseconds between the internal timer events. Default is 0 (disabled)\r\n   */\r\n  get timerInterval(): number {\r\n    const ms = this._config.datawindow?.timer ?? 0;\r\n    return Math.max(ms, 0);\r\n  }\r\n  /**\r\n   * The unique UUID value of the last *create()* function invocation\r\n   */\r\n  get creationStamp(): string {\r\n    return this._creationStamp;\r\n  }\r\n\r\n  /* EVENTS */\r\n\r\n  /* METHODS */\r\n  /**\r\n   * Creates a DataWindow object using {@link DataStoreOptions} object. It fully substitutes the current internal structure of a DataStore object.\r\n   *\r\n   * @param options An object of `DataStoreOptions` class\r\n   * @returns  1 if it succeeds and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  create(options: DataStoreOptions): ResultCode {\r\n    if (options) {\r\n\r\n      this.shareDataOff();\r\n\r\n      this._config = Objects.deepClone(options) || {};\r\n      this._config.controls = this._config.controls || {};\r\n      this._params = this._config.table?.parameters || [];\r\n\r\n      let cols = this._config.table?.columns || {};\r\n      if (Objects.isArray(cols)) {\r\n        this._columns = cols\r\n      } else if (Objects.isObject(cols)) {\r\n        this._columns = [];\r\n        Object.keys(cols).forEach(key=>this._columns.push({name:key, ...(cols as any)[key]}));\r\n      } else {\r\n        this._columns = [];\r\n      }\r\n\r\n      this._groups = [];\r\n      let garr = this._config.table?.groups || [];\r\n      for (let i = 0; i < garr.length; i++) {\r\n        this._groups.push(new DSRowGroup(this, garr[i], (i > 0) ? this._groups[i - 1] : null));\r\n      }\r\n      this.createControls();\r\n      this.reset();\r\n\r\n      this._creationStamp = Ciphers.uuid_v4();\r\n\r\n      this.createEvent$.trigger();\r\n\r\n      return ResultCode.SUCCESS;\r\n    }\r\n    return ResultCode.FAILURE;\r\n  }\r\n  /**\r\n   * Obtains the copy of the configured Controls as a map (plain JavaScript) object or an array of the `DwObject` objects\r\n   *\r\n   * @param band    Optional. DataWindow control's band type.  Default is `all`.\r\n   * @param asArray Optional. Set to _true_ if you want to return an array of the `DwObject` objects, else the method returns a map object. Default is _false_.\r\n   * @returns Array of `DwObject` objects or the plain JavaScript object as a key/value dictionary\r\n   * @since 0.0.0\r\n   */\r\n  getControls(band: \"all\"|DwBandType = \"all\", asArray: boolean = false): {[name: string]: DwControlProperties} | DwObject[] {\r\n    if (asArray) {\r\n      if (band == \"all\") return [...this.controls];\r\n      return this.controls.filter(col => col.band == band);\r\n    }\r\n    let controls: any = {};\r\n    for (const key in this._controls) {\r\n      if (band == \"all\" || this._controls[key].band == band) {\r\n        controls[key] = { ...this._controls[key] };\r\n      }\r\n    }\r\n    return controls;\r\n  }\r\n  /**\r\n   * Sets HttpService object for retrieve/update data on remote server\r\n   * @param httpSvc HttpService object (optional)\r\n   * @since 0.0.0\r\n   */\r\n  setHttpService(httpSvc?: Readonly<HttpService>): ResultCode {\r\n    if (httpSvc) {\r\n      this._httpService = httpSvc;\r\n      return ResultCode.SUCCESS;\r\n    }\r\n    return ResultCode.FAILURE;\r\n  }\r\n  /**\r\n   * Gets row count in the primary buffer\r\n   * @returns Row count\r\n   * @since 0.0.0\r\n   * @see {@link deletedCount}\r\n   * @see {@link filteredCount}\r\n   */\r\n  rowCount(): number { return this.data.length; }\r\n  /**\r\n   * Gets row count in the deleted rows buffer\r\n   * @returns Row count\r\n   * @since 0.0.0\r\n   * @see {@link rowCount}\r\n   * @see {@link filteredCount}\r\n   * @see {@link modifiedCount}\r\n   */\r\n  deletedCount(): number { return this.getBuffer(\"Delete!\").length; }\r\n  /**\r\n   * Reports the number of rows that have been modified but not updated in a DataWindow or DataStore.\r\n   * @returns {number} The number of rows that have been modified in the primary and filrer buffer.\r\n   *                   Returns 0 if no rows have been modified or if all modified rows have been updated in the database table.\r\n   * @since 0.0.0\r\n   * @see {@link rowCount}\r\n   * @see {@link deletedCount}\r\n   */\r\n  modifiedCount(): number {\r\n    let nCount = 0;\r\n    let bufferType: BufferType;\r\n    let row: number;\r\n\r\n    bufferType = \"Primary!\";\r\n    row = this.getNextModified(-1, bufferType)!;\r\n    while (row >= 0) {\r\n      nCount++;\r\n      row = this.getNextModified(row, bufferType)!;\r\n    }\r\n    bufferType = \"Filter!\"\r\n    row = this.getNextModified(-1, bufferType)!;\r\n    while (row >= 0) {\r\n      nCount++;\r\n      row = this.getNextModified(row, bufferType)!;\r\n    }\r\n\r\n    /*\r\n        let buffer: T[];\r\n        let rows;\r\n        let i = -1;\r\n        let status: ItemStatus | undefined;\r\n        let bufferType: BufferType = \"Primary!\"\r\n        buffer = this.getBuffer(bufferType);\r\n        rows = buffer.length;\r\n\r\n        while (++i < rows) {\r\n          status = this.getItemStatus(i, null, bufferType);\r\n          switch (status) {\r\n            case \"NewModified!\":\r\n            case \"DataModified!\":\r\n              nCount++;\r\n              break;\r\n          }\r\n        }\r\n        i = -1;\r\n        bufferType = \"Filter!\"\r\n        buffer = this.getBuffer(bufferType);\r\n        rows = buffer.length;\r\n        while (++i < rows) {\r\n          status = this.getItemStatus(i, null, bufferType);\r\n          switch (status) {\r\n            case \"NewModified!\":\r\n            case \"DataModified!\":\r\n              nCount++;\r\n              break;\r\n          }\r\n        }\r\n    */\r\n    return nCount;\r\n  }\r\n  /**\r\n   * Gets row count in the filtered rows buffer\r\n   * @returns Row count\r\n   * @since 0.0.0\r\n   * @see {@link deletedCount}\r\n   * @see {@link rowCount}\r\n   */\r\n  filteredCount(): number { return this.getBuffer(\"Filter!\").length; }\r\n  /**\r\n   * Gets group count in the DataWindow/DataStore object\r\n   * @since 0.0.0\r\n   * @returns Group count\r\n   */\r\n  groupCount(): number { const target = this.getMainDS(); return target._groups.length; }\r\n  /**\r\n   * Applies the contents of the DataWindow's edit control to the current item in the buffer of a DataWindow control or DataStore.\r\n   * The data in the edit control must pass the validation rule for the column before it can be stored in the item.\r\n   * @returns Returns 1 if it succeeds and -1 if it fails (for example, the data did not pass validation).\r\n   * @since 0.0.0\r\n   */\r\n  acceptText(): ResultCode {\r\n    return ResultCode.SUCCESS;\r\n  }\r\n  /**\r\n   * Reports the values of properties of a DataWindow object and controls within the DataWindow object.\r\n   * Each column and graphic control in the DataWindow has a set of properties. You specify one or more\r\n   * properties as a string, and `describe` returns the values of the properties.\r\n   * @param propertylist A string list (array) of properties or Evaluate functions\r\n   * @returns\r\n   * Returns array of values that includes a primitive value for each property or Evaluate function.\r\n   * If the property list contains only one item, `describe` returns single value.\r\n   * `Describe` returns an `undefined` value if there is no value for a property.\r\n   * `Describe` returns `null` for property if its value is not a primitive.\r\n   * @since 0.0.0\r\n   * @see {@link modify}\r\n   */\r\n  describe(...propertylist: string[]): any[] | any {\r\n    if (this.isInitialized && propertylist) {\r\n      const res = new Array(propertylist.length);\r\n      if (this._config) {\r\n        let obj;\r\n        let prop;\r\n        for (let i = 0; i < propertylist.length; i++) {\r\n          if (propertylist[i] != null) {\r\n            obj = this._config;\r\n            prop = propertylist[i].trim();\r\n            if (prop.toLowerCase().startsWith(\"column.\")) {\r\n              obj = this._config.table?.columns;\r\n              prop = prop.substring(7);\r\n            }\r\n            res[i] = Objects.getValue(obj, prop);\r\n            if ( !(Objects.isPrimitive(res[i]) || Objects.isArray(res[i])) ) {\r\n              res[i] = null;\r\n            }\r\n          } else {\r\n            res[i] = undefined;\r\n          }\r\n        }\r\n      }\r\n      return res.length == 1 ? res[0] : res;\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * Modifies a DataWindow object by applying specifications, given as a list of instructions, that\r\n   * change the DataWindow object's definition.\r\n   * @param propertylist A string array whose items ara the specifications for the modification.\r\n   * @returns Returns the empty string (\"\") if it succeeds and an error message if an error occurs.\r\n   * @since 0.0.0\r\n   * @see {@link describe}\r\n   */\r\n  modify(...propertylist: string[]): string {\r\n    let cbk: CodeBlock | null = null;\r\n    if (propertylist) {\r\n      let eqPos: number;\r\n      let path: string;\r\n      let expr: string;\r\n      let val: any;\r\n      for (let i = 0; i < propertylist.length; i++) {\r\n        eqPos = propertylist[i].indexOf('=');\r\n        if (eqPos > 0) {\r\n          path = propertylist[i].substring(0, eqPos).trim();\r\n          expr = propertylist[i].substring(eqPos + 1).trim();\r\n          if (Objects.hasValue(this._config, path)) {\r\n            cbk = new CodeBlock(expr);\r\n            if (cbk.error) {\r\n              return cbk.error;\r\n            } else {\r\n              try {\r\n                val = cbk.eval({});\r\n              } catch (err: any) {\r\n                return (err.message);\r\n              }\r\n            }\r\n            Objects.setValue(this._config, path, val);\r\n          } else {\r\n            return `Invalid path: ${path}`;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return \"\"\r\n  }\r\n  /**\r\n   * Gets cloned value of the current config options\r\n   * @returns DataStoreOptions\r\n   * @since 0.0.0\r\n   */\r\n  getOptions(): DataStoreOptions {\r\n    return Objects.deepClone(this._config);\r\n  }\r\n  /**\r\n   * Searches for the next break for the specified group. A group break occurs when the value in the column for the group changes.\r\n   * `findGroupChange` reports the row that begins the next section.\r\n   * @description\r\n   * If the starting row begins a new section at the specified level, then that row is the one returned.\r\n   * To continue searching for subsequent breaks, increment the starting row so that the search resumes with\r\n   * the second row in the group.\r\n   * @param row A value identifying the row at which you want to begin searching for the group break.\r\n   * @param level The number of the group for which you are searching. Groups are numbered in the order in which you defined them.\r\n   * The return value observes these rules based on the value of row. If the starting row is:\r\n   * ·\t_The first row in a group_, then `findGroupChange` returns the starting row number\r\n   * ·\t_A row within a group_, other than the last group, then `findGroupChange` returns the row number of the first row of the next group\r\n   * ·\t_A row in the last group_, other than the first row of the last group, then `findGroupChange` returns -1\r\n   * @returns\r\n   * Returns the number of the row whose group column has a new value, meaning that it begins a new group.\r\n   * Returns -1 if the value in the group column did not change and -100 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  findGroupChange(row: number, level: number): number {\r\n    if (row >= 0 && row < this.rowCount()) {\r\n      if (level >= 0 && level < this.groupCount()) {\r\n        const target = this.getMainDS();\r\n        return target._groups[level].findChange(row);\r\n      }\r\n    }\r\n    return -100;\r\n  }\r\n  /**\r\n   * Recalculates the breaks in the grouping levels in a DataStore/DataWindow.\r\n   *\r\n   * @description\r\n   * Use `groupCalc` to force the DataWindow object to recalculate the breaks in the grouping levels\r\n   * after you have added or modified rows in a DataWindow. `groupCalc` does not sort the data before it\r\n   * recalculates the breaks. Therefore, unless you populated the DataWindow in a sorted order,\r\n   * call the {@link applySort} method to sort the data before you call `groupCalc`.\r\n   * @returns Returns 1 if it succeeds and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  groupCalc(): ResultCode {\r\n    const target = this.getMainDS();\r\n    const groupCount = target.groupCount();\r\n    if (groupCount == 0) return ResultCode.NOTHING;\r\n\r\n    // Step 1. Check for errors\r\n    for (let i = 0; i < groupCount; i++) {\r\n      if (target._groups[i].parseError != null) {\r\n        return ResultCode.FAILURE;\r\n      }\r\n    }\r\n    // Step 2. Resets\r\n    target.resetGroups();\r\n\r\n    const nRows = this.rowCount();\r\n    let val: string = \"\";\r\n    let row: number = -1;\r\n    while (++row < nRows) {\r\n      val = \"\";\r\n      for (let g = 0; g < groupCount; g++) {\r\n        val = target._groups[g].calc(row, val);\r\n      }\r\n    }\r\n    return ResultCode.SUCCESS;\r\n  }\r\n  /**\r\n   * Gets array of DataStore groups\r\n   * @returns Readonly array of DSRowGroup structures\r\n   * @since 0.0.0\r\n   */\r\n  getGroups(): readonly DSRowGroup<T>[] {\r\n    const target = this.getMainDS();\r\n    return [...target._groups];\r\n  }\r\n  /**\r\n   * Reports the number of the current row in a DataWindow control or DataStore object.\r\n   * @returns Returns the number of the current row in dwcontrol. Returns -1 if no row is current\r\n   * @since 0.0.0\r\n   */\r\n  getRow(): number { return this.data.length > 0 ? this._currentRow : -1; }\r\n  /**\r\n   * Sets the current row in a DataWindow control or DataStore.\r\n   * @param row The row you want to make current\r\n   * @returns Returns 1 if it succeeds, 0 if the row is the current row indeed, and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  setRow(row: number): ResultCode {\r\n    if (row >= 0 && row < this.rowCount()) {\r\n      if (this._currentRow == row) {\r\n        return ResultCode.NOTHING;\r\n      }\r\n      this._currentRow = row;\r\n      return ResultCode.SUCCESS\r\n    }\r\n    return ResultCode.FAILURE;\r\n  }\r\n  /**\r\n   * Gets the row object of specified row's number\r\n   * @param {number} row  Optional row number. Default is the current row number in DataWindow/DataStore\r\n   * @returns Row object or _null_ if the number of the `row` is invalid\r\n   * @since 0.0.0\r\n   */\r\n  getRowObject(row?: number): Readonly<T> | null {\r\n    row = row ?? this.getRow();\r\n    if (row >= 0 && row < this.rowCount()) {\r\n      return this.data[row];\r\n    }\r\n    return null;\r\n  }\r\n  /**\r\n   * Gets an index of the row object in the `Primary!` buffer\r\n   * @param oRow {any} Row object\r\n   * @returns {number} Index (row number) value if the object was found in the DataStore's main buffer and\r\n   *                   -1 if the object does not exist in the buffer\r\n   * @since 0.0.0\r\n   */\r\n  indexOf(oRow: any): number {\r\n    if (oRow) {\r\n      const target = this.getMainDS();\r\n      let index = target._rowIndexes.get(oRow);\r\n      if (index === undefined) {\r\n        index = target.data.indexOf(oRow);\r\n        if (index >= 0) {\r\n          target._rowIndexes.set(oRow, index);\r\n        }\r\n      }\r\n      return index;\r\n    }\r\n    return -1;\r\n  }\r\n  /**\r\n   * Reports the next row and column that is required and contains a null value.\r\n   * The method arguments that specify where to start searching also store the results of the search.\r\n   * You can speed up the search by specifying that `findRequired` check only inserted and modified rows.\r\n   *\r\n   * @param bufferType A value indicating the DataWindow buffer you want to search for required columns. Valid buffers are: Primary! and Filter!\r\n   * @param context (In/Out) Reference to an object of type {row:number, col:number, colname:string}\r\n   * @param updateonly A value indicating whether you want to validate all rows and columns or only rows that have been inserted or modified\r\n   * @returns Returns **1** if `findRequired` successfully checked the rows and **-1** if an error occurs\r\n   * @since 0.0.0\r\n   */\r\n  findRequired(bufferType: BufferType, context: { row: number, col: number, colname: string }, updateonly: boolean): ResultCode {\r\n    if (context.row == null || (bufferType == \"Delete!\")) return ResultCode.FAILURE;\r\n    if (context.col == null) return ResultCode.FAILURE;\r\n\r\n    const buffer = this.getBuffer(bufferType);\r\n    const bufLen = buffer.length;\r\n    const colCount = this.columnCount();\r\n    if (!(context.row >= 0 && context.row < bufLen && context.col >= 0 && context.col < colCount))\r\n      return ResultCode.FAILURE;\r\n    let oCol;\r\n    let oRow;\r\n    let oControl;\r\n    let i = context.row - 1;\r\n    while (++i < bufLen) {\r\n      if (updateonly) {\r\n        oRow = buffer[i];\r\n        if (!(this.isRowNew(oRow) || this.isRowModified(oRow))) continue;\r\n      }\r\n      for (let j = context.col; j < colCount; j++) {\r\n        oCol = this.getColumnObject(j)!;\r\n        if ((buffer[i] as any)[oCol.name] == null) {\r\n          oControl = this.getControl(oCol.name);\r\n          if (oControl && oControl.required) {\r\n            context.row = i;\r\n            context.col = j;\r\n            context.colname = oCol.name;\r\n            return ResultCode.SUCCESS;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return ResultCode.NOTHING;\r\n  }\r\n  /**\r\n   * Reports whether the row has been newly inserted.\r\n   * @param row Row number or object to check\r\n   * @param bufferType Internal DataStore buffer type\r\n   * @returns {boolean} Returns _true_ if the row is new and _false_ if it was retrieved from the database.\r\n   * @see {@link isRowModified}\r\n   * @since 0.0.0\r\n   */\r\n  isRowNew(row: Object | number, bufferType: BufferType = \"Primary!\"): boolean {\r\n    let isNew = false;\r\n    const target = this.getMainDS();\r\n    if (typeof row === 'object') {\r\n      // bufferType is not a sense\r\n      isNew = target._newRowSet.has(row);\r\n    } else {\r\n      const buffer = this.getBuffer(bufferType);\r\n      if (row >= 0 && row < buffer.length) {\r\n        const obj: T = buffer[row];\r\n        isNew = target._newRowSet.has(obj as Object);\r\n      }\r\n    }\r\n    return isNew;\r\n  }\r\n  /**\r\n   * Reports whether the row has been modified\r\n   * @param row Row number or object to check\r\n   * @param dwbuffer Internal DataStore buffer type\r\n   * @returns {boolean} true if the row has been modified and false if it has not.\r\n   * @see {@link isRowNew}\r\n   * @see {@link getNextModified}\r\n   * @since 0.0.0\r\n   */\r\n  isRowModified(row: Object | number, dwbuffer: BufferType = \"Primary!\"): boolean {\r\n    let isModified = false;\r\n    let origObj = undefined;\r\n\r\n    const target = this.getMainDS();\r\n    if (typeof row === 'object') {\r\n      // bufferType is not a sense\r\n      origObj = target._originalsMap.get(row);\r\n    } else {\r\n      const buffer = this.getBuffer(dwbuffer);\r\n      if (row >= 0 && row < buffer.length) {\r\n        origObj = target._originalsMap.get(buffer[row] as Object);\r\n      }\r\n    }\r\n    if (origObj) {\r\n      isModified = (Object.keys(origObj).length > 0);\r\n    }\r\n    return isModified;\r\n  }\r\n  /**\r\n   * Reports the next row that has been modified in the specified buffer\r\n   * @param row A value identifying the row location after which you want to locate the modified row. To search from the beginning, specify **-1**.\r\n   * @param dwbuffer A value of the `BufferType` enumerated datatype\r\n   * @returns Returns the number of the first row that was modified after row in dwbuffer in dwcontrol.\r\n   *          Returns -1 if there are no modified rows after the specified row.\r\n   *          If any argument value is _null_ the method returns _null_.\r\n   * @see {@link isRowModified}\r\n   * @since 0.0.0\r\n   */\r\n  getNextModified(row: number, dwbuffer: BufferType = \"Primary!\"): number | null {\r\n    if (row == null || dwbuffer === null) return null;\r\n    dwbuffer = dwbuffer ?? \"Primary!\";\r\n    const buffer = this.getBuffer(dwbuffer);\r\n    const buflen = buffer.length;\r\n    let i = row;\r\n    while (++i < buflen) {\r\n      if (this.isRowModified(buffer[i])) {\r\n        return i;\r\n      }\r\n    }\r\n    return -1;\r\n  }\r\n  /**\r\n   * Gets count of table columns\r\n   * @returns Number of columns\r\n   * @since 0.0.0\r\n   */\r\n  columnCount(): number {\r\n    return this.getColumns().length;\r\n  }\r\n  /**\r\n   * Gets column name by its index.\r\n   * @param {number} index Column index\r\n   * @returns Column name or empty string if column was not found\r\n   * @see {@link columnCount}\r\n   * @since 0.0.0\r\n   */\r\n  columnName(index?: number): string {\r\n    if (index === undefined) {\r\n      index = this.getColumn();\r\n    }\r\n    let oCol = this.getColumnObject(index);\r\n    return (oCol) ? oCol.name : \"\";\r\n  }\r\n  /**\r\n   * Sets the current column in a `DataWindow` control or `DataStore`.\r\n   *\r\n   * @param col The column you want to make current. Column can be a column number or a column name.\r\n   * @returns Returns 1 if it succeeds and -1 if an error occurs.\r\n   *          If a column is less than 0 or greater than the number of columns - 1, `setColumn` fails.\r\n   * @see {@link getColumn}\r\n   * @since 0.0.0\r\n   */\r\n  setColumn(col: number | string): ResultCode {\r\n    const colArr = this.getColumns();\r\n    if (typeof (col) === \"string\") {\r\n      col = col.trim();\r\n      col = colArr.findIndex(c => c.name == col);\r\n    }\r\n    if (col == this._currentCol) {\r\n      return ResultCode.NOTHING;\r\n    } else if (col >= 0 && col < colArr.length) {\r\n      this._currentCol = col;\r\n      //this._controller.onColumnChanged$.post(col);\r\n      return ResultCode.SUCCESS;\r\n    }\r\n    return ResultCode.FAILURE;\r\n  }\r\n  /**\r\n   * Obtains the number of the current column. The current column is the column that has focus.\r\n   * @returns Returns the number of the current column in dwcontrol. Returns -1 if no column is current\r\n   * @see {@link setColumn}\r\n   * @since 0.0.0\r\n   */\r\n  getColumn(): number { return this._currentCol }\r\n  /**\r\n   * Obtains the name of the current column. The current column is the column that has the focus.\r\n   * @returns Returns the name of the current column in dwcontrol. Returns the empty string (\"\") if no column is current or if an error occurs.\r\n   * @see {@link columnName}\r\n   * @see {@link getColumnType}\r\n   * @see {@link getColumnIndex}\r\n   * @since 0.0.0\r\n   */\r\n  getColumnName(): string { return this.columnName(); }\r\n  /**\r\n   * Obtains the column's data type by its index or name\r\n   * @param col {number|string} Column identifier\r\n   * @returns {string} Column's data type or \"!\" if column with specified name/index is not found\r\n   * @see {@link getColumnName}\r\n   * @since 0.0.0\r\n   */\r\n  getColumnType(col: number | string): string {\r\n    const oCol = this.getColumnObject(col);\r\n    return (oCol) ? oCol.type : \"!\";\r\n  }\r\n  /**\r\n   * Obtains column's index by column's name\r\n   * @param name {string}  Name of the table column\r\n   * @returns {number} Column's index if the specified `name` was found in the column's list, else `-1`.\r\n   * @see {@link getColumnName}\r\n   * @since 0.0.0\r\n   */\r\n  getColumnIndex(name: string): number {\r\n    const cols = this.getColumns()\r\n    if (name && cols.length > 0) {\r\n      name = name.trim().toLowerCase();\r\n      return cols.findIndex(col => col.name == name);\r\n    }\r\n    return -1;\r\n  }\r\n  /**\r\n   * Obtains the validation rule for a column in a DataWindow.\r\n   * @param column The column for which you want the validation rule. Column can be a column number or a column name.\r\n   * @returns Returns the validation rule for column in dwcontrol. Returns the empty string (\"\") if no validation criteria are defined for the column.\r\n   * @see {@link setValidate}\r\n   * @since 0.0.0\r\n   */\r\n  getValidate(column: number | string): string {\r\n    let oCol = this.getColumnObject(column);\r\n    if (oCol) {\r\n      return oCol.validation || \"\";\r\n    }\r\n    return \"\";\r\n  }\r\n  /**\r\n   * Sets the input validation rule for a column in a DataWindow control or DataStore.\r\n   *\r\n   * @param column The column for which you want to set the input validation rule.  Column can be a column number or a column name.\r\n   * @param rule A string whose value is the validation rule for validating the data.\r\n   * @returns Returns 1 if it succeeds and -1 if an error occurs.\r\n   * @see {@link getValidate}\r\n   * @since 0.0.0\r\n   */\r\n  setValidate(column: number | string, rule: string): ResultCode {\r\n    let oCol = this.getColumnObject(column);\r\n    if (oCol) {\r\n      oCol.validation = (rule || \"\").trim();\r\n      return ResultCode.SUCCESS;\r\n    }\r\n    return ResultCode.FAILURE;\r\n  }\r\n  /**\r\n   * Obtains the object of an item in a value list or _code table_ associated with a column in a DataWindow\r\n   * @param column The column for which you want the item. Column can be a column number (integer) or a column name (string).\r\n   * @param index The number of the item in the value list or the code table for the edit style.\r\n   * @returns The item object identified by index in the value list. Returns _undefined_ if the index is not valid or the column does not have a value list or code table.\r\n   * @see {@link getDisplayValue}\r\n   * @see {@link getValueByCode}\r\n   * @see {@link getValues}\r\n   * @see {@link setValue}\r\n   * @since 0.0.0\r\n   */\r\n  getValue(column: string | number, index: number): CodeTableItem | undefined {\r\n    const oCol: TableColumn | undefined = this.getColumnObject(column);\r\n    if (oCol && oCol.values) {\r\n      if (index >= 0 && index < oCol.values.length) {\r\n        return Objects.fillIn({}, oCol.values[index]);\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * Obtains the object value of an item in a value list or _code table_ associated with a column and code's value in a DataWindow\r\n   * @param column The column for which you want the item. Column can be a column number (integer) or a column name (string).\r\n   * @param data The value to search in the column's code table if it was defined\r\n   * @returns The item object identified by code in the value list. Returns undefined if the value is not valid or the column does not have a value list or code table.\r\n   * @see {@link getValue}\r\n   * @see {@link getDisplayValue}\r\n   * @since 0.0.0\r\n   */\r\n  getValueByCode(column: string | number, data: any): CodeTableItem | undefined {\r\n    const oCol: TableColumn | undefined = this.getColumnObject(column);\r\n    if (oCol && oCol.values) {\r\n      const index = oCol.values.findIndex(item => item.value == data);\r\n      if (index >= 0) {\r\n        return Objects.fillIn({}, oCol.values[index]);\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * Obtains the display value in the code table associated with the data value in the specified column.\r\n   * @param column The column for which you want the code table display value. Column's value can be a text or column's definition number\r\n   * @param data The key value to search the display value in the code table\r\n   * @returns Display text for the column's value or value itself if it was not found in the column's value list or code table\r\n   * @see {@link getValue}\r\n   * @see {@link getValueByCode}\r\n   * @since 0.0.0\r\n   */\r\n  getDisplayValue(column: string | number, data: string | number): string {\r\n    const oCol: TableColumn | undefined = this.getColumnObject(column);\r\n    if (oCol && oCol.values) {\r\n      const idx = oCol.values.findIndex(item => item.value == data);\r\n      if (idx >= 0) {\r\n        return oCol.values[idx].label ?? \"\";\r\n      }\r\n    }\r\n    return data == null ? '' : String(data);\r\n  }\r\n  /**\r\n   * Obtains the values in the code table for the column.\r\n   * @param column The column for which you want to get `CodeTableItem` items. Column can be a column number (integer) or a column name (string).\r\n   * @returns `CodeTableItem` items array\r\n   * @see {@link getValue}\r\n   * @since 0.0.0\r\n   */\r\n  getValues(column: string | number): CodeTableItem[] | undefined {\r\n    const oCol: TableColumn | undefined = this.getColumnObject(column);\r\n    if (oCol) {\r\n      return oCol.values;\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * Sets the value of an item in a value list or code table for a column in a DataWindow control or DataStore.\r\n   * (A value list is called a code table when it has both display and data values.) `setValue` does not affect the data stored in the column.\r\n   * @param column The column that contains the value list or code table. Column can be a column number or a column name.\r\n   * @param index The number of the item in the value list or code table for which you want to set the value.\r\n   * @param value CodeTable's item value\r\n   * @returns Returns SUCCESS(1) if it succeeds and FAILURE(-1) if an error occurs.\r\n   * @see {@link clearValues}\r\n   * @see {@link getValue}\r\n   * @since 0.0.0\r\n   */\r\n  setValue(column: string | number, index: number, value: CodeTableItem): ResultCode {\r\n    const oCol: TableColumn | undefined = this.getColumnObject(column);\r\n    if (oCol && value) {\r\n      const values: CodeTableItem[] = oCol.values || [];\r\n      if (index >= 0 && index < values.length) {\r\n        values[index].label = value.label;\r\n        values[index].value = value.value;\r\n        return ResultCode.SUCCESS;\r\n      }\r\n    }\r\n    return ResultCode.FAILURE;\r\n  }\r\n  /**\r\n   * Deletes all the items from a value list or code table associated with a DataWindow column.\r\n   * (A value list is called a code table when it has both display and data values.)\r\n   * ClearValues does not affect the data stored in the column.\r\n   * @param column The column whose value list you want to delete.\r\n   * @returns Returns SUCCESS(1) if it succeeds and FAILURE(-1) if an error occurs.\r\n   *          The return value is usually not used.\r\n   * @see {@link setValue}\r\n   * @since 0.0.0\r\n   */\r\n  clearValues(column: string | number): ResultCode {\r\n    const oCol: TableColumn | undefined = this.getColumnObject(column);\r\n    if (oCol) {\r\n      oCol.values?.splice(0);\r\n      return ResultCode.SUCCESS;\r\n    }\r\n    return ResultCode.FAILURE;\r\n  }\r\n  /**\r\n   * Determines if the specified `column` has a table of display values and corresponding data values\r\n   * @param column Column's name or number\r\n   * @returns _True_ if the column definition contains a code table structure, else returns _false_\r\n   */\r\n  hasCodeTable(column: string | number): boolean {\r\n    const oCol: TableColumn | undefined = this.getColumnObject(column);\r\n    if (oCol && Objects.isArray(oCol.values) && oCol.values.length > 0) {\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   *\r\n   * @param row\r\n   * @param delimiter\r\n   * @returns\r\n   */\r\n  getRowTitle(row: number | Object, delimiter: string = ','): string {\r\n    const controls = this.controls;\r\n    let elems: string[] = [];\r\n    if (typeof row === \"object\") {\r\n      row = this.indexOf(row);\r\n    }\r\n    controls.forEach(c => c.role == \"title\" ? elems.push(String(this.evaluate(c.name, row))) : null);\r\n    return elems.join(delimiter);\r\n  }\r\n  /**\r\n   *\r\n   * @param row\r\n   * @param delimiter\r\n   * @returns\r\n   */\r\n  getRowSubTitle(row: number | Object, delimiter: string = ','): string {\r\n    const controls = this.controls;\r\n    let elems: string[] = [];\r\n    if (typeof row === \"object\") {\r\n      row = this.indexOf(row);\r\n    }\r\n    controls.forEach(c => c.role == \"subtitle\" ? elems.push(String(this.evaluate(c.name, row))) : null);\r\n    return elems.join(delimiter);\r\n  }\r\n  /**\r\n   *\r\n   * @param row\r\n   * @returns\r\n   */\r\n  getRowAvatar(row: number | Object): string {\r\n    const controls = this.controls;\r\n    let elems: string[] = [];\r\n    if (typeof row === \"object\") {\r\n      row = this.indexOf(row);\r\n    }\r\n    controls.forEach(c => c.role == \"avatar\" ? elems.push(String(this.evaluate(c.name, row))) : null);\r\n    return elems.length > 0 ? elems[0] : \"\";\r\n  }\r\n  /**\r\n   * Clears all the data from a DataWindow control or DataStore object.\r\n   * {@link reset} is not the same as deleting rows from the DataWindow object or\r\n   * child DataWindow. {@link reset} affects the application only, not the database.\r\n   * If you delete rows and then call the {@link update} method, the rows are deleted from\r\n   * the database table associated with the DataWindow object. If you call {@link reset} and\r\n   * then call {@link update}, no changes are made to the table.\r\n   * @returns  1 if it succeeds and -1 if an error occurs. The return value is usually not used.\r\n   * @see {@link resetUpdate}\r\n   * @since 0.0.0\r\n   */\r\n  reset(): ResultCode {\r\n    this.resetUpdate();\r\n    this.clearBuffers(true);\r\n    const target = this.getMainDS();\r\n    target._newRowSet = new WeakSet();\r\n    target._originalsMap = new WeakMap();\r\n    target._rowIndexes = new WeakMap();\r\n    target._lastRowID = -1;\r\n    target.resetGroups();\r\n\r\n    // Current object context\r\n    this._currentRow = -1;\r\n    this._currentCol = -1;\r\n    //this._selectedRows.clear();\r\n    this._selectedRows = new WeakSet();\r\n\r\n    target.emitDataStream();\r\n\r\n    return ResultCode.SUCCESS;\r\n  }\r\n  /**\r\n   * Clears the update flags in the primary and filter buffers and empties the delete buffer of a DataWindow or DataStore.\r\n   * When a row is changed, inserted, or deleted, its update flag is set, making it marked for update.\r\n   * By default, the Update method turns these flags off. If you want to coordinate updates of more than\r\n   * one DataWindow or DataStore, however, you can prevent Update from clearing the flags. Then, after you verify\r\n   * that all the updates succeeded, you can call ResetUpdate for each DataWindow to clear the flags.\r\n   * If one of the updates failed, you can keep the update flags, prompt the user to fix the problem, and\r\n   * try the updates again.\r\n   * You can find out which rows are marked for update with the GetItemStatus method. If a row is in the\r\n   * delete buffer or if it is in the primary or filter buffer and has `NewModified!` or `DataModified!` status,\r\n   * its update flag is set. After update flags are cleared, all rows have the status `NotModified!` or `New!` and\r\n   * the delete buffer is empty\r\n   * @returns    Completetion code\r\n   * @see {@link update}\r\n   * @see {@link reset}\r\n   * @since 0.0.0\r\n   */\r\n  resetUpdate(): ResultCode {\r\n    const target = this.getMainDS();\r\n    target._originalsMap = new WeakMap();\r\n    target._data.deleted = [];\r\n    return ResultCode.SUCCESS;\r\n  }\r\n  /**\r\n   * Shares data retrieved by one DataWindow control (or DataStore), which is referred to as the\r\n   * primary DataWindow, with another DataWindow control (or DataStore), referred to as the secondary\r\n   * DataWindow.\r\n   * The controls do not share formatting; only the data is shared, including data in the primary buffer,\r\n   * the delete buffer, the filter buffer, and the sort order.\r\n   *\r\n   * @param child The name of the secondary DataWindow with which `this` control will share the data.\r\n   * @returns Returns 1 if it succeeds and -1 if an error occurs.\r\n   * @see {@link shareDataOff}\r\n   * @since 0.0.0\r\n   */\r\n  shareData(child: DataStore<T>): ResultCode {\r\n    if (child && !this._sharedChilds.has(child)) {\r\n      let cols1 = this.getColumns();\r\n      let cols2 = child.getColumns();\r\n      let bOK = (cols1.length > 0 && cols1.length == cols2.length);\r\n      if (bOK) {\r\n        // Check for the column list is identical in the both stores\r\n        for (let i = 0; i < cols1.length; i++) {\r\n          if (cols2.findIndex(c => { return c.name == cols1[i].name && c.type == cols1[i].type }) == -1) {\r\n            bOK = false;\r\n            break;\r\n          }\r\n        }\r\n        if (bOK) {\r\n          if (child._sharedMainDS == null) {\r\n            child.reset();\r\n          }\r\n          child._sharedMainDS = this._sharedMainDS || this;\r\n          this._sharedChilds.add(child);\r\n          //child._sharedMainDS.emitDataStream();\r\n          return ResultCode.SUCCESS;\r\n        }\r\n      }\r\n    }\r\n    return ResultCode.FAILURE;\r\n  }\r\n  /**\r\n   * Turns off the sharing of data buffers for a DataWindow control or DataStore.\r\n   * When you call {@link shareDataOff} for a secondary DataWindow, that control no longer\r\n   * contains data, but the primary DataWindow and other secondary controls are not affected.\r\n   * When you call {@link shareDataOff} for the primary DataWindow, all secondary DataWindows are disconnected and\r\n   * no longer contain data.\r\n   * @returns Returns 1 if it succeeds, 0 if a DataStore was not previously shared, and -1 if an error occurs.\r\n   * @see {@link shareData}\r\n   * @since 0.0.0\r\n   */\r\n  shareDataOff(): ResultCode {\r\n    if (this._sharedMainDS) {\r\n      if (this._sharedMainDS._sharedChilds.delete(this)) {\r\n        this._sharedMainDS = null;\r\n        this.reset();\r\n        return ResultCode.SUCCESS;\r\n      } else {\r\n        return ResultCode.FAILURE;\r\n      }\r\n    }\r\n    return ResultCode.NOTHING;\r\n  }\r\n  /**\r\n   * Checks whether the DataWindow is shared by any other DataStore/DataWindow object\r\n   * @returns _true_ if the DataStore has any secondary DataStore/DataWindow that was shared with this DataStore object, else _false_\r\n   */\r\n  isShared(): boolean {\r\n    return this._sharedChilds.size > 0;\r\n  }\r\n  /**\r\n   * Copies a range of rows from one DataWindow control (or DataStore object) to another, or from one buffer to another within a single DataWindow control (or DataStore).\r\n   * @param startrow The number of the first row you want to copy.\r\n   * @param endrow The number of the last row you want to copy.\r\n   * @param srcbuffer A value of the `BufferType` identifying the DataWindow buffer from which you want to copy rows.\r\n   * @param target A reference to the DataWindow control or DataStore object to which you want to copy the rows. Target can be the same DataWindow (or DataStore) or another DataWindow (or DataStore)\r\n   * @param beforerow The number of the row before which you want to insert the copied rows. To insert after the last row, use any value that is greater than the number of existing rows.\r\n   * @param destbuffer A value of the `BufferType` enumerated datatype identifying the target DataWindow buffer for the copied rows.\r\n   * @returns Returns 1 if it succeeds, 0 if nothing happens and -1 if an error occurs.\r\n   * @see {@link rowsMove}\r\n   * @see {@link rowsDiscard}\r\n   * @since 0.0.0\r\n   */\r\n  rowsCopy(startrow: number, endrow: number, srcbuffer: BufferType, target: DataStore<T>, beforerow: number, destbuffer: BufferType): ResultCode {\r\n    if (startrow == null || endrow == null || !srcbuffer || !target || beforerow == null || !destbuffer)\r\n      return ResultCode.FAILURE;\r\n    const fromDS = this.getMainDS();\r\n    const toDS = target.getMainDS();\r\n    const bufferFrom = fromDS.getBuffer(srcbuffer);\r\n    const bufferTo = toDS.getBuffer(destbuffer);\r\n    let arr = bufferFrom.slice(startrow, endrow + 1);\r\n    if (arr.length > 0) {\r\n      let len = arr.length;\r\n      let oRow: any;\r\n      for (let i = 0; i < len; i++) {\r\n        oRow = Objects.fillIn(toDS.createRowObject(++toDS._lastRowID), arr[i]);\r\n        bufferTo.splice(beforerow, 0, toDS.proxify(oRow));\r\n      }\r\n      if (srcbuffer == \"Primary!\") {\r\n        fromDS.resetRowIndexes();\r\n        fromDS.emitDataStream();\r\n      }\r\n      if (destbuffer == \"Primary!\") {\r\n        toDS.resetRowIndexes();\r\n        toDS.emitDataStream();\r\n      }\r\n    } else\r\n      return ResultCode.NOTHING;\r\n    return ResultCode.SUCCESS;\r\n  }\r\n  /**\r\n   * Discards a range of rows in a DataWindow control. Once a row has been discarded using {@link rowsDiscard}, you cannot restore the row.\r\n   * You have to retrieve it again from the database.\r\n   * @param startrow The number of the first row you want to discard.\r\n   * @param endrow The number of the last row you want to discard.\r\n   * @param dwbuffer A value of the `BufferType` enumerated datatype\r\n   * @returns Returns 1 if it succeeds, 0 if nothing was deleted and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  rowsDiscard(startrow: number, endrow: number, dwbuffer: BufferType = \"Primary!\"): ResultCode {\r\n    if (startrow == null || endrow == null || !dwbuffer)\r\n      return ResultCode.FAILURE;\r\n    const target = this.getMainDS();\r\n    const buffer = target.getBuffer(dwbuffer);\r\n    const deletedRows = buffer.splice(startrow, endrow - startrow + 1);\r\n    if (deletedRows.length > 0) {\r\n      if ((target.rowCount() + target.filteredCount() + target.deletedCount()) == 0) {\r\n        target.reset();\r\n      } else if (dwbuffer == \"Primary!\") {\r\n        target.resetRowIndexes();\r\n        deletedRows.map((obj) => this._selectedRows.delete(obj as Object));\r\n        target.emitDataStream();\r\n      }\r\n      return ResultCode.SUCCESS;\r\n    }\r\n    return ResultCode.NOTHING;\r\n  }\r\n  /**\r\n   * Clears a range of rows from one DataWindow control (or DataStore) and inserts them in another.\r\n   * Alternatively, {@link rowsMove} moves rows from one buffer to another within a single DataWindow control\r\n   * (or DataStore).\r\n   * @param startrow The number of the first row you want to move.\r\n   * @param endrow The number of the last row you want to move.\r\n   * @param srcbuffer A value of the `BufferType` identifying the DataWindow buffer from which you want to move rows.\r\n   * @param target A reference to the DataWindow control or DataStore object to which you want to move the rows. Target can be the same DataWindow (or DataStore) or another DataWindow (or DataStore)\r\n   * @param beforerow The number of the row before which you want to insert the moved rows. To insert after the last row, use any value that is greater than the number of existing rows.\r\n   * @param destbuffer A value of the `BufferType` enumerated datatype identifying the target DataWindow buffer for the moving rows.\r\n   * @returns Returns 1 if it succeeds, 0 if nothing happens and -1 if an error occurs.\r\n   * @see {@link rowsCopy}\r\n   * @since 0.0.0\r\n   */\r\n  rowsMove(startrow: number, endrow: number, srcbuffer: BufferType, target: DataStore<T>, beforerow: number, destbuffer: BufferType): ResultCode {\r\n    if (startrow == null || endrow == null || !srcbuffer || !target || beforerow == null || !destbuffer)\r\n      return ResultCode.FAILURE;\r\n    const fromDS = this.getMainDS();\r\n    const toDS = target.getMainDS();\r\n    const bufferFrom = fromDS.getBuffer(srcbuffer);\r\n    const bufferTo = toDS.getBuffer(destbuffer);\r\n    if (fromDS == toDS && bufferFrom == bufferTo) {\r\n      return ResultCode.FAILURE;\r\n    }\r\n    let arr = bufferFrom.splice(startrow, endrow - startrow + 1);\r\n    if (arr.length > 0) {\r\n      let len = arr.length;\r\n      if (Object.is(fromDS, toDS)) {\r\n        for (let i = 0; i < len; i++) {\r\n          bufferTo.splice(beforerow, 0, arr[i]);\r\n        }\r\n      } else {\r\n        let oRow;\r\n        for (let i = 0; i < len; i++) {\r\n          oRow = Objects.fillIn(toDS.createRowObject(++toDS._lastRowID), arr[i]);\r\n          bufferTo.splice(beforerow, 0, toDS.proxify(oRow));\r\n          //fromDS._rowIds.delete((<any>arr[i])[ROW_ID_KEY]);\r\n        }\r\n      }\r\n\r\n      arr.map((obj) => this._selectedRows.delete(obj as Object));\r\n\r\n      if ((fromDS.rowCount() + fromDS.filteredCount() + fromDS.deletedCount()) == 0) {\r\n        fromDS.reset();\r\n      } else if (srcbuffer == \"Primary!\") {\r\n        fromDS.resetRowIndexes();\r\n        fromDS.emitDataStream()\r\n      }\r\n      if (destbuffer == \"Primary!\") {\r\n        toDS.resetRowIndexes();\r\n        toDS.emitDataStream();\r\n      }\r\n    } else\r\n      return ResultCode.NOTHING;\r\n\r\n    return ResultCode.SUCCESS;\r\n  }\r\n  /**\r\n   * Cancels the retrieval process in a DataWindow/DataStore object\r\n   * @see {@link retrieve}\r\n   * @since 0.0.0\r\n   */\r\n  dbCancel(): void {\r\n    return this.getMainDS().dbCancelEvent$.trigger();\r\n  }\r\n  /**\r\n   * Sets values for the table parameters and emit event onSetParams\r\n   * @param vals Array of any values or an object who's each property key is the parameter's name (case sensitive).\r\n   * @returns Success (1) when any or all parameter values was changed, 0 - if nothing happens, -1 if an error occurs\r\n   * @since 0.0.0\r\n   */\r\n  setParams(vals: any[] | { [name: string]: any }): ResultCode {\r\n    let params = this.getParams();\r\n    if (!vals || params.length == 0) {\r\n      return ResultCode.FAILURE;\r\n    }\r\n    let changed: boolean = false;\r\n    if (Objects.isArray(vals)) {\r\n      let minLen = Math.min(vals.length, params.length)\r\n      if (minLen > 0) {\r\n        for (let i = 0; i < minLen; i++) {\r\n          if (params[i].setValue((vals as any[])[i]) == ResultCode.SUCCESS) {\r\n            changed = true;\r\n          }\r\n        }\r\n      } else {\r\n        this._params = [];\r\n        changed = true;\r\n      }\r\n    } else {\r\n      for (let key in vals) {\r\n        let i = params.findIndex((p) => { return p.name == key });\r\n        if (i >= 0) {\r\n          if (params[i].setValue((vals as any)[key]) == ResultCode.SUCCESS) {\r\n            changed = true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (changed) {\r\n      return ResultCode.SUCCESS;\r\n    }\r\n\r\n    return ResultCode.NOTHING;\r\n  }\r\n  /**\r\n   * Retrieves rows from the database for a DataWindow control or DataStore. If arguments are included,\r\n   * the argument values are used for the retrieval arguments in the SQL `SELECT` statement for the DataWindow\r\n   * object or child DataWindow.\r\n   * After rows are retrieved, the DataWindow object's filter is applied. Therefore, any retrieved rows that\r\n   * do not meet the filter criteria are immediately moved to the filter buffer and are not included in the\r\n   * return count.\r\n   * @param {...any} args  One or more values that you want to use as retrieval arguments\r\n   * @returns {Promise} Promise of the row count retrieved, or -1 if any error occurs\r\n   * @see {@link dbCancel}\r\n   * @since 0.0.0\r\n   */\r\n  retrieve(...args: any): Promise<number> {\r\n    return new Promise<number>((resolve, reject) => {\r\n\r\n      if (!this.isInitialized) {\r\n        resolve(-1);\r\n        return;\r\n      }\r\n\r\n      // clear selections\r\n      this.selectRow(Infinity, false);\r\n\r\n      if (this._sharedMainDS) {\r\n        this._sharedMainDS.retrieve(...args).then(res=>{ resolve(res) });\r\n        return;\r\n      }\r\n\r\n      if (!this.httpService) {\r\n        //throw \"No connection object estableshed\"\r\n      }\r\n\r\n      if (this._config && this._config.table?.selectMethod) {\r\n        if (this.httpService) {\r\n          // Prepare http parameters...\r\n          let httpPars = undefined;\r\n          if (this.setParams(args) >= ResultCode.NOTHING) {\r\n            const params = this.getParams();\r\n            let value;\r\n            httpPars = new HttpParams();\r\n            for (const p of params) {\r\n              value = p.getValue();\r\n              if (value != null) {\r\n                httpPars = httpPars.set(p.name, value);\r\n              }\r\n            }\r\n          }\r\n\r\n          let resetMode = true;\r\n          const event = new DwRetrieveStartEvent(resetMode);\r\n          this.retrieveStartEvent$.trigger(event);\r\n          if (!event.defaultPrevented) {\r\n            if (Objects.isBoolean(event.clearBuffers)) {\r\n              resetMode = event.clearBuffers;\r\n            }\r\n            let retrieve$: Observable<any[] | JsonRpcResponse > = EMPTY;\r\n            this._loading = true;\r\n            const selectMethod = this._config.table.selectMethod;\r\n            if (selectMethod instanceof Function) {\r\n              retrieve$ = selectMethod.bind(this.httpService)(httpPars, {dwCode: this._config.datawindow?.code});\r\n            }\r\n            //\r\n            retrieve$\r\n              .pipe( takeUntil(this.onDbCancel) )\r\n              .subscribe({\r\n                next: (rawData) => {\r\n                  let data = null;\r\n                  if (rawData != null) {\r\n                    if (JsonRpc.isResponseObject(rawData)) {\r\n                      if (JsonRpc.isResultResponse(rawData)) {\r\n                        data = rawData.result;\r\n                      } else {\r\n                        throw new JsonRpcException(\"Retrieve error\", rawData);\r\n                      }\r\n                    } else {\r\n                      data = rawData;\r\n                    }\r\n                    if (!Objects.isArray(data)) {\r\n                      data = [data];\r\n                    }\r\n                  }\r\n                  this.setData(data, resetMode);\r\n                },\r\n                error: (err: HttpErrorResponse | JsonRpcException) => {\r\n                  this._loading = false;\r\n                  this.reset();\r\n                  if (err instanceof JsonRpcException) {\r\n                    this.dbErrorEvent$.trigger(new DwDbmsErrorEvent(err.reason.error?.code||-1, err.reason.error?.message||\"\", undefined, undefined, err.reason));\r\n                  } else if ((err.error instanceof DwDbmsErrorEvent) || err.status >= 500) {\r\n                    this.dbErrorEvent$.trigger(err.error);\r\n                  } else {\r\n                    this.httpErrorEvent$.trigger(err);\r\n                  }\r\n                  this.emitDataStream();\r\n                  resolve(ResultCode.FAILURE);\r\n                },\r\n                complete: ()=>{\r\n                  this._loading = false;\r\n                  const rowCount = this.rowCount();\r\n                  (rowCount > 0) ? this.setRow(0) : null;\r\n                  this.retrieveEndEvent$.trigger(new DwRetrieveEndEvent(rowCount));\r\n                  this.emitDataStream();\r\n                  resolve(rowCount);\r\n                }\r\n              });\r\n          }\r\n        } else {\r\n          resolve(ResultCode.FAILURE);\r\n        }\r\n      } else {\r\n        resolve(ResultCode.FAILURE);\r\n      }\r\n    });\r\n  }\r\n  /**\r\n   * Accesses the database to retrieve values for all columns that can be updated and refreshes all timestamp columns in a row in a DataWindow control or DataStore. The values from the database are redisplayed in the row.\r\n   * @param row A value identifying the row to reselect\r\n   * @returns An object of `Promise` type that returns 1 if it is successful and -1 if the row cannot be reselected (for example, the DataWindow object cannot be updated or the row was deleted by another user)\r\n   * @since 0.0.0\r\n   * @see {@link reselectRows}\r\n   */\r\n  reselectRow(row: number): Promise<ResultCode> {\r\n    return new Promise<ResultCode>((resolve, reject) => {\r\n      const reselectRowMethod = this._config.table?.reselectRowMethod;\r\n      if ((row >= 0 && row < this.rowCount()) && this.httpService && (reselectRowMethod instanceof Function)) {\r\n\r\n        const rowStat = this.getItemStatus(row, null, \"Primary!\");\r\n        if (rowStat == \"New!\" || rowStat == \"NewModified!\") {\r\n          resolve(ResultCode.FAILURE);\r\n          return;\r\n        }\r\n\r\n        const updateTable = this._config.table?.updateTable || \"\";\r\n        const keyCols = this.getKeyColumns();\r\n        if (!Strings.isEmpty(updateTable) && keyCols.length > 0) {\r\n          let dbName;\r\n          let whereVals: any = {};\r\n          keyCols.forEach(col => {\r\n            dbName = this.getColumnDbName(col);\r\n            whereVals[dbName] = this.getItem(row, col.name, \"Primary!\", true);\r\n          });\r\n          const rpcRequest = this.createRpcRequestObject(\"reselectRow\", updateTable, { where: whereVals }, this.getRowIdFromRow(row));\r\n          reselectRowMethod.bind(this.httpService)(rpcRequest, {dwCode: this._config.datawindow?.code}).subscribe({\r\n            next: (data) => {\r\n              this._handleReselectRowResult(data);\r\n            },\r\n            error: (err: HttpErrorResponse) => {\r\n              if ((err.error instanceof DwDbmsErrorEvent) || err.status >= 500) {\r\n                this.dbErrorEvent$.trigger(err.error);\r\n              } else {\r\n                this.httpErrorEvent$.trigger(err);\r\n              }\r\n              this.emitDataStream();\r\n              resolve(ResultCode.FAILURE);\r\n            },\r\n            complete: () => {\r\n              this.rowChangedEvent$.trigger(new DwRowChangedEvent(row));\r\n              this.emitDataStream();\r\n              resolve(ResultCode.SUCCESS);\r\n            }\r\n          });\r\n        }\r\n      }\r\n      resolve(ResultCode.FAILURE);\r\n    });\r\n  }\r\n\r\n  private _handleReselectRowResult(response: any): void {\r\n    //if (Objects.isObject(response) && response.jsonrpc == JSONRPC_VERSION_2) {\r\n    if (JsonRpc.isResponseObject(response)) {\r\n      if (response.result && response.result.data && typeof (response.id) === \"number\") {\r\n        const rowData = response.result.data;\r\n        const rowId = response.id;\r\n\r\n        const row = this.getRowFromRowId(rowId, \"Primary!\");\r\n        if (row >= 0) {\r\n          let dbName: string;\r\n          let value: any;\r\n          let cols = this.getColumns();\r\n          cols.forEach(col => {\r\n            dbName = this.getColumnDbName(col);\r\n            if (!(rowData[dbName] === undefined)) {\r\n              value = rowData[dbName];\r\n              (this.data[row] as any)[col.name] = value;\r\n            }\r\n          });\r\n          this.setItemStatus(row, null, \"Primary!\", \"NotModified!\");\r\n        } else {\r\n          console.log(`Reselect row error: Row with Id=${rowId} has not been found`);\r\n        }\r\n\r\n      } else if (response.error) {\r\n        throw new DwDbmsErrorEvent(response.error.code, response.error.message);\r\n      }\r\n    }\r\n  }\r\n  /**\r\n   * Accesses the database to retrieve rows with values of parameters, filter and sort criterias that is\r\n   * currently used in the DataStore.\r\n   * @returns Promise object\r\n   * @see {@link retrieve}\r\n   * @since 0.0.0\r\n   */\r\n  reselectRows(): Promise<number> {\r\n    return new Promise((resolve, reject) => {\r\n      const target = this.getMainDS();\r\n      let args: any[] = [];\r\n      let params: TableParam[] = target.getParams();\r\n      let parCount = params.length;\r\n\r\n      for (let i = 0; i < parCount; i++) {\r\n        args[i] = params[i].getValue();\r\n      }\r\n      target.retrieve(args).then((rc)=>{resolve(rc)});\r\n    });\r\n  }\r\n  /**\r\n   *\r\n   * @returns Object with the following structure:\r\n   *          {newRows:[], insertedRows[], updatedRows[], deletedRows[]}\r\n   */\r\n  private _getChangedRows(): ChangesInfo {\r\n    let arr: ChangedRow[] = [];\r\n    let changedRow: ChangedRow;\r\n    let buffer: Array<T>;\r\n    let rows: number;\r\n    let status: ItemStatus | undefined;\r\n    let i;\r\n    let oRow;\r\n    let oOrigins;\r\n    const target = this.getMainDS();\r\n\r\n    let bufferType: BufferType = \"Primary!\"\r\n    buffer = this.getBuffer(bufferType);\r\n    rows = buffer.length;\r\n    i = -1;\r\n    while (++i < rows) {\r\n      status = this.getItemStatus(i, null, bufferType);\r\n      if (status == \"NewModified!\" || status == \"DataModified!\") {\r\n        oRow = Objects.fillIn({ $id: this.getRowIdFromRow(i) }, buffer[i]);\r\n        oOrigins = Objects.fillIn({}, target._originalsMap.get(<Object>buffer[i]));\r\n        changedRow = { status, deleted: false, data: oRow, originals: oOrigins };\r\n        arr.push(changedRow);\r\n      }\r\n    }\r\n    bufferType = \"Filter!\"\r\n    buffer = this.getBuffer(bufferType);\r\n    rows = buffer.length;\r\n    i = -1;\r\n    while (++i < rows) {\r\n      status = this.getItemStatus(i, null, bufferType);\r\n      if (status == \"NewModified!\" || status == \"DataModified!\") {\r\n        oRow = Objects.fillIn({ $id: this.getRowIdFromRow(i) }, buffer[i]);\r\n        oOrigins = Objects.fillIn({}, target._originalsMap.get(<Object>buffer[i]));\r\n        changedRow = { status, deleted: false, data: oRow, originals: oOrigins };\r\n        arr.push(changedRow);\r\n      }\r\n    }\r\n    bufferType = \"Delete!\"\r\n    buffer = this.getBuffer(bufferType);\r\n    rows = buffer.length;\r\n    i = -1;\r\n    while (++i < rows) {\r\n      status = this.getItemStatus(i, null, bufferType);\r\n      if (status && !(status == \"New!\" || status == \"NewModified!\")) {\r\n        oRow = Objects.fillIn({ $id: this.getRowIdFromRow(i) }, buffer[i]);\r\n        oOrigins = Objects.fillIn({}, target._originalsMap.get(<Object>buffer[i]));\r\n        changedRow = { status, deleted: true, data: oRow, originals: oOrigins };\r\n        arr.push(changedRow);\r\n      }\r\n    }\r\n    this._getChangesTimestamp = Date.now();\r\n\r\n    return { timestamp: this._getChangesTimestamp, uuid: this._UUID, rows: arr };\r\n  }\r\n  /**\r\n   * Retrieves changes made to a DataWindow or DataStore as a JSON string. This method is used primarily in distributed applications.\r\n   * @returns JSON string\r\n   * @since 0.0.0\r\n   */\r\n  getChanges(): string {\r\n    return JSON.stringify(this._getChangedRows());\r\n  }\r\n  /**\r\n   * Applies changes captured with {@link getChanges} to a DataWindow or DataStore. This method is used primarily in distributed applications.\r\n   * @param changes JSON string created with {@link getChanges} from which you want to apply changes.\r\n   * @param conflictResolution A value indicating how conflicts should be resolved. Default is _FailOnAnyConflict!_\r\n   * @see {@link getChanges}\r\n   * @since 0.0.0\r\n   */\r\n  setChanges(changes: string, conflictResolution: \"FailOnAnyConflict!\" | \"AllowPartialChanges!\" = \"FailOnAnyConflict!\"): ResultCode {\r\n    let rc = ResultCode.FAILURE;\r\n    if (!changes) return rc;\r\n    let target = this.getMainDS()\r\n    let obj: any = JSON.parse(changes);\r\n    if (!Objects.isPlainObject(obj)) return rc;\r\n    if (Object.is(target._UUID, obj.uuid)) return rc;\r\n    if ((obj.timestamp instanceof Number) && Array.isArray(obj.rows)) {\r\n      const changes: ChangesInfo = obj;\r\n      const chgRows: ChangedRow[] = changes.rows;\r\n      const len = chgRows.length;\r\n      let oRow;\r\n      let row: number;\r\n      rc = ResultCode.SUCCESS;\r\n      for (let i = 0; i < len; i++) {\r\n        if (chgRows[i].deleted) {\r\n          row = target.getRowFromRowId((<any>chgRows[i].data)[ROW_ID_KEY], \"Primary!\");\r\n          if (row >= 0) {\r\n            target.rowsMove(row, row, \"Primary!\", target, target.rowCount(), \"Delete!\");\r\n          } else if (target.getRowFromRowId((<any>chgRows[i].data)[ROW_ID_KEY], \"Delete!\") >= 0) {\r\n            // OK\r\n          } else if (conflictResolution == \"FailOnAnyConflict!\") {\r\n            return ResultCode.FAILURE;\r\n          }\r\n        } else {\r\n          row = target.getRowFromRowId((<any>chgRows[i].data)[ROW_ID_KEY], \"Primary!\");\r\n          switch (chgRows[i].status) {\r\n            case \"NewModified!\":\r\n            case \"DataModified!\":\r\n              if (row == -1 && chgRows[i].status == \"NewModified!\") {\r\n                //oRow = Objects.fillIn(this.createRowObject(++this._lastRowID), chgRows[i].data);\r\n                oRow = target.createRowObject((<any>chgRows[i].data)[ROW_ID_KEY]);\r\n                row = target.data.push(oRow) - 1;\r\n              }\r\n              if (row >= 0) {\r\n                for (let key in chgRows[i].data) {\r\n                  if (key in target.data) {\r\n                    (<any>target.data)[key] = (<any>chgRows[i].data)[key];\r\n                  } else if (conflictResolution == \"FailOnAnyConflict!\") {\r\n                    return ResultCode.FAILURE;\r\n                  }\r\n                }\r\n              } else if (conflictResolution == \"FailOnAnyConflict!\") {\r\n                return ResultCode.FAILURE;\r\n              }\r\n              break;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return rc;\r\n  }\r\n  /**\r\n   * Updates the database with the changes made in a DataWindow control or DataStore.\r\n   * Method {@link update} can also call {@link acceptText} for the current row and column before it updates the database.\r\n   * @param accept    (optional)\tA `boolean` value specifying whether the DataWindow control or DataStore should automatically perform an AcceptText prior to performing the update. Default is _true_.\r\n   * @param resetflag (optional)\tA `boolean` value specifying whether the DataWindow control or DataStore should automatically reset the update flags. Default is _true_.\r\n   * @returns {Promise<ResultCode>} `Promise` of update result code: Success(1), Failure(-1) or Nothing(0) happennings\r\n   * @since 0.0.0\r\n   * @see {@link acceptText}\r\n   * @see {@link resetUpdate}\r\n   * @see {@link updatesPending}\r\n   * @see {@link updating}\r\n   */\r\n  update(accept: boolean = true, resetflag: boolean = true): Promise<ResultCode> {\r\n    return new Promise((resolve, reject) => {\r\n\r\n      if (this.updating || !this.httpService) {\r\n        resolve(ResultCode.FAILURE);\r\n        return;\r\n      }\r\n      if (!this.updatesPending) {\r\n        resolve(ResultCode.NOTHING);\r\n        return;\r\n      }\r\n      const eventStart = new DwUpdateStartEvent();\r\n      this.updateStartEvent$.trigger(eventStart);\r\n      if (!eventStart.defaultPrevented) {\r\n        if (accept) {\r\n          if (this.acceptText() < 0) {\r\n            resolve(ResultCode.FAILURE);\r\n            return;\r\n          }\r\n        }\r\n        this._updating = true;\r\n        let updateResult: { inserts: number, updates: number, deletes: number } = { inserts: 0, updates: 0, deletes: 0 };\r\n        //\r\n        this._updateBackend()\r\n          //.pipe(map(data => {\r\n          //  return data;\r\n          //}))\r\n          .subscribe({\r\n            next: (data) => {\r\n              this._handleUpdateResponse(data, updateResult);\r\n            },\r\n            error: (err: HttpErrorResponse) => {\r\n              this._updating = false;\r\n\r\n              let processed = false;\r\n              if (err.error) {\r\n                if (err.error instanceof DwDbmsErrorEvent) {\r\n                  // rethrow\r\n                  this.dbErrorEvent$.trigger(\r\n                    new DwDbmsErrorEvent(err.error.errCode, err.error.errText, undefined, undefined, err)\r\n                  );\r\n                  processed = true;\r\n                } else if (err.status >= 500) {\r\n                  let rpcError = err.error;\r\n                  if (Objects.isArray(err.error)) {\r\n                    rpcError = err.error[0];\r\n                  }\r\n                  //if (rpcError.jsonrpc == JSONRPC_VERSION_2) {\r\n                  if(JsonRpc.isErrorResponse(rpcError)) {\r\n                    this.dbErrorEvent$.trigger(\r\n                      new DwDbmsErrorEvent(rpcError.error.code, rpcError.error.message,\r\n                        undefined, undefined, err)\r\n                    );\r\n                    processed = true;\r\n                  }\r\n                }\r\n              }\r\n              if (!processed) {\r\n                this.httpErrorEvent$.trigger(err);\r\n              }\r\n\r\n              this.emitDataStream();\r\n              resolve(ResultCode.FAILURE);\r\n            },\r\n            complete: () => {\r\n              this._updating = false;\r\n              if (resetflag) { this.resetUpdate() }\r\n              const event = new DwUpdateEndEvent(updateResult.inserts, updateResult.updates, updateResult.deletes);\r\n              this.updateEndEvent$.trigger(event);\r\n              this.emitDataStream();\r\n              resolve(ResultCode.SUCCESS);\r\n            }\r\n          });\r\n      }\r\n\r\n    });\r\n  }\r\n  /**\r\n   *  Prepare requests and call update methods to the database\r\n   */\r\n  private _updateBackend(): Observable<any> {\r\n    let deleteRows: Array<T> = [];\r\n    let updateRows: Array<[BufferType, T, number]> = [];\r\n    let insertRows: Array<[BufferType, T, number]> = [];\r\n    let buffer: Array<T>;\r\n    let rows: number;\r\n    let status: ItemStatus | undefined;\r\n\r\n    const batchMethod: RpcMethodSignature | undefined = this._config.table?.batchMethod;\r\n    const insertMethod: RpcMethodSignature | undefined = this._config.table?.insertMethod\r\n    const deleteMethod: RpcMethodSignature | undefined = this._config.table?.deleteMethod;\r\n    const updateMethod: RpcMethodSignature | undefined = this._config.table?.updateMethod;\r\n\r\n    let canInsert: boolean;\r\n    let canUpdate: boolean;\r\n    let canDelete: boolean;\r\n\r\n    if (batchMethod instanceof Function) {\r\n      canInsert = true;\r\n      canUpdate = true;\r\n      canDelete = true;\r\n    } else {\r\n      canInsert = (insertMethod instanceof Function);\r\n      canUpdate = (updateMethod instanceof Function);\r\n      canDelete = (deleteMethod instanceof Function);\r\n    }\r\n    // Step 1. Collect data rows to update\r\n    let i = -1;\r\n    let bufferType: BufferType = \"Primary!\"\r\n    buffer = this.getBuffer(bufferType);\r\n    rows = buffer.length;\r\n    while (++i < rows) {\r\n      status = this.getItemStatus(i, null, bufferType);\r\n      switch (status) {\r\n        case \"NewModified!\":  insertRows.push([bufferType, buffer[i], i]); break;\r\n        case \"DataModified!\": updateRows.push([bufferType, buffer[i], i]); break;\r\n      }\r\n    }\r\n    i = -1;\r\n    bufferType = \"Filter!\"\r\n    buffer = this.getBuffer(bufferType);\r\n    rows = buffer.length;\r\n    while (++i < rows) {\r\n      status = this.getItemStatus(i, null, bufferType);\r\n      switch (status) {\r\n        case \"NewModified!\":  insertRows.push([bufferType, buffer[i], i]); break;\r\n        case \"DataModified!\": updateRows.push([bufferType, buffer[i], i]); break;\r\n      }\r\n    }\r\n    i = -1;\r\n    bufferType = \"Delete!\";\r\n    buffer = this.getBuffer(bufferType);\r\n    rows = buffer.length;\r\n    while (++i < rows) {\r\n      status = this.getItemStatus(i, null, bufferType);\r\n      switch (status) {\r\n        case \"DataModified!\":\r\n        case \"NotModified!\":\r\n          deleteRows.push(buffer[i]);\r\n          break;\r\n      }\r\n    }\r\n\r\n    // Step 2. Make JSONRPC-requests for send to the server\r\n    const target = this.getMainDS();\r\n\r\n    const updateTable = this._config.table?.updateTable ?? \"?\";\r\n\r\n    let deletes_batch: JsonRpcDelete[] = [];\r\n    let inserts_batch: JsonRpcInsert[] = [];\r\n    let updates_batch: JsonRpcUpdate[] = [];\r\n\r\n    // Create deleting requests\r\n    let originals;\r\n    let whereVals: any;\r\n    let dbName: string;\r\n    let column: TableColumn;\r\n    let whereCols: TableColumn[];\r\n    let row: number;\r\n    if (canDelete && deleteRows.length > 0) {\r\n      i = -1;\r\n      rows = deleteRows.length;\r\n      while (++i < rows) {\r\n        whereVals = {};\r\n        whereCols = this.getWhereClauseColumns(deleteRows[i], true);\r\n        for (let j = 0; j < whereCols.length; j++) {\r\n          dbName = this.getColumnDbName(whereCols[j]);\r\n          whereVals[dbName] = this.getItem(i, whereCols[j].name, \"Delete!\", true);\r\n        }\r\n        whereVals = Objects.ifEmpty(whereVals, undefined);\r\n        if (Object.keys(whereVals).length == 0) {\r\n          whereVals = undefined;\r\n        }\r\n        deletes_batch.push(this.createRpcRequestObject(\"delete\", updateTable, { where: whereVals }, this.getRowIdFromRow(i, \"Delete!\")));\r\n      }\r\n    }\r\n    // Create updating requests\r\n    if (canUpdate && updateRows.length > 0) {\r\n      const ret_cols = Objects.ifEmpty(this.getAutoSyncColumns(false), undefined);\r\n      i = -1;\r\n      rows = updateRows.length;\r\n      let setVals: any = {};\r\n      while (++i < rows) {\r\n        originals = target._originalsMap.get(<Object>updateRows[i][1]);\r\n        if (originals) {\r\n          setVals = {};\r\n          whereVals = {};\r\n          Object.keys(originals).forEach(key => {\r\n            let oCol = target.getColumnObject(key);\r\n            if (oCol) {\r\n              dbName = this.getColumnDbName(oCol);\r\n              setVals[dbName] = (updateRows[i][1] as any)[key];\r\n            }\r\n          });\r\n\r\n          bufferType = updateRows[i][0];\r\n          row = updateRows[i][2];\r\n\r\n          whereCols = this.getWhereClauseColumns(updateRows[i][1], false);\r\n          for (let j = 0; j < whereCols.length; j++) {\r\n            dbName = this.getColumnDbName(whereCols[j]);\r\n            whereVals[dbName] = this.getItem(row, whereCols[j].name, bufferType, true);\r\n          }\r\n          whereVals = Objects.ifEmpty(whereVals, undefined);\r\n          updates_batch.push(\r\n            this.createRpcRequestObject(\"update\", updateTable, { set: setVals, where: whereVals, returning: ret_cols }, this.getRowIdFromRow(row, bufferType))\r\n          );\r\n        }\r\n      }\r\n    }\r\n    // Create inserting requests\r\n    if (canInsert && insertRows.length > 0) {\r\n      const ret_cols = Objects.ifEmpty(this.getAutoSyncColumns(true), undefined);\r\n      let vals: any;\r\n      let oRow;\r\n      i = -1;\r\n      rows = insertRows.length;\r\n      while (++i < rows) {\r\n        bufferType = insertRows[i][0];\r\n        oRow = insertRows[i][1];\r\n        row = insertRows[i][2];\r\n        vals = {};\r\n        for (let key in oRow) {\r\n          column = target.getColumnObject(key)!;\r\n\r\n          if (this.isColumnUpdatable(column)) {\r\n\r\n            if (column.identity && oRow[key] == null) {\r\n              /* Identity column has a `null` value - EXCLUDE IT */\r\n              continue;\r\n            }\r\n\r\n            dbName = this.getColumnDbName(column);\r\n            vals[dbName] = oRow[key];\r\n          }\r\n        }\r\n        inserts_batch.push(\r\n          this.createRpcRequestObject(\"insert\", updateTable, { values: { ...vals }, returning: ret_cols }, this.getRowIdFromRow(row, bufferType))\r\n        );\r\n\r\n      }\r\n    }\r\n\r\n    let jsonRpcSingleRequest: JsonRpcSingleRequest | null = null;\r\n    if (this._config.table?.rpcMethodFormat == 3) {\r\n      // Transform to the single request object\r\n      let i, nLen;\r\n      let request;\r\n      let arr = [];\r\n      //jsonRpcSingleRequest = { jsonrpc: JSONRPC_VERSION, method: \"executeBatch\", params: { table: updateTable, inserts: [], updates: [], deletes: [] }, id: \"batch\" };\r\n      jsonRpcSingleRequest = JsonRpc.createRequest<JsonRpcSingleRequest>(\"executeBatch\",  { table: updateTable, inserts: [], updates: [], deletes: [] }, \"batch\");\r\n\r\n      nLen = inserts_batch.length;\r\n      if (nLen > 0) {\r\n        arr = jsonRpcSingleRequest.params.inserts!;\r\n        for (i = 0; i < nLen; i++) {\r\n          request = { values: inserts_batch[i].params.values, returning: inserts_batch[i].params.returning, id: inserts_batch[i].id };\r\n          arr.push(request);\r\n        }\r\n      } else {\r\n        jsonRpcSingleRequest.params.inserts = undefined;\r\n      }\r\n\r\n      nLen = updates_batch.length;\r\n      if (nLen > 0) {\r\n        arr = jsonRpcSingleRequest.params.updates!;\r\n        for (i = 0; i < nLen; i++) {\r\n          request = {\r\n            set: updates_batch[i].params.set,\r\n            where: updates_batch[i].params.where,\r\n            returning: updates_batch[i].params.returning,\r\n            id: updates_batch[i].id\r\n          };\r\n          arr.push(request);\r\n        }\r\n      } else {\r\n        jsonRpcSingleRequest.params.updates = undefined;\r\n      }\r\n\r\n      nLen = deletes_batch.length;\r\n      if (nLen > 0) {\r\n        arr = jsonRpcSingleRequest.params.deletes!;\r\n        for (i = 0; i < nLen; i++) {\r\n          request = {\r\n            where: deletes_batch[i].params.where,\r\n            id: deletes_batch[i].id\r\n          };\r\n          arr.push(request);\r\n        }\r\n      } else {\r\n        jsonRpcSingleRequest.params.deletes = undefined;\r\n      }\r\n    }\r\n\r\n    // Step 3. Send updates\r\n\r\n    let update$: Observable<Object> = EMPTY;\r\n\r\n    if (this.httpService) {\r\n      const context: RpcMethodContext = {dwCode: this._config.datawindow?.code};\r\n      if (batchMethod instanceof Function) {\r\n        if (jsonRpcSingleRequest)\r\n          update$ = batchMethod.bind(this.httpService)(jsonRpcSingleRequest, context);\r\n        else\r\n          update$ = batchMethod.bind(this.httpService)([...deletes_batch, ...updates_batch, ...inserts_batch], context);\r\n      } else {\r\n        let _delete$: Observable<Object> = EMPTY;\r\n        let _update$: Observable<Object> = EMPTY;\r\n        let _insert$: Observable<Object> = EMPTY;\r\n        if (insertMethod && inserts_batch.length > 0) {\r\n          if (jsonRpcSingleRequest)\r\n            _insert$ = insertMethod.bind(this.httpService)(jsonRpcSingleRequest, context);\r\n          else\r\n            _insert$ = insertMethod.bind(this.httpService)(inserts_batch, context);\r\n        }\r\n        if (updateMethod && updates_batch.length > 0) {\r\n          if (jsonRpcSingleRequest)\r\n            _update$ = updateMethod.bind(this.httpService)(jsonRpcSingleRequest, context);\r\n          else\r\n            _update$ = updateMethod.bind(this.httpService)(updates_batch, context);\r\n        }\r\n        if (deleteMethod && deletes_batch.length > 0) {\r\n          if (jsonRpcSingleRequest)\r\n            _delete$ = deleteMethod.bind(this.httpService)(jsonRpcSingleRequest, context);\r\n          else\r\n            _delete$ = deleteMethod.bind(this.httpService)(deletes_batch, context);\r\n        }\r\n        update$ = concat(_insert$, _delete$, _update$);\r\n      }\r\n    }\r\n\r\n    return update$;\r\n  }\r\n  /**\r\n   * Handle update response from the backend in the JSON-RPC 2.0 format\r\n   * @param data Response data\r\n   * @param outcome The results of the server response processing\r\n   */\r\n  private _handleUpdateResponse(data: any, outcome: { inserts: number, updates: number, deletes: number }): void {\r\n\r\n    //type RpcResponseResult = { jsonrpc: typeof JSONRPC_VERSION_2, result: { sqlnrows?: number, returning?: { [key: string]: any } }, id: number };\r\n    //type RpcResponseError = { jsonrpc: typeof JSONRPC_VERSION_2, error: { code: number, message: string, data?: { sqlcode?: number, sqlstate?: string, sqlerrtext?: string } }, id: number }\r\n\r\n    let processed: number = 0;\r\n    let errors: DwDbmsErrorEvent[] = [];\r\n\r\n    if (data) {\r\n      //if (Objects.isObject(data) && data.jsonrpc == JSONRPC_VERSION_2) {\r\n      if (JsonRpc.isResponseObject(data)) {\r\n        // Only one response object was received from the server\r\n        if (data.error) {\r\n          // ... and this is an error\r\n          throw new DwDbmsErrorEvent(data.error.code, data.error.message);\r\n        }\r\n        // Transform to batch response\r\n        if (typeof data.id === \"string\" && data.id == \"batch\") {\r\n          // This is a response for the single-object request\r\n          let inserts: any[] = Objects.ifNotArray(data.result.inserts, []);\r\n          let updates: any[] = Objects.ifNotArray(data.result.updates, []);\r\n          let deletes: any[] = Objects.ifNotArray(data.result.deletes, []);\r\n          data = [];\r\n          let len, i;\r\n          len = inserts.length;\r\n          for (i = 0; i < len; i++) {\r\n            //data.push({ jsonrpc: JSONRPC_VERSION_2, result: inserts[i], id: inserts[i].id });\r\n            data.push(JsonRpc.toResponse( {result: inserts[i], id: inserts[i].id} ));\r\n          }\r\n          len = updates.length;\r\n          for (i = 0; i < len; i++) {\r\n            //data.push({ jsonrpc: JSONRPC_VERSION_2, result: updates[i], id: updates[i].id });\r\n            data.push( JsonRpc.toResponse({result: updates[i], id: updates[i].id } ));\r\n          }\r\n          len = deletes.length;\r\n          for (i = 0; i < len; i++) {\r\n            //data.push({ jsonrpc: JSONRPC_VERSION_2, result: deletes[i], id: deletes[i].id });\r\n            data.push( JsonRpc.toResponse( {result: deletes[i], id: deletes[i].id } ));\r\n          }\r\n        } else {\r\n          data = [data];\r\n        }\r\n      }\r\n      if (Objects.isArray(data)) {\r\n        const target = this.getMainDS();\r\n        const arr: any[] = data;\r\n        const arrLen = arr.length;\r\n        const colNames = this.getColumns().map(col => col.name);\r\n        let buffer: T[];\r\n\r\n        for (let i = 0; i < arrLen; i++) {\r\n          //if (arr[i].jsonrpc == JSONRPC_VERSION_2) {\r\n          if ( JsonRpc.isResponseObject(arr[i]) ) {\r\n            processed++;\r\n            let id = arr[i].id;\r\n            if (arr[i].result) {\r\n              // OK\r\n              if (typeof id === \"number\") {\r\n                let row;\r\n                let bufferType: BufferType;\r\n\r\n                let sqlNRows = arr[i].result.sqlnrows;\r\n                if (Number.isFinite(sqlNRows)) {\r\n                  sqlNRows = Math.max(sqlNRows, 0);\r\n                  if (sqlNRows == 0) {\r\n                    errors.push(new DwDbmsErrorEvent(-9, \"Row was not found on the backend or possibly changed/deleted by another user. Refresh the data and repeat the operation.\"));\r\n                    continue;\r\n                  }\r\n                } else {\r\n                  sqlNRows = 1;\r\n                }\r\n\r\n                bufferType = \"Primary!\";\r\n                buffer = target.getBuffer(bufferType);\r\n                row = this.getRowFromRowId(id, bufferType);\r\n                if (row < 0) {\r\n                  bufferType = \"Filter!\";\r\n                  buffer = target.getBuffer(bufferType);\r\n                  row = this.getRowFromRowId(id, bufferType);\r\n                }\r\n                if (row >= 0) {\r\n                  if (this.getItemStatus(row, null, bufferType) == \"NewModified!\") {\r\n                    //\r\n                    target._newRowSet.delete(buffer[row] as Object);\r\n                    //\r\n                    outcome.inserts += sqlNRows;\r\n                  } else {\r\n                    outcome.updates += sqlNRows;\r\n                  }\r\n\r\n                  // Process returning values\r\n                  const retVals = arr[i].result.returning;\r\n                  if (typeof retVals === \"object\") {\r\n                    for (let key in retVals) {\r\n                      if (colNames.includes(key)) {\r\n                        (buffer[row] as any)[key] = retVals[key];\r\n                      }\r\n                    }\r\n                  }\r\n\r\n                  this.clearOriginalValue(buffer[row], \"*\");\r\n\r\n                } else {\r\n                  // Buffer delete\r\n                  bufferType = \"Delete!\";\r\n                  buffer = target.getBuffer(bufferType);\r\n                  row = this.getRowFromRowId(id, bufferType);\r\n                  if (row >= 0) {\r\n                    buffer.splice(row, 1);\r\n                    outcome.deletes += sqlNRows;\r\n                  } else {\r\n                    console.log(`Unknown id ${id} in result object with index ${i}`);\r\n                  }\r\n                }\r\n              } else {\r\n                errors.push(new DwDbmsErrorEvent(-1, `Invalid ID (${id}) in Result object with index ${i}`));\r\n              }\r\n            } else {\r\n              // Error\r\n              if (arr[i].error === undefined) {\r\n                arr[i].error = { code: -1, message: `Unknown response object type with index ${i}` };\r\n              }\r\n              let err = arr[i].error;\r\n              errors.push(new DwDbmsErrorEvent(err.code, err.message));\r\n            }\r\n          } else {\r\n            // Unknown object\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (errors.length > 0) {\r\n      // Raise first error (?)\r\n      throw errors[0];\r\n    }\r\n  }\r\n  /**\r\n   * Gets the unique row identifier of a row in a DataWindow control or DataStore object from the row number associated with that row.\r\n   * The row identifier value is not the same as the row number value used in many DataWindow and DataStore function calls and\r\n   * should not be used for the row number value. Instead, you should first convert the unique row identifier into a row number by calling\r\n   * {@link getRowFromRowId}.\r\n   * @param row A number specifying the row number for which you want the associated row identifier.\r\n   * @param bufferType A value of the `BufferType` enumerated datatype. Default is `Primary!`\r\n   * @returns Returns the row identifier in buffer. Returns -1 if the row identifier is not in the current buffer and -1 if an error occurs.\r\n   * @see {@link getRowFromRowId}\r\n   * @since 0.0.0\r\n   */\r\n  getRowIdFromRow(row: number | Object, bufferType: BufferType = \"Primary!\"): number {\r\n    if (typeof row === \"object\") {\r\n      return (row as any)[ROW_ID_KEY];\r\n    } else if (row >= 0 && row <= this.rowCount()) {\r\n      const buffer = this.getBuffer(bufferType);\r\n      return (buffer[row] as any)[ROW_ID_KEY];\r\n    }\r\n    return -1;\r\n  }\r\n  /**\r\n   * Gets the row number of a row in a DataWindow control or DataStore object from the unique row identifier associated with that row.\r\n   * @param rowID A number specifying the row identifier for which you want the associated row number.\r\n   * @param bufferType A value of the `BufferType` enumerated datatype. Default is `Primary!`\r\n   * @returns Returns the row number in buffer. Returns -1 if the row number is not in the current buffer\r\n   * @see {@link getRowIdFromRow}\r\n   * @since 0.0.0\r\n   */\r\n  getRowFromRowId(rowID: number, bufferType: BufferType = \"Primary!\"): number {\r\n    const buffer = this.getBuffer(bufferType);\r\n    let index: number = -1;\r\n    let count: number = buffer.length;\r\n    while (++index < count) {\r\n      if ((buffer[index] as any)[ROW_ID_KEY] == rowID) {\r\n        return index;\r\n      }\r\n    }\r\n    return -1;\r\n  }\r\n  /**\r\n   * Reports the modification status of a row or a column within a row. The modification status determines the type of\r\n   * SQL statement the Update method will generate for the row or column.\r\n   * @param row A value identifying the row for which you want the status\r\n   * @param column The column for which you want the status. Column can be a column number or a column name.\r\n   *               The column number is the number of the column as it is listed in the Column Specification.\r\n   * @param bufferType A value identifying the DataWindow buffer containing the row for which you want status\r\n   * @returns A value of the `ItemStatus` enumerated datatype. If column is null, getItemStatus returns the status of row.\r\n   *          If there is no DataWindow object assigned to the DataWindow control or DataStore, {@link getItemStatus} returns undefined.\r\n   * @see {@link setItemStatus}\r\n   * @since 0.0.0\r\n   */\r\n  getItemStatus(row: number, column: number | string | null = null, bufferType: BufferType = \"Primary!\"): ItemStatus | undefined {\r\n    const buffer: T[] = this.getBuffer(bufferType);\r\n    if (typeof column == \"string\") {\r\n      column = this.getColumnIndex(column);\r\n    }\r\n    if (row >= 0 && row < buffer.length) {\r\n      const oRow = buffer[row] as Object;\r\n      if (column == null) {\r\n        // for row\r\n        if (this.isRowNew(oRow)) {\r\n          if (this.isRowModified(oRow))\r\n            return \"NewModified!\";\r\n          else\r\n            return \"New!\";\r\n        } else if (this.isRowModified(oRow)) {\r\n          return \"DataModified!\";\r\n        }\r\n        return \"NotModified!\";\r\n      } else {\r\n        const colName = this.columnName(column);\r\n        if (colName != \"\") {\r\n          const originals: any = this.getMainDS()._originalsMap.get(<Object>oRow);\r\n          if (originals && !(originals[colName] === undefined)) {\r\n            return \"DataModified!\";\r\n          }\r\n          return \"NotModified!\";\r\n        }\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n  /**\r\n   * Changes the modification status of a row or a column within a row. The modification status determines the type of\r\n   * SQL statement the Update method will generate for the row.\r\n   * @param row The row location in which you want to set the status.\r\n   * @param column The column location in which you want to set the status. Column can be a column number or a column\r\n   *               name. To set the status for the row, enter null for column.\r\n   * @param bufferType A value identifying the DataWindow buffer that contains the row.\r\n   * @param status A value of the `ItemStatus` enumerated datatype\r\n   * @returns 1 if it succeeds and -1 if an error occurs.\r\n   * @see {@link getItemStatus}\r\n   * @since 0.0.0\r\n   */\r\n  setItemStatus(row: number, column: number | string | null, bufferType: BufferType, status: ItemStatus): ResultCode {\r\n    const target = this.getMainDS();\r\n    const buffer: T[] = target.getBuffer(bufferType);\r\n    if (row >= 0 && row < buffer.length) {\r\n      const obj: T = buffer[row];\r\n      const currStatus = target.getItemStatus(row, column, bufferType);\r\n      let oCol = undefined;\r\n      switch (currStatus) {\r\n        case \"New!\":\r\n          switch (status) {\r\n            case \"DataModified!\":\r\n              if (column != null) {\r\n                oCol = target.getColumnObject(column);\r\n                if (!oCol) {\r\n                  return ResultCode.FAILURE;\r\n                }\r\n              }\r\n              target._newRowSet.delete(<Object>obj);\r\n              this.makeOriginals(<Object>obj, oCol);\r\n              return ResultCode.SUCCESS;\r\n            case \"New!\":\r\n              return ResultCode.NOTHING;\r\n            case \"NewModified!\":\r\n              if (column != null) {\r\n                oCol = target.getColumnObject(column);\r\n                if (!oCol) {\r\n                  return ResultCode.FAILURE;\r\n                }\r\n              }\r\n              this.makeOriginals(<Object>obj, oCol);\r\n              return ResultCode.SUCCESS;\r\n            case \"NotModified!\":\r\n              return ResultCode.FAILURE;\r\n          }\r\n          break;\r\n        case \"NewModified!\":\r\n          switch (status) {\r\n            case \"DataModified!\":\r\n              target._newRowSet.delete(<Object>obj);\r\n              return ResultCode.SUCCESS;\r\n            case \"New!\":\r\n              return ResultCode.FAILURE;\r\n            case \"NewModified!\":\r\n              return ResultCode.NOTHING;\r\n            case \"NotModified!\":    // --> New!\r\n              if (column != null) {\r\n                oCol = target.getColumnObject(column);\r\n                if (!oCol) {\r\n                  return ResultCode.FAILURE;\r\n                } else {\r\n                  const origObj = target._originalsMap.get(<Object>obj);\r\n                  if (origObj) {\r\n                    delete origObj[oCol.name];\r\n                    if (Object.keys(origObj).length == 0) {\r\n                      target._originalsMap.delete(<Object>obj);\r\n                    }\r\n                  }\r\n                }\r\n              } else\r\n                target._originalsMap.delete(<Object>obj);\r\n              return ResultCode.SUCCESS;\r\n          }\r\n          break;\r\n        case \"DataModified!\":\r\n          switch (status) {\r\n            case \"DataModified!\":\r\n              return ResultCode.NOTHING;\r\n            case \"New!\":    // --> NewModified!\r\n            case \"NewModified!\":\r\n              target._newRowSet.add(<Object>obj);\r\n              return ResultCode.SUCCESS;\r\n            case \"NotModified!\":\r\n              if (column != null) {\r\n                oCol = target.getColumnObject(column);\r\n                if (!oCol) {\r\n                  return ResultCode.FAILURE;\r\n                } else {\r\n                  const origObj = target._originalsMap.get(<Object>obj);\r\n                  if (origObj) {\r\n                    delete origObj[oCol.name];\r\n                    if (Object.keys(origObj).length == 0) {\r\n                      target._originalsMap.delete(<Object>obj);\r\n                    }\r\n                  }\r\n                }\r\n              } else\r\n                target._originalsMap.delete(<Object>obj);\r\n              return ResultCode.SUCCESS;\r\n          }\r\n          break;\r\n        case \"NotModified!\":\r\n          switch (status) {\r\n            case \"DataModified!\":\r\n              if (column != null) {\r\n                oCol = target.getColumnObject(column);\r\n                if (!oCol) {\r\n                  return ResultCode.FAILURE;\r\n                }\r\n              }\r\n              this.makeOriginals(<Object>obj, oCol);\r\n              return ResultCode.SUCCESS;\r\n            case \"New!\":\r\n              target._newRowSet.add(<Object>obj);\r\n              return ResultCode.SUCCESS;\r\n            case \"NewModified!\":\r\n              if (column != null) {\r\n                oCol = target.getColumnObject(column);\r\n                if (!oCol) {\r\n                  return ResultCode.FAILURE;\r\n                }\r\n              }\r\n              target._newRowSet.add(<Object>obj);\r\n              this.makeOriginals(<Object>obj, oCol);\r\n              return ResultCode.SUCCESS;\r\n            case \"NotModified!\":\r\n              target._originalsMap.delete(<Object>obj);\r\n              return ResultCode.NOTHING;\r\n          }\r\n          break;\r\n      }\r\n    }\r\n    return ResultCode.FAILURE;\r\n  }\r\n  /**\r\n   * Gets data from the specified row and column values in the specified Buffer.You can obtain\r\n   * the data that was originally retrieved and stored in the database from the original buffer,\r\n   * as well as the current value in the primary, delete, or filter buffers.\r\n   * @param row A value identifying the row location of the data.\r\n   * @param column The column location of the data. Column can be a column number or a column name.\r\n   * @param bufferType A value identifying the DataWindow buffer from which you want to get the data.\r\n   * @param original A boolean indicating whether you want the original or current values for row and column:\r\n   * \t            True - Returns the original values (the values initially retrieved from the database).\r\n   * \t            False - (Default) Returns the current values.\r\n   * @returns Returns the value in the specified row and column. Returns _null_ if the column value is null or\r\n   *          if there is no DataWindow object assigned to the DataWindow control or DataStore.\r\n   * @see {@link getItemStatus}\r\n   * @see {@link setItem}\r\n   * @since 0.0.0\r\n   */\r\n  getItem(row: number, column: string | number, bufferType: BufferType = \"Primary!\", original: boolean = false): any | null {\r\n    const buffer: T[] = this.getBuffer(bufferType);\r\n    if (row >= 0 && row < buffer.length) {\r\n      const oRow: T = buffer[row];\r\n      let colIndex: number = -1;\r\n      let keys: string[] = Object.keys(oRow);\r\n      if (typeof column === \"string\") {\r\n        colIndex = keys.indexOf((column.trim()).toLowerCase());\r\n      } else if (column >= 0 && column < keys.length) {\r\n        colIndex = column;\r\n      }\r\n      if (colIndex >= 0) {\r\n        const colName = keys[colIndex];\r\n        if (original) {\r\n          const origData = this.getMainDS()._originalsMap.get(<Object>oRow);\r\n          if (origData) {\r\n            const origVal: any = origData[colName];\r\n            if (!(origVal === undefined))\r\n              return origVal;\r\n          }\r\n        }\r\n        return (oRow as any)[colName];\r\n      }\r\n    }\r\n    throw new Error(`getItem: Row/Column (${row}/${column}) is invalid`);\r\n  }\r\n  /**\r\n   * Returns the string data in the specified row and column of the DataStore.\r\n   *\r\n   * @param row A value identifying the row location of the data.\r\n   * @param column The column location of the data. Column can be a column number or a column name.\r\n   * @param bufferType A value identifying the DataWindow buffer from which you want to get the data.\r\n   * @param original A boolean indicating whether you want the original or current values for row and column:\r\n   * \t            True - Returns the original values (the values initially retrieved from the database).\r\n   * \t            False - (Default) Returns the current values.\r\n   * @returns If item's value is null, returns null, else the result of converting to String data type\r\n   * @see {@link getItem}\r\n   * @since 0.0.0\r\n   */\r\n  getItemString(row: number, column: string | number, bufferType: BufferType = \"Primary!\", original: boolean = false): string | null {\r\n    const value = this.getItem(row, column, bufferType, original);\r\n    if (value == null || typeof value === \"string\") return value;\r\n    return Types.toString(value);\r\n  }\r\n  /**\r\n   * Returns the numeric data in the specified row and column of the DataStore.\r\n   *\r\n   * @param row A value identifying the row location of the data.\r\n   * @param column The column location of the data. Column can be a column number or a column name.\r\n   * @param bufferType A value identifying the DataWindow buffer from which you want to get the data.\r\n   * @param original A boolean indicating whether you want the original or current values for row and column:\r\n   * \t            True - Returns the original values (the values initially retrieved from the database).\r\n   * \t            False - (Default) Returns the current values.\r\n   * @returns If item's value is null, returns null, else the result of converting to Number data type\r\n   * @see {@link getItem}\r\n   * @since 0.0.0\r\n   */\r\n  getItemNumber(row: number, column: string | number, bufferType: BufferType = \"Primary!\", original: boolean = false): number | null {\r\n    const value = this.getItem(row, column, bufferType, original);\r\n    if (value == null || typeof value === \"number\") return value;\r\n    return Types.toNumber(value);\r\n  }\r\n  /**\r\n   * Returns the decimal data in the specified row and column of the DataStore.\r\n   * @param row A value identifying the row location of the data.\r\n   * @param column The column location of the data. Column can be a column number or a column name.\r\n   * @param bufferType A value identifying the DataWindow buffer from which you want to get the data.\r\n   * @param original A boolean indicating whether you want the original or current values for row and column:\r\n   * \t            True - Returns the original values (the values initially retrieved from the database).\r\n   * \t            False - (Default) Returns the current values.\r\n   * @returns If item's value is null, returns null, else the result of converting to Decimal data type\r\n   * @since 0.0.0\r\n   */\r\n  getItemDecimal(row: number, column: string | number, bufferType: BufferType = \"Primary!\", original: boolean = false): Decimal | null {\r\n    const value = this.getItem(row, column, bufferType, original);\r\n    if (value == null || value instanceof Decimal) return value;\r\n    return Types.toDecimal(value);\r\n  }\r\n  /**\r\n   * Returns the date data in the specified row and column of the DataStore.\r\n   * @param row A value identifying the row location of the data.\r\n   * @param column The column location of the data. Column can be a column number or a column name.\r\n   * @param bufferType A value identifying the DataWindow buffer from which you want to get the data.\r\n   * @param original A boolean indicating whether you want the original or current values for row and column:\r\n   * \t            True - Returns the original values (the values initially retrieved from the database).\r\n   * \t            False - (Default) Returns the current values.\r\n   * @returns If item's value is null, returns null, else the result of converting to Date data type\r\n   * @see {@link getItem}\r\n   * @since 0.0.0\r\n   */\r\n  getItemDate(row: number, column: string | number, bufferType: BufferType = \"Primary!\", original: boolean = false): Date | null {\r\n    const value = this.getItem(row, column, bufferType, original);\r\n    if (value == null || value instanceof Date) return value;\r\n    return Types.toDate(value);\r\n  }\r\n  /**\r\n   * Returns the datetime data in the specified row and column of the DataStore.\r\n   * @param row A value identifying the row location of the data.\r\n   * @param column The column location of the data. Column can be a column number or a column name.\r\n   * @param bufferType A value identifying the DataWindow buffer from which you want to get the data.\r\n   * @param original A boolean indicating whether you want the original or current values for row and column:\r\n   * \t            True - Returns the original values (the values initially retrieved from the database).\r\n   * \t            False - (Default) Returns the current values.\r\n   * @returns If item's value is null, returns null, else the result of converting to DateTime data type\r\n   * @see {@link getItem}\r\n   * @since 0.0.0\r\n   */\r\n  getItemDateTime(row: number, column: string | number, bufferType: BufferType = \"Primary!\", original: boolean = false): DateTime | null {\r\n    const value = this.getItem(row, column, bufferType, original);\r\n    if (value == null || value instanceof DateTime) return value;\r\n    return Types.toDateTime(value);\r\n  }\r\n  /**\r\n   * Returns the time data in the specified row and column of the DataStore.\r\n   * @param row A value identifying the row location of the data.\r\n   * @param column The column location of the data. Column can be a column number or a column name.\r\n   * @param bufferType A value identifying the DataWindow buffer from which you want to get the data.\r\n   * @param original A boolean indicating whether you want the original or current values for row and column:\r\n   * \t            True - Returns the original values (the values initially retrieved from the database).\r\n   * \t            False - (Default) Returns the current values.\r\n   * @returns If item's value is null, returns null, else the result of converting to Time data type\r\n   * @see {@link getItem}\r\n   * @since 0.0.0\r\n   */\r\n  getItemTime(row: number, column: string | number, bufferType: BufferType = \"Primary!\", original: boolean = false): Time | null {\r\n    const value = this.getItem(row, column, bufferType, original);\r\n    if (value == null || value instanceof Time) return value;\r\n    return Types.toTime(value);\r\n  }\r\n  /**\r\n   * Sets the value of a row and column in a DataWindow control or DataStore to the specified value.\r\n   *\r\n   * @param row The row location of the data.\r\n   * @param column The column location of the data. Column can be a column number or a column name. The column number is the number of the column as it is listed in the Column Specification\r\n   * @param value The value to which you want to set the data at the row and column location. The datatype of the value must be the same datatype as the column\r\n   * @returns Returns 1 if it succeeds and -1 if an error occurs.\r\n   * @see {@link getItem}\r\n   * @since 0.0.0\r\n   */\r\n  setItem(row: number, column: string | number, value: any): ResultCode {\r\n    if (row >= 0 && row < this.rowCount()) {\r\n      let oCol = this.getColumnObject(column);\r\n      if (oCol) {\r\n        const oRow: any = this.data[row];\r\n        const colName: string = oCol.name;\r\n        const oldVal: any = oRow[colName];\r\n\r\n        this.getMainDS()._rowIndexes.set(oRow, row);\r\n        // Futher processing/converting is doing in the row proxy object\r\n        oRow[colName] = value;\r\n\r\n        if (oRow[colName] !== oldVal) {\r\n          this.itemChangedEvent$.trigger(new DwItemChangedEvent(row, colName, oRow[colName]));\r\n        }\r\n\r\n        return ResultCode.SUCCESS;\r\n      }\r\n    }\r\n\r\n    throw new Error(\"setItem: Row/Column is invalid\");\r\n  }\r\n  /**\r\n   * Deletes a row from the primary buffer of a DataWindow control, DataStore object.\r\n   * If the DataWindow is not updatable, all storage associated with the row is cleared.\r\n   * If the DataWindow is updatable, {@link deleteRow} moves the row to the DataWindow's delete buffer\r\n   * The row is not deleted from the database table until the application calls the Update method.\r\n   *\r\n   * @param row A value identifying the row you want to delete. To delete the current row, specify NaN for row.\r\n   * @returns Returns 1 if the row is successfully deleted and -1 if an error occurs.\r\n   * @see {@link insertRow}\r\n   * @since 0.0.0\r\n   */\r\n  deleteRow(row: number = NaN): ResultCode {\r\n    let target = this.getMainDS();\r\n    if (Objects.isNumber(row)) {\r\n      if (isNaN(row)) row = this.getRow();\r\n    } else {\r\n      row = -1;\r\n    }\r\n    if (row >= 0 && row < target.rowCount()) {\r\n      let oRow: T[] = target.data.splice(row, 1);\r\n      if (this.isUpdateable()) {\r\n        target.getBuffer(\"Delete!\").push(oRow[0]);\r\n      }\r\n      target.resetRowIndexes();\r\n\r\n      this._selectedRows.delete(oRow[0] as Object);\r\n\r\n      //target.emitDataStream();\r\n\r\n      return ResultCode.SUCCESS;\r\n    }\r\n    return ResultCode.FAILURE;\r\n  }\r\n  /**\r\n   * Inserts a row in a DataWindow or DataStore. If any columns have default values, the row is initialized with\r\n   * these values before it is displayed. Method {@link insertRow} simply inserts the row without changing the display or the current row.\r\n   * To scroll to the row and make it the current row, call _scrollToRow_. To simply make it the current row, call {@link setRow}.\r\n   * A newly inserted row (with a status flag of `New!`) is not included in the modified count until data is entered in the row\r\n   * (its status flag becomes `NewModified!`).\r\n   *\r\n   * @param row A value identifying the row before which you want to insert a row. To insert a row at the end, specify `Infinity`.\r\n   * @returns The number of the row that was added if it succeeds and -1 if an error occurs.\r\n   * @see {@link deleteRow}\r\n   * @since 0.0.0\r\n   */\r\n  insertRow(row: number = Infinity): number {\r\n    const target = this.getMainDS();\r\n    const colCount = this.columnCount();\r\n    if (colCount == 0) return -1;\r\n\r\n    let rowNumber: number;\r\n    let oCol: TableColumn;\r\n    let oRow: any = this.createRowObject(++target._lastRowID);\r\n\r\n    for (let i = 0; i < colCount; i++) {\r\n      oCol = this.getColumnObject(i)!;\r\n      if (oCol.initial != null)\r\n        oRow[oCol.name] = Types.toType(oCol.initial, oCol.type ?? \"text\")\r\n      else\r\n        oRow[oCol.name] = null;\r\n    }\r\n    oRow = this.proxify(oRow);\r\n    if (row >= 0 && row < this.rowCount()) {\r\n      rowNumber = row;\r\n      target.data.splice(rowNumber, 0, oRow);\r\n    } else {   // insert at the end\r\n      rowNumber = target.data.push(oRow) - 1;\r\n    }\r\n\r\n    target._newRowSet.add(<Object>oRow);\r\n    target.resetRowIndexes();\r\n\r\n    //target.emitDataStream();\r\n\r\n    return rowNumber;\r\n  }\r\n  /**\r\n   * Saves the contents of a DataWindow or DataStore in the format you specify\r\n   * @param exportType A value of the `SaveAsType` union type\r\n   * @param headings A boolean value indicating whether you want column headings with the saved data. Default value is _true_. This argument is used for the following formats: CSV!, TXT!. For XML! format method inserts `<?xml ... ?>` as a first line.\r\n   * @returns A `Promise` that resolves to string in the specified format\r\n   */\r\n  async exportString(exportType: SaveAsType, headings: boolean = true): Promise<string> {\r\n    const target = this.getMainDS();\r\n    const cols = target.getColumns();\r\n    const colCount = cols.length;\r\n    let res = \"\";\r\n    let data = [...target.data, ...target.getBuffer(\"Filter!\")];  //, ...target.getBuffer(\"Delete!\")];\r\n    let dataLen = data.length;\r\n    switch (exportType) {\r\n      case \"JSON!\": res = JSON.stringify(data); break;\r\n      case \"CSV!\":\r\n      case \"Text!\":\r\n        {\r\n          const delim = (exportType == \"CSV!\") ? \";\" : \"\\t\";\r\n          let i;\r\n          if (headings) {\r\n            for (i = 0; i < colCount; i++) {\r\n              res += cols[i].name;\r\n              if (i < (colCount - 1))\r\n                res += delim;\r\n              else\r\n                res += \"\\r\\n\";\r\n            }\r\n          }\r\n          let r = -1;\r\n          let val;\r\n          while (++r < dataLen) {\r\n            for (i = 0; i < colCount; i++) {\r\n              val = (data[r] as any)[cols[i].name];\r\n              if (val == null)\r\n                val = \"\";\r\n              else if (typeof val == \"string\") {\r\n                val = '\"' + Strings.replaceAll(val, '\"', '\\\"') + '\"';\r\n              }\r\n              res += val;\r\n              if (i < (colCount - 1))\r\n                res += delim;\r\n              else\r\n                res += \"\\r\\n\";\r\n            }\r\n          }\r\n        }\r\n        break;\r\n      case \"XML!\":\r\n        {\r\n          if (headings) {\r\n            res = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\\r\\n';\r\n          }\r\n          res += \"<rows>\\r\\n\";\r\n          let r = -1;\r\n          let val;\r\n          let rowOutput: string;\r\n          let name: string;\r\n          while (++r < dataLen) {\r\n            rowOutput = \"\";\r\n            for (let i = 0; i < colCount; i++) {\r\n              name = cols[i].name;\r\n              val = (data[r] as any)[name];\r\n              if (val != null) {\r\n                val = XmlDocs.escapeChars(Types.toString(val));\r\n                rowOutput += `\\t\\t<${name}>${val}</${name}>\\r\\n`;\r\n              }\r\n            }\r\n            if (rowOutput) {\r\n              res += `\\t<row>${rowOutput}\\t</row>\\r\\n`;\r\n            }\r\n          }\r\n          res += \"</rows>\\r\\n\";\r\n        }\r\n        break;\r\n    }\r\n    return res;\r\n  }\r\n  /**\r\n   * Inserts data into a DataWindow control or DataStore from tab-separated, comma-separated, or XML/JSON data in a string.\r\n   *\r\n   * @param importType An enumerated value of the `SaveAsType`\r\n   * @param source A string from which you want to copy the data. The string should contain tab-separated or comma-separated columns or XML/JSON with one row per line\r\n   * @param options Optional object with the following optional properties:\r\n   ** _startRow_ The number of the first detail row in the string that you want to copy. The default is 0.\r\n   ** _endRow_ The number of the last detail row in the string that you want to copy. The default is the rest of the rows.\r\n   ** _startCol_ The number of the first column in the string that you want to copy. The default is 0.\r\n   ** _endCol_ The number of the last column in the string that you want to copy. The default is the rest of the columns.\r\n   ** _dwStartCol_ The number of the first column in the DataWindow control or DataStore that should receive data. The default is 0.\r\n   * @returns A `Promise` that resolves to the number of rows that were imported if it succeeds or one of the following negative integers if an error occurs:\r\n   ** -1   No rows or startrow value supplied is greater than the number of rows in the string,\r\n   ** -3   Invalid argument,\r\n   ** -4   Invalid input,\r\n   ** -11  XML Parsing Error; XML parser libraries not found or XML not well-formed,\r\n   ** -12  XML Template does not exist or does not match the DataWindow,\r\n   ** -13  Unsupported DataWindow style for import,\r\n   ** -14  Error resolving DataWindow nesting\r\n   ** -15  JSON Parsing Error\r\n   * @since 0.0.0\r\n   */\r\n  importString(importType: SaveAsType, source: string, options?: {startRow?: number, endRow?: number, startCol?: number, endCol?: number, dwStartCol?: number}): Promise<number> {\r\n    return new Promise((resolve, reject) => {\r\n      if (typeof source === \"string\") {\r\n        const target = this.getMainDS();\r\n        const buffer = target.getBuffer(\"Primary!\");\r\n        const dsColCount = this.columnCount();\r\n        let oCol: TableColumn;\r\n        let colName: string;\r\n\r\n        let nCount: number = 0;\r\n\r\n        options = options ?? {};\r\n        let startRow = options?.startRow || 0;\r\n        let endRow = options?.endRow || 0;\r\n        let startCol = options?.startCol || 0;\r\n        let endCol = options?.endCol || 0;\r\n        let dwStartCol = options?.dwStartCol || 0;\r\n\r\n        // Deselect all rows, if any\r\n        this.selectRow(Infinity, false);\r\n\r\n        switch (importType) {\r\n          case \"Text!\":\r\n          case \"CSV!\":\r\n            const separator = importType == \"CSV!\" ? \",\" : \"\\t\";\r\n            let lines: string[] = source.split(\"\\r\\n\", options.endRow);\r\n            let fields: string[];\r\n            let field;\r\n\r\n            if (startRow && startRow > lines.length) {\r\n              resolve(-1);\r\n              return;\r\n            }\r\n\r\n            for (let i = 0; i < lines.length; i++) {\r\n              if (i < startRow) continue;\r\n              if (endRow && i > endRow) continue;\r\n\r\n              nCount++;\r\n              const oRow: any = this.createRowObject(++this._lastRowID, true);\r\n\r\n              fields = lines[i].split(separator, endCol);\r\n              for (let j = 0; j < fields.length; j++) {\r\n                if (j < startCol) continue;\r\n                if (endCol && j > endCol) continue;\r\n\r\n                if (j < dsColCount) {\r\n                  if (dwStartCol && j < dwStartCol) continue;\r\n                  field = Strings.unquote(fields[j].trim());\r\n                  oCol = this.getColumnObject(j)!;\r\n                  colName = oCol.name;\r\n                  oRow[colName] = Types.toType(field, oCol.type || \"string\");\r\n                } else {\r\n                  break;\r\n                }\r\n              }\r\n              buffer.push(this.proxify(oRow));\r\n            }\r\n            if (nCount) this.resetRowIndexes();\r\n            resolve(nCount);\r\n            break;\r\n          case \"XML!\":\r\n            try {\r\n              let oDOM = XmlDocs.parseXML(source);\r\n              let rootElem = oDOM.documentElement;\r\n              let children = rootElem.childNodes;\r\n\r\n              if (startRow && startRow > children.length) {\r\n                resolve(-1);\r\n                return;\r\n              }\r\n\r\n              for (let i: number = 0; i < children.length; i++) {\r\n                if (i < startRow) continue;\r\n                if (endRow && i > endRow) continue;\r\n\r\n                let rowNode: ChildNode = children[i];\r\n                if (rowNode.nodeType == Node.ELEMENT_NODE && rowNode.hasChildNodes()) {\r\n                  nCount++;\r\n                  const srcObj: any = XmlDocs.nodeToObject(rowNode);\r\n                  const srcKeys: string[] = Object.keys(srcObj);\r\n                  const keysCount = srcKeys.length;\r\n                  const oRow: any = this.createRowObject(srcObj[ROW_ID_KEY] || ++this._lastRowID, true);\r\n                  let j = -1;\r\n                  while (++j < keysCount) {\r\n                    if (j < startCol) continue;\r\n                    if (endCol && j > endCol) continue;\r\n\r\n                    if (j < dsColCount) {\r\n                      if (dwStartCol && j < dwStartCol) continue;\r\n                      oCol = this.getColumnObject(j)!;\r\n                      colName = oCol.name;\r\n                      oRow[colName] = Types.toType(srcObj[srcKeys[j]], oCol.type || \"string\");\r\n                      if (typeof oRow[colName] == \"string\") {\r\n                        oRow[colName] = XmlDocs.unescapeChars(oRow[colName]);\r\n                      }\r\n                    } else {\r\n                      break;\r\n                    }\r\n                  }\r\n                  buffer.push(this.proxify(oRow));\r\n                }\r\n                if (nCount) this.resetRowIndexes();\r\n                resolve(nCount);\r\n              }\r\n            } catch (err) {\r\n              resolve(-11);\r\n            }\r\n            break;\r\n          case \"JSON!\":\r\n            try {\r\n              let json = JSON.parse(source);\r\n              if (Objects.isObject(json)) {\r\n                json = [json];\r\n              }\r\n              if (!Objects.isArray(json)) {\r\n                throw new IllegalJsonException(\"Invalid JSON format\");\r\n              }\r\n              let arr: any[] = json;\r\n              let len = arr.length;\r\n              let srcObj;\r\n\r\n              if (startRow && startRow > arr.length) {\r\n                resolve(-1);\r\n                return;\r\n              }\r\n\r\n              for (let i = 0; i < len; i++) {\r\n                if (i < startRow) continue;\r\n                if (endRow && i > endRow) continue;\r\n                srcObj = arr[i];\r\n                if (Objects.isObject(srcObj)) {\r\n                  nCount++;\r\n                  const srcKeys: string[] = Object.keys(srcObj);\r\n                  const keysCount = srcKeys.length;\r\n                  const oRow: any = this.createRowObject(srcObj[ROW_ID_KEY] || ++this._lastRowID, true);\r\n                  let j = -1;\r\n                  while (++j < keysCount) {\r\n                    if (j < startCol) continue;\r\n                    if (endCol && j > endCol) continue;\r\n\r\n                    if (j < dsColCount) {\r\n                      if (dwStartCol && j < dwStartCol) continue;\r\n                      oCol = this.getColumnObject(j)!;\r\n                      colName = oCol.name;\r\n                      oRow[colName] = Types.toType(srcObj[srcKeys[j]], oCol.type || \"string\");\r\n                    } else {\r\n                      break;\r\n                    }\r\n                  }\r\n                  buffer.push(this.proxify(oRow));\r\n\r\n                } else {\r\n                  throw new Error(\"Invalid JSON format\");\r\n                }\r\n              }\r\n              if (nCount) this.resetRowIndexes();\r\n              resolve(nCount);\r\n\r\n            } catch (err) {\r\n              resolve(-15);\r\n            }\r\n            break;\r\n        }\r\n      } else {\r\n        resolve(-3);\r\n      }\r\n\r\n    });\r\n  }\r\n  /**\r\n   * Allows you to evaluate DataWindow expressions within a `DwScript` code using data in the DataWindow.\r\n   * For run evaluating process parameter expr must starts with '=' (equal) sign else expr is evaluated\r\n   * as literal value.\r\n   * @example\r\n   *  =Left('HELLO', 3)   // HEL\r\n   *  ='foo'              // foo\r\n   *  true                // true (boolean)\r\n   *\r\n   * @param expr Expression you want to evaluate\r\n   * @param row  The number of the row for which you want to evaluate the expression.\r\n   * @returns Result of the evaluation\r\n   * @see {@link evaluate}\r\n   * @since 0.0.0\r\n   */\r\n  evalExpr(expr: string, row: number | {}): any {\r\n    if (typeof (expr) === \"string\") {\r\n      const exp = expr.trim();\r\n      if (exp.startsWith(\"=\")) {\r\n        return this.evaluate(exp.substring(1), row);\r\n      }\r\n      return this.toLiteralValue(exp);\r\n    }\r\n    return expr;\r\n  }\r\n  /**\r\n   * Allows you to evaluate DataWindow expressions within a `DwScript` code using data in the DataWindow.\r\n   *\r\n   * @param expr  `DwScript` expression you want to evaluate directly\r\n   * @param row   The number of the row for which you want to evaluate the expression.\r\n   * @returns     The result of the evaluation\r\n   * @see {@link evalExpr}\r\n   * @since 0.0.0\r\n   */\r\n  evaluate(expr: string | null, row: number | {}): any {\r\n    let res: any | null;\r\n    let context: any;\r\n    let rowNum;\r\n    if (typeof (row) == \"number\") {\r\n      row = row || 0;\r\n      if (row >= 0 && row < this.rowCount()) {\r\n        rowNum = row;\r\n        context = this.data[<number>rowNum];\r\n      }\r\n    } else {\r\n      context = row;\r\n    }\r\n    if (typeof (expr) === \"string\" && context) {\r\n      let cbk: DSCodeBlock | undefined;\r\n      expr = expr.trim();\r\n      if (expr == \"\") return undefined;\r\n      //const target = this.getMainDS();\r\n      /*\r\n      if (expr == target._lastEval[0] && (target._lastEval[1])) {\r\n          cbk = <DSCodeBlock>target._lastEval[1];\r\n      } else {\r\n          cbk = new DSCodeBlock(expr, target);\r\n          if (cbk.error) {\r\n              this.dwErrorEvent$.trigger(cbk.error);\r\n          }\r\n          target._lastEval[0] = expr;\r\n          target._lastEval[1] = cbk;\r\n      }\r\n      */\r\n      cbk = this._evalCache.get(expr);\r\n      if (!cbk) {\r\n        cbk = new DSCodeBlock(expr, this);\r\n        if (cbk.error) {\r\n          this.dwErrorEvent$.trigger(cbk.error);\r\n          return undefined;\r\n        }\r\n        this._evalCache.set(expr, cbk);\r\n      }\r\n      res = cbk.eval(context, rowNum);\r\n\r\n    }\r\n    return res;\r\n  }\r\n  /**\r\n   * Finds the next row in a DataWindow or DataStore in which data meets a specified condition.\r\n   *\r\n   * @param expr A string whose value is a boolean expression that you want to use as the search criterion. The expression includes column names.\r\n   * @param startRow A value identifying the row location at which to begin the search.\r\n   *                 Start can be greater than the number of last row in DataStore for searching in backward direction.\r\n   * @param endRow A value identifying the row location at which to end the search. End can be greater than the number of the last row.\r\n   *               To search backward, make end row less than start.\r\n   * @returns {number} Returns the number of the first row that meets the search criteria within the search range.\r\n   *                  Returns -1 if no rows are found and one of these negative numbers if an error occurs:\r\n   *                  -2 General error,\r\n   *                  -3 Bad argument\r\n   * @see {@link findRequired}\r\n   * @since 0.0.0\r\n   */\r\n  find(expr: string, startRow: number, endRow: number): number {\r\n    let row: number = -1; // not found\r\n    let index: number;\r\n    let res: any;\r\n    let cbk: DSCodeBlock;\r\n\r\n    if (!(typeof (expr) === \"string\" && typeof (startRow) === \"number\") && typeof (endRow) === \"number\") return -3;\r\n    if (endRow < 0) return -3;\r\n\r\n    expr = expr.trim();\r\n    const target = this; //.getMainDS();\r\n    if (target._lastFind[0] == expr && (target._lastFind[1])) {\r\n      cbk = target._lastFind[1];\r\n    } else {\r\n      cbk = new DSCodeBlock(expr, target);\r\n      if (cbk.error) {\r\n        this.dwErrorEvent$.trigger(cbk.error);\r\n      }\r\n      target._lastFind[0] = expr;\r\n      target._lastFind[1] = cbk;\r\n    }\r\n    if (startRow > endRow) {\r\n      // backword search\r\n      endRow = Math.min(endRow, this.rowCount() - 1);\r\n      startRow = 2 * endRow - startRow;\r\n      index = endRow + 1;\r\n      while (--index >= startRow) {\r\n        res = cbk.eval(this.data[index], index);\r\n        if (typeof (res) === \"boolean\" && res) {\r\n          row = index;\r\n          break;\r\n        }\r\n      }\r\n    } else {\r\n      startRow = Math.max(startRow, 0);\r\n      endRow = Math.min(endRow, this.rowCount() - 1);\r\n      index = startRow - 1;\r\n      while (++index <= endRow) {\r\n        res = cbk.eval(this.data[index], index);\r\n        if (typeof (res) === \"boolean\" && res) {\r\n          row = index;\r\n          break;\r\n        }\r\n      }\r\n    }\r\n\r\n    return row;\r\n  }\r\n  /**\r\n   * Returns a sorted set of unique values calculated by the specified expression over each row of the DataStore\r\n   * @param expr Expression to evaluate over each row\r\n   * @returns Sorted set of the distinct values\r\n   */\r\n  distinctValues(expr: string): Set<any> {\r\n    const sortedSet: TreeSet<any> = new TreeSet();\r\n    expr = expr.trim();\r\n    if (expr) {\r\n      const cbk = new DSCodeBlock(expr, this);\r\n      if (!cbk.error) {\r\n        const rowCount = this.rowCount();\r\n        let row: number = -1;\r\n        let val: any;\r\n        while (++row < rowCount) {\r\n          val = cbk.eval(this.data[row], row);\r\n          if (val !== undefined) {\r\n            sortedSet.add(val);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return sortedSet;\r\n  }\r\n  /**\r\n   * Displays rows in a DataWindow that pass the current filter criteria. Rows that do not meet the filter criteria are moved to the filter buffer.\r\n   * When the {@link retrieve} method retrieves data for the DataWindow, it applies the filter that was defined\r\n   * for the DataWindow object, if any.\r\n   *\r\n   * @returns Returns a `Promise` of 1 if it succeeds and -1 if an error occurs.\r\n   * @async\r\n   * @see {@link filterValue}\r\n   * @since 0.0.0\r\n   */\r\n  async applyFilter(): Promise<ResultCode> {\r\n    return this.applyFilterSync();\r\n  }\r\n  /**\r\n   * @protected\r\n   */\r\n  protected applyFilterSync(): ResultCode {\r\n    const target = this.getMainDS();\r\n    const filterBuffer = target.getBuffer(\"Filter!\");\r\n    let data: T[] = target.data;\r\n\r\n    // clear filter, may need to get sorting after\r\n    const arr: T[] = filterBuffer.splice(0);\r\n    if (arr.length) {\r\n      data.splice(data.length, 0, ...arr);\r\n    }\r\n\r\n    if (data.length > 0) {\r\n      if (target.filterValue) {\r\n        let cbk: DSCodeBlock = new DSCodeBlock(target.filterValue, target);\r\n        if (cbk.error) {\r\n          this.dwErrorEvent$.trigger(cbk.error);\r\n          return ResultCode.FAILURE;\r\n        } else {\r\n          let obj: T;\r\n          let res: any;\r\n          let index = data.length;\r\n          while (--index >= 0) {\r\n            obj = data[index];\r\n            if (obj) {\r\n              res = cbk.eval(obj, index);\r\n              if (typeof (res) === \"boolean\" && !res) {\r\n                filterBuffer.push(data.splice(index, 1)[0]);\r\n              }\r\n            }\r\n          }\r\n          if (data.length > 0)\r\n            this.setRow(0);\r\n          else\r\n            this._currentRow = -1;\r\n        }\r\n      }\r\n    } else\r\n      this._currentRow = -1;\r\n\r\n    target.resetRowIndexes();\r\n\r\n    if (!target.loading) {\r\n      if (this.sortValue && this.sortValue.length > 0) {\r\n        this.applySortSync();\r\n      } else {\r\n        target.emitDataStream();\r\n      }\r\n    }\r\n\r\n    return ResultCode.SUCCESS;\r\n  }\r\n  /**\r\n   * Sorts the rows in a DataWindow control or DataStore using the DataWindow's current sort criteria.\r\n   * When the {@link retrieve} method retrieves data for the DataStore, it applies the sort criteria that were defined for\r\n   * the DataStore object, if any.\r\n   * @returns Returns a `Promise` of 1 if it succeeds and -1 if an error occurs.\r\n   * @async\r\n   * @see {@link sortValue}\r\n   * @since 0.0.0\r\n   */\r\n  async applySort(): Promise<ResultCode> {\r\n    return this.applySortSync();\r\n  }\r\n  /**\r\n   * @protected\r\n   */\r\n  protected applySortSync(): ResultCode {\r\n    const target = this.getMainDS();\r\n    if (target.data) {\r\n      if (target.sortValue) {\r\n        let delim: string = \",\";\r\n        if (target.sortValue.indexOf('\\t') >= 0) {\r\n          delim = '\\t';\r\n        }\r\n        let levels: string[] = target.sortValue.split(delim);\r\n        let ords: string[] = [];\r\n        let expr: string[] = [];\r\n        let item: string;\r\n        let val: string;\r\n        let pos: number;\r\n        let j: number = -1;\r\n        const reAsc: RegExp = /\\sa(sc){0,1}$/;\r\n        const reDesc: RegExp = /\\sd(esc){0,1}$/;\r\n        for (let i = 0; i < levels.length; i++) {\r\n          item = levels[i].trim();\r\n          if (item) {\r\n            if (item.split(\" \").length > 1) {\r\n              if (item.endsWith(\" -1\")) {\r\n                item = Strings.left(item, item.length - 3) + \" desc\"\r\n              } else if (item.endsWith(\" 1\")) {\r\n                item = Strings.left(item, item.length - 2) + \" asc\"\r\n              }\r\n            }\r\n            j++;\r\n            ords[j] = \"a\";  // default\r\n            pos = item.toLowerCase().search(reDesc);\r\n            if (pos > 0) {\r\n              val = item.substring(0, pos).trim();\r\n              ords[j] = \"d\";\r\n              expr[j] = val || \"null\";\r\n            } else {\r\n              pos = item.toLowerCase().search(reAsc);\r\n              if (pos > 0) {\r\n                val = item.substring(0, pos).trim();\r\n                expr[j] = val || \"null\";\r\n              } else {\r\n                expr[j] = item;\r\n              }\r\n            }\r\n          }\r\n        } // end for\r\n\r\n        let cbks: DSCodeBlock[] = expr.map((v: string) => {\r\n          let cbk = new DSCodeBlock(v, target);\r\n          if (cbk.error) {\r\n            this.dwErrorEvent$.trigger(cbk.error);\r\n          }\r\n          return cbk;\r\n        });\r\n\r\n        const enCollator = new Intl.Collator('en-US');\r\n\r\n        let compareFunc = (a: any, b: any) => {\r\n          let res = 0;\r\n          for (let i = 0; i < cbks.length; i++) {\r\n            let v1 = cbks[i].eval(a);\r\n            let v2 = cbks[i].eval(b);\r\n            let type1 = typeof (v1);\r\n\r\n            if (v1 == null && v2 == null)\r\n              res = res || 0;\r\n            if (v1 == null)\r\n              res = res || 1;\r\n            else if (v2 == null)\r\n              res = res || -1;\r\n            else if (type1 === typeof (v2)) {\r\n              if (type1 === \"number\")\r\n                res = res || (((ords[i] == \"a\") ? 1 : (-1)) * (v1 - v2));\r\n              else if (type1 === \"string\") {\r\n                //res = res || ((ords[i] == \"a\") ? v1.localeCompare(v2) : v2.localeCompare(v1));\r\n                res = res || ((ords[i] == \"a\") ? enCollator.compare(v1, v2) : enCollator.compare(v2, v1));\r\n              } else if (type1 === \"boolean\")\r\n                res = res || (((ords[i] == \"a\") ? 1 : (-1)) * (Number(v1) - Number(v2)));\r\n              else\r\n                res = res || (((ords[i] == \"a\") ? 1 : (-1)) * (v1 - v2));\r\n            } else\r\n              res = res || (((ords[i] == \"a\") ? 1 : (-1)) * (v1 - v2));\r\n          }\r\n          return res;\r\n        }\r\n\r\n        target.data.sort(compareFunc);\r\n        target.groupCalc();\r\n        this.setRow(0);\r\n\r\n        target.resetRowIndexes();\r\n\r\n        if (!target.loading) {\r\n          if (this.groupCount() > 0) {\r\n            this.emitEmptyDataStream(); // Screen gluch when generating group headers in DataWindow with sticky columns!!!\r\n          }\r\n          target.emitDataStream();\r\n        }\r\n        return ResultCode.SUCCESS\r\n\r\n      } else\r\n        return ResultCode.NOTHING;\r\n    }\r\n    return ResultCode.FAILURE;\r\n  }\r\n  /**\r\n   * Highlights or removes highlights from rows in a DataWindow control or DataStore.\r\n   * You can select all rows or a single row. {@link selectRow} does not affect which row is current.\r\n   * It does not select rows in the database.\r\n   * @param row A value identifying the row you want to select or deselect. Specify `Infinity` to select or deselect all rows.\r\n   * @param select A boolean value that determines whether the row is selected or not selected:\r\n   *  * _true_ - select the row(s) so that they are highlighted\r\n   *  * _false_ - deselect the row(s) so that they are not highlighted\r\n   * @returns Returns 1 if it succeeds and -1 if an error occurs.\r\n   * @see {@link isSelected}\r\n   * @since 0.0.0\r\n   */\r\n  selectRow(row: number, select: boolean): ResultCode {\r\n    if (!isFinite(row)) {\r\n      // Infinity\r\n      if (select) {\r\n        this._selectedRows = new WeakSet(this.data as Object[]);\r\n      } else\r\n        this._selectedRows = new WeakSet();\r\n      return ResultCode.SUCCESS;\r\n    }\r\n    if (row >= 0 && row < this.rowCount()) {\r\n      const oRow = this.data[row] as Object;\r\n      if (select) {\r\n        if (!this._selectedRows.has(oRow)) {\r\n          this._selectedRows.add(oRow);\r\n        }\r\n      } else {\r\n        if (this._selectedRows.has(oRow)) {\r\n          this._selectedRows.delete(oRow);\r\n        }\r\n      }\r\n      return ResultCode.SUCCESS;\r\n    }\r\n    return ResultCode.FAILURE;\r\n  }\r\n  /**\r\n   * Determines whether a row is selected in a DataWindow or DataStore.\r\n   * A selected row is highlighted using reverse video.\r\n   * @param row A value identifying the row you want to test to see if it is selected\r\n   * @returns Returns true if row in dwcontrol is selected and false if it is not selected.\r\n   *          If a row is greater than the number of rows in dwcontrol or negative, _isSelected_ also returns false.\r\n   * @see {@link selectRow}\r\n   * @since 0.0.0\r\n   */\r\n  isSelected(row: number | T): boolean {\r\n    if (typeof row === \"object\") {\r\n      return this._selectedRows.has(row as Object);\r\n    }\r\n    if (row >= 0 && row < this.rowCount()) {\r\n      return this._selectedRows.has(this.data[<number>row] as Object);\r\n    }\r\n    return false;\r\n  }\r\n  /**\r\n   * Reports the number of the next highlighted row after a specified row in a DataWindow control or DataStore object.\r\n   *\r\n   * @param row A value identifying the location of the row after which you want to search for the next selected row. Specify -1 to begin searching at the first row.\r\n   * @returns Returns the number of the first row that is selected after row in dwcontrol. Returns -1 if no row is selected after the specified row.\r\n   * @since 0.0.0\r\n   */\r\n  getSelectedRow(row: number): number {\r\n    const nCount = this.rowCount();\r\n    row = Math.max(row, -1);\r\n    while (++row < nCount) {\r\n      if (this.isSelected(row)) {\r\n        return row;\r\n      }\r\n    }\r\n    return -1;\r\n  }\r\n  /**\r\n   * Gets an array of selected rows\r\n   * @returns Readonly array\r\n   * @see {@link getSelectedRow}\r\n   * @since 0.0.0\r\n   */\r\n  getSelectedRows(): readonly T[] {\r\n    let arr: T[] = [];\r\n    let nRow = this.getSelectedRow(-1);\r\n    while (nRow >= 0) {\r\n      arr.push(this.data[nRow]);\r\n      nRow = this.getSelectedRow(nRow);\r\n    }\r\n    return arr;\r\n  }\r\n  /**\r\n   * Reports if DataWindow has selected rows and how many\r\n   * @returns Number of selected rows in the DataWindow/DataStore\r\n   * @see {@link selectRow}\r\n   * @since 0.0.0\r\n   */\r\n  selectedCount(): number {\r\n    let nCount = 0;\r\n    let nRow = this.getSelectedRow(-1);\r\n    while (nRow >= 0) {\r\n      nCount++;\r\n      nRow = this.getSelectedRow(nRow);\r\n    }\r\n    return nCount;\r\n  }\r\n\r\n  /*\r\n  pageData(pgIndex: number, pgSize: number = 50): T[] {\r\n      const startIndex = pgIndex * pgSize;\r\n      return this.data.slice(startIndex, startIndex + pgSize);\r\n  }\r\n  */\r\n\r\n  /**\r\n   * Finalize an object before destroy\r\n   * @since 0.0.0\r\n   */\r\n  finalize() {\r\n    this._evalCache.clear();\r\n    // if this DataStore (as a child) was shared with the main DS\r\n    this.shareDataOff();\r\n    // if this DataStore (as a main) was shared with others DSs\r\n    this._sharedChilds.forEach(child => child.shareDataOff());\r\n    this._sharedChilds.clear();\r\n    //this._selectedRows.clear();\r\n    this._selectedRows = new WeakSet();\r\n\r\n    if (this.dbCancelEvent$) {\r\n      this.dbCancelEvent$.trigger();\r\n      // Unsubscribe from the subject\r\n      this.dbCancelEvent$.unsubscribe();\r\n    }\r\n    this._dataStreamSubscription?.unsubscribe();\r\n    this._dataStreamSubscription = null;\r\n  }\r\n  /**\r\n   * To follow the @angular/material datasource interface\r\n   * @returns A reference to {@link dataStream}\r\n   * @since 0.0.0\r\n   */\r\n  connect(): Observable<readonly T[]> {\r\n    return this.dataStream;\r\n  }\r\n  /**\r\n   * To follow the @angular/material datasource interface\r\n   * @since 0.0.0\r\n   */\r\n  disconnect() {\r\n    this.finalize();\r\n  }\r\n\r\n  /**\r\n   * JavaScript's `typeof` operator returns `[object DataStore]`\r\n   */\r\n  [Symbol.toStringTag] = \"DataStore\";\r\n  /**\r\n   * Returns DataStore's buffer as an iterable object\r\n   * @param bufferType DataStore's buffer type\r\n   * @returns Iterable iterator\r\n   */\r\n  *rowsCursor(bufferType: BufferType=\"Primary!\"): IterableIterator<T> {\r\n    const buffer = this.getBuffer(bufferType);\r\n    const rowCount = buffer.length;\r\n    let index = -1;\r\n    while (++index < rowCount) {\r\n      yield buffer[index];\r\n    }\r\n  }\r\n  /**\r\n   * Primary rows iterator\r\n   */\r\n  *[Symbol.iterator](): IterableIterator<T> {\r\n    yield* this.rowsCursor();\r\n  }\r\n\r\n}\r\n\r\n\r\n/**\r\n * @abstract\r\n */\r\nexport abstract class DSRowRange<T extends Object> {\r\n  protected _ds: DataStore<T>;\r\n\r\n  constructor(ds: DataStore<T>) {\r\n    this._ds = ds;\r\n  }\r\n\r\n  /**\r\n   * @abstract\r\n   */\r\n  abstract get name(): string;\r\n\r\n  /**\r\n   * Gets a range of rows relatively to the specified row\r\n   * @param row Starting row number\r\n   * @return Tuple of the first and last rows. Returns [-1,-1] if the `row` was not found or other errors\r\n   * @abstract\r\n   */\r\n  abstract getRowRange(row: number): [number, number];\r\n\r\n}\r\n\r\n/**\r\n * Group description class\r\n */\r\nexport class DSRowGroup<T extends Object> extends DSRowRange<T> {\r\n  private _prev: DSRowGroup<T> | null = null;\r\n  private _next: DSRowGroup<T> | null = null;\r\n  private _name: string;\r\n  private _level: number = 0;\r\n  private _cb: DSCodeBlock;\r\n  private _by: string = \"\";\r\n  private _lastValue: string | undefined = undefined;\r\n  private _breakRows: number[] = [];\r\n\r\n  public _i2row_impl: { i2row: (i: number) => number } | null = null;\r\n\r\n  constructor(ds: DataStore<T>, groupBy: string, prevGroup: DSRowGroup<T> | null, options?: any) {\r\n    super(ds);\r\n    this._ds = ds;\r\n    this._by = Strings.trimAll(groupBy) ?? \"\";\r\n    this._cb = new DSCodeBlock(this._by, this._ds);\r\n    if (prevGroup) {\r\n      this._prev = prevGroup;\r\n      prevGroup._next = this;\r\n      this._level = prevGroup.level + 1;\r\n    }\r\n    this._name = `group_${this.level}`;\r\n  }\r\n\r\n  get by(): string { return this._by; }\r\n  get parseError(): string | null { return this._cb.error; }\r\n  get firstBreak(): number { return (this._breakRows.length > 0) ? this._breakRows[0] : -1; }\r\n  get level(): number { return this._level; }\r\n  get name(): string { return this._name; }\r\n  get prevGroup(): DSRowGroup<T> | null { return this._prev; }\r\n  get nextGroup(): DSRowGroup<T> | null { return this._next; }\r\n\r\n  //private isFirstBreak(row: number): boolean { return row == this.firstBreak }\r\n\r\n  private isBreak(row: number): boolean {\r\n    return (this._breakRows.includes(row));\r\n  }\r\n\r\n  private getNextBreak(row: number): number {\r\n    let ind = this._breakRows.findIndex(r => r > row);\r\n    if (ind >= 0 && ind < (this._breakRows.length - 1)) {\r\n      return this._breakRows[++ind];\r\n    }\r\n    return -1;\r\n  }\r\n  /**\r\n   * Reset internal structures\r\n   */\r\n  reset(): void {\r\n    this._breakRows = [];\r\n    this._lastValue = undefined;\r\n  }\r\n  /**\r\n   * Gets the range of rows in the group that relatives to the row specified\r\n   * @param row Starting row number\r\n   * @return Tuple of the first and last rows. Returns [-1,-1] if the `row` was not found in the group\r\n   */\r\n  getRowRange(row: number): [number, number] {\r\n    let firstRow = -1;\r\n    let lastRow = -1;\r\n    let rowCount = this._ds.rowCount();\r\n\r\n    if (rowCount <= 0) return [-1, -1];\r\n\r\n    let ind = this._breakRows.length;\r\n    while (--ind >= 0) {\r\n      if (this._breakRows[ind] <= row) {\r\n        firstRow = this._breakRows[ind];\r\n        break;\r\n      }\r\n    }\r\n    if (firstRow >= 0) {\r\n      if (ind < (this._breakRows.length - 1)) {\r\n        lastRow = this._breakRows[++ind] - 1;\r\n      } else {\r\n        lastRow = rowCount - 1;\r\n      }\r\n    }\r\n    return [firstRow, lastRow];\r\n  }\r\n  /**\r\n   * Calc breaks starting from the specified row number in the DataStore\r\n   * @param {number} row    Starting row\r\n   * @param {string} prefix Cumulative value of previos groups\r\n   * @returns {string} Calculated group value\r\n   */\r\n  calc(row: number, prefix: string): string {\r\n    if (this.parseError == null) {\r\n      let grpval = String(this._cb.eval(this._ds.data[row]!, row)) ?? \"\";\r\n      grpval = prefix + grpval;                          // !==    ???\r\n      if (this._lastValue === undefined || (this._lastValue != grpval)) {\r\n        // Start group\r\n        this._breakRows.push(row);\r\n        this._lastValue = grpval;\r\n      }\r\n      return grpval;\r\n    }\r\n    return \"\";\r\n  }\r\n  /**\r\n   * The return value observes these rules based on the value of row. If the starting row is:\r\n   * ·\t_The first row in the group_, then `findChange` returns the starting row number\r\n   * ·\t_A row within the group_, other than the last group, then `findChange` returns the row number of the first row of the next group\r\n   * ·\t_A row in the last group_, other than the first row of the last group, then `findChange` returns -1\r\n   * @returns\r\n   * Returns the number of the row whose group column has a new value, meaning that it begins a new group.\r\n   */\r\n  findChange(row: number): number {\r\n    if (this.isBreak(row)) {\r\n      return row;\r\n    }\r\n    return this.getNextBreak(row);\r\n  }\r\n\r\n  showHeader = (rowIndex: number, rowData: any): boolean => {\r\n    let row = rowIndex;\r\n    if (this._i2row_impl) {\r\n      row = this._i2row_impl.i2row(rowIndex);\r\n    }\r\n    //return this.findChange(row) == row;\r\n    const res = this._ds.findGroupChange(row, this.level) == row;\r\n    //console.log(`Row ${row}, ${'  '.repeat(this.level)+this.level} ShowHeader is '${res}'`);\r\n    return res;\r\n  }\r\n\r\n  showFooter = (rowIndex: number, rowData: any): boolean => {\r\n    let row = rowIndex;\r\n    if (this._i2row_impl) {\r\n      row = this._i2row_impl.i2row(rowIndex);\r\n    }\r\n    //return this.findChange(row+1) == row+1 || (row == (this._ds.rowCount() - 1));\r\n    let res = this._ds.findGroupChange(row + 1, this.level) == row + 1 || (row == (this._ds.rowCount() - 1));\r\n    //console.log(`Row ${row}, ${'  '.repeat(this.level)+this.level} ShowFooter is '${res}'`);\r\n    return res;\r\n  }\r\n\r\n}\r\n","import { Types } from \"../util/Types\";\r\nimport { Cloneable } from \"../util/interface/Cloneable\";\r\nimport { ResultCode } from \"../util/enum/ResultCode\";\r\n\r\nexport type ParamType =\r\n        |\"string\"\r\n        |\"number\"\r\n        |\"decimal\"\r\n        |\"date\"\r\n        |\"time\"\r\n        |\"datetime\"\r\n        |\"stringarray\"\r\n        |\"numberarray\"\r\n        |\"decimalarray\"\r\n        |\"datearray\"\r\n        |\"datetimearray\"\r\n        |\"json\";\r\n\r\nexport class TableParam implements Cloneable {\r\n    private _value: any = undefined;\r\n\r\n    constructor (private _name: string, private _type: ParamType = \"string\", private _default?: any) {}\r\n\r\n    get name(): string {return this._name;}\r\n    get type(): ParamType {return this._type;}\r\n\r\n    static map(...arr: {name:string, type?:ParamType, value?: any}[]): TableParam[] {\r\n        let params = new Array<TableParam>();\r\n        if (arr && arr.length) {\r\n            for (let i=0; i < arr.length; i++) {\r\n                params[i] = new TableParam(arr[i].name, arr[i].type??\"string\", arr[i].value);\r\n            }\r\n        }\r\n        return params;\r\n    }\r\n\r\n    getValue(): any {return this.valueOf();}\r\n\r\n    setValue(val: any): ResultCode {\r\n        let rc = ResultCode.SUCCESS;\r\n        let newVal = Types.toType(val, this._type);\r\n        if (Object.is(this._value, newVal)) {\r\n            rc = ResultCode.NOTHING;\r\n        }\r\n        this._value = newVal;\r\n        return rc;\r\n    }\r\n\r\n    valueOf(): any {return this._value ?? this._default}\r\n\r\n    clone(): TableParam {\r\n        return new TableParam(this.name, this.type, this._default);\r\n    }\r\n\r\n}\r\n","import { AfterViewInit, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\r\nimport { DwObject, DwStyle, BufferType, ItemStatus, SaveAsType, DataStoreOptions, DwBandType } from '../datastore/DataStoreOptions';\r\nimport { ResultCode } from '../util/enum/ResultCode';\r\nimport { DwController } from '../controllers/DwController';\r\nimport { DataStore, DSRowGroup, ROW_ID_KEY } from '../datastore/DataStore';\r\nimport { MenuOwner } from '../util/interface/MenuOwner';\r\nimport { MenuItem } from '../util/interface/MenuItem';\r\nimport { IDataStore } from '../datastore/IDataStore';\r\nimport { EventProducer } from '../util/rxjs/EventProducer';\r\nimport { Objects } from '../util/Objects';\r\nimport {\r\n  DwClickedEvent,\r\n  DwColumnsChangeEvent,\r\n  DwDeleteRowEvent,\r\n  DwDoubleClickedEvent,\r\n  DwEditChangedEvent,\r\n  DwInsertRowEvent,\r\n  DwItemChangedEvent,\r\n  DwItemErrorEvent,\r\n  DwItemFocusChangedEvent,\r\n  DwProcessEnterEvent,\r\n  DwRetrieveStartEvent,\r\n  DwRowFocusChangedEvent,\r\n  DwRowFocusChangingEvent\r\n} from '../datastore/events';\r\nimport { CodeTableItem } from '../datastore/TableColumn';\r\nimport { HttpService } from '../services/http.service';\r\nimport { Arrays } from '../util/Arrays';\r\n\r\ntype EvalOptions = { defValue?: any, prefix?: string, suffix?: string };\r\n\r\nconst SELECTION_COLNAME: string = \"select\";\r\n\r\n/**\r\n * A DataWindow object allows users to display, manipulate, and update database or other information.\r\n * @version 1.0.0\r\n * @author Alexander V. Strelkov  <alv.strelkov@gmail.com>\r\n * @copyright © ALEXANDER STRELKOV 2022\r\n * @license MIT\r\n * @see {@link DataStore}\r\n */\r\n@Component({\r\n  selector: 'datawindow',\r\n  template: ''\r\n})\r\nexport abstract class DataWindow implements OnInit, OnDestroy, AfterViewInit, IDataStore<any>, MenuOwner {\r\n  private _dataStore: DataStore<any> = new DataStore();\r\n  private _primaryDS: IDataStore<any> | undefined;\r\n  private _primaryDSCreationStamp: string | undefined;\r\n  private _controller: DwController | undefined;\r\n  private _canRedraw: boolean = true;\r\n  private _currentCell: number = -1;\r\n  private _intervalId: number | undefined;  // Internal timer\r\n  private _columnNames: string[] = [];      // Visible columns\r\n  private _primaryCreateSubscription: Subscription | undefined;\r\n  protected _rootSubscription: Subscription = new Subscription();\r\n\r\n  /** Auto run setRow() method on data changed */\r\n  public autoSetRow: boolean = true;\r\n\r\n  @Input(\"tag\") tag: any;\r\n  @Input(\"controller\")\r\n  get controller(): DwController | undefined { return this._controller; }\r\n  set controller(co: DwController | undefined) {\r\n    if (co) {\r\n      this._controller = co;\r\n      this._controller.setDataWindow(this);\r\n    }\r\n  }\r\n  @Input(\"datastore\")\r\n  get ds(): DataStore<any> { return this._dataStore };\r\n  set ds(mainDS: DataStore<any> | undefined) {\r\n    let rc: ResultCode;\r\n\r\n    //if (!mainDS || this._primaryDS === mainDS) return;\r\n\r\n    if (!mainDS || this._primaryDSCreationStamp === mainDS.creationStamp) return;\r\n\r\n    this._primaryDS = mainDS;\r\n    this._primaryDSCreationStamp = mainDS.creationStamp;\r\n    /*\r\n    if (this._primaryCreateSubscription) {\r\n      this._rootSubscription.remove(this._primaryCreateSubscription);\r\n    }\r\n\r\n    this._primaryCreateSubscription = mainDS.onCreate.subscribe(() => {\r\n      rc = this._dataStore.create(mainDS.getOptions());\r\n      rc = mainDS.shareData(this._dataStore);\r\n      this._currentCell = -1;\r\n\r\n      let names: string[] = [];\r\n      this.controls = this._dataStore.getControls(\"detail\", true) as DwObject[];\r\n      this.controls.forEach((c) => {\r\n        if (c.visible ?? true) {\r\n          names.push(c.name);\r\n        }\r\n      });\r\n      this.columnNames = [...names];\r\n    })\r\n    this._rootSubscription.add(this._primaryCreateSubscription);\r\n    */\r\n    const opts = mainDS.getOptions()\r\n    if (opts) {\r\n      clearInterval(this._intervalId);\r\n      this._intervalId = undefined;\r\n\r\n      rc = this._dataStore.setHttpService(mainDS.httpService);\r\n      rc = this._dataStore.create(opts);\r\n      rc = mainDS.shareData(this._dataStore);\r\n\r\n      this._currentCell = -1;\r\n\r\n      let names: string[] = [];\r\n      this.controls = this._dataStore.getControls(\"detail\", true) as DwObject[];\r\n      this.controls.forEach((c) => {\r\n        if (c.visible ?? true) {\r\n          names.push(c.name);\r\n        }\r\n      });\r\n      if (this._dataStore.getOptions().datawindow?.grid?.selection ?? false ) {\r\n        this.columnNames = [SELECTION_COLNAME, ...names];\r\n      } else {\r\n        this.columnNames = [...names];\r\n      }\r\n\r\n      if (this._dataStore.timerInterval) {\r\n        this._intervalId = window.setInterval(() => this.cuteOnTimer.emit(), this._dataStore.timerInterval);\r\n      }\r\n    }\r\n  }\r\n  /** Actual data in the Primary! buffer */\r\n  dwData: any[] = [];\r\n  /** Controls array in the detail band */\r\n  controls: DwObject[] = [];\r\n  /** Control names in the detail band */\r\n  get columnNames(): string[] { return this._columnNames };\r\n  set columnNames(value: string[]) {\r\n    if (!Arrays.equals(this._columnNames, value ?? [])) {\r\n      this._columnNames = [...value];\r\n      this.onColumnsChange$.next(new DwColumnsChangeEvent(this._columnNames));\r\n    }\r\n  };\r\n\r\n  // PUBLIC EVENTS\r\n  @Output() cuteOnClick = new EventEmitter<DwClickedEvent>();\r\n  @Output() cuteOnDoubleClick = new EventEmitter<DwDoubleClickedEvent>();\r\n  //@Output() cuteOnProcessEnter = new EventEmitter<DwProcessEnterEvent>();\r\n  @Output() cuteOnGetFocus = new EventEmitter<Event>();\r\n  @Output() cuteOnLoseFocus = new EventEmitter<Event>();\r\n  @Output() cuteOnTimer = new EventEmitter<void>();\r\n  // MAIN DW EVENTS\r\n  public readonly onColumnsChange$ = new BehaviorSubject<DwColumnsChangeEvent>(new DwColumnsChangeEvent([]));\r\n  public readonly onDeleteRow$ = new EventProducer<DwDeleteRowEvent>();\r\n  public readonly onEditChanged$ = new EventProducer<DwEditChangedEvent>();\r\n  public readonly onInsertRow$ = new EventProducer<DwInsertRowEvent>();\r\n  public readonly onItemChanged$ = new EventProducer<DwItemChangedEvent>();\r\n  public readonly onItemError$ = new EventProducer<DwItemErrorEvent>();\r\n  public readonly onItemFocusChanged$ = new EventProducer<DwItemFocusChangedEvent>();\r\n  public readonly onProcessEnter$ = new EventProducer<DwProcessEnterEvent>();\r\n  public readonly onRowFocusChanged$ = new EventProducer<DwRowFocusChangedEvent>();\r\n  public readonly onRowFocusChanging$ = new EventProducer<DwRowFocusChangingEvent>();\r\n  // SECONDARY DW EVENTS\r\n  protected readonly dweRedraw$ = new EventProducer<void>();\r\n  protected readonly dweRowDeleted$ = new EventProducer<DwDeleteRowEvent>();\r\n\r\n  constructor() {\r\n    //super();\r\n  }\r\n  /**\r\n   * Collect all subscriptions into the one place\r\n   */\r\n  protected subscribeOnEvents() {\r\n    const subscriptions: Subscription[] = [];\r\n\r\n    subscriptions.push(\r\n      // onDeleteRow\r\n      this.onDeleteRow$.subscribe((event: DwDeleteRowEvent) => {\r\n        this._controller?.onBeforeDeleteRow(event);\r\n        if (!event.defaultPrevented) {\r\n          let result = true;\r\n          let row: number = -1;\r\n          const selected: readonly any[] = this.getSelectedRows();\r\n          if (selected.length > 0) {\r\n            const oldRow = this.getRow();\r\n            this.setRedraw(false);\r\n            for (let i: number = selected.length - 1; i >= 0; i--) {\r\n              row = this.indexOf(selected[i])\r\n              if (event.dropOnly) {\r\n                result = (this.rowsDiscard(row, row) == ResultCode.SUCCESS);\r\n              } else {\r\n                result = (this.deleteRow(row) == ResultCode.SUCCESS);\r\n              }\r\n              if (!result) { break }\r\n            }\r\n            this.setRedraw(true);\r\n            this.setRow(Math.min(oldRow, this.rowCount() - 1));\r\n            this.dweRowDeleted$.trigger(event);\r\n\r\n          } else {\r\n            row = event.row || -1;\r\n            if (event.dropOnly) {\r\n              result = (this.rowsDiscard(row, row) == ResultCode.SUCCESS);\r\n            } else {\r\n              // TODO\r\n              // Send Delete row to source object\r\n              result = (this.deleteRow(row) == ResultCode.SUCCESS);\r\n            }\r\n            if (result) {\r\n              this.dweRowDeleted$.trigger(event);\r\n            }\r\n          }\r\n          /*\r\n          if (result) {\r\n            this.cuteOnRowDeleted.emit(data.row);\r\n            if (this.groupCount() > 0) {\r\n              this.groupCalc();\r\n            }\r\n          }\r\n          */\r\n        } // !Prevented\r\n      }),\r\n      // onEditChanged\r\n      this.onEditChanged$.subscribe(event => this._controller?.onEditChanged(event)),\r\n      // onInsertRow\r\n      this.onInsertRow$.subscribe(event => {\r\n        this._controller?.onBeforeInsertRow(event);\r\n        if (!event.defaultPrevented) {\r\n          this.insertRowHandler(event);\r\n        }\r\n      }),\r\n\r\n      // onItemFocusChanged\r\n      this.onItemFocusChanged$.subscribe(event => { this._controller?.onItemFocusChanged(event) }),\r\n      // onItemChanged\r\n      this.onItemChanged$.subscribe(event => { this._controller?.onItemChanged(event) }),\r\n      // onItemError\r\n      this.onItemError$.subscribe(event => { this._controller?.onItemError(event) }),\r\n\r\n      // onDoubleClicked\r\n      this.cuteOnDoubleClick.subscribe((event: DwDoubleClickedEvent) => {\r\n        this._controller?.onDoubleClicked(event);\r\n        if (!event.defaultPrevented) {\r\n          const peEvent = new DwProcessEnterEvent(event.row, event.dwo);\r\n          this.processEnterHandler(peEvent);\r\n        }\r\n      }),\r\n      // onGetFocus\r\n      this.cuteOnGetFocus.subscribe(event => { this._controller?.onGetFocus() }),\r\n      // onLoseFocus\r\n      this.cuteOnLoseFocus.subscribe(event => { this._controller?.onLoseFocus() }),\r\n      // onTimer\r\n      this.cuteOnTimer.subscribe(() => this._controller?.onTimer()),\r\n\r\n      // onProcessEnter\r\n      this.onProcessEnter$.subscribe(event => { this.processEnterHandler(event) }),\r\n      // dataStream\r\n      this.ds.dataStream.subscribe(data => { this.dataStreamHandler(data) }),\r\n      // onItemChanged (push event)\r\n      this.ds.onItemChanged.subscribe(event => { this.onItemChanged$.trigger(event) }),\r\n      // onItemError (push event)\r\n      this.ds.onItemError.subscribe(event => { this.onItemError$.trigger(event) }),\r\n      // onHttpError\r\n      this.ds.onHttpError.subscribe(event => console.log(event)),\r\n      // onDbError\r\n      this.ds.onDbError.subscribe(event => console.log(event)),\r\n      // onRetrieveStart\r\n      this.ds.onRetrieveStart.subscribe(event => { this._controller?.onRetrieveStart(event) }),\r\n      // onRetrieveEnd\r\n      this.ds.onRetrieveEnd.subscribe(event => { this._controller?.onRetrieveEnd(event) }),\r\n      // onRowChanged\r\n      this.ds.onRowChanged.subscribe(event => { this._controller?.onRowChanged(event) }),\r\n      // onRowFocusChanged\r\n      this.onRowFocusChanged$.subscribe(event => { this._controller?.onRowFocusChanged(event) }),\r\n      // onRowFocusChanging\r\n      this.onRowFocusChanging$.subscribe(event => { this._controller?.onRowFocusChanging(event) }),\r\n      // onUpdateStart\r\n      this.ds.onUpdateStart.subscribe(event => { this._controller?.onUpdateStart(event) }),\r\n      // onUpdateEnd\r\n      this.ds.onUpdateEnd.subscribe(event => { this._controller?.onUpdateEnd(event) })\r\n    );\r\n\r\n    subscriptions.forEach(s => this._rootSubscription.add(s));\r\n\r\n  }\r\n  /**\r\n   * Unsubscribe all subscriptions that was set before\r\n   */\r\n  protected unsubscribeFromEvents() {\r\n    this._rootSubscription.unsubscribe();\r\n  }\r\n\r\n  /* Internal event handlers */\r\n\r\n  protected dataStreamHandler(data: any[]) {\r\n    this.dwData = data;\r\n    if (this.autoSetRow && data.length > 0) {\r\n      this.setRow(0);\r\n    }\r\n  }\r\n\r\n  protected insertRowHandler(event: DwInsertRowEvent): ResultCode {\r\n    return ResultCode.SUCCESS;\r\n  }\r\n\r\n  protected processEnterHandler(event: DwProcessEnterEvent): ResultCode {\r\n    this._controller?.onShowProperties(event);\r\n    if (!event.defaultPrevented) {\r\n      return ResultCode.SUCCESS;\r\n    }\r\n    return ResultCode.FAILURE;\r\n  }\r\n  /**\r\n   * Occurs when the user clicks a button inside a DataWindow object\r\n   * @param col\r\n   * @param row\r\n   * @param event\r\n   */\r\n  buttonClicked(col: string, row: number, event: MouseEvent): void {\r\n    console.log(event);\r\n    //alert(`${col.name} / ${row}`);\r\n    //if (this.ds) {\r\n    let v = this.getItem(row, \"notactive\");\r\n    //if (event.target)\r\n    //  (event.target as any).loading = true;\r\n    this.setItem(row, \"notactive\", !v);\r\n\r\n    this.setRow(row);\r\n    //}\r\n  }\r\n\r\n  doubleClicked(row: number, dwo: DwObject | null, event: MouseEvent): void {\r\n    this.cuteOnDoubleClick.emit(new DwDoubleClickedEvent(row, dwo, event));\r\n  }\r\n  /**\r\n   * Occurs when the context menu item clicked\r\n   * @param mi {@link MenuItem} object\r\n   *\r\n   * @abstract\r\n   * @since 0.0.0\r\n   */\r\n  menuItemClicked(mi: MenuItem): void { }\r\n\r\n  /* Properties */\r\n  /**\r\n   * Current cell in the `Grid` style\r\n   */\r\n  get currentCell(): number { return this._currentCell; }\r\n  set currentCell(index: number) {\r\n    if (index >= 0 && index < this.getControlCount()) {\r\n      this._currentCell = index;\r\n    } else {\r\n      throw new Error(`Invalid cell number: ${index}`)\r\n    }\r\n  }\r\n  /**\r\n   * Returns redraw flag that was set by setRedraw method\r\n   * @see {@link setRedraw}\r\n   * @since 0.0.0\r\n   */\r\n  get canRedraw(): boolean { return this._canRedraw; }\r\n  /**\r\n   * @since 0.0.0\r\n   */\r\n  get httpService(): Readonly<HttpService> | undefined { return this.ds.httpService; }\r\n  /**\r\n   * Loading status\r\n   * @readonly\r\n   * @since 0.0.0\r\n   */\r\n  get loading(): boolean { return this.ds.loading }\r\n  /**\r\n   * Updating status\r\n   * @readonly\r\n   * @since 0.0.0\r\n   */\r\n  get updating(): boolean { return this.ds.updating }\r\n  /**\r\n  * Primary buffer data\r\n  * @since 0.0.0\r\n  */\r\n  get data(): any[] { return this.ds.data; }\r\n  /**\r\n   * Gets data stream as Observable object\r\n   * @readonly\r\n   * @since 0.0.0\r\n   */\r\n  get dataStream(): Observable<any[]> { return this.ds.dataStream; }\r\n  /**\r\n   * Checks for any updates that may be pending\r\n   * @readonly\r\n   * @since 0.0.0\r\n   */\r\n  get updatesPending(): boolean { return this.ds.updatesPending; }\r\n  /**\r\n   * Current filter value\r\n   * @since 0.0.0\r\n   */\r\n  get filterValue(): string | null { return this.ds.filterValue; }\r\n  set filterValue(value: string | null) { this.ds.filterValue = value; }\r\n  /**\r\n  * Current sort value\r\n  * @since 0.0.0\r\n  */\r\n  get sortValue(): string | null { return this.ds.sortValue; }\r\n  set sortValue(value: string | null) { this.ds.sortValue = value; }\r\n\r\n  /* Methods */\r\n\r\n  /**\r\n   * Displays rows in a DataWindow that pass the current filter criteria. Rows that do not meet the filter criteria are moved to the filter buffer.\r\n   * When the {@link retrieve} method retrieves data for the DataWindow, it applies the filter that was defined\r\n   * for the DataWindow object, if any.\r\n   *\r\n   * @returns Returns `Promise` of 1 if it succeeds and -1 if an error occurs.\r\n   * @async\r\n   * @see {@link filterValue}\r\n   * @since 0.0.0\r\n   */\r\n  async applyFilter(): Promise<ResultCode> { return await this.ds.applyFilter(); }\r\n  /**\r\n   * Sorts the rows in a DataWindow control or DataStore using the DataWindow's current sort criteria.\r\n   * When the {@link retrieve} method retrieves data for the DataStore, it applies the sort criteria that were defined for\r\n   * the DataStore object, if any.\r\n   * @returns Returns a `Promise` of 1 if it succeeds and -1 if an error occurs.\r\n   * @async\r\n   * @see {@link sortValue}\r\n   * @since 0.0.0\r\n   */\r\n  async applySort(): Promise<ResultCode> { return await this.ds.applySort(); }\r\n  /**\r\n  * Returns style of the DataWindow\r\n  * @abstract\r\n  * @since 0.0.0\r\n  */\r\n  abstract getStyle(): DwStyle;\r\n  /**\r\n    * Sets focus to the DataWindow control.\r\n    * @returns  Returns 1 if it succeeds and -1 if an error occurs.\r\n    * @abstract\r\n    * @since 0.0.0\r\n    */\r\n  abstract setFocus(): ResultCode; //{  return ResultCode.FAILURE; }\r\n  /**\r\n   * For compatibility only\r\n   * @see {@link setFocus}\r\n   * @since 0.0.0\r\n   */\r\n  focus(): void { this.setFocus(); }\r\n  /**\r\n   * Applies the contents of the DataWindow's edit control to the current item in the buffer of a DataWindow control or DataStore.\r\n   * The data in the edit control must pass the validation rule for the column before it can be stored in the item.\r\n   * @returns Returns 1 if it succeeds and -1 if it fails (for example, the data did not pass validation).\r\n   * @since 0.0.0\r\n   */\r\n  acceptText(): ResultCode { return this.ds.acceptText(); }\r\n  /**\r\n   * Creates a DataWindow object using {@link DataStoreOptions} object. It fully substitutes the current internal structure of a DataStore object.\r\n   *\r\n   * @param options An object of `DataStoreOptions` class\r\n   * @returns 1 if it succeeds and -1 if an error occurs.\r\n   * @since 0.5.0\r\n   */\r\n  create(options: DataStoreOptions): ResultCode { return this.ds.create(options); }\r\n  /**\r\n   * Cancels the retrieval process in a DataWindow/DataStore object\r\n   * @see {@link retrieve}\r\n   * @since 0.0.0\r\n   */\r\n  dbCancel(): void { return this.ds.dbCancel(); }\r\n  /**\r\n   * Gets array of DataWindow controls\r\n   * @param band Target band to which controls must belong. Default is `all`.\r\n   * @returns Array of `DwObject` objects\r\n   */\r\n  getControlsArray(band: \"all\" | DwBandType = \"all\"): DwObject[] {\r\n    return this.ds.getControls(band, true) as DwObject[];\r\n  }\r\n  /**\r\n   * Gets cloned value of the current config options\r\n   * @returns DataStoreOptions\r\n   * @since 0.0.0\r\n   */\r\n  getOptions(): DataStoreOptions { return this.ds.getOptions(); }\r\n  /**\r\n   * Reports the modification status of a row or a column within a row. The modification status determines the type of\r\n   * SQL statement the Update method will generate for the row or column.\r\n   * @param row A value identifying the row for which you want the status\r\n   * @param column The column for which you want the status. Column can be a column number or a column name.\r\n   *               The column number is the number of the column as it is listed in the Column Specification.\r\n   * @param bufferType A value identifying the DataWindow buffer containing the row for which you want status\r\n   * @returns\r\n   * A value of the `ItemStatus` enumerated datatype. If column is null, getItemStatus returns the status of row.\r\n   * If there is no DataWindow object assigned to the DataWindow control or DataStore, getItemStatus returns undefined.\r\n   * @since 0.0.0\r\n   */\r\n  getItemStatus(row: number, column: number | string | null = null, bufferType: BufferType = \"Primary!\"): ItemStatus | undefined {\r\n    return this.ds.getItemStatus(row, column, bufferType);\r\n  }\r\n  /**\r\n   * Changes the modification status of a row or a column within a row. The modification status determines the type of\r\n   * SQL statement the Update method will generate for the row.\r\n   * @param row The row location in which you want to set the status.\r\n   * @param column The column location in which you want to set the status. Column can be a column number or a column name.\r\n   *               To set the status for the row, enter null for column.\r\n   * @param bufferType A value identifying the DataWindow buffer that contains the row.\r\n   * @param status A value of the ItemStatus enumerated datatype\r\n   * @returns 1 if it succeeds and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  setItemStatus(row: number, column: number | string | null, bufferType: BufferType, status: ItemStatus): ResultCode {\r\n    return this.ds.setItemStatus(row, column, bufferType, status);\r\n  }\r\n  /**\r\n   * Sets the value of a row and column in a DataWindow control or DataStore to the specified value.\r\n   *\r\n   * @param row The row location of the data.\r\n   * @param column The column location of the data. Column can be a column number or a column name. The column number is the number of the column as it is listed in the Column Specification\r\n   * @param value The value to which you want to set the data at the row and column location. The datatype of the value must be the same datatype as the column\r\n   * @returns Returns 1 if it succeeds and -1 if an error occurs.\r\n   * @see {@link getItem}\r\n   * @since 0.0.0\r\n   */\r\n  setItem(row: number, column: string | number, value: any): ResultCode { return this.ds.setItem(row, column, value); }\r\n  /**\r\n   * Reports whether the row has been modified.\r\n   *\r\n   * @param row Row number or object to check\r\n   * @param dwbuffer Internal DataStore buffer type\r\n   * @returns {boolean} _true_ if the row has been modified and _false_ if it has not.\r\n   * @see {@link isRowNew}\r\n   * @see {@link getNextModified}\r\n   * @since 0.0.0\r\n   */\r\n  isRowModified(row: Object | number, dwbuffer: BufferType = \"Primary!\"): boolean { return this.ds.isRowModified(row, dwbuffer); }\r\n  /**\r\n   * Reports whether the row has been newly inserted.\r\n   *\r\n   * @param row Row number or object to check\r\n   * @param dwbuffer Internal DataStore buffer type\r\n   * @returns {boolean} _true_ if the row is new and _false_ if it was retrieved from the database.\r\n   * @see {@link isRowModified}\r\n   * @since 0.0.0\r\n   */\r\n  isRowNew(row: Object | number, dwbuffer: BufferType = \"Primary!\"): boolean { return this.ds.isRowNew(row, dwbuffer); }\r\n  /**\r\n   * Returns the number of rows currently available in the DataWindow (all the rows retrieved minus any deleted rows\r\n   * plus any inserted rows minus any rows that have been filtered out).\r\n   * @returns Number of rows\r\n   * @since 0.0.0\r\n   */\r\n  rowCount(): number { return this.ds.rowCount(); }\r\n  /**\r\n   * Gets row count in the filtered rows buffer\r\n   * @returns Row count\r\n   * @see {@link deletedCount}\r\n   * @see {@link rowCount}\r\n   * @since 0.0.0\r\n   */\r\n  filteredCount(): number { return this.ds.filteredCount(); }\r\n  /**\r\n   * Gets row count in the deleted rows buffer\r\n   * @returns Row count\r\n   * @see {@link rowCount}\r\n   * @see {@link filteredCount}\r\n   * @see {@link modifiedCount}\r\n   * @since 0.0.0\r\n   */\r\n  deletedCount(): number { return this.ds.deletedCount(); }\r\n  /**\r\n   * Reports the number of rows that have been modified but not updated in a DataWindow or DataStore.\r\n   * @returns {number} The number of rows that have been modified in the primary and filter buffer.\r\n   *                   Returns 0 if no rows have been modified or if all modified rows have been updated in the database table.\r\n   * @see {@link rowCount}\r\n   * @see {@link deletedCount}\r\n   * @since 0.0.0\r\n   */\r\n  modifiedCount(): number { return this.ds.modifiedCount(); }\r\n  /**\r\n   * Deletes a row from the primary buffer of a DataWindow control, DataStore object.\r\n   * If the DataWindow is not updatable, all storage associated with the row is cleared.\r\n   * If the DataWindow is updatable, DeleteRow moves the row to the DataWindow's delete buffer\r\n   * The row is not deleted from the database table until the application calls the Update method.\r\n   *\r\n   * @param row A value identifying the row you want to delete. To delete the current row, specify `NaN` for row.\r\n   * @returns 1 if the row is successfully deleted and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  deleteRow(row: number = NaN): ResultCode { return this.ds.deleteRow(row); }\r\n  /**\r\n   * Reports the values of properties of a DataWindow object and controls within the DataWindow object.\r\n   * Each column and graphic control in the DataWindow has a set of properties. You specify one or more\r\n   * properties as a string, and Describe returns the values of the properties.\r\n   * @param propertyList A string list (array) of properties or Evaluate functions\r\n   * @returns\r\n   * Returns array of values that includes a primitive value for each property or Evaluate function.\r\n   * If the property list contains only one item, Describe returns single value.\r\n   * Describe returns an undefined value if there is no value for a property.\r\n   * Describe returns null for property if its value is not a primitive.\r\n   * @example\r\n   * let arr = dw.describe(\"datawindow.paginator.pageSize\", \"datawindow.paginator.showFirstLastPage\");\r\n   * console.log(arr);  // 20, true\r\n   * let dh = dw.describe(\"datawindow.header.height\");\r\n   * console.log(dh);  // 48\r\n   * let foo = dw.describe(\"datawindow.bla-bla.bla\");\r\n   * console.log(foo); // undefined\r\n   *\r\n   * @since 0.0.0\r\n   */\r\n  describe(...propertyList: string[]): any[] | any { return this.ds.describe(...propertyList); }\r\n  /**\r\n   * Evaluates CuteScript expression on DataWindow's row\r\n   *\r\n   * @param expr  Expression on `CuteScript`\r\n   * @param row   Row index in the DataStore\r\n   * @param options Additional parameters that change the meaning of the result\r\n   * @returns Result of script evaluation\r\n   * @since 0.0.0\r\n   */\r\n  eval(expr: any, row: any, options?: EvalOptions): any {\r\n    let val: any = undefined;\r\n    if (this.ds && expr) {\r\n      val = this.ds.evalExpr(expr, row);\r\n    }\r\n    if (val == undefined) {\r\n      val = options?.defValue;\r\n    }\r\n    if (val && (options?.prefix || options?.suffix)) {\r\n      val = options.prefix || '' + val + options.suffix || '';\r\n    }\r\n    return val;\r\n  }\r\n  /**\r\n   * Allows you to evaluate DataWindow expressions within a javascript code using data in the DataWindow.\r\n   *\r\n   * @param expr  Expression you want to evaluate directly\r\n   * @param row   The number of the row for which you want to evaluate the expression.\r\n   * @returns     Result of evaluation\r\n   * @see {@link evalExpr}\r\n   * @since 0.0.0\r\n   */\r\n  evaluate(expr: string | null, row: number | {}): any { return this.ds.evaluate(expr, row); }\r\n  /**\r\n   * Finds the next row in a DataWindow or DataStore in which data meets a specified condition.\r\n   *\r\n   * @param expr A string whose value is a boolean expression that you want to use as the search criterion. The expression includes column names.\r\n   * @param startRow A value identifying the row location at which to begin the search.\r\n   *                 Start can be greater than the number of last row in DataStore for searching in backward direction.\r\n   * @param endRow A value identifying the row location at which to end the search. End can be greater than the number of the last row.\r\n   *               To search backward, make end row less than start.\r\n   * @returns {number} Returns the number of the first row that meets the search criteria within the search range. Returns -1 if no rows are found and one of these negative numbers if an error occurs:\r\n   *                  -2  General error,\r\n   *                  -3  Bad argument\r\n   * @since 0.0.0\r\n   */\r\n  find(expr: string, startRow: number, endRow: number): number { return this.ds.find(expr, startRow, endRow); }\r\n  /**\r\n   * Returns a sorted set of unique values calculated by the specified expression over each row of the DataStore\r\n   * @param expr Expression to evaluate over each row\r\n   * @returns Sorted set of the distinct values\r\n   */\r\n  distinctValues(expr: string): Set<any> { return this.ds.distinctValues(expr); }\r\n  /**\r\n   * Gets index of the row object in the Primary! buffer\r\n   *\r\n   * @param oRow  Object\r\n   * @returns Object's index value if found, -1 if object was not found in the buffer\r\n   * @since 0.0.0\r\n   */\r\n  indexOf(oRow: any): number { return this.ds.indexOf(oRow); }\r\n  /**\r\n   * Inserts a row in a DataWindow or DataStore. If any columns have default values, the row is initialized with\r\n   * these values before it is displayed. InsertRow simply inserts the row without changing the display or the current row.\r\n   * To scroll to the row and make it the current row, call ScrollToRow. To simply make it the current row, call SetRow.\r\n   * A newly inserted row (with a status flag of New!) is not included in the modified count until data is entered in the row\r\n   * (its status flag becomes NewModified!).\r\n   *\r\n   * @param row {number} A value identifying the row before which you want to insert a row. To insert a row at the end, specify Infinity.\r\n   * @returns The number of the row that was added if it succeeds and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  insertRow(row: number = Infinity): number { return this.ds.insertRow(row); }\r\n  /**\r\n   * Saves the contents of a DataWindow or DataStore in the format you specify\r\n   * @param exportType An enumerated value of the `SaveAsType`\r\n   * @param headings Optional. Add headers string for CSV and TXT formats. Default value is _true_.\r\n   * @returns A `Promise` that resolves to string in the specified format\r\n   */\r\n  async exportString(exportType: SaveAsType, headings: boolean = true): Promise<string> { return await this.ds.exportString(exportType, headings); }\r\n  /**\r\n   * Inserts data into a DataWindow control or DataStore from tab-separated, comma-separated, or XML/JSON data in a string.\r\n   *\r\n   * @param importType An enumerated value of the `SaveAsType`\r\n   * @param source A string from which you want to copy the data. The string should contain tab-separated or comma-separated columns or XML/JSON with one row per line\r\n   * @param options Optional object with the following optional properties:\r\n   ** _startRow_ The number of the first detail row in the string that you want to copy. The default is 0.\r\n   ** _endRow_ The number of the last detail row in the string that you want to copy. The default is the rest of the rows.\r\n   ** _startCol_ The number of the first column in the string that you want to copy. The default is 0.\r\n   ** _endCol_ The number of the last column in the string that you want to copy. The default is the rest of the columns.\r\n   ** _dwStartCol_ The number of the first column in the DataWindow control or DataStore that should receive data. The default is 0.\r\n   * @returns {Promise} A `Promise` that resolves to the number of rows that were imported if it succeeds or one of the following negative integers if an error occurs:\r\n   ** -1   No rows or startrow value supplied is greater than the number of rows in the string,\r\n   ** -3   Invalid argument,\r\n   ** -4   Invalid input,\r\n   ** -11  XML Parsing Error; XML parser libraries not found or XML not well-formed,\r\n   ** -12  XML Template does not exist or does not match the DataWindow,\r\n   ** -13  Unsupported DataWindow style for import,\r\n   ** -14  Error resolving DataWindow nesting\r\n   ** -15  JSON Parsing Error\r\n   * @since 0.0.0\r\n   * @async\r\n   */\r\n  async importString(importType: SaveAsType, source: string, options?: { startRow?: number, endRow?: number, startCol?: number, endCol?: number, dwStartCol?: number }): Promise<number> {\r\n    return await this.ds.importString(importType, source, options);\r\n  }\r\n  /**\r\n   * Accesses the database to retrieve values for all columns that can be updated and refreshes all timestamp columns in a row in a DataWindow control or DataStore. The values from the database are redisplayed in the row.\r\n   * @param row A value identifying the row to reselect\r\n   * @returns `Promise` object that returns 1 if it is successful and -1 if the row cannot be reselected (for example, the DataWindow object cannot be updated or the row was deleted by another user)\r\n   * @since 0.0.0\r\n   * @see {@link reselectRows}\r\n   */\r\n  reselectRow(row: number): Promise<ResultCode> { return this.ds.reselectRow(row); }\r\n  /**\r\n   * Gets data from the specified row and column values in the specified Buffer. You can obtain the\r\n   * data that was originally retrieved and stored in the database from the original buffer,\r\n   * as well as the current value in the primary, delete, or filter buffers.\r\n   *\r\n   * @param row A value identifying the row location of the data.\r\n   * @param column The column location of the data. Column can be a column number or a column name.\r\n   * @param bufferType A value identifying the DataWindow buffer from which you want to get the data.\r\n   * @param original A boolean indicating whether you want to return the original or current values for row and column:\r\n   * \t            _true_ - returns the original values (the values initially retrieved from the database).\r\n   * \t            _false_ - (Default) returns the current values.\r\n   * @returns Returns the value in the specified row and column. Returns _null_ if the column value is null or\r\n   *          if there is no DataWindow object assigned to the DataWindow control or DataStore.\r\n   * @since 0.0.0\r\n   */\r\n  getItem(row: number, column: string | number, bufferType: BufferType = \"Primary!\", original: boolean = false): any | null {\r\n    return this.ds.getItem(row, column, bufferType, original);\r\n  }\r\n  /**\r\n   * Reports the number of the current row in a DataWindow control or DataStore object.\r\n   * @returns The number of the current row in dwcontrol. Returns -1 if no row is current\r\n   * @since 0.0.0\r\n   */\r\n  getRow(): number { return this.ds.getRow() }\r\n  /**\r\n   * Sets the current row in a DataWindow control or DataStore.\r\n   * @param newRow The row you want to make current\r\n   * @returns Returns 1 if it succeeds, 0 if the row is the current row indeed, and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   * @description\r\n   * This method emits the following events:\r\n   * * {@link DwRowFocusChangingEvent}\r\n   * * {@link DwRowFocusChangedEvent}\r\n   */\r\n  setRow(newRow: number): ResultCode {\r\n    let rc = ResultCode.FAILURE;\r\n    const currentRow = this.getRow();\r\n    if (newRow == currentRow) {\r\n      rc = ResultCode.NOTHING;\r\n    } else if (newRow >= 0 && newRow < this.rowCount()) {\r\n      const event = new DwRowFocusChangingEvent(currentRow, newRow);\r\n      this.onRowFocusChanging$.trigger(event);\r\n      if (!event.defaultPrevented) {\r\n        rc = this.ds.setRow(newRow);\r\n        if (rc == ResultCode.SUCCESS) {\r\n          this.onRowFocusChanged$.trigger(new DwRowFocusChangedEvent(newRow));\r\n        }\r\n      }\r\n    }\r\n    return rc;\r\n  }\r\n  /**\r\n   * Gets the unique row identifier of a row in a DataWindow control or DataStore object from the row number associated with that row.\r\n   * The row identifier value is not the same as the row number value used in many DataWindow and DataStore function calls and\r\n   * should not be used for the row number value. Instead, you should first convert the unique row identifier into a row number by calling\r\n   * GetRowFromRowId.\r\n   *\r\n   * @param row A number specifying the row number for which you want the associated row identifier.\r\n   * @param bufferType A value of the dwBuffer enumerated datatype. Default is Primary!\r\n   * @returns Returns the row identifier in buffer. Returns -1 if the row identifier is not in the current buffer and -1 if an error occurs.\r\n   * @see {@link getRowFromRowId}\r\n   * @since 0.0.0\r\n   */\r\n  getRowIdFromRow(row: number | Object, bufferType: BufferType = \"Primary!\"): number {\r\n    return this.ds.getRowIdFromRow(row, bufferType);\r\n  }\r\n  /**\r\n   * Gets the row number of a row in a DataWindow control or DataStore object from the unique row identifier associated with that row.\r\n   *\r\n   * @param rowID A number specifying the row identifier for which you want the associated row number.\r\n   * @param bufferType A value of the dwBuffer enumerated datatype. Default is Primary!\r\n   * @returns Returns the row number in buffer. Returns -1 if the row number is not in the current buffer\r\n   * @see {@link getRowIdFromRow}\r\n   * @since 0.0.0\r\n   */\r\n  getRowFromRowId(rowID: number, bufferType: BufferType = \"Primary!\"): number {\r\n    return this.ds.getRowFromRowId(rowID, bufferType);\r\n  }\r\n  /**\r\n   * Gets current row's data object\r\n   *\r\n   * @param {number} row  Optional row number. Default is current row in the DataWindow/DataStore\r\n   * @returns Row object or null if row number is invalid\r\n   * @since 0.0.0\r\n   */\r\n  getRowObject(row?: number): any { return this.ds.getRowObject(row || this.getRow()); }\r\n  /**\r\n   * Obtains the first visible row in the DataWindow control\r\n   * @returns {number}  Row number or -1 if error occurs\r\n   * @since 0.0.0\r\n   */\r\n  getFirstVisibleRow(): number { return -1 }\r\n  /**\r\n   * Obtains the last visible row in the DataWindow control\r\n   * @returns {number}  Row number or -1 if error occurs\r\n   * @since 0.0.0\r\n   */\r\n  getLastVisibleRow(): number { return -1 }\r\n  /**\r\n   * Obtains the number of the column the user clicked or double-clicked in a DataWindow control or DataStore object.\r\n   * @returns Returns the number of the column that the user clicked or double-clicked in dwcontrol.\r\n   *          Returns -1 if the user did not click or double-click a column (for example, the user double-clicked outside the data area,\r\n   *          in text or spaces between columns, or in the header, summary, or footer area).\r\n   * @abstract\r\n   * @since 0.0.0\r\n   */\r\n  getClickedColumn(): number { return -1; }\r\n  /**\r\n   * Gets visible columns count in the DataWindow\r\n   * @since 0.0.0\r\n   */\r\n  getControlCount(): number { return this.controls.length; }\r\n  /**\r\n   * Gets count of table columns\r\n   * @returns Number of columns\r\n   * @since 0.0.0\r\n   */\r\n  columnCount(): number { return this.ds.columnCount(); }\r\n  /**\r\n   * Obtains the number of the current column. The current column is the column that has focus.\r\n   * @returns The number of the current column in dwcontrol. Returns -1 if no column is current.\r\n   * @since 0.0.0\r\n   */\r\n  getColumn(): number { return this.ds.getColumn(); }\r\n  /**\r\n   * Obtains the name of the current column. The current column is the column that has the focus.\r\n   * @returns Returns the name of the current column in dwcontrol.\r\n   *          Returns the empty string (\"\") if no column is current or if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  getColumnName(): string { return this.ds.getColumnName(); }\r\n  /**\r\n   * Obtains the column's data type by its index or name\r\n   * @param col {number|string} Column identifier\r\n   * @returns {string} Column's data type or \"!\" if column with specified name/index is not found\r\n   * @since 0.0.0\r\n   */\r\n  getColumnType(col: number | string): string { return this.ds.getColumnType(col); }\r\n  /**\r\n   * Obtains DataWindow control as a DwObject object by its index or name.\r\n   *\r\n   * @param indexOrName Optional. DataWindow control's ordered number or string name. If this parameter is null function applies a current cell\r\n   *                    number. Default value is null\r\n   * @returns {DwObject|null} DataWindow's control object\r\n   *\r\n   * @example\r\n   * const dw = (dwEmpList) as DwBaseComponent;\r\n   * let dwo = dw.getDwObject(0);\r\n   * let cName = dwo.name;  // ID\r\n   * dwo = dw.getDwObject(\"emp_name\");\r\n   * let cType = dwo.colType;\r\n   *\r\n   * @see {@link currentCell}\r\n   * @since 0.0.0\r\n   */\r\n  getDwObject(indexOrName: number | string | null = null): DwObject | null {\r\n    let vc: DwObject | null = null;\r\n    let index: number = -1;\r\n    if (indexOrName == null) {\r\n      indexOrName = this.currentCell;\r\n    }\r\n    if (typeof (indexOrName) === \"string\") {\r\n      indexOrName = indexOrName.trim();\r\n      index = this.controls.findIndex(c => c.name == indexOrName);  // Case sensitive !!!\r\n    } else\r\n      index = indexOrName;\r\n    if (index >= 0 && index < this.controls.length) {\r\n      vc = this.controls[index];\r\n    }\r\n    return vc;\r\n  }\r\n  /**\r\n   * Obtains the values in the code table for the column\r\n   *\r\n   * @param column The column for which you want to get CodeTable items. Column can be a column number (integer) or a column name (string).\r\n   * @returns CodeTable items array\r\n   * @since 0.0.0\r\n   */\r\n  getValues(column: string | number): CodeTableItem[] | undefined {\r\n    return this.ds.getValues(column);\r\n  }\r\n  /**\r\n   * Obtains the value of an item in a value list or code table associated with a column in a DataWindow\r\n   *\r\n   * @param column The column for which you want the item. Column can be a column number (integer) or a column name (string).\r\n   * @param index The number of the item in the value list or the code table for the edit style.\r\n   * @returns Returns the item identified by index in the value list. Returns null if the index is not valid or the column does not have a value list or code table.\r\n   * @since 0.0.0\r\n   */\r\n  getValue(column: string | number, index: number): CodeTableItem | undefined {\r\n    return this.ds.getValue(column, index);\r\n  }\r\n\r\n  getValueByCode(column: string | number, value: string | number | null): CodeTableItem | undefined {\r\n    return this.ds.getValueByCode(column, value);\r\n  }\r\n  /**\r\n   * Determines if the specified `column` has a table of display values and corresponding data values\r\n   * @param column Column's name or number\r\n   * @returns _True_ if the column definition contains a code table structure, else returns _false_\r\n   */\r\n  hasCodeTable(column: string | number): boolean {\r\n    return this.ds.hasCodeTable(column);\r\n  }\r\n  /**\r\n   * Obtains the display value in the code table associated with the data value in the specified column.\r\n   * @param column The column for which you want the code table display value. Column's value can be a text or column's definition number\r\n   * @param value Key value to search the display value in the code table\r\n   * @returns {string} Display text for the column's value or value itself if it was not found in the column's value list or code table\r\n   * @see {@link getValue}\r\n   * @see {@link getValueByCode}\r\n   * @since 0.0.0\r\n   */\r\n  getDisplayValue(column: string | number, value: any): string {\r\n    return this.ds.getDisplayValue(column, value);\r\n  }\r\n  /**\r\n   *\r\n   * @param nCol\r\n   * @returns\r\n   */\r\n  getControlCssWidth(nCol: number): string {\r\n    const dwo = this.getDwObject(nCol);\r\n    let res: string = \"auto\";\r\n    if (dwo) {\r\n      if (Objects.isNumber(dwo.width)) {\r\n        res = dwo.width + \"px\";\r\n      }\r\n    }\r\n    return res;\r\n  }\r\n  /**\r\n   * Accesses the database to retrieve rows with values of parameters, filter and sort conditions that is\r\n   * currently used in the DataWindow/DataStore.\r\n   * @returns {Promise} Promise object\r\n   * @since 0.0.0\r\n   */\r\n  reselectRows(): Promise<number> { return this.ds.reselectRows(); }\r\n  /**\r\n   * Clears all the data from a DataWindow control or DataStore object.\r\n   * Reset is not the same as deleting rows from the DataWindow object or\r\n   * child DataWindow. Reset affects the application only, not the database.\r\n   * If you delete rows and then call the Update method, the rows are deleted from\r\n   * the database table associated with the DataWindow object. If you call Reset and\r\n   * then call Update, no changes are made to the table.\r\n   *\r\n   * @returns  1 if it succeeds and -1 if an error occurs. The return value is usually not used.\r\n   * @since 0.0.0\r\n   */\r\n  reset(): ResultCode { return this.ds.reset(); }\r\n  /**\r\n   * When a row is changed, inserted, or deleted, its update flag is set, making it marked for update.\r\n   * By default, the Update method turns these flags off. If you want to coordinate updates of more than\r\n   * one DataWindow or DataStore, however, you can prevent Update from clearing the flags. Then, after you verify\r\n   * that all the updates succeeded, you can call ResetUpdate for each DataWindow to clear the flags.\r\n   * If one of the updates failed, you can keep the update flags, prompt the user to fix the problem, and\r\n   * try the updates again.\r\n   * You can find out which rows are marked for update with the GetItemStatus method. If a row is in the\r\n   * delete buffer or if it is in the primary or filter buffer and has NewModified! or DataModified! status,\r\n   * its update flag is set. After update flags are cleared, all rows have the status NotModified! or New! and\r\n   * the delete buffer is empty\r\n   * @returns    Completion code\r\n   * @see {@link update}\r\n   * @since 0.0.0\r\n   */\r\n  resetUpdate(): ResultCode { return this.ds.resetUpdate() }\r\n  /**\r\n   * Retrieves rows from the database for a DataWindow control or DataStore. If arguments are included,\r\n   * the argument values are used for the retrieval arguments in the SQL SELECT statement for the DataWindow\r\n   * object or child DataWindow.\r\n   *\r\n   * @method retrieve\r\n   * @param {...any} args  One or more values that you want to use as retrieval arguments\r\n   * @returns {Promise} Promise object\r\n   * @since 0.0.0\r\n   */\r\n  retrieve(...args: any): Promise<number> { return this.ds.retrieve(...args); }\r\n  /**\r\n   * Updates the DataWindow with the changes made in a DataWindow control or DataStore.\r\n   * Method {@link update} can also call {@link acceptText} for the current row and column before it updates the database.\r\n   * @param accept    (optional)\tA `boolean` value specifying whether the DataWindow control or DataStore should automatically perform an AcceptText prior to performing the update. Default is _true_.\r\n   * @param resetflag (optional)\tA `boolean` value specifying whether the DataWindow control or DataStore should automatically reset the update flags. Default is _true_.\r\n   * @returns {Promise<ResultCode>} `Promise` of update result code: Success(1), Failure(-1) or Nothing(0) happenings\r\n   * @see {@link acceptText}\r\n   * @see {@link resetUpdate}\r\n   * @see {@link updatesPending}\r\n   * @see {@link updating}\r\n   * @since 0.0.0\r\n   */\r\n  update(accept: boolean = true, resetflag: boolean = true): Promise<ResultCode> {\r\n    return this.ds.update(accept, resetflag);\r\n  }\r\n  /**\r\n   * Copies a range of rows from one DataWindow control (or DataStore object) to another, or from one buffer to another within a single DataWindow control (or DataStore).\r\n   *\r\n   * @param startrow The number of the first row you want to copy.\r\n   * @param endrow The number of the last row you want to copy.\r\n   * @param srcbuffer A value of the BufferType identifying the DataWindow buffer from which you want to copy rows.\r\n   * @param target A reference to the DataWindow control or DataStore object to which you want to copy the rows. Target can be the same DataWindow (or DataStore) or another DataWindow (or DataStore)\r\n   * @param beforerow The number of the row before which you want to insert the copied rows. To insert after the last row, use any value that is greater than the number of existing rows.\r\n   * @param destbuffer A value of the BufferType enumerated datatype identifying the target DataWindow buffer for the copied rows.\r\n   * @returns Returns 1 if it succeeds, 0 if nothing happens and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  rowsCopy(startrow: number, endrow: number, srcbuffer: BufferType, target: DataStore<any>, beforerow: number, destbuffer: BufferType): ResultCode {\r\n    return this.ds.rowsCopy(startrow, endrow, srcbuffer, target, beforerow, destbuffer);\r\n  }\r\n  /**\r\n   * Clears a range of rows from one DataWindow control (or DataStore) and inserts them in another.\r\n   * Alternatively, RowsMove moves rows from one buffer to another within a single DataWindow control\r\n   * (or DataStore).\r\n   *\r\n   * @param startrow The number of the first row you want to move.\r\n   * @param endrow The number of the last row you want to move.\r\n   * @param srcbuffer A value of the BufferType identifying the DataWindow buffer from which you want to move rows.\r\n   * @param target A reference to the DataWindow control or DataStore object to which you want to move the rows. Target can be the same DataWindow (or DataStore) or another DataWindow (or DataStore)\r\n   * @param beforerow The number of the row before which you want to insert the moved rows. To insert after the last row, use any value that is greater than the number of existing rows.\r\n   * @param destbuffer A value of the BufferType enumerated datatype identifying the target DataWindow buffer for the moving rows.\r\n   * @returns Returns 1 if it succeeds, 0 if nothing happens and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  rowsMove(startrow: number, endrow: number, srcbuffer: BufferType, target: DataStore<any>, beforerow: number, destbuffer: BufferType): ResultCode {\r\n    return this.ds.rowsMove(startrow, endrow, srcbuffer, target, beforerow, destbuffer);\r\n  }\r\n  /**\r\n   * Discards a range of rows in a DataWindow control. Once a row has been discarded using RowsDiscard, you cannot restore the row.\r\n   * You have to retrieve it again from the database.\r\n   *\r\n   * @param startrow The number of the first row you want to discard.\r\n   * @param endrow The number of the last row you want to discard.\r\n   * @param dwbuffer A value of the BufferType enumerated datatype\r\n   * @returns Returns 1 if it succeeds, 0 if nothing was deleted and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  rowsDiscard(startrow: number, endrow: number, dwbuffer: BufferType = \"Primary!\"): ResultCode {\r\n    return this.ds.rowsDiscard(startrow, endrow, dwbuffer);\r\n  }\r\n  /**\r\n   * Sets the current column in a DataWindow control or DataStore.\r\n   *\r\n   * @param col The column you want to make current. Column can be a column number or a column name.\r\n   * @returns Returns 1 if it succeeds and -1 if an error occurs.\r\n   *          If column is less than 0 or greater than the number of columns - 1, SetColumn fails.\r\n   * @since 0.0.0\r\n   * @event DwItemFocusChangedEvent\r\n   */\r\n  setColumn(col: number | string): ResultCode {\r\n    const rc = this.ds.setColumn(col);\r\n    if (rc == ResultCode.SUCCESS) {\r\n      this.onItemFocusChanged$.trigger(new DwItemFocusChangedEvent(this.getRow(), this.ds.getColumnName()));\r\n    }\r\n    return rc;\r\n  }\r\n  /**\r\n   * Controls the automatic redrawing of an object or control after each change to its properties.\r\n   * By default, CuteDW redraws a control after each change to properties that affect appearance.\r\n   * Use SetRedraw to turn off redrawing temporarily in order to avoid flicker and reduce redrawing time\r\n   * when you are making several changes to the properties of an object or control.\r\n   * If the window is not visible, SetRedraw fails.\r\n   *\r\n   * @param redraw A boolean value that controls whether DataWindow redraws an object automatically after a change. Values are:\r\n   *  \t_true_ - Automatically redraw the object or control after each change to its properties,\r\n   *  \t_false_ - Do not redraw after each change.\r\n   * @returns Returns 1 if it succeeds and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  setRedraw(redraw: boolean): ResultCode {\r\n    if (redraw) {\r\n      this._canRedraw = true;\r\n      this.dweRedraw$.trigger();\r\n    } else\r\n      this._canRedraw = false;\r\n    return ResultCode.SUCCESS;\r\n  }\r\n  /**\r\n   * Gets the total number of pages when a DataWindow object is being viewed\r\n   * @returns The total number of pages\r\n   */\r\n  pageCount(): number { return -1 }\r\n  /**\r\n   * Gets the number of the current page\r\n   * @returns The number of the current page\r\n   */\r\n  pageIndex(): number { return -1 }\r\n  /**\r\n   * Gets the maximum number of rows per page\r\n   * @returns The current page size\r\n   */\r\n  pageSize(): number { return -1 }\r\n  /**\r\n   * Scrolls the DataWindow a specified number of lines up or down.\r\n   *\r\n   * @param lines A value specifying the direction and number of lines you want to scroll. To scroll down, use a positive value. To scroll up, use a negative value.\r\n   * @returns The `Promise` to return the line number of the first visible line in dwcontrol if it succeeds, or -1 if an error occurs.\r\n   *\r\n   * @abstract\r\n   * @async\r\n   * @since 0.0.0\r\n   * @see {@link scrollFirstPage}\r\n   * @see {@link scrollLastPage}\r\n   * @see {@link scrollNextPage}\r\n   * @see {@link scrollNextRow}\r\n   * @see {@link scrollPriorPage}\r\n   * @see {@link scrollPriorRow}\r\n   * @see {@link scrollToRow}\r\n   *\r\n   */\r\n  async scroll(lines: number): Promise<number> { return -1; }\r\n  /**\r\n   * Scrolls a Web DataWindow control to the first page, displaying the result set's first group of rows in the Web page. (A page is the number of rows that are displayed in the DataWindow control at one time.) ScrollFirstPage changes the current row, but not the current column.\r\n   * @returns The `Promise` of a numeric result denoting 1 if the method succeeds and -1 if an error occurs.\r\n   *\r\n   * @abstract\r\n   * @async\r\n   * @since 0.0.0\r\n   */\r\n  async scrollFirstPage(): Promise<ResultCode> { return ResultCode.FAILURE; }\r\n  /**\r\n   * Scrolls a Web DataWindow control to the last page, displaying the result set's last group of rows in the Web page. (A page is the number of rows that are displayed in the DataWindow control at one time.) ScrollLastPage changes the current row, but not the current column.\r\n   * @returns The `Promise` of a numeric result denoting 1 if the method succeeds and -1 if an error occurs.\r\n   *\r\n   * @abstract\r\n   * @async\r\n   * @since 0.0.0\r\n   */\r\n  async scrollLastPage(): Promise<ResultCode> { return ResultCode.FAILURE; }\r\n  /**\r\n   * Scrolls a DataWindow control forward one page, displaying the next group of rows in the DataWindow's display area.\r\n   * (A page is the number of rows that can be displayed in the DataWindow control at one time.)\r\n   * {@link scrollNextPage} changes the current row, but not the current column.\r\n   * @returns The `Promise` of a numeric result denoting 1 if the method succeeds and -1 if an error occurs.\r\n   *\r\n   * @abstract\r\n   * @async\r\n   * @since 0.0.0\r\n   */\r\n  async scrollNextPage(): Promise<ResultCode> { return ResultCode.FAILURE; }\r\n  /**\r\n   * Scrolls a DataWindow control to the next row (forward one row).\r\n   * ScrollNextRow changes the current row, but not the current column.\r\n   * @returns The `Promise` of a numeric result denoting 1 if the method succeeds and -1 if an error occurs.\r\n   *\r\n   * @abstract\r\n   * @since 0.0.0\r\n   */\r\n  async scrollNextRow(): Promise<ResultCode> { return ResultCode.FAILURE; }\r\n  /**\r\n   * Scrolls a DataWindow control backward one page, displaying another group of rows in the DataWindow's display area.\r\n   * @returns The `Promise` of a numeric result denoting 1 if the method succeeds and -1 if an error occurs.\r\n   *\r\n   * @abstract\r\n   * @async\r\n   * @since 0.0.0\r\n   */\r\n  async scrollPriorPage(): Promise<ResultCode> { return ResultCode.FAILURE; }\r\n  /**\r\n   * Scrolls a DataWindow control backward one row. ScrollPriorRow changes the current row but not the current column.\r\n   * @returns The `Promise` of a numeric result denoting 1 if the method succeeds and -1 if an error occurs.\r\n   *\r\n   * @abstract\r\n   * @async\r\n   * @since 0.0.0\r\n   */\r\n  async scrollPriorRow(): Promise<ResultCode> { return ResultCode.FAILURE; }\r\n  /**\r\n   * Scrolls a DataWindow control to the specified row. The current row changes if\r\n   * highlight value is true.\r\n   *\r\n   * @param row {number} A value identifying the row to which you want to scroll.\r\n   * @param highlight {boolean} Set row as the current row in the DataWindow\r\n   * @param smooth {boolean} Apply smooth scrolling or not\r\n   * @param alignTo {auto|top|bottom} Edge of row to align\r\n   * @returns Returns 1 if it succeeds and -1 if an error occurs\r\n   *\r\n   * @abstract\r\n   * @async\r\n   * @since 0.0.0\r\n   */\r\n  protected async scrollToNthRow(row: number, highlight: boolean = false, smooth: boolean = true, alignTo: \"auto\" | \"top\" | \"bottom\" = \"auto\"): Promise<ResultCode> {\r\n    return ResultCode.FAILURE;\r\n  }\r\n  /**\r\n   * Scrolls a DataWindow control to the specified row. _ScrollToRow_ changes the current row but not the current column\r\n   * @param row A value identifying the row to which you want to scroll.\r\n   *            If row is 0, _ScrollToRow_ scrolls to the first row.\r\n   *            If row is greater than the last row number, it scrolls to the last row.\r\n   *            If row is visible without scrolling, the DataWindow does not scroll.\r\n   * @returns The number of the row to which the DataWindow scrolls if it succeeds and -1 if an error occurs.\r\n   *\r\n   * @abstract\r\n   * @async\r\n   * @since 0.0.0\r\n   */\r\n  async scrollToRow(row: number): Promise<number> { return -1; }\r\n  /**\r\n   * Shares data retrieved by one DataWindow control (or DataStore), which is referred to as the\r\n   * primary DataWindow, with another DataWindow control (or DataStore), referred to as the secondary\r\n   * DataWindow.\r\n   * The controls do not share formatting; only the data is shared, including data in the _primary_ buffer,\r\n   * the _delete_ buffer, the _filter_ buffer, and the sort order.\r\n   *\r\n   * @param child The name of the secondary DataWindow with which the control  dwprimary will share the data.\r\n   * @returns Returns 1 if it succeeds and -1 if an error occurs.\r\n   * @see {@link shareDataOff}\r\n   * @since 0.0.0\r\n   */\r\n  shareData(child: DataStore<any>): ResultCode { return this.ds.shareData(child); }\r\n  /**\r\n   * Turns off the sharing of data buffers for a DataWindow control or DataStore.\r\n   * When you call ShareDataOff for a secondary DataWindow, that control no longer\r\n   * contains data, but the primary DataWindow and other secondary controls are not affected.\r\n   * When you call ShareDataOff for the primary DataWindow, all secondary DataWindows are disconnected and\r\n   * no longer contain data.\r\n   * @returns Returns 1 if it succeeds and -1 if an error occurs.\r\n   * @see {@link shareData}\r\n   * @since 0.0.0\r\n   */\r\n  shareDataOff(): ResultCode { return this.ds.shareDataOff(); }\r\n  /**\r\n   * Checks whether the DataWindow is shared by any other DataStore/DataWindow object\r\n   * @returns _true_ if the DataWindow has any secondary DataStore/DataWindow that was shared with this DataWindow object, else _false_\r\n   */\r\n  isShared(): boolean { return this.ds.isShared(); }\r\n  /**\r\n   * Reports the number of the next highlighted row after a specified row in a DataWindow control or DataStore object.\r\n   *\r\n   * @param row A value identifying the location of the row after which you want to search for the next selected row. Specify -1 to begin searching at the first row.\r\n   * @returns Returns the number of the first row that is selected after row in dwcontrol. Returns -1 if no row is selected after the specified row.\r\n   * @since 0.0.0\r\n   */\r\n  getSelectedRow(row: number): number { return this.ds.getSelectedRow(row); }\r\n  /**\r\n   * Gets selected rows array\r\n   * @returns Readonly array of row objects\r\n   * @since 0.0.0\r\n   */\r\n  getSelectedRows(): readonly any[] { return this.ds.getSelectedRows(); }\r\n  /**\r\n   * Whether the number of selected elements matches the total number of rows.\r\n   *\r\n   * @returns true if all rows was selected, else false\r\n   * @since 0.0.0\r\n   */\r\n  isAllSelected(): boolean { return this.selectedCount() == this.rowCount(); }\r\n  /**\r\n   * Determines whether a row is selected in a DataWindow or DataStore. A selected row is highlighted using reverse video.\r\n   * @param row A value identifying the row you want to test to see if it is selected\r\n   * @returns Returns true if row in dwcontrol is selected and false if it is not selected. If row is greater than the number of rows in dwcontrol or negative, IsSelected also returns false.\r\n   * @since 0.0.0\r\n   */\r\n  isSelected(row: number): boolean { return this.ds.isSelected(row); }\r\n  /**\r\n   * Reports if DataWindow has selected rows\r\n   * @returns true if DataWindow has selected rows, else returns false\r\n   * @since 0.0.0\r\n   */\r\n  hasSelectedRows(): boolean { return this.selectedCount() > 0; }\r\n  /**\r\n   * Selects all rows if they are not all selected, otherwise clear selection.\r\n   * @returns 1 if it succeeds and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  masterToggle(): ResultCode { return this.selectRow(Infinity, !this.isAllSelected()); }\r\n  /**\r\n   * Reports if DataWindow has selected rows and how many\r\n   * @returns Number of selected rows in the DataWindow/DataStore\r\n   * @since 0.0.0\r\n   */\r\n  selectedCount(): number { return this.ds.selectedCount(); }\r\n  /**\r\n   * Highlights or removes highlights from rows in a DataWindow control or DataStore. You can select all rows or a single row.\r\n   * SelectRow does not affect which row is current. It does not select rows in the database.\r\n   * @param row A value identifying the row you want to select or deselect. Specify Infinity to select or deselect all rows.\r\n   * @param select A boolean value that determines whether the row is selected or not selected:\r\n   **    _true_ - select the row(s) so that they are highlighted.\r\n   **    _false_ - deselect the row(s) so that they are not highlighted.\r\n   * @returns  1 if it succeeds and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  selectRow(row: number, select: boolean): ResultCode { return this.ds.selectRow(row, select); }\r\n  /**\r\n   * Toggles selection status on specified row\r\n   * @row A value identifying the row you want to toggle selection\r\n   * @returns New selection status or _undefined_ if an error occurs\r\n   * @since 0.0.0\r\n   */\r\n  selectToggle(row: number): boolean | undefined {\r\n    if (this.selectRow(row, !this.isSelected(row)) == ResultCode.SUCCESS)\r\n      return this.isSelected(row);\r\n    return undefined;\r\n  }\r\n  /**\r\n   * Searches for the next break for the specified group. A group break occurs when the value in the column for the group changes.\r\n   * `findGroupChange` reports the row that begins the next section.\r\n   * @description\r\n   * If the starting row begins a new section at the specified level, then that row is the one returned.\r\n   * To continue searching for subsequent breaks, increment the starting row so that the search resumes with\r\n   * the second row in the group.\r\n   * @param row A value identifying the row at which you want to begin searching for the group break.\r\n   * @param level The number of the group for which you are searching. Groups are numbered in the order in which you defined them.\r\n   * The return value observes these rules based on the value of row. If the starting row is:\r\n   * ·\t_The first row in a group_, then `findGroupChange` returns the starting row number\r\n   * ·\t_A row within a group_, other than the last group, then `findGroupChange` returns the row number of the first row of the next group\r\n   * ·\t_A row in the last group_, other than the first row of the last group, then `findGroupChange` returns -1\r\n   * @returns The number of the row whose group column has a new value, meaning that it begins a new group.\r\n   * Returns -1 if the value in the group column did not change and -100 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  findGroupChange(row: number, level: number): number { return this.ds.findGroupChange(row, level); }\r\n  /**\r\n   * Gets the number of groups defined in the DataWindow/DataStore object\r\n   * @returns Group count\r\n   */\r\n  groupCount(): number { return this.ds.groupCount(); }\r\n  /**\r\n   * Recalculates the breaks in the grouping levels in a DataStore/DataWindow.\r\n   *\r\n   * @description\r\n   * Use `groupCalc` to force the DataWindow object to recalculate the breaks in the grouping levels\r\n   * after you have added or modified rows in a DataWindow. `groupCalc` does not sort the data before it\r\n   * recalculates the breaks. Therefore, unless you populated the DataWindow in a sorted order,\r\n   * call the {@link applySort} method to sort the data before you call `groupCalc`.\r\n   * @returns Returns 1 if it succeeds and -1 if an error occurs.\r\n   * @since 0.0.0\r\n   */\r\n  groupCalc(): ResultCode { return this.ds.groupCalc(); }\r\n  /**\r\n   * Gets the array of DataStore's groups\r\n   * @returns Readonly array of DSRowGroup structures\r\n   * @since 0.0.0\r\n   */\r\n  getGroups(): readonly DSRowGroup<any>[] { return this.ds.getGroups(); }\r\n  /**\r\n   * Gets the array of DataStore's groups in the reversed order\r\n   * @returns Readonly array of DSRowGroup structures\r\n   * @since 0.0.0\r\n   */\r\n  getReversedGroups(): readonly DSRowGroup<any>[] {\r\n    let groups = this.ds.getGroups();\r\n    let res = [];\r\n    for (let i = groups.length - 1; i >= 0; i--) {\r\n      res.push(groups[i]);\r\n    }\r\n    return res;\r\n  }\r\n  /**\r\n   * Gets tracked\r\n   * @param index\r\n   * @param item\r\n   * @returns Internal ROW_ID of the row object\r\n   * @since 0.0.0\r\n   */\r\n  getTrackedRowId(index: number, item: any): any {\r\n    return item[ROW_ID_KEY]\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.subscribeOnEvents();\r\n    this._controller?.onInit();\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this._controller?.onAfterViewInit();\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    clearInterval(this._intervalId);\r\n    this.unsubscribeFromEvents();\r\n    this.finalize();\r\n  }\r\n\r\n  // IDataStore method\r\n  finalize() {\r\n    this._controller?.onDestroy();\r\n    this.ds.finalize();\r\n  }\r\n  /**\r\n   * JavaScript's `typeof` operator returns `[object DataWindow]`\r\n   */\r\n  [Symbol.toStringTag] = \"DataWindow\";\r\n  /**\r\n   * Returns DataStore's buffer as an iterable object\r\n   * @param bufferType DataStore's buffer type\r\n   * @returns Iterable iterator\r\n   */\r\n  *rowsCursor(bufferType: BufferType): IterableIterator<any> {\r\n    yield* this.ds.rowsCursor(bufferType);\r\n  }\r\n  /**\r\n   * Primary rows iterator\r\n   */\r\n  *[Symbol.iterator](): IterableIterator<any> {\r\n    yield* this.ds.rowsCursor();\r\n  }\r\n\r\n}\r\n\r\n\r\n","/*\r\n * Public API Surface of @cute-dw/core\r\n */\r\n\r\nexport * from './lib/cute-core.module';\r\n\r\nexport * from './lib/collections/AbstractCollection';\r\nexport * from './lib/collections/AbstractList';\r\nexport * from './lib/collections/AbstractMap';\r\nexport * from './lib/collections/AbstractQueue';\r\nexport * from './lib/collections/AbstractSet';\r\nexport * from './lib/collections/ArrayList';\r\nexport * from './lib/collections/Collection';\r\nexport * from './lib/collections/Deque';\r\nexport * from './lib/collections/Dictionary';\r\nexport * from './lib/collections/HashMap';\r\nexport * from './lib/collections/HashSet';\r\nexport * from './lib/collections/HashTable';\r\nexport * from './lib/collections/Iterable';\r\nexport * from './lib/collections/LinkedList';\r\nexport * from './lib/collections/List';\r\nexport * from './lib/collections/NavigableMap';\r\nexport * from './lib/collections/NavigableSet';\r\nexport * from './lib/collections/PriorityQueue';\r\nexport * from './lib/collections/Properties';\r\nexport * from './lib/collections/Queue';\r\nexport * from './lib/collections/SortedMap';\r\nexport * from './lib/collections/SortedSet';\r\nexport * from './lib/collections/Stack';\r\nexport * from './lib/collections/TreeMap';\r\nexport * from './lib/collections/TreeSet';\r\nexport * from './lib/collections/Vector';\r\n\r\nexport * from './lib/services/http.service';\r\nexport * from './lib/services/log.service';\r\n\r\nexport * from './lib/controllers/DwController';\r\n\r\nexport * from './lib/util/Arrays';\r\nexport * from './lib/util/Collections';\r\nexport * from './lib/util/Comparator';\r\nexport * from './lib/util/Types';\r\nexport * from './lib/util/Dates';\r\nexport * from './lib/util/Ciphers';\r\nexport * from './lib/util/Helpers';\r\nexport * from './lib/util/Numbers';\r\nexport * from './lib/util/Objects';\r\nexport * from './lib/util/Strings';\r\nexport * from './lib/util/XmlDocs';\r\n\r\nexport * from './lib/util/i18n/Locale';\r\nexport * from './lib/util/i18n/text/NumberSpeller';\r\nexport * from './lib/util/i18n/text/NumberSpellerDictionary';\r\nexport * from './lib/util/i18n/text/DecimalFormat';\r\nexport * from './lib/util/i18n/text/SimpleDateFormat';\r\nexport * from './lib/util/i18n/text/StringFormat';\r\n\r\nexport * from './lib/util/type/Byte';\r\nexport * from './lib/util/type/DateISO';\r\nexport * from './lib/util/type/DateTime';\r\nexport * from './lib/util/type/Decimal';\r\nexport * from './lib/util/type/Double';\r\nexport * from './lib/util/type/Float';\r\nexport * from './lib/util/type/Integer';\r\nexport * from './lib/util/type/Interval';\r\nexport * from './lib/util/type/Long';\r\nexport * from './lib/util/type/Time';\r\nexport * from './lib/util/type/UByte';\r\nexport * from './lib/util/type/UInt';\r\nexport * from './lib/util/type/ULong';\r\n\r\nexport * from './lib/util/enum/ResultCode';\r\nexport * from './lib/util/evaluator/CodeBlock';\r\n\r\nexport * from './lib/util/exception/ClassCastException';\r\nexport * from './lib/util/exception/ConcurrentModificationException';\r\nexport * from './lib/util/exception/IllegalArgumentException';\r\nexport * from './lib/util/exception/IllegalJsonException';\r\nexport * from './lib/util/exception/IllegalStateException';\r\nexport * from './lib/util/exception/IndexOutOfBoundsException';\r\nexport * from './lib/util/exception/NoSuchElementException';\r\nexport * from './lib/util/exception/NullPointerException';\r\nexport * from './lib/util/exception/ParseException';\r\nexport * from './lib/util/exception/RunTimeException';\r\nexport * from './lib/util/exception/UnsupportedOperationException';\r\n\r\nexport * from './lib/util/function/BiPredicate';\r\nexport * from './lib/util/function/Compare';\r\nexport * from './lib/util/function/Consumer';\r\nexport * from './lib/util/function/Predicate';\r\nexport * from './lib/util/function/Supplier';\r\n\r\nexport * from './lib/util/interface/Class';\r\nexport * from './lib/util/interface/Cloneable';\r\nexport * from './lib/util/interface/Focusable';\r\nexport * from './lib/util/interface/MenuItem';\r\nexport * from './lib/util/interface/MenuOwner';\r\nexport * from './lib/util/interface/ToolbarItem';\r\n\r\n//export * from './lib/util/lz-string'\r\n\r\nexport * from './lib/util/net/JsonRpc';\r\n\r\nexport * from './lib/util/rxjs/EventProducer';\r\nexport * from './lib/util/rxjs/operators';\r\n\r\nexport * from './lib/datastore/DataStore';\r\nexport * from './lib/datastore/DataStoreOptions';\r\nexport * from './lib/datastore/DataStoreService';\r\nexport * from './lib/datastore/DSCodeBlock';\r\nexport * from './lib/datastore/events';\r\nexport * from './lib/datastore/IDataStore';\r\nexport * from './lib/datastore/TableColumn';\r\nexport * from './lib/datastore/TableParam';\r\n\r\nexport *  from './lib/datawindow/datawindow.component';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["_a","t.isV8IntrinsicIdentifier","t.isIdentifier","t.isMemberExpression","t.isNumericLiteral","t.isStringLiteral","t.isBinaryExpression","t.isLogicalExpression","t.isObjectProperty","delay","delayOperator"],"mappings":";;;;;;;;MAYa,cAAc,CAAA;;2GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;4GAAd,cAAc,EAAA,CAAA,CAAA;4GAAd,cAAc,EAAA,CAAA,CAAA;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAV1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EACb;AACD,oBAAA,OAAO,EAAE,EACR;AACD,oBAAA,OAAO,EAAE,EACR;AACD,oBAAA,SAAS,EAAE,EACV;AACF,iBAAA,CAAA;;;ACXD;AAEA;;AAEG;AACG,MAAO,gBAAiB,SAAQ,KAAK,CAAA;IAGzC,WAAY,CAAA,OAAgB,EAAE,KAAa,EAAA;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;;KAErB;IAED,IAAI,KAAK,KAAuB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAC;AACrD;;ACbK,MAAO,wBAAyB,SAAQ,gBAAgB,CAAA;AAE7D;;ACED;;AAEG;MACmB,kBAAkB,CAAA;AAAxC,IAAA,WAAA,GAAA;AACkB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAQ,CAAC;KAkNvD;AA7MC;;AAEG;IACH,IAAI,cAAc,GAAsB,EAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAA,EAAC;;AACnF;;AAEG;AACH,IAAA,IAAI,QAAQ,GAAA,EAA0B,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA,EAAC;AACrE;;AAEG;IACH,IAAI,MAAM,KAAY,OAAO,IAAI,CAAC,IAAI,CAAC,EAAC;AACxC;;AAEG;AACH,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC;KAC9B;AACD;;;;;;AAMG;AACH,IAAA,GAAG,CAAC,KAAiB,EAAA;QACnB,IAAK,KAAK,KAAK,SAAS,EAAG;AACzB,YAAA,MAAM,IAAI,wBAAwB,CAAC,yCAAyC,KAAK,CAAA,CAAA,CAAG,CAAC,CAAC;AACvF,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,QAAA,OAAO,IAAI,CAAC;KACb;AAOD;;;;AAIG;AACH,IAAA,SAAS,CAAc,UAAkC,EAAA;QACvD,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;AAC7B,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACrB,oBAAA,KAAK,EAAE,CAAC;AACT,iBAAA;AACF,aAAA;AACF,SAAA;QACD,OAAO,KAAK,GAAG,CAAC,CAAC;KAClB;AASD;;;;AAIG;AACH,IAAA,WAAW,CAAc,IAA4B,EAAA;AACnD,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACxB,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;;AAIG;AACH,IAAA,MAAM,CAAC,KAAU,EAAA;AACf,QAAA,QAAQ,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE;KAClC;AACD;;;;;AAKG;AACH,IAAA,IAAI,CAAC,IAA2B,EAAA;QAC9B,IAAI,UAAU,GAAG,SAAS,CAAC;AAC3B,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE;gBACd,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM;AACP,aAAA;AACF,SAAA;AACD,QAAA,OAAO,UAAU,CAAC;KACnB;AACD;;;;AAIG;AACH,IAAA,OAAO,CAAC,MAA4B,EAAA;QAClC,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,wBAAwB,CAAC,8BAA8B,CAAC,CAAC;AACpE,SAAA;AACD,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;YACrB,MAAM,CAAC,IAAI,CAAC,CAAC;AACd,SAAA;KACF;AACD;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;KACvB;AAOD;;;;AAIG;AACH,IAAA,SAAS,CAAC,UAAkC,EAAA;QAC1C,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;AAC7B,gBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACrB,oBAAA,MAAM,EAAE,CAAC;AACV,iBAAA;AACF,aAAA;AACF,SAAA;QACD,OAAO,MAAM,GAAG,CAAC,CAAC;KACnB;AACD;;;;AAIG;AACH,IAAA,SAAS,CAAC,UAAkC,EAAA;QAC1C,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC7B,gBAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,oBAAA,IAAI,UAAU,CAAC,OAAO,CAAC,IAAK,CAAC,IAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACrD,wBAAA,KAAK,EAAE,CAAC;AACT,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,oBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACnD,wBAAA,KAAK,EAAE,CAAC;AACT,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;QACD,OAAO,KAAK,GAAG,CAAC,CAAC;KAClB;AACD;;;;AAIG;AACH,IAAA,QAAQ,CAAC,CAAwB,EAAA;QAC/B,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACvB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AAChC,gBAAA,MAAM,EAAE,CAAC;AACV,aAAA;AACF,SAAA;QACD,OAAO,MAAM,GAAG,CAAC,CAAC;KACnB;AACD;;;AAGG;IACH,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;KACnB;AAKA;;AAEE;IACH,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;KACvB;AACD;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;KAClC;AAEF;;ACrND;;AAEG;AACG,MAAgB,YAAgB,SAAQ,kBAAqB,CAAA;AAAnE,IAAA,WAAA,GAAA;;QACY,IAAS,CAAA,SAAA,GAAW,CAAC,CAAC;KAiIjC;;IA9HC,IAAI,QAAQ,KAAa,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;AACjD;;;;AAIG;AACH,IAAA,KAAK,CAAC,UAAwE,EAAA;AAC5E,QAAA,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;AACjB,YAAA,IAAI,CAAC,GAAW,CAAC,CAAC,CAAC;AACnB,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;gBACvB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE;AAChC,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;;AAIG;AACH,IAAA,MAAM,CAAC,SAAgC,EAAA;QACrC,IAAI,GAAG,GAAiB,EAAE,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;AACjB,YAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,gBAAA,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACnB,oBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AAYD;;AAEG;AACH,IAAA,SAAS,GAA6B,EAAA,OAAO,IAAI,CAAA,EAAE;AACnD;;;AAGG;IACH,cAAc,GAAA,EAAuB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AAuCrD;;;;AAIG;AACH,IAAA,IAAI,CAAC,UAAwE,EAAA;AAC3E,QAAA,IAAI,CAAC,GAAW,CAAC,CAAC,CAAC;AACnB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;YACvB,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE;AAC/B,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;AAGG;AACH,IAAA,IAAI,CAAC,OAA6B,EAAA;AAChC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAC3B,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;AACxB,QAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,SAAA;KACF;AASF;;ACnGD;;AAEG;MACmB,WAAW,CAAA;;AAY/B,IAAA,MAAM,CAAC,GAAM,EAAA,EAAa,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,EAAE;;IAUpE,OAAO,GAAA,EAAc,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,CAAA,EAAC;;AAqB5C;;ACnFD;;AAEG;AACG,MAAgB,aAAiB,SAAQ,kBAAqB,CAAA;AAQnE;;ACKD;;AAEG;AACG,MAAgB,WAAe,SAAQ,kBAAqB,CAAA;AAiBjE;;ACtCK,MAAO,6BAA8B,SAAQ,gBAAgB,CAAA;AAElE;;ACFK,MAAO,yBAA0B,SAAQ,gBAAgB,CAAA;AAE9D;;ACFK,MAAO,+BAAgC,SAAQ,gBAAgB,CAAA;AAEpE;;;ACED;;AAEG;AACG,MAAO,QAAY,SAAQ,YAAe,CAAA;AAY9C,IAAA,WAAA,CAAY,MAAuB,EAAE,SAAiB,EAAE,OAAe,EAAA;AACrE,QAAA,KAAK,EAAE,CAAC;QAVF,IAAK,CAAA,KAAA,GAA6B,IAAI,CAAC;QACvC,IAAK,CAAA,KAAA,GAA6B,IAAI,CAAC;QAIvC,IAAe,CAAA,eAAA,GAAW,CAAC,CAAC;QAC5B,IAAa,CAAA,aAAA,GAAW,CAAC,CAAC;QAC1B,IAAK,CAAA,KAAA,GAAW,CAAC,CAAC;QAoE1B,IAAoB,CAAAA,IAAA,CAAA,GAAG,UAAU,CAAC;QAhEhC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAC7C,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;AACzC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAErB,QAAA,IAAI,KAAuB,CAAC;QAC5B,IAAI,CAAC,GAA2B,MAAM,CAAC;AACvC,QAAA,OAAO,CAAC,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAChB,YAAA,KAAK,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;AACnB,SAAA;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC;QAElE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,cAAc,EAAE;YACzG,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;AAErD,YAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;AAC5B,gBAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACf,gBAAA,IAAI,IAAI,GAA2B,IAAI,CAAC,KAAK,CAAC;AAC9C,gBAAA,OAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;oBACxB,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,oBAAA,IAAI,GAAG,IAAK,CAAC,IAAI,CAAC;AACnB,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AACD;;AAEG;IACH,IAAI,IAAI,KAAY,OAAO,IAAI,CAAC,KAAK,CAAA,EAAC;AACtC;;AAEG;IACK,cAAc,GAAA;QACpB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC/C,MAAM,IAAI,+BAA+B,EAAE,CAAC;AAC7C,SAAA;KACF;AAED,IAAA,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAA;AAChB,QAAA,IAAI,QAAQ,CAAC;AACb,QAAA,IAAI,MAAM,CAAC;AACX,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AACtB,QAAA,OAAO,IAAI,EAAE;AACX,YAAA,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;YAE9B,MAAM,IAAI,CAAC,KAAK,CAAC;AAEjB,YAAA,IAAI,MAAM;gBACR,MAAM;;gBAEN,IAAI,GAAG,QAAQ,CAAC;AACnB,SAAA;KACF;IAID,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,QAAQ,CAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;KAClF;AACD;;AAEG;AACH,IAAA,OAAO,CAAC,KAAa,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC;KAC1D;AACD;;AAEG;IACH,cAAc,GAAA;QACZ,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;KACrD;AACD;;AAEG;IACH,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AACD;;;AAGG;IACH,KAAK,GAAA;QACH,IAAI,CAAC,cAAc,EAAE,CAAC;AAEtB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE;AACrE,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC;YAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAC/B,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC5C,SAAA;KACF;AACD;;;AAGG;AACH,IAAA,GAAG,CAAC,KAAa,EAAA;QACf,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC;KACtD;AACD;;;AAGG;IACH,OAAO,CAAC,KAAiB,EAAE,SAA8B,EAAA;QACvD,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC;KAC5E;AACD;;;AAGG;IACH,MAAM,CAAC,KAAa,EAAE,KAAiB,EAAA;QACrC,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK,EAAE,KAAK,CAAC,EAAE;YAC3D,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACvD,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,oBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzB,iBAAA;AACF,aAAA;iBAAM,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;AAC9D,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;AACzD,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,oBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACzB,iBAAA;AACF,aAAA;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAE3C,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;AAGG;IACH,WAAW,CAAC,KAAiB,EAAE,SAA8B,EAAA;QAC3D,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC;KAChF;AACD;;AAEG;IACH,WAAW,CAAC,SAAiB,EAAE,OAA4B,EAAA;QACzD,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,GAAC,SAAS,EAAE,IAAI,CAAC,aAAa,IAAE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC;KAC5G;AACD;;;AAGG;IACH,GAAG,CAAC,KAAa,EAAE,KAAiB,EAAA;QAClC,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;KAC7D;AACD;;;AAGG;IACH,OAAO,CAAC,SAAiB,EAAE,OAAe,EAAA;QACxC,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;KAC/C;AACD;;;AAGG;AACH,IAAA,MAAM,CAAC,KAAiB,EAAA;QACtB,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,KAAK;AAAG,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;AACtB,QAAA,OAAO,IAAI,EAAE;AACX,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;AACxB,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACD,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK;gBACpB,MAAM;;AAEN,gBAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACpB,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;AAEG;IACH,OAAO,GAAA;QACL,MAAM,IAAI,GAAsB,EAAE,CAAC;AAEnC,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;AAC7B,QAAA,OAAO,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC7B,YAAA,IAAI,WAAW,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM;AACrC,YAAA,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC;AAChC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;AAGG;AACH,IAAA,MAAM,CAAC,KAAiB,EAAA;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAG,SAAS,EAAE;AAC3C,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;AAGG;AACH,IAAA,QAAQ,CAAC,KAAa,EAAA;QACpB,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,GAAC,KAAK,CAAC,CAAC;AAC7D,QAAA,IAAI,IAAI,GAAyB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,GAAC,KAAK,CAAC,CAAC;AAClF,QAAA,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,KAAK,IAAE,IAAI,CAAC,KAAK,IAAI,IAAI,IAAE,IAAI,CAAC,KAAK,EAAE;gBAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAChC,aAAA;iBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;gBAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9B,aAAA;iBAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;gBAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAC9B,aAAA;YACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;AAE3C,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AAEF,CAAA;AA9LEA,IAAA,GAAA,MAAM,CAAC,WAAW;;ACrFf,MAAO,oBAAqB,SAAQ,gBAAgB,CAAA;AAEzD;;ACDD,MAAM,OAAO,GAAG,oEAAoE,CAAC;AAErF,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAE5B;;AAEG;MACU,OAAO,CAAA;AAClB;;;;AAIG;IACH,OAAO,OAAO,CAAC,GAAe,EAAA;AAC5B,QAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC;KAC9C;AACD;;;;;AAKG;AACH,IAAA,OAAO,OAAO,CAAC,GAAe,EAAE,GAAW,EAAA;AACzC,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAI,CAAC;KAC1C;;AAED;;;;;;;;AAQG;AACH,IAAA,OAAO,IAAI,CAAC,GAAe,EAAE,MAAkB,EAAA;AAC7C,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAAE,YAAA,OAAO,KAAK,CAAC;AAAE,SAAA;AAC9C,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAAE,YAAA,OAAO,KAAK,CAAC;AAAE,SAAA;;QAEjD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;;AAEzC,QAAA,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;;AAEvD,QAAA,OAAO,MAAM,CAAC,GAAG,GAAG,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACnD;AACD;;;;;;;AAOG;AACH,IAAA,OAAO,IAAI,CAAC,GAAe,EAAE,GAAW,EAAA;AACtC,QAAA,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,EAAE;YACxD,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;;AAMG;AACH,IAAA,OAAO,KAAK,CAAC,GAAe,EAAE,GAAW,EAAA;AACvC,QAAA,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,EAAE;YACxD,OAAO,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AACxC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;;;;AAQG;AACH,IAAA,OAAO,OAAO,CAAC,GAAe,EAAE,KAAyB,EAAA;AACvD,QAAA,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;KAC/D;AACD;;;;;;;;AAQG;AACH,IAAA,OAAO,SAAS,CAAC,GAAe,EAAE,KAAyB,EAAA;QACzD,IAAI,EAAE,QAAQ,GAAG,CAAC,KAAK,QAAQ,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;AAE9C,QAAA,IAAI,CAAC,KAAK;AACR,YAAA,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;QAEvB,IAAI,KAAK,GAAG,CAAC,EACX,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;AAEnB,QAAA,OAAO,GAAG,GAAG,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,YAAA,EAAE,GAAG,CAAC;QAER,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;KAC7D;AACD;;;;;;;;AAQG;AACH,IAAA,OAAO,QAAQ,CAAC,GAAe,EAAE,KAAyB,EAAA;QACxD,IAAI,EAAE,QAAQ,GAAG,CAAC,KAAK,QAAQ,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;AAE9C,QAAA,IAAI,CAAC,KAAK;AACR,YAAA,OAAO,GAAG,CAAC,SAAS,EAAE,CAAC;QAEzB,IAAI,KAAK,GAAG,CAAC,EACX,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;AAEnB,QAAA,OAAO,KAAK,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AAClD,YAAA,EAAE,KAAK,CAAC;QAEV,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;KACtD;AACD;;;;;AAKG;AACH,IAAA,OAAO,QAAQ,CAAC,GAAe,EAAE,SAAqB,EAAA;QACpD,IAAI,EAAE,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ,CAAC;AAAE,YAAA,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/F,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,GAAG,IAAI,CAAC,EAAE;YACZ,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAC9B,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAC9C,SAAA;AAAM,aAAA;YACL,KAAK,GAAG,GAAG,CAAC;AACb,SAAA;AACD,QAAA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACtB;AACD;;;;;AAKG;AACH,IAAA,OAAO,YAAY,CAAC,GAAe,EAAE,SAAqB,EAAA;QACxD,IAAI,EAAE,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ,CAAC;AAAE,YAAA,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/F,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,SAAmB,CAAC,CAAC;QACjD,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,GAAG,IAAI,CAAC,EAAE;YACZ,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9B,SAAA;AAAM,aAAA;YACL,KAAK,GAAG,GAAG,CAAC;AACb,SAAA;AACD,QAAA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACtB;AACD;;;;;;AAMG;AACH,IAAA,OAAO,SAAS,CAAC,GAAe,EAAE,YAA+B,SAAS,EAAA;QACxE,IAAI,MAAM,GAAa,EAAE,CAAC;QAC1B,IAAI,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,IAAI,GAAG,KAAK,EAAE;AAAE,YAAA,OAAO,MAAM,CAAC;AAC5D,QAAA,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAE7B,IAAI,KAAK,GAAG,KAAK,CAAC;AAClB,QAAA,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;YACtB,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChC,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;AACnC,oBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjB,iBAAA;gBACD,KAAK,GAAG,IAAI,CAAC;AACd,aAAA;AAAM,iBAAA;gBACL,KAAK,GAAG,KAAK,CAAC;AACd,gBAAA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;AACtB,oBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjB,iBAAA;gBACD,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AACnC,aAAA;AACF,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AACD;;;;;;;;;;;AAWG;AACH,IAAA,OAAO,WAAW,CAAC,MAAkB,EAAE,OAAmB,EAAE,SAAqB,EAAA;QAC/E,IAAI,EAAE,QAAO,MAAM,CAAC,IAAI,QAAQ,IAAI,QAAO,OAAO,CAAC,IAAI,QAAQ,IAAI,QAAO,SAAS,CAAC,IAAI,QAAQ,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QAE/G,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;AACnD,QAAA,IAAI,MAAM,GAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC;AAExC,QAAA,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;AAChC,QAAA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;AACzB,QAAA,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC;QAC3B,OAAO,CAAC,IAAI,EAAE;YACZ,QAAQ,GAAG,MAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,QAAQ,IAAI,CAAC,EAAE;gBACjB,MAAM,GAAG,MAAM,CAAC;gBAChB,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAO,CAAC,MAAM,IAAI,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;;;AAIxF,gBAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC9B,oBAAA,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;oBAC5B,IAAI,MAAM,GAAG,CAAC,EAAE;AACX,wBAAA,IAAI,MAAO,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAC,OAAO,CAAC,IAAI,SAAS,EAAE;;4BAE1D,SAAS;AACV,yBAAA;AACF,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,SAAS,GAAG,OAAO,CAAC,SAAS,CAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;AACnE,oBAAA,IAAI,SAAS,EAAE;wBACb,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,SAAS,EAAE;4BAClD,SAAS;AACV,yBAAA;AACF,qBAAA;AACF,iBAAA;AAED,gBAAA,IAAK,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,EAAG;oBAC7B,UAAU,GAAG,MAAO,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;oBAC3C,IAAI,UAAU,IAAI,CAAC,EAAE;wBACnB,MAAM,GAAG,MAAO,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC3C,qBAAA;AAAM,yBAAA;AACL,wBAAA,MAAM,GAAG,MAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/B,qBAAA;oBACD,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBACvC,IAAI,GAAG,IAAI,CAAC;AACb,iBAAA;AAEF,aAAA;AAAM,iBAAA;gBACL,IAAI,GAAG,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AACD;;;;;AAKG;AACH,IAAA,OAAO,MAAM,CAAC,MAAkB,EAAE,MAAkB,EAAA;AAClD,QAAA,IAAI,EAAE,QAAQ,MAAM,CAAC,IAAI,QAAQ,IAAI,QAAQ,MAAM,CAAC,IAAI,QAAQ,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QAC/E,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;KACxC;AACD;;;;AAIG;IACH,OAAO,OAAO,CAAC,GAAe,EAAA;QAC5B,IAAI,GAAG,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAC7B,QAAA,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACzC;AACD;;;;;;;AAOG;IACH,OAAO,UAAU,CAAC,GAAe,EAAE,MAAkB,EAAE,MAAkB,EAAE,UAAA,GAAsB,KAAK,EAAA;QACpG,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;QACjE,IAAI,MAAM,KAAK,MAAM;AAAE,YAAA,OAAO,GAAG,CAAC;QAClC,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,UAAU,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;KAChC;AACD;;;;AAIG;IACH,OAAO,OAAO,CAAC,GAAe,EAAA;AAC5B,QAAA,IAAI,GAAG,EAAE;YACP,IAAI,EAAE,EAAE,EAAE,CAAC;YACX,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1B,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE;AAC1C,gBAAA,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzC,aAAA;YACD,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1B,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE;AAC9C,gBAAA,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACzC,aAAA;AACF,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;;AAED;;;;;;;;;;;AAWG;AACH,IAAA,OAAO,aAAa,CAAC,OAA6B,EAAE,GAAG,IAAW,EAAA;AAChE,QAAA,OAAO,CAAC,GAAG,MAAa,KAAY;AAClC,YAAA,IAAI,KAAK,CAAC;YACV,IAAI,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAA,IAAI,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YACrD,IAAI,IAAI,GAAG,CAAC,EAAE;gBACZ,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;oBACtB,KAAK,GAAG,SAAS,CAAC;AAClB,oBAAA,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;AACzB,wBAAA,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,EAAE;AAC1B,4BAAA,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,yBAAA;AACF,qBAAA;yBAAM,IAAI,OAAO,GAAG,IAAI,QAAQ,IAAI,OAAO,IAAI,IAAI,QAAQ,EAAE;AAC5D,wBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,qBAAA;AACD,oBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrC,iBAAC,CAAC,CAAC;AACJ,aAAA;AAAM,iBAAA;gBACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;oBAC7B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzB,SAAC,CAAA;KACF;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCE;AACF,IAAA,OAAO,MAAM,CAAC,QAAoB,EAAE,GAAG,IAAW,EAAA;QAChD,IAAI,MAAM,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC;QACnD,IAAI,KAAa,EAAE,YAAoB,EAAE,UAAkB,EAAE,UAAkB,EAAE,MAAc,CAAC;AAChG,QAAA,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;QACrD,IAAI,SAAS,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;QAEtD,IAAI,QAAQ,IAAI,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAElC,QAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;;AAGpB,QAAA,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,MAAM,IAAI,CAAC,EAAE;YAEf,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,YAAA,IAAI,MAAM;gBAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAE,CAAC;YACjE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,YAAA,IAAI,MAAM;gBAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAE,CAAC;YAEjE,OAAO,MAAM,IAAI,CAAC,EAAE;gBAClB,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACxC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC3C,IAAI,MAAM,GAAG,CAAC,EAAE;AACd,oBAAA,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBACrC,QAAQ,GAAG,EAAE,CAAC;oBACd,MAAM;AACP,iBAAA;gBACD,SAAS,GAAG,KAAK,CAAC;AAClB,gBAAA,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtD,IAAI,KAAK,IAAI,EAAE,EAAE;AACf,oBAAA,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC5B,IAAI,MAAM,IAAI,CAAC,EAAE;wBACf,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACxC,wBAAA,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACnD,qBAAA;AAAM,yBAAA;wBACL,UAAU,GAAG,KAAK,CAAC;wBACnB,YAAY,GAAG,EAAE,CAAC;AACnB,qBAAA;AACD,oBAAA,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACnC,IAAI,QAAQ,GAAG,CAAC,EAAE;wBAChB,UAAU,GAAG,EAAE,CAAC;AACjB,qBAAA;AAAM,yBAAA;AACL,wBAAA,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBACvD,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAChD,qBAAA;AACD,oBAAA,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACpC,oBAAA,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;wBAC3B,QAAQ,GAAG,IAAI,CAAC;AAChB,wBAAA,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,KAAK,EAAE;AAC/B,4BAAA,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,yBAAA;AACD,wBAAA,MAAM,IAAI,QAAQ,IAAI,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;;;AAGpD,wBAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;wBACxC,IAAI,SAAS,GAAG,CAAC,EAAE;4BACjB,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAClD,yBAAA;6BAAM,IAAI,SAAS,GAAG,CAAC,EAAE;4BACxB,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;AAC/C,yBAAA;AAAM,6BAAA;4BACL,MAAM,IAAI,MAAM,CAAC;AAClB,yBAAA;wBACD,SAAS,GAAG,IAAI,CAAC;AAClB,qBAAA;AACF,iBAAA;gBAED,IAAI,CAAC,SAAS,EAAE;oBACd,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AAClD,iBAAA;gBAED,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1C,gBAAA,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAChC,aAAA;YAED,MAAM,IAAI,QAAQ,CAAC;AAEnB,YAAA,IAAI,MAAM;AAAE,gBAAA,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAE,CAAC;AAC5D,YAAA,IAAI,MAAM;AAAE,gBAAA,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAE,CAAC;AAE7D,SAAA;AAAM,aAAA;YACL,MAAM,GAAG,QAAQ,CAAC;AACnB,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AACD;;;;;;;AAOG;AACF,IAAA,OAAO,eAAe,CAAC,IAAgB,EAAE,IAAgB,EAAA;QACxD,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,SAAS,EAAE,SAAS,CAAC;QACzB,IAAI,OAAO,EAAE,OAAO,CAAC;AAErB,QAAA,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAEtB,IAAI,OAAO,KAAK,OAAO,EAAE;YACvB,OAAO,OAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,OAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;;;AAGjD,gBAAA,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACtD,gBAAA,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAEtD,gBAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAU,CAAC,CAAC;AACxC,gBAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAU,CAAC,CAAC;gBAExC,IAAI,SAAS,GAAG,SAAS,EAAE;oBACzB,EAAE,GAAG,CAAC,CAAC;oBACP,MAAM;AACP,iBAAA;qBAAM,IAAI,SAAS,GAAG,SAAS,EAAE;oBAChC,EAAE,GAAG,CAAC,CAAC,CAAC;oBACR,MAAK;AACN,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;KACX;AAEF;;AC/gBD;AAOA,MAAM,SAAS,GAAG,gBAAgB,CAAC;AACnC,MAAM,QAAQ,GAAG,kBAAkB,CAAC;AACpC,MAAM,QAAQ,GAAG,eAAe,CAAC;AACjC,MAAM,QAAQ,GAAG,mBAAmB,CAAC;AACrC,MAAM,QAAQ,GAAG,eAAe,CAAC;AACjC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AACrC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AACrC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AACrC,MAAM,UAAU,GAAG,iBAAiB,CAAC;AACrC,MAAM,OAAO,GAAG,cAAc,CAAC;AAC/B,MAAM,OAAO,GAAG,cAAc,CAAC;AAC/B,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAE3C,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAE3C,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC9C;;AAEG;MACU,OAAO,CAAA;AAElB;;;;;AAKG;IACH,OAAO,QAAQ,CAAC,KAAU,EAAA;AACxB,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAChC;AACD;;;;AAIG;AACH,IAAA,OAAO,QAAQ,CAAC,GAAG,MAAa,EAAA;AAC9B,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;AAC3B,YAAA,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE,IAAI,CAAC,EAAE;AACtB,oBAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AAClB,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;AAKG;AACH,IAAA,OAAO,MAAM,CAAC,EAAO,EAAE,EAAO,EAAA;QAC5B,IAAI,EAAE,KAAK,IAAI;AACb,YAAA,OAAO,EAAE,CAAC;AACZ,QAAA,OAAO,EAAE,CAAC;KACX;AAED,IAAA,OAAO,WAAW,CAAC,EAAO,EAAE,EAAO,EAAA;AACjC,QAAA,OAAO,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,CAAC;KACrC;AAED,IAAA,OAAO,OAAO,CAAC,EAAO,EAAE,EAAO,EAAA;AAC7B,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;AACvB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAED,IAAA,OAAO,UAAU,CAAC,EAAO,EAAE,EAAO,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;AACvB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAED,IAAA,OAAO,MAAM,CAAC,EAAO,EAAE,EAAO,EAAA;QAC5B,IAAI,EAAE,KAAK,EAAE;AACX,YAAA,OAAO,IAAI,CAAC;AACd,QAAA,OAAO,EAAE,CAAC;KACX;IAED,OAAO,OAAO,CAAC,KAAU,EAAA;QACvB,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;KAC7C;IAED,OAAO,SAAS,CAAC,KAAU,EAAA;QACzB,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC;KAC5C;IAED,OAAO,WAAW,CAAC,KAAU,EAAA;AAC3B,QAAA,OAAO,OAAO,IAAI,KAAK,KAAK,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;KAChE;IAED,OAAO,MAAM,CAAC,KAAU,EAAA;AACtB,QAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,KAAK,KAAK,YAAY,IAAI,CAAC,CAAC;KACvE;IAED,OAAO,UAAU,CAAC,KAAU,EAAA;AAC1B,QAAA,OAAO,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAC;KACjC;IAED,OAAO,KAAK,CAAC,KAAU,EAAA;QACrB,OAAO,KAAK,YAAY,GAAG,CAAC;KAC7B;IAED,OAAO,MAAM,CAAC,KAAU,EAAA;AACtB,QAAA,QAAQ,KAAK,KAAK,IAAI,EAAE;KACzB;IAED,OAAO,QAAQ,CAAC,KAAU,EAAA;QACxB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;KACrD;IAED,OAAO,KAAK,CAAC,KAAU,EAAA;QACrB,OAAO,KAAK,YAAY,GAAG,CAAC;KAC7B;IAED,OAAO,QAAQ,CAAC,KAAU,EAAA;QACxB,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC;KAC/C;IAED,OAAO,WAAW,CAAC,KAAU,EAAA;AAC3B,QAAA,QAAQ,KAAK,KAAK,SAAS,EAAE;KAC9B;AAED;;;;;AAKG;IACH,OAAO,OAAO,CAAC,KAAU,EAAA;AACvB,QAAA,IAAI,KAAK,EAAE;YACT,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrC,YAAA,QAAQ,IAAI;gBACV,KAAK,UAAU,EAAE,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C,gBAAA,KAAK,UAAU,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;gBACvD,KAAK,SAAS,EAAE,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;gBACzC,KAAK,OAAO,EAAE,OAAQ,KAAsB,CAAC,IAAI,IAAI,CAAC,CAAC;gBACvD,KAAK,OAAO,EAAE,OAAQ,KAAkB,CAAC,IAAI,IAAI,CAAC,CAAC;AACpD,aAAA;AACD,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;;;;;;;;AAYG;IACH,OAAO,UAAU,CAAC,KAAU,EAAA;QAC1B,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC;KAC5C;IAED,OAAO,cAAc,CAAC,KAAU,EAAA;QAC9B,QAAQ,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,UAAU,EAAE;KACjD;AACD;;;;;;;;;;;;;AAaG;IACH,OAAO,QAAQ,CAAC,KAAU,EAAA;AACxB,QAAA,OAAO,CAAC,KAAK,YAAY,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAC3D;IAED,OAAO,aAAa,CAAC,KAAU,EAAA;AAC7B,QAAA,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC;KAC7E;IAED,OAAO,WAAW,CAAC,GAAQ,EAAA;QACzB,QAAQ,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE;KAC9B;AACD;;;;;;;;;AASG;AACH,IAAA,OAAO,IAAI,CAAI,GAAQ,EAAE,QAAkB,EAAA;AACzC,QAAA,IAAK,EAAE,GAAG,YAAY,QAAQ,CAAC,EAAG;AAChC,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;;;;;;;;;AAYG;AACH,IAAA,OAAO,cAAc,CAAI,QAAkB,EAAE,GAAG,IAAW,EAAA;AACzD,QAAA,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;KAC3B;AACD;;;;;;AAMG;IACH,OAAO,QAAQ,CAAC,KAAa,EAAA;QAC3B,OAAO,KAAK,CAAC,WAAW,CAAC;KAC1B;AACD;;;;;;AAMG;IACH,OAAO,YAAY,CAAC,KAAU,EAAA;AAC5B,QAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,aAAa,CAAE,CAAC,CAAC,CAAC,CAAC;KACzD;AACD;;;;;;AAMG;AACH,IAAA,OAAO,YAAY,CAAC,KAAa,EAAE,IAA6B,EAAA;AAC9D,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC3B,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,gBAAA,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACnB,IAAI,IAAI,IAAI,EAAE;AAAE,oBAAA,OAAO,KAAK,CAAC;AAC7B,gBAAA,IAAI,KAAK,YAAY,QAAQ,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC;AAAE,oBAAA,OAAO,IAAI,CAAC;gBAEvG,IAAI,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACtC,gBAAA,OAAO,EAAE,EAAE;AACT,oBAAA,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE;AACpB,wBAAA,OAAO,IAAI,CAAC;AACb,qBAAA;AACD,oBAAA,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AAChC,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,QAAQ,KAAK,YAAY,IAAI,KAAK,KAAK,YAAY,QAAQ,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;AACrI,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;;;;;AAOG;AACH,IAAA,OAAO,cAAc,CAAC,GAAQ,EAAE,OAAmC,EAAA;QACjE,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,YAAA,MAAM,IAAI,oBAAoB,CAAC,OAAO,OAAO,IAAI,UAAU,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAA;AACnF,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;IAEO,OAAO,oBAAoB,CAAC,GAAW,EAAA;AAC7C,QAAA,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KAChE;AAED;;;;;;;;;;;;;AAaG;AACH,IAAA,OAAO,QAAQ,CAAC,MAAW,EAAE,IAAY,EAAE,QAAc,EAAA;AACvD,QAAA,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;AACzD,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;QAC9B,IAAI,GAAG,GAAG,MAAM,CAAC;AACjB,QAAA,IAAI,GAAW,CAAC;AAChB,QAAA,IAAI,CAAC,GAAW,CAAC,CAAC,CAAC;AACnB,QAAA,OAAO,EAAE,CAAC,GAAG,QAAQ,EAAE;YACrB,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,GAAG,IAAI,GAAG,EAAE;AACd,gBAAA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;AACd,gBAAA,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBAChD,GAAG,GAAG,SAAS,CAAC;oBAChB,MAAM;AACP,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACL,GAAG,GAAG,SAAS,CAAC;gBAChB,MAAM;AACP,aAAA;AACF,SAAA;QACD,OAAO,GAAG,IAAI,QAAQ,CAAC;KACxB;AACD;;;;;;AAMG;AACH,IAAA,OAAO,QAAQ,CAAC,MAAW,EAAE,IAAY,EAAA;AACvC,QAAA,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;AACzD,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;QAC9B,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,GAAG,GAAG,MAAM,CAAC;AACjB,QAAA,IAAI,GAAW,CAAC;AAChB,QAAA,IAAI,CAAC,GAAW,CAAC,CAAC,CAAC;AACnB,QAAA,OAAO,EAAE,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE;YAC9B,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACtB,YAAA,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;AACrB,YAAA,IAAI,KAAK,EAAE;AACT,gBAAA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AACf,gBAAA,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBAChD,KAAK,GAAG,KAAK,CAAC;AACf,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;;;;;;AAQG;IACH,OAAO,QAAQ,CAAC,MAAW,EAAE,IAAY,EAAE,QAAa,EAAE,KAAA,GAAiB,KAAK,EAAA;AAC9E,QAAA,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;YACzD,OAAO,CAAC,CAAC,CAAC;AACX,SAAA;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;QAC9B,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,GAAG,GAAG,MAAM,CAAC;AACjB,QAAA,IAAI,GAAW,CAAC;AAChB,QAAA,IAAI,CAAC,GAAW,CAAC,CAAC,CAAC;AACnB,QAAA,OAAO,EAAE,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE;YAC9B,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACtB,YAAA,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;AACrB,YAAA,IAAI,KAAK,EAAE;AACT,gBAAA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AACf,gBAAA,IAAI,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,EAAE;AACvB,oBAAA,IAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAG;AAC5B,wBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;AACpB,wBAAA,OAAO,CAAC,CAAC;AACV,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC/B,iBAAA;AACF,aAAA;AAAM,iBAAA,IAAI,KAAK,EAAE;AAChB,gBAAA,IAAI,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,EAAE;AACvB,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;AACrB,iBAAA;AAAM,qBAAA;AACL,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACf,iBAAA;AACD,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;AACF,SAAA;QACD,OAAO,CAAC,CAAC,CAAC;KACX;AACD;;;;;;;;;;;;;;;AAeI;AACJ,IAAA,OAAO,aAAa,CAAC,IAAY,EAAE,SAAgB,EAAA;AACjD,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACnC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,IAAI,OAAO,CAAC;AACZ,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACjE,gBAAA,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBACvB,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,CAAC,CAAC,OAAO,CAAC;AAClB,aAAA;AACF,SAAA;QACD,OAAO,CAAC,CAAC,OAAO,CAAC;KAClB;AACD;;;;;;;;;;;;;;;AAeE;AACF,IAAA,OAAO,MAAM,CAAC,MAAc,EAAE,EAAY,EAAE,OAAa,EAAA;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AACxB,QAAA,IAAI,CAAC,GAAW,CAAC,CAAC,CAAC;AACnB,QAAA,OAAO,EAAE,CAAC,GAAG,GAAG,EAAE;YAChB,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,EAAG,MAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,KAAK,EAAE;gBACzE,MAAM;AACP,aAAA;AACF,SAAA;KACF;AACD;;;;;;;;;;;;;;;AAeE;AACF,IAAA,OAAO,MAAM,CAAC,IAAS,EAAE,GAAG,MAAW,EAAA;QACrC,IAAI,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACxC,YAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;gBACxB,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAU,EAAE,GAAW,KAAI;AAC9C,oBAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;AACrE,wBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACnB,qBAAA;AACH,iBAAC,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;;;;;;;;;;;;AAgBE;AACF,IAAA,OAAO,UAAU,CAAC,IAAS,EAAE,MAAW,EAAA;QACtC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAU,EAAE,GAAW,KAAI;AACjD,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,YAAA,IAAI,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;AACnE,gBAAA,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACrC,aAAA;AAAM,iBAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE;AAC5E,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACnB,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;;;;;;;;;AAaE;AACF,IAAA,OAAO,SAAS,CAAC,IAAS,EAAE,MAAW,EAAA;AACrC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC5B,YAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACxB,gBAAA,IAAI,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC;oBAAE,SAAS;AAChD,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1B,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,gBAAA,IAAI,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;AACnE,oBAAA,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACpC,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACnB,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;;;;;;;;;;AAcG;AACH,IAAA,OAAO,MAAM,CAAC,CAAM,EAAE,CAAM,EAAA;QAC1B,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACxB;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCG;AACH,IAAA,OAAO,SAAS,CAAC,CAAM,EAAE,CAAM,EAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QACD,IAAI,MAAM,GAAY,IAAI,CAAC;AAC3B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE;AACzB,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAE,CAAC,EAAE,CAAC,EAAE,EAAE;AACpC,gBAAA,IAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAG;;AAEpC,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;AACF,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YACrD,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAU,EAAE,GAAW,KAAI;AAC5C,gBAAA,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1C,gBAAA,OAAO,MAAM,CAAC;AACd;;;;;AAKE;AACJ,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,MAAM,EAAE;gBACV,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAU,EAAE,GAAW,KAAI;AAC5C,oBAAA,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1C,oBAAA,OAAO,MAAM,CAAC;AACd;;;;;AAKE;AACJ,iBAAC,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AACD;;;;;;;;;;;;;;;;;;AAkBE;AACF,IAAA,OAAO,WAAW,CAAC,SAAc,EAAE,SAAc,EAAE,IAA4C,EAAA;AAC7F,QAAA,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;QACpB,MAAM,QAAQ,GAAa,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC;AAC9D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;AACpC,QAAA,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAErD,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,EAAA;YACzD,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAChD,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,EAAA;YACzD,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAChD,SAAC,CAAC,CAAC;;AAGH,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACtB,YAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAChC,YAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAChC,YAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;gBAChC,OAAO;AACR,aAAA;YACD,IAAI,QAAQ,KAAK,SAAS,EAAE;AACzB,gBAAA,IAAI,CAAC,KAAa,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;AACrC,aAAA;AAAM,iBAAA;AACJ,gBAAA,IAAI,CAAC,OAAe,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;AACvC,aAAA;AACH,SAAC,CAAC,CAAC;;AAGH,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACtB,YAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAChC,YAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAChC,YAAA,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE;AACnD,gBAAA,IAAI,CAAC,OAAe,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;AACxC,aAAA;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;;;;;;;;;;;AAeG;AACH,IAAA,OAAO,YAAY,CAAC,SAAc,EAAE,SAAc,EAAE,IAAS,EAAA;AAC3D,QAAA,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;AACpB,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7D,MAAM,SAAS,GACb,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;YAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;YAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QACnC,OAAO,SAAS,GAAG,CAAC,CAAC;KACtB;AACD;;;;;;;;AAQG;IACH,OAAO,SAAS,CAAC,MAAW,EAAA;AAC1B,QAAA,OAAO,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KAC9B;AAEF,CAAA;AAED;;;AAGG;AACH,MAAM,SAAS,CAAA;IAEL,OAAO,cAAc,CAAC,MAAW,EAAA;AACvC,QAAA,QAAQ,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC;AACjC,YAAA,KAAK,SAAS,CAAC;AACf,YAAA,KAAK,QAAQ,CAAC;AACd,YAAA,KAAK,QAAQ,CAAC;AACd,YAAA,KAAK,OAAO,CAAC;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC;AACrC,gBAAA,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;AAC/B,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACpC,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACvC,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,MAAM,CAAC;AAChB,YAAA;AACE,gBAAA,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;AAC/B,oBAAA,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;AACvB,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACf,SAAA;KACF;IAEO,OAAO,SAAS,CAAC,KAAU,EAAA;QACjC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;KACxB;IAEO,OAAO,WAAW,CAAC,MAAc,EAAA;AACvC,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KACtD;IAEO,OAAO,QAAQ,CAAC,MAAW,EAAA;QACjC,MAAM,OAAO,GAAG,MAAM,CAAC;AACvB,QAAA,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3E,QAAA,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AACpC,QAAA,OAAO,MAAM,CAAC;KACf;AAEO,IAAA,OAAO,OAAO,CAAC,KAAY,EAAE,QAAkB,EAAA;AACrD,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAC5B,QAAA,OAAO,EAAE,KAAK,GAAG,MAAM,EAAE;YACvB,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/B,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;;IAGM,OAAO,GAAG,CAAC,MAAW,EAAE,GAAG,GAAG,IAAI,OAAO,EAAE,EAAA;;QAGhD,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,IAAI,EAAE;AAC/C,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;QAED,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,WAAW,GAAQ,IAAI,CAAC;AAE5B,QAAA,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACnB,YAAA,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACxB,SAAA;AACD,QAAA,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAE7B,QAAA,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,IAAI,QAAQ,EAAE;AACzE,YAAA,OAAO,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;AACxC,SAAA;AAAM,aAAA,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;AACtC,YAAA,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;AACvB,SAAA;;QAGD,IAAI,IAAI,IAAI,KAAK,EAAE;AACjB,YAAA,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;AACvB,YAAA,MAAmB,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACrC,gBAAA,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7C,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,WAAW,CAAC;AACpB,SAAA;;QAGD,IAAI,IAAI,IAAI,KAAK,EAAE;AACjB,YAAA,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;YACvB,MAAwB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI;AAC/C,gBAAA,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AAClD,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,WAAW,CAAC;AACpB,SAAA;;QAGD,IAAI,IAAI,IAAI,OAAO,EAAE;AACnB,YAAA,WAAW,GAAG,IAAI,KAAK,EAAE,CAAC;YAC1B,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,KAAU,EAAE,KAAa,KAAI;AACtD,gBAAA,WAAW,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACjD,aAAC,CAAC,CAAA;AACH,SAAA;;QAGD,IAAI,IAAI,IAAI,QAAQ,EAAE;AACpB,YAAA,WAAW,GAAG,IAAI,MAAM,EAAE,CAAC;AAC3B,YAAA,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAQ,EAAE,KAAa,KAAI;AACjE,gBAAA,WAAW,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACrD,aAAC,CAAC,CAAA;AACH,SAAA;AAED,QAAA,OAAO,WAAW,CAAC;KACpB;AAEF;;;ACz0BD;;;AAGG;AACG,MAAO,SAAa,SAAQ,YAAe,CAAA;AAI/C;;;;;AAKG;AACH,IAAA,WAAA,CAAY,oBAAoD,EAAA;AAC9D,QAAA,KAAK,EAAE,CAAC;QAVO,IAAM,CAAA,MAAA,GAAiB,EAAE,CAAC;QACnC,IAAK,CAAA,KAAA,GAAW,CAAC,CAAC;QAkCjB,IAAoB,CAAAA,IAAA,CAAA,GAAG,WAAW,CAAC;AAxB1C,QAAA,oBAAoB,GAAG,oBAAoB,IAAI,EAAE,CAAC;AAClD,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE;YAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAa,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnF,SAAA;AAAM,aAAA;YACL,MAAM,UAAU,GAAG,oBAAoB,CAAC;YACxC,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAa,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/E,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;AACpB,SAAA;KACF;AAEO,IAAA,WAAW,CAAC,KAAa,EAAA;QAC/B,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;;AAEtC,SAAA;;AACC,YAAA,MAAM,IAAI,yBAAyB,CAAC,UAAU,KAAK,CAAA,iBAAA,CAAmB,CAAC,CAAA;KAC1E;AAEQ,IAAA,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAA;AACzB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AAC9B,YAAA,MAAM,IAAI,CAAC;AACZ,SAAA;KACF;IAID,IAAa,IAAI,KAAa,OAAO,IAAI,CAAC,KAAK,CAAA,EAAE;AAExC,IAAA,MAAM,CAAC,KAAiB,EAAA;QAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;AAClC,QAAA,OAAO,IAAI,CAAC;KACb;IAEQ,KAAK,GAAA;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;KAChB;IAED,KAAK,GAAA;QACH,MAAM,KAAK,GAAG,IAAI,SAAS,CAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,OAAO,KAAK,CAAC;KACd;AAEQ,IAAA,QAAQ,CAAC,KAAiB,EAAA;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KACjC;AACD;;AAEG;AACM,IAAA,GAAG,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACxB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC3B;AACD;;AAEG;AACM,IAAA,OAAO,CAAC,KAAa,EAAA;AAC5B,QAAA,MAAM,IAAI,6BAA6B,CAAC,uBAAuB,CAAC,CAAC;KAClE;AAEQ,IAAA,OAAO,CAAC,KAAiB,EAAE,SAAA,GAAoB,CAAC,EAAA;QACvD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;YAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;AAC5B,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;AACF,SAAA;QACD,OAAO,CAAC,CAAC,CAAC;KACX;IAEQ,MAAM,CAAC,KAAa,EAAE,KAAiB,EAAA;AAC9C,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACpC,QAAA,OAAO,IAAI,CAAC;KACb;AAEQ,IAAA,WAAW,CAAC,KAAiB,EAAE,SAAA,GAAoB,CAAC,EAAA;QAC3D,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAClC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;AAC5B,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;AACF,SAAA;QACD,OAAO,CAAC,CAAC,CAAC;KACX;AAEQ,IAAA,MAAM,CAAC,KAAiB,EAAA;AAC/B,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;AACvB,QAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;YACjB,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;gBAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACjC,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEQ,IAAA,QAAQ,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAExB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAEjC,QAAA,OAAO,QAAQ,CAAC;KACjB;IAEQ,WAAW,CAAC,SAAiB,EAAE,OAAgB,EAAA;AACtD,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAC5B,QAAA,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC;AACjC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,SAAS,GAAG,SAAS,EAAE;YACzB,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,YAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAEQ,GAAG,CAAC,KAAa,EAAE,KAAiB,EAAA;AAC3C,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,OAAO,QAAQ,CAAC;KACjB;IAEQ,OAAO,CAAC,SAAiB,EAAE,OAAe,EAAA;QACjD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;KAC/C;AACD;;;AAGG;AACH,IAAA,cAAc,CAAC,WAAmB,EAAA;AAChC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACvC,IAAI,WAAW,GAAG,WAAW,EAAE;AAC7B,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACvD,IAAI,WAAW,GAAG,WAAW;gBAC3B,WAAW,GAAG,WAAW,CAAC;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,SAAS,EAAE,CAAC;AAClB,SAAA;KACF;AACD;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,QAAA,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;YAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;AAClB,SAAA;KACF;IAEQ,OAAO,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;KACxC;AACF,CAAA;AAvJWA,IAAA,GAAA,MAAM,CAAC,WAAW;;;AC3C9B;;;AAGG;AACG,MAAO,OAAa,SAAQ,WAAgB,CAAA;AAIhD;;;;AAIG;AACH,IAAA,WAAA,CAAY,OAAiC,EAAA;AAC3C,QAAA,KAAK,EAAE,CAAC;AARM,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAQ,CAAC;AA4JtD;;AAEG;QACH,IAAoB,CAAAA,IAAA,CAAA,GAAW,SAAS,CAAC;AAtJvC,QAAA,IAAI,OAAO,EAAE;YACX,IAAI,IAAI,GAAG,KAAK,CAAC;AACjB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC1B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,KAAK,SAAS,CAAC,CAAC;AACxE,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAU,CAAC,CAAC;AAChC,aAAA;AACD,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,MAAM,IAAI,wBAAwB,CAAC,kDAAkD,CAAC,CAAC;AACxF,aAAA;YACD,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;AAC9B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;AACvB,SAAA;KACF;AACD;;AAEG;AACH,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;KAC5C;AACD;;AAEG;AACH,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;KACvB;AACD;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KACnB;AACD;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC/B;AACD;;AAEG;AACH,IAAA,WAAW,CAAC,GAAM,EAAA;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC3B;AACD;;AAEG;AACH,IAAA,aAAa,CAAC,KAAQ,EAAA;AACpB,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KACpD;AACD;;AAEG;AACH,IAAA,MAAM,CAAC,GAAM,EAAA;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAC9B;AACD;;AAEG;AACH,IAAA,CAAC,OAAO,GAAA;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;KAC5B;AACD;;AAEG;IACH,OAAO,CAAC,UAAsD,EAAE,OAAa,EAAA;QAC3E,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;KACxC;AACD;;AAEG;AACH,IAAA,GAAG,CAAC,GAAM,EAAA;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC3B;AACD;;AAEG;AACH,IAAA,GAAG,CAAC,GAAM,EAAA;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC3B;AACD;;AAEG;AACH,IAAA,CAAC,IAAI,GAAA;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACzB;AACD;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAK,CAAC;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;AAEG;IACH,GAAG,CAAC,GAAM,EAAE,KAAQ,EAAA;QAClB,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,YAAA,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,CAAC,CAAC;AAClE,SAAA;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC1B,QAAA,OAAO,MAAM,CAAC;KACf;AACD;;AAEG;AACH,IAAA,MAAM,CAAiC,GAAoB,EAAA;AACzD,QAAA,KAAK,IAAI,KAAK,IAAI,GAAG,EAAE;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9B,SAAA;KACF;AACD;;AAEG;AACH,IAAA,MAAM,CAAC,GAAM,EAAA;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjB,QAAA,OAAO,MAAM,CAAC;KACf;AACD;;AAEG;IACH,GAAG,CAAC,GAAM,EAAE,KAAQ,EAAA;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACrB,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;KAC5C;AACD;;AAEG;AACH,IAAA,CAAC,MAAM,GAAA;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;KAC3B;AACD;;AAEG;AACH,IAAA,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAA;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;KAC5B;AAMF,CAAA;AAFEA,IAAA,GAAA,MAAM,CAAC,WAAW;;;ACtKrB;;;AAGG;AACG,MAAO,OAAW,SAAQ,WAAc,CAAA;AAG5C;;;;;AAKG;AACH,IAAA,WAAA,CAAY,OAAqC,EAAA;AAC/C,QAAA,KAAK,EAAE,CAAC;QAiLD,IAAoB,CAAAA,IAAA,CAAA,GAAW,SAAS,CAAC;AAhLhD,QAAA,IAAI,OAAO,EAAE;YACX,IAAI,IAAI,GAAG,KAAK,CAAC;YACjB,IAAI,OAAO,YAAY,GAAG,EAAE;AAC1B,gBAAA,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAU,CAAC,CAAC;AAChC,aAAA;AAAM,iBAAA;AACL,gBAAA,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE;oBACxB,IAAI,EAAE,KAAK,SAAS,EAAE;wBACpB,IAAI,GAAG,IAAI,CAAC;wBACZ,MAAM;AACP,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,IAAI,IAAI,EAAE;AACR,gBAAA,MAAM,IAAI,wBAAwB,CAAC,gDAAgD,CAAC,CAAC;AACtF,aAAA;AACF,SAAA;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;KAC9B;AAED,IAAA,IAAa,IAAI,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;KACvB;AAEQ,IAAA,MAAM,CAAC,GAAM,EAAA;QACpB,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,YAAA,MAAM,IAAI,wBAAwB,CAAC,4BAA4B,CAAC,CAAC;AAClE,SAAA;AACD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnB,QAAA,OAAO,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC;KAC7B;AACD;;;AAGG;IACH,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,OAAO,CAAI,IAAI,CAAC,IAAI,CAAC,CAAC;KAClC;AAEQ,IAAA,MAAM,CAAC,GAAM,EAAA;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAC9B;AAEQ,IAAA,GAAG,CAAC,GAAM,EAAA;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC3B;AAEQ,IAAA,CAAC,OAAO,GAAA;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;KAC5B;AAEQ,IAAA,CAAC,IAAI,GAAA;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACzB;AAEQ,IAAA,CAAC,MAAM,GAAA;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;KAC3B;IAEQ,OAAO,CAAC,UAAsD,EAAE,OAAa,EAAA;QACpF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;KACxC;AAEQ,IAAA,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAA;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACzB;IAEQ,KAAK,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KACnB;AAEQ,IAAA,QAAQ,CAAC,GAAM,EAAA;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC3B;AAEQ,IAAA,MAAM,CAAC,GAAM,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KACzB;IAEQ,OAAO,GAAA;QACd,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;KAC9B;AACD;;;;AAIG;AACH,IAAA,QAAQ,CAAC,IAAY,EAAA;AACnB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACnB,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;AAIG;AACH,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACnB,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;;;AAOG;AACH,IAAA,YAAY,CAAC,IAAY,EAAA;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,OAAO,EAAK,CAAC;AAC9B,QAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;AACpB,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACf,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;;AAMG;AACH,IAAA,KAAK,CAAC,IAAY,EAAA;AAChB,QAAA,MAAM,IAAI,GAAG,IAAI,OAAO,CAAI,IAAI,CAAC,CAAC;AAClC,QAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;YACpB,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACf,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;;;AAOG;AACH,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,OAAO,EAAK,CAAC;AAC9B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,IAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAG;AACpB,gBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACf,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;AAKG;AACH,IAAA,mBAAmB,CAAC,IAAY,EAAA;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,IAAI,CAAC,CAAC;AACrC,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACrB,gBAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,aAAA;iBAAM,IAAI,IAAI,KAAK,SAAS,EAAE;AAC7B,gBAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;AAIF,CAAA;AAFWA,IAAA,GAAA,MAAM,CAAC,WAAW;;AClMxB,MAAO,qBAAsB,SAAQ,gBAAgB,CAAA;AAE1D;;ACFD;;AAEG;MACU,OAAO,CAAA;AAElB;;;AAGG;AACH,IAAA,OAAO,OAAO,GAAA;QACZ,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACtC,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACrB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACxB,aAAA;AAAM,iBAAA;gBACL,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,WAAW,KAAK,WAAW,KAAK,WAAW,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACtB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAC1B,aAAA;YACD,OAAO,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;AACxD,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACrB;AACD;;;;;AAKG;AACH,IAAA,OAAO,OAAO,CAAC,GAAW,EAAE,OAAe,EAAA;QACzC,IAAI,OAAO,GAAG,CAAC,CAAC;AAChB,QAAA,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AAC7B,YAAA,OAAO,GAAG,CAAC,CAAC,GAAC,OAAO,GAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;AACtD,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;;;AAGD;;;;;AAKG;IACH,OAAO,QAAQ,CAAC,MAAc,EAAA;AAC5B,QAAA,IAAI,QAAQ,MAAM,CAAC,KAAK,QAAQ,EAAE;YAChC,IAAI,IAAI,GAAG,CAAC,CAAA;AACZ,YAAA,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;YACzB,IAAI,IAAI,GAAG,CAAC,EAAE;AACZ,gBAAA,IAAI,GAAW,CAAC;AAChB,gBAAA,IAAI,CAAC,GAAW,CAAC,CAAC,CAAC;AACnB,gBAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;AACjB,oBAAA,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC3B,oBAAA,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC;AAClC,oBAAA,IAAI,IAAI,CAAC,CAAC;AACX,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,IAAI,KAAK,CAAC,CAAC;AACnB,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACV;;;AAGD;;;;;AAKG;AACH,IAAA,OAAO,UAAU,CAAC,MAAc,EAAE,IAAa,EAAA;AAC7C,QAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,YAAA,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;YACzB,IAAI,IAAI,GAAG,CAAC,EAAE;gBACZ,MAAM,aAAa,GAAG,UAAU,CAAC;gBACjC,IAAI,IAAI,GAAG,aAAa,CAAC;AACzB,gBAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBAC5B,IAAI,GAAG,IAAI,CAAC;AACb,iBAAA;AACD,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,gBAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;AACjB,oBAAA,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7B,oBAAA,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;AAC9E,iBAAA;AACD,gBAAA,OAAO,IAAI,KAAK,CAAC,CAAC;AACnB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACV;AACD;;;;;;AAMG;AACH,IAAA,OAAO,MAAM,CAAC,MAAc,EAAE,SAAyB,QAAQ,EAAA;AAC7D,QAAA,IAAI,QAAQ,MAAM,CAAC,IAAI,QAAQ,IAAI,QAAQ,MAAM,CAAC,IAAI,QAAQ,EAAE;AAC9D,YAAA,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACjC,gBAAA,KAAK,QAAQ;AACX,oBAAA,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAC7B,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CACzE,CAAC;AACJ,gBAAA,KAAK,KAAK;oBACR,IAAI;AACF,wBAAA,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;AAC1B,qBAAA;AAAC,oBAAA,OAAO,KAAK,EAAE;;AAEf,qBAAA;AACJ,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AACD;;;;;;;AAOG;AACH,IAAA,OAAO,MAAM,CAAC,MAAc,EAAE,SAAyB,QAAQ,EAAA;AAC7D,QAAA,IAAI,QAAQ,MAAM,CAAC,IAAI,QAAQ,IAAI,QAAQ,MAAM,CAAC,IAAI,QAAQ,EAAE;AAC9D,YAAA,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACjC,gBAAA,KAAK,QAAQ;AACX,oBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACrD,yBAAA,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAClC,yBAAA,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACf,gBAAA,KAAK,KAAK;oBACR,IAAI;AACF,wBAAA,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;AAC1B,qBAAA;AAAC,oBAAA,OAAO,KAAK,EAAE;;AAEf,qBAAA;AACJ,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;;AAxIc,OAAA,CAAA,WAAW,GAAG,sCAAsC,CAAC,KAAK,CAAC,EAAE,CAAC;;ACE/E,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,aAAa,GAAG,CAAC,CAAA;AAEvB;;;;AAIG;MACU,SAAS,CAAA;AAKpB,IAAA,WAAA,GAAA;QAJQ,IAAS,CAAA,SAAA,GAAG,iBAAiB,CAAC;AAC9B,QAAA,IAAA,CAAA,QAAQ,GAAiC,IAAI,SAAS,EAAE,CAAC;AACzD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,KAAK,EAAK,CAAC;AAG7B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAClC;AAEO,IAAA,WAAW,CAAC,QAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,EAAc,CAAC,CAAC;AAC5C,SAAA;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;KACjB;IAEO,OAAO,GAAA;AACb,QAAA,MAAM,MAAM,GAAG,IAAI,SAAS,EAAqB,CAAC;AAClD,QAAA,MAAM,CAAC,SAAS,CAAoB,IAAI,CAAC,QAAQ,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAoB,MAAM,CAAC,CAAC;KACpD;AACD;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAClC;AACD;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;KACvB;AACD;;AAEG;AACH,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;KAC1B;AACD;;;;AAIG;AACF,IAAA,GAAG,CAAC,GAAM,EAAA;QACT,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACpF,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,KAAK,IAAI,IAAI,IAAI,OAAO,EAAE;AACxB,gBAAA,IAAK,IAAmB,CAAC,GAAG,KAAK,GAAG,EAAE;oBACpC,OAAQ,IAAmB,CAAC,KAAM,CAAC;AACpC,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;;;;AAKG;IACH,YAAY,CAAC,GAAM,EAAE,YAAe,EAAA;QAClC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC;KACtC;AACD;;;;;;AAMG;AACH,IAAA,GAAG,CAAC,GAAM,EAAA;AACR,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;KAC9B;AACD;;;;;;AAMG;AACH,IAAA,QAAQ,CAAC,GAAM,EAAA;AACb,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;KAC9B;AACD;;;;;AAKG;AACH,IAAA,WAAW,CAAC,GAAM,EAAA;AAChB,QAAA,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;KACvC;AACD;;;AAGG;AACH,IAAA,aAAa,CAAC,KAAQ,EAAA;AACpB,QAAA,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,YAAA,KAAK,IAAI,OAAO,IAAI,OAAQ,EAAE;AAC5B,gBAAA,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE;AAC3B,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,GAAG,GAAW,IAAI,GAAG,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;;;;AAOG;IACH,GAAG,CAAC,GAAM,EAAE,KAAQ,EAAA;AAElB,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE;YAChC,MAAM,IAAI,wBAAwB,EAAE,CAAC;AACtC,SAAA;AAED,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,qBAAqB,EAAE,CAAC;AACnC,SAAA;AAED,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,QAAA,KAAK,IAAI,IAAI,IAAI,OAAO,EAAE;AACxB,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE;gBACpB,KAAK,GAAG,KAAK,CAAC;gBACd,MAAM;AACP,aAAA;AACF,SAAA;QAED,IAAI,QAAQ,GAAkB,SAAS,CAAC;AAExC,QAAA,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE;AACf,YAAA,MAAM,IAAI,GAAe,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;AACxC,YAAA,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtB,SAAA;AAAM,aAAA;AACL,YAAA,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,KAAM,CAAC;AACjC,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;AAC9B,SAAA;QAED,IAAI,KAAK,GAAG,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,aAAa,EAAE;;YAE/D,IAAI,CAAC,OAAO,EAAE,CAAC;AAChB,SAAA;AAED,QAAA,OAAO,QAAQ,CAAC;KACjB;AACD;;;;;AAKG;AACH,IAAA,MAAM,CAAC,GAA4B,EAAA;QACjC,IAAI,GAAG,IAAI,IAAI,EAAE;YACf,MAAM,IAAI,oBAAoB,EAAE,CAAC;AAClC,SAAA;AACD,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;KACjD;AACD;;;;;AAKG;AACH,IAAA,MAAM,CAAC,GAAM,EAAA;QACX,IAAI,GAAG,IAAI,IAAI;AAAE,YAAA,OAAO,KAAK,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACrF,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,YAAA,IAAI,OAAO,CAAC;AACZ,YAAA,KAAK,IAAI,IAAI,IAAI,OAAO,EAAE;AACxB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE;AACpB,oBAAA,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBACzB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,OAAO,IAAI,CAAC;wBAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACjD,oBAAA,OAAO,IAAI,CAAC;AACb,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAA;KACb;AACD;;;;;;;AAOG;IACH,GAAG,CAAC,GAAK,EAAE,KAAO,EAAA;QAChB,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACtB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;AAKG;AACH,IAAA,MAAM,CAAC,GAAM,EAAA;QACX,IAAI,GAAG,IAAI,IAAI,EAAE;YACf,MAAM,IAAI,wBAAwB,EAAE,CAAC;AACtC,SAAA;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACrF,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,YAAA,IAAI,OAAO,CAAC;AACZ,YAAA,KAAK,IAAI,IAAI,IAAI,OAAO,EAAE;AACxB,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE;AACpB,oBAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,OAAO,IAAI,CAAC;wBAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBACjD,OAAO,QAAQ,CAAC,KAAM,CAAC;AACxB,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;KACxB;AACD;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,GAAG,GAAG,IAAI,KAAK,EAAK,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC;AACpD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;AAIG;IACH,OAAO,CAAC,QAAuD,EAAE,OAAa,EAAA;QAC5E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAE,CAAC;KACxE;AAEF;;AC3RD;;AAEG;MACU,UAAU,CAAA;AAIrB;;;;AAIG;AACH,IAAA,WAAA,CAAY,eAA4B,EAAA;QACtC,IAAI,CAAC,QAAQ,GAAG,eAAe,IAAI,UAAU,CAAC,OAAO,CAAC;KACvD;AACD;;;;;;AAMG;AACH,IAAA,OAAO,OAAO,CAAI,CAAI,EAAE,CAAI,EAAA;QAC1B,IAAI,CAAC,KAAK,CAAC,EAAE;AACX,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;KACvB;AACD;;;;AAIG;AACH,IAAA,OAAO,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;AACzB,YAAA,UAAU,CAAC,SAAS,GAAG,IAAI,UAAU,EAAO,CAAC;AAC9C,SAAA;QACD,OAAO,UAAU,CAAC,SAAS,CAAC;KAC7B;AACD;;;;;AAKG;IACH,KAAK,CAAC,CAAS,EAAE,CAAS,EAAA;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;KAClC;AACD;;;;;AAKG;IACH,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAA;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;KAChC;AACD;;;;;AAKG;IACH,WAAW,CAAC,CAAS,EAAE,CAAS,EAAA;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;KAChC;AACD;;;;;AAKG;IACH,eAAe,CAAC,CAAS,EAAE,CAAS,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAChD;AACD;;;;;AAKG;IACH,kBAAkB,CAAC,CAAS,EAAE,CAAS,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACnD;AACD;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;AACtC,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAQ,EAAE,CAAQ,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KAC/D;AACF;;;AClFD;AAEA;;;AAGG;AACG,MAAO,UAAc,SAAQ,YAAe,CAAA;AAMhD;;AAEG;AACH,IAAA,WAAA,CAAY,UAAqC,EAAA;AAC/C,QAAA,KAAK,EAAE,CAAC;AAPF,QAAA,IAAA,CAAA,OAAO,GAAe,UAAU,CAAC,OAAO,CAAC;QACzC,IAAK,CAAA,KAAA,GAAW,CAAC,CAAC;AAyG1B;;AAEG;QACH,IAAoB,CAAAA,IAAA,CAAA,GAAG,YAAY,CAAC;AArGlC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC5B,SAAA;KACF;AACD;;;;;;AAMG;IACO,UAAU,CAAC,KAAa,EAAE,OAA0B,EAAA;AAC5D,QAAA,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAErC,IAAI,WAAW,GAAG,IAAI,CAAC;AACvB,QAAA,IAAK,EAAE,KAAK,KAAK,QAAQ,CAAC,EAAG;AAC3B,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,YAAA,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;AACxB,YAAA,OAAO,WAAW,EAAE;AAClB,gBAAA,KAAK,EAAE,CAAC;gBACR,IAAI,KAAK,KAAK,KAAK;oBACjB,MAAM;AACH,qBAAA,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE;oBACjC,WAAW,GAAG,IAAI,CAAC;AACpB,iBAAA;;AACC,oBAAA,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC;AAClC,aAAA;AACF,SAAA;AACD,QAAA,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC;AAC3B,YAAA,OAAO,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;AAChC,YAAA,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC;AAC3B,YAAA,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE;AAC5B,gBAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AACrB,aAAA;AACF,SAAA;AAAM,aAAA;YACL,IAAI,IAAI,CAAC,IAAI,EAAE;;AAEb,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AACzB,gBAAA,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACzB,gBAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AACrB,aAAA;AAAM,iBAAA;gBACL,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;AACjC,aAAA;AACF,SAAA;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC;KACb;AAES,IAAA,UAAU,CAAC,IAA4B,EAAA;AAC/C,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AACrB,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACvB,aAAA;AACD,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AACrB,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACvB,aAAA;YACD,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC5B,aAAA;YACD,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC5B,aAAA;YACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAC7B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAElB,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;AAE5B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAED;;AAEG;AACH,IAAA,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAA;AAChB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACrB,QAAA,IAAI,QAAQ,CAAC;QACb,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,QAAA,OAAO,IAAI,EAAE;AACX,YAAA,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;YAE7B,MAAM,IAAI,CAAC,KAAK,CAAC;AAEjB,YAAA,IAAI,MAAM;gBACR,MAAM;;gBAEN,IAAI,GAAG,QAAQ,CAAC;AACnB,SAAA;KACF;AAKD;;AAEG;IACH,IAAa,IAAI,KAAY,OAAO,IAAI,CAAC,KAAK,CAAA,EAAC;AAC/C;;AAEG;AACM,IAAA,MAAM,CAAC,KAAiB,EAAA;QAE/B,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK,CAAC;AAEtC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;KAC7D;AACD;;;AAGG;IACH,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,UAAU,CAAI,IAAI,CAAC,CAAC;KAChC;AACD;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;KACzB;AACD;;AAEG;IACM,SAAS,GAAA;AACd,QAAA,OAAO,IAAI,CAAC;KACf;AACD;;;AAGG;AACH,IAAA,SAAS,CAAc,MAAyB,EAAA;AAC9C,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;KAC/C;AACD;;AAEG;AACM,IAAA,GAAG,CAAC,KAAa,EAAA;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,IAAI,IAAI,EAAE;YACR,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;;AAGG;IACM,GAAG,CAAC,KAAa,EAAE,KAAiB,EAAA;QAC3C,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,MAAM,IAAI,wBAAwB,CAAC,gCAAgC,CAAC,CAAC;AACtE,SAAA;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;AAC5B,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;QAED,MAAM,IAAI,yBAAyB,EAAE,CAAC;KACvC;AACD;;AAEG;IACM,KAAK,GAAA;AACZ,QAAA,IAAI,IAAuB,CAAC;QAC5B,OAAO,IAAI,CAAC,IAAI,EAAE;AAChB,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAC7B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AACnB,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAEjB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;KAC7B;AACD;;AAEG;AACM,IAAA,QAAQ,CAAC,KAAiB,EAAA;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KACjC;AACD;;;;;AAKG;IACH,OAAO,CAAC,KAAiB,EAAE,SAAkB,EAAA;AAC3C,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,QAAA,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC;AAC3B,QAAA,IAAI,IAAI,GAA6B,IAAI,CAAC,IAAI,CAAC;AAC/C,QAAA,OAAO,IAAI,EAAE;AACX,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,IAAI,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAE,CAAC,EAAE;gBAC5D,KAAK,GAAG,KAAK,CAAC;gBACd,MAAM;AACP,aAAA;AACD,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM;AAC7B,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;AAEG;IACM,MAAM,CAAC,KAAa,EAAE,KAAiB,EAAA;QAE9C,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK,CAAC;AAEtC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;KAC1D;AACD;;;;;AAKG;IACH,WAAW,CAAC,KAAiB,EAAE,SAAkB,EAAA;AAC/C,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,QAAA,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC;AAC3B,QAAA,IAAI,IAAI,GAA6B,IAAI,CAAC,IAAI,CAAC;AAC/C,QAAA,OAAO,IAAI,EAAE;AACX,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,IAAI,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAE,CAAC,EAAE;gBAC5D,KAAK,GAAG,KAAK,CAAC;gBACd,MAAM;AACP,aAAA;AAAM,iBAAA,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE;gBAC5B,MAAM;AACP,aAAA;AACD,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;AAEG;AACH,IAAA,KAAK,CAAC,KAAiB,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC3B;AACD;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;KACzB;AACD;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;KAC3B;AACD;;;;AAIG;AACH,IAAA,UAAU,CAAC,KAAiB,EAAA;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;KAC9B;AACD;;;;AAIG;AACH,IAAA,SAAS,CAAC,KAAiB,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC1B;AACD;;;AAGG;IACH,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;KACpB;AACD;;;AAGG;IACH,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;KAC1B;AACD;;;;AAIG;AACH,IAAA,MAAM,CAAC,KAAiB,EAAA;AACtB,QAAA,IAAI,IAAI,GAA6B,IAAI,CAAC,IAAI,CAAC;AAC/C,QAAA,OAAO,IAAI,EAAE;AACX,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,IAAE,CAAC,EAAE;AACtC,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9B,aAAA;AACD,YAAA,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM;AAC7B,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;AAEG;AACM,IAAA,QAAQ,CAAC,KAAa,EAAA;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACtB,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;AAEG;IACH,WAAW,GAAA,EAA2B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;AAChE;;AAEG;IACH,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;AAEG;AACM,IAAA,WAAW,CAAC,SAAiB,EAAE,OAAA,GAAkB,QAAQ,EAAA;QAChE,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACnC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,SAAS,GAAG,OAAO;AAAE,YAAA,OAAO,KAAK,CAAC;QACtC,IAAI,GAAG,GAAG,OAAO,CAAC;AAClB,QAAA,OAAM,EAAE,GAAG,IAAI,SAAS,EAAE;YACxB,IAAI,IAAI,CAAC,UAAU,CAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAE,EAAE;AACxC,gBAAA,MAAM,EAAE,CAAC;AACV,aAAA;AACF,SAAA;QACD,OAAO,MAAM,GAAG,CAAC,CAAC;KACnB;AACD;;;AAGG;IACH,SAAS,GAAA;QACP,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;;AAGG;IACH,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;AAEG;IACM,OAAO,CAAC,SAAiB,EAAE,OAAe,EAAA;QACjD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;KAC/C;AAED,IAAA,OAAO,KAAyC,OAAO,IAAI,CAAC,IAAI,CAAA,EAAE;AAClE,IAAA,OAAO,KAAyC,OAAO,IAAI,CAAC,IAAI,CAAA,EAAE;AAClE,IAAA,OAAO,CAAC,KAAa,EAAA;QACnB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI,CAAC;AAClD,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACrB,QAAA,OAAO,IAAI,EAAE;AACX,YAAA,IAAI,EAAE,KAAK,IAAI,KAAK,EAAE;gBACpB,MAAM;AACP,aAAA;AACD,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAED;;AAEG;IACH,OAAO,GAAA;QACL,MAAM,IAAI,GAAsB,EAAE,CAAC;AAEnC,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,OAAO,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC7B,YAAA,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI;gBAAE,MAAM;AACpC,YAAA,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC;AAChC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAEF,CAAA;AAzTEA,IAAA,GAAA,MAAM,CAAC,WAAW,CAAA;AA2TrB;;AAEG;MACU,cAAc,CAAA;AAKzB,IAAA,WAAA,CAAY,KAAiB,EAAE,IAAA,GAAiC,IAAI,EAAE,OAAiC,IAAI,EAAA;QAH3G,IAAI,CAAA,IAAA,GAA6B,IAAI,CAAC;QACtC,IAAI,CAAA,IAAA,GAA6B,IAAI,CAAC;AAGpC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;AAED,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAED,IAAA,QAAQ,CAAC,QAA4B,EAAA;AACnC,QAAA,OAAO,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,EAAE,CAAC;KAC1D;IAED,MAAM,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAEF;;ACjdD;;;;;;AAMG;MACmB,IAAI,CAAA;AAItB,IAAA,WAAA,CAAY,OAAoB,EAAA;QAHxB,IAAc,CAAA,cAAA,GAAiB,EAAE,CAAC;AAChC,QAAA,IAAA,CAAA,QAAQ,GAAe,UAAU,CAAC,OAAO,CAAC;AAGhD,QAAA,IAAI,OAAO,EAAE;AACT,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AAC3B,SAAA;KACJ;AACD;;AAEG;IACH,IAAI,MAAM,GAAa,EAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;AAE3D;;;AAGG;AACO,IAAA,iBAAiB,CAAC,WAAmB,EAAA;AAC3C,QAAA,OAAO,CAAC,CAAC,GAAG,WAAW,IAAI,CAAC,CAAC;KAChC;AACD;;;AAGG;AACO,IAAA,kBAAkB,CAAC,WAAmB,EAAA;AAC5C,QAAA,OAAO,CAAC,CAAC,GAAG,WAAW,IAAI,CAAC,CAAC;KAChC;AACD;;;AAGG;AACO,IAAA,cAAc,CAAC,UAAkB,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;KAC3C;AACD;;;AAGG;AACO,IAAA,SAAS,CAAC,UAAkB,EAAA;QAClC,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KAC/C;AACD;;;AAGG;AACO,IAAA,YAAY,CAAC,WAAmB,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;KAC3E;AACD;;;AAGG;AACO,IAAA,aAAa,CAAC,WAAmB,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;KAC5E;AACD;;;AAGG;AACO,IAAA,SAAS,CAAC,WAAmB,EAAA;QACnC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;KACnE;AACD;;;AAGG;AACO,IAAA,UAAU,CAAC,WAAmB,EAAA;QACpC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC;KACpE;AACD;;;AAGG;AACO,IAAA,MAAM,CAAC,UAAkB,EAAA;QAC/B,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;KAC/D;AACD;;;AAGG;IACO,IAAI,CAAC,QAAgB,EAAE,QAAgB,EAAA;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;KACvC;AACD;;;;;AAKG;AACH,IAAA,GAAG,CAAC,KAAa,EAAA;QACb,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;YACnC,MAAM,IAAI,yBAAyB,EAAE,CAAC;AACzC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KACrC;AACD;;;AAGG;IACH,IAAI,GAAA,EAAa,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;AACrD;;;AAGG;IACH,IAAI,GAAA;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAChB,YAAA,OAAO,SAAS,CAAC;AACpB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;KACjC;AACD;;;AAGG;IACH,IAAI,GAAA;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAChB,YAAA,OAAO,SAAS,CAAC;AACpB,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAG,CAAC;AACrC,SAAA;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;;AAGpC,QAAA,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAG,CAAC;QACpD,IAAI,CAAC,WAAW,EAAE,CAAC;AAEnB,QAAA,OAAO,IAAI,CAAC;KACf;AACD;;;;AAIG;AACH,IAAA,GAAG,CAAC,IAAgB,EAAA;AAChB,QAAA,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE;AACrC,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,QAAA,OAAO,IAAI,CAAC;KACf;AACD;;AAEG;IACH,KAAK,GAAA;AACD,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;KAC5B;AACD;;;;AAIG;AACH,IAAA,QAAQ,CAAC,IAAgB,EAAA;AACrB,QAAA,IAAI,KAAK,GAAW,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AACrC,QAAA,OAAO,EAAE,KAAK,GAAG,GAAG,EAAE;AAClB,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;AACtD,gBAAA,OAAO,IAAI,CAAC;AACf,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AACD;;;;;AAKG;AACH,IAAA,QAAQ,CAAC,aAAqB,EAAA;AAE1B,QAAA,IAAI,EAAE,aAAa,IAAI,CAAC,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;AACtD,YAAA,MAAM,IAAI,yBAAyB,CAAC,SAAS,aAAa,CAAA,gBAAA,CAAkB,CAAC,CAAC;AACjF,SAAA;;;QAID,IAAI,aAAa,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;AACrC,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAG,CAAC;AACrC,SAAA;QAED,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;;AAEhD,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAG,CAAC;;QAGhE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;;;QAI9C,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAChC,CAAC,UAAU;AACR,eAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAC/E,EAAE;AACC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AACnC,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;AACjC,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACjB;AACD;;;;AAIG;AACH,IAAA,MAAM,CAAC,IAAgB,EAAA;QAEnB,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,KAAK,SAAS,EAAE;AACtC,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;;QAGD,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACrD,IAAI,qBAAqB,GAAG,CAAC,EAAE;YAC3B,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,qBAAqB,EAAE,SAAS,EAAE,EAAE;;;gBAGpE,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAG,CAAC;AAC7C,gBAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAChC,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACf,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AACD;;;;AAIG;AACO,IAAA,IAAI,CAAC,IAAgB,EAAA;QAC3B,MAAM,gBAAgB,GAAa,EAAE,CAAC;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;QACxC,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,EAAE,SAAS,EAAE,EAAE;AACnD,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE;AAC1D,gBAAA,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACpC,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,gBAAgB,CAAC;KAC3B;AACD;;AAEG;IACH,OAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,CAAC;KAC1C;AACD;;;AAGG;IACH,OAAO,GAAA;AACH,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;KACnC;AACD;;AAEG;IACH,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;KACzC;AACD;;;AAGG;IACH,MAAM,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;KACzB;AACD;;AAEG;AACH,IAAA,SAAS,CAAC,gBAAyB,EAAA;;;;QAI/B,IAAI,YAAY,GAAG,gBAAgB,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AAEtE,QAAA,OACI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;AACzB,eAAA,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,EAC7F;AACE,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;AAC3D,YAAA,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AACpD,SAAA;KACJ;AACD;;AAEG;IACH,WAAW,CAAC,mBAA2B,CAAC,EAAA;;;;QAIpC,IAAI,YAAY,GAAG,gBAAgB,CAAC;QACpC,IAAI,SAAS,GAAG,IAAI,CAAC;AAErB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE;AACpC,YAAA,IACI,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;AAC7B,mBAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,EAC3F;AACE,gBAAA,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;AACrD,aAAA;AAAM,iBAAA;AACH,gBAAA,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;AACpD,aAAA;AAED,YAAA,IAAI,IAAI,CAAC,oBAAoB,CACzB,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EACjC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CACjC,EAAE;gBACC,MAAM;AACT,aAAA;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YACnC,YAAY,GAAG,SAAS,CAAC;AAC5B,SAAA;KACJ;AAWJ;;AClVK,MAAO,OAAW,SAAQ,IAAO,CAAA;AACrC;;;;;;;AAOG;IACH,oBAAoB,CAAC,YAAwB,EAAE,aAAyB,EAAA;QACtE,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;KACxD;AACF;;;ACVD;;;;AAIG;AACG,MAAO,aAAiB,SAAQ,aAAgB,CAAA;AAGpD,IAAA,WAAA,CAAY,OAAoB,EAAA;AAC9B,QAAA,KAAK,EAAE,CAAC;QAoGV,IAAoB,CAAAA,IAAA,CAAA,GAAG,eAAe,CAAC;QAnGrC,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAI,OAAO,CAAC,CAAC;KACzC;AACD;;AAEG;IACH,IAAI,MAAM,GAAc,EAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA,EAAE;AACrD;;AAEG;IACH,IAAI,IAAI,GAAgB,EAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE;AACtD;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KAC7B;AACD;;;;AAIG;AACH,IAAA,KAAK,CAAC,KAAiB,EAAA;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACjC;AACD;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KAC7B;AACD;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KAC7B;AACD;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KAC7B;AACD;;;;;;;;;;;AAWE;AAEF,IAAA,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAA;AAChB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,KAAK,IAAI,KAAK,GAAW,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE;YAClD,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChC,SAAA;KACF;AAED;;AAEG;AACH,IAAA,MAAM,CAAC,KAAiB,EAAA;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACjC;AACD;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;KACvB;AACD;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAiB,EAAA;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACtC;AACD;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;KAChC;AACD;;AAEG;AACH,IAAA,MAAM,CAAC,KAAiB,EAAA;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACpC;AACD;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAa,EAAA;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACtC;AAIF,CAAA;AAFEA,IAAA,GAAA,MAAM,CAAC,WAAW;;AChHrB;;AAEG;AACG,MAAO,UAAW,SAAQ,SAAyB,CAAA;AAEvD,IAAA,WAAA,CAAY,UAAuB,EAAA;AACjC,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACzB,SAAA;KACF;AACD;;;;AAIG;AACH,IAAA,WAAW,CAAC,GAAW,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACtB;AACD;;;AAGG;IACH,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;KACpB;AACD;;;AAGG;IACH,gBAAgB,GAAA;AACd,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC;AACjC,QAAA,IAAI,GAAG,CAAC;AACR,QAAA,IAAI,KAAK,CAAC;QACV,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AAC3B,YAAA,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,gBAAA,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,oBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACrB,oBAAA,KAAK,EAAE,CAAC;AACT,iBAAA;AACF,aAAA;AACF,SAAA;QACD,OAAO,KAAK,GAAG,CAAC,CAAC;KAClB;AACD;;;AAGG;IACF,kBAAkB,GAAA;AACjB,QAAA,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC;AACnC,QAAA,IAAI,GAAG,CAAC;AACR,QAAA,IAAI,KAAK,CAAC;QACV,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AAC3B,YAAA,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,gBAAA,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACpC,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,oBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACrB,oBAAA,KAAK,EAAE,CAAC;AACT,iBAAA;AACF,aAAA;AACF,SAAA;QACD,OAAO,KAAK,GAAG,CAAC,CAAC;KAClB;AACD;;;AAGG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACvB,QAAA,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAE,EAAE,CAAC,CAAC;AAC9D,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;KACxB;AACD;;;AAGG;IACH,qBAAqB,GAAA;AACnB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACvB,QAAA,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAE,EAAE,CAAC,CAAC;AAChE,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;KACxB;AACD;;;;;;AAMG;AACH,IAAA,aAAa,CAAC,MAAc,EAAE,SAAA,GAAoB,GAAG,EAAA;QACnD,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACnD,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,CAAC;AACN,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AAChB,YAAA,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,EAAE;gBACV,IAAI,CAAC,GAAG,CAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7D,gBAAA,KAAK,EAAE,CAAC;AACT,aAAA;AACH,SAAC,CAAC,CAAC;QACH,OAAO,KAAK,GAAG,CAAC,CAAC;KAClB;AAEF;;;AC3GD;;AAEG;AACG,MAAO,MAAU,SAAQ,YAAe,CAAA;AAG5C;;;;;;;;;;;AAWE;AAEF,IAAA,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;KACtC;AAED,IAAA,WAAA,CAAY,WAAmB,CAAC,EAAA;AAC9B,QAAA,KAAK,EAAE,CAAC;AApBA,QAAA,IAAA,CAAA,KAAK,GAAkB,IAAI,UAAU,EAAE,CAAC;QA8IlD,IAAoB,CAAAA,IAAA,CAAA,GAAG,QAAQ,CAAC;QAzH9B,IAAI,QAAQ,GAAG,CAAC,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,SAAA;KACF;AAED;;AAEG;IACH,IAAI,IAAI,GAAa,EAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;IAE9C,KAAK,GAAA;QACH,MAAM,OAAO,GAAG,IAAI,MAAM,CAAI,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,QAAA,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACxB,QAAA,OAAO,OAAO,CAAC;KAChB;AAED,IAAA,OAAO,CAAC,KAAa,EAAA;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KAClC;AACD;;AAEG;AACH,IAAA,MAAM,CAAC,KAAiB,EAAA;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACjC;AACD;;AAEG;AACH,IAAA,SAAS,CAAc,UAAyB,EAAA;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;KACzC;AACD;;AAEG;IACH,KAAK,GAAA,EAAW,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE;AACrC;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAiB,EAAA;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACnC;AACD;;AAEG;AACH,IAAA,GAAG,CAAC,KAAa,EAAA;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC9B;AACD;;AAEG;IACH,OAAO,CAAC,KAAiB,EAAE,SAA8B,EAAA;QACvD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;KAC7C;AACD;;AAEG;IACH,MAAM,CAAC,KAAa,EAAE,KAAiB,EAAA;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACxC;AACD;;AAEG;IACH,WAAW,CAAC,KAAiB,EAAE,SAA8B,EAAA;QAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;KACjD;AACD;;AAEG;AACH,IAAA,MAAM,CAAC,KAAiB,EAAA;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KACjC;AACD;;AAEG;AACH,IAAA,SAAS,CAAc,UAAyB,EAAA;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;KACzC;AACD;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAa,EAAA;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACnC;AACD;;AAEG;IACH,WAAW,CAAC,SAAiB,EAAE,OAAe,EAAA;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;KACnD;AACD;;AAEG;AACH,IAAA,SAAS,CAAc,UAAyB,EAAA;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;KACzC;AACD;;AAEG;IACH,GAAG,CAAC,KAAa,EAAE,KAAiB,EAAA;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACrC;AACD;;AAEG;IACH,OAAO,CAAC,SAAiB,EAAE,OAAe,EAAA;QACxC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;KAC/C;AACD;;AAEG;AACH,IAAA,SAAS,CAAc,MAAyB,EAAA;AAC9C,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KAC9B;AAED;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;KAC7B;AAIF,CAAA;AAFEA,IAAA,GAAA,MAAM,CAAC,WAAW;;ACrJrB;;AAEG;AACG,MAAO,KAAS,SAAQ,MAAS,CAAA;AACrC;;AAEG;AACH,IAAA,IAAI,CAAC,KAAiB,EAAA;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;KAC9B;AACD;;AAEG;IACH,GAAG,GAAA;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AACrC,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;AAGG;IACH,IAAI,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;KAC/B;AACD;;;;AAIG;AACH,IAAA,MAAM,CAAC,KAAiB,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE;AACxB,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,OAAO,KAAK,GAAG,CAAC,CAAC;AAClB,SAAA;QACD,OAAO,CAAC,CAAC,CAAC;KACX;AAEF;;MCvCY,cAAc,CAAA;AAUzB,IAAA,WAAA,CAAY,GAAM,EAAE,KAAkB,EAAE,UAA0B,EAAA;QATlE,IAAI,CAAA,IAAA,GAAgC,IAAI,CAAC;QACzC,IAAK,CAAA,KAAA,GAAgC,IAAI,CAAC;QAC1C,IAAM,CAAA,MAAA,GAAgC,IAAI,CAAC;QAE3C,IAAK,CAAA,KAAA,GAAe,IAAI,CAAC;AAChB,QAAA,IAAA,CAAA,IAAI,GAAkB,IAAI,GAAG,EAAE,CAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAA4C,UAAU,CAAC,OAAO,CAAC;AAIlF,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC;AAChD,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,aAAa,GAAG,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;KAC7D;AAED;;;;AAIG;AACH,IAAA,OAAO,QAAQ,CAAC,UAA0B,EAAE,UAA0B,EAAA;AACpE,QAAA,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;AAChC,QAAA,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACtC,QAAA,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACpC,QAAA,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KACvC;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;KACpD;AAED,IAAA,IAAI,UAAU,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,CAAC,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;KAC7B;AAED,IAAA,IAAI,WAAW,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,CAAC,CAAC;AAC1B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;KAC9B;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;KAC3C;AACD;;;AAGG;AACH,IAAA,IAAI,OAAO,GAAA;;AAET,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;;;AAGD,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;;AAEjD,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC;AACvC,SAAA;;AAGD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC;KACtC;AACD;;;AAGG;AACH,IAAA,IAAI,KAAK,GAAA;;AAEP,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACvB,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;AACzD,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;;;AAID,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;;AAE/D,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACjC,SAAA;;AAGD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;KAChC;AACD;;;AAGG;AACH,IAAA,IAAI,SAAS,GAAA;QACX,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE;AAC5B,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;AACD,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;AAGG;AACH,IAAA,QAAQ,CAAC,KAAiB,EAAA;QACxB,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,KAAK,CAAC;AACtC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;AAIG;AACH,IAAA,OAAO,CAAC,IAAiC,EAAA;;QAEvC,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACzB,SAAA;;AAGD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;QAGjB,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACzB,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;AAIG;AACH,IAAA,QAAQ,CAAC,IAAiC,EAAA;;QAExC,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AAC1B,SAAA;;AAGD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;;QAGlB,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AAC1B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;AAIG;AACH,IAAA,WAAW,CAAC,YAAkC,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE;AAC/D,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE;AACjE,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;;;AAKG;IACH,YAAY,CAAC,aAAmC,EAAE,eAAqC,EAAA;AACrF,QAAA,IAAI,CAAC,aAAa,IAAI,CAAC,eAAe,EAAE;AACtC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE;AAChE,YAAA,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;AAC5B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE;AAClE,YAAA,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC;AAC7B,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;AAGG;AACH,IAAA,QAAQ,CAAC,GAAM,EAAA;QACb,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KAC7B;AACD;;;;AAIG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACf,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;KAC7B;AACD;;;;AAIG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;KAC5B;AACD;;;;AAIG;AACH,IAAA,QAAQ,CAAC,GAAM,EAAA;;AAEb,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;AAC3C,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;;YAE3D,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAChC,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;;YAE/D,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACjC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;AAIG;AACH,IAAA,CAAC,kBAAkB,GAAA;AACjB,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B,QAAA,OAAO,UAAU,EAAE;AACjB,YAAA,MAAM,UAAU,CAAC;AACjB,YAAA,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;AAChC,SAAA;KACF;AACD;;;AAGG;IACH,CAAC,oBAAoB,CAAC,SAAA,GAAqD,UAAU,EAAA;QAEnF,IAAI,SAAS,IAAI,WAAW,EAAE;;AAE5B,YAAA,MAAM,IAAI,CAAC;AACZ,SAAA;;QAGD,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,OAAO,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAClD,SAAA;QAED,IAAI,SAAS,IAAI,UAAU,EAAE;;AAE3B,YAAA,MAAM,IAAI,CAAC;AACZ,SAAA;;QAGD,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACnD,SAAA;QAED,IAAI,SAAS,IAAI,YAAY,EAAE;;AAE7B,YAAA,MAAM,IAAI,CAAC;AACZ,SAAA;KAEF;AACD;;;;AAIG;IACH,QAAQ,CAAC,YAAqD,UAAU,EAAA;QACtE,OAAO,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;KAClD;AACD;;AAEG;AACH,IAAA,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;KACpC;AACD;;;;AAIG;AACH,IAAA,OAAO,CAAC,IAA0B,EAAA;AAChC,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;;gBAEnD,IAAI,IAAI,CAAC,IAAI,EAAE;oBACb,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChC,iBAAA;AACD,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACnB,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AAED,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;;gBAEtD,IAAI,IAAI,CAAC,KAAK,EAAE;oBACd,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACjC,iBAAA;AACD,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACpB,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AAED,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;AAKG;IACH,GAAG,CAAC,GAAM,EAAE,KAAiB,EAAA;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AACnE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KAC9B;AACD;;;;AAIG;AACH,IAAA,MAAM,CAAC,GAAM,EAAA;QACX,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAyB,CAAC;QAEhE,IAAI,CAAC,YAAY,EAAE;;AAEjB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;QAEhC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;;AAE7C,YAAA,IAAI,MAAM,EAAE;;AAEV,gBAAA,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAClC,aAAA;AAAM,iBAAA;;AAEL,gBAAA,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5B,gBAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3B,gBAAA,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7B,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE;;;;YAIlD,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AACpD,YAAA,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE;AAChE,gBAAA,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAChC,gBAAA,YAAY,CAAC,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC;AACtC,gBAAA,YAAY,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;AAC3C,aAAA;AAAM,iBAAA;;;gBAGL,YAAY,CAAC,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC;gBAC1C,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC9C,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACjD,aAAA;AACF,SAAA;AAAM,aAAA;;;YAGL,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC;AAE1D,YAAA,IAAI,SAAS,EAAE;AACb,gBAAA,IAAI,MAAM,EAAE;AACV,oBAAA,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AAC7C,oBAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3B,oBAAA,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5B,oBAAA,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7B,iBAAA;AAAM,qBAAA;AACL,oBAAA,cAAc,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAClD,iBAAA;AACF,aAAA;AACF,SAAA;;AAGD,QAAA,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;AAE3B,QAAA,OAAO,YAAY,CAAC;KACrB;AACD;;;AAGG;IACF,QAAQ,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;KACzD;AAEF;;ACraD;;;;;;AAMG;MACU,gBAAgB,CAAA;AAI3B,IAAA,WAAA,CAAY,UAA0B,EAAA;QAH5B,IAAI,CAAA,IAAA,GAAgC,IAAI,CAAC;QAIjD,IAAI,CAAC,aAAa,GAAG,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;KAC7D;IAED,KAAK,GAAA;QACH,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAI,EAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,EAAE,CAAC,CAAC;KACpD;IAED,KAAK,GAAA;QACH,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,OAAO,CAAC,MAAI,MAAM,EAAE,CAAC,CAAC;AAC3B,QAAA,OAAO,MAAM,CAAC;KACf;IAED,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACzB,SAAA;AACD,QAAA,OAAO,CAAC,CAAC;KACV;AAED;;;AAGG;IACH,OAAO,GAAA;AACL,QAAA,QAAQ,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;KAC5B;AACD;;;;;AAKG;IACH,GAAG,CAAC,GAAM,EAAE,KAAiB,EAAA;QAC3B,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,cAAc,CAAO,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;AACD;;;AAGG;AACH,IAAA,QAAQ,CAAC,GAAM,EAAA;QACb,IAAI,IAAI,CAAC,IAAI;YACX,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACjC,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;;AAIG;AACH,IAAA,GAAG,CAAC,GAAM,EAAA;QACR,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACrC,YAAA,IAAI,IAAI,EAAE;gBACR,OAAO,IAAI,CAAC,KAAK,CAAC;AACnB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;;AAGG;AACH,IAAA,MAAM,CAAC,GAAM,EAAA;QACX,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1C,YAAA,IAAI,WAAW,EAAE;gBACf,OAAO,WAAW,CAAC,KAAK,CAAC;AAC1B,aAAA;AACF,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;AAEG;IACH,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,IAAI;AACX,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC9B,QAAA,OAAO,EAAE,CAAC;KACX;AACD;;;;AAIG;IACH,OAAO,CAAC,QAAyE,EAAE,OAAa,EAAA;QAC9F,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AACrF,SAAA;KACF;AACD;;;;AAIG;AACH,IAAA,YAAY,CAAC,GAAM,EAAA;QACjB,IAAI,IAAI,GAAQ,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AACzC,QAAA,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAC1E,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACtB;AACD;;;;AAIG;AACH,IAAA,UAAU,CAAC,GAAM,EAAA;QACf,IAAI,IAAI,GAAQ,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AACzC,QAAA,IAAI,OAAO,EAAE;AACX;;;;;;;;AAQE;AACF,YAAA,KAAK,IAAI,IAAI,IAAI,OAAO,CAAC,kBAAkB,EAAE,EAAE;AAC7C,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;KACvB;;IAED,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC;AAChC,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;;IAED,OAAO,GAAA;QACL,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC;AAChC,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,GAAG,GAAG,IAAI,GAAG,EAAK,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,QAAA,OAAO,GAAG,CAAC;KACZ;IAED,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AACnD,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;IAED,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AACrD,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAED,IAAA,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAA;QAChB,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,OAAO,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACzC,SAAA;KACF;AAED,IAAA,KAAK,CAAC,UAAA,GAA0C,IAAI,EAAE,SAAiB,CAAC,EAAA;AACtE,QAAA,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC;AACrC,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,MAAM,CAAA;AACV,YAAA,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,GAAC,MAAM,CAAC;YACnC,IAAI,UAAU,CAAC,IAAI,EAAE;AACnB,gBAAA,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;gBAChC,MAAM,IAAI,UAAU,CAAC;gBACrB,KAAK,IAAI,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE;oBAClE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAE,CAAC,GAAE,IAAI,CAAC,MAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,IAAE,CAAC,GAAC,GAAG,GAAC,GAAG,CAAC,GAAG,MAAM,CAAC;AAC3I,iBAAA;AACF,aAAA;YACD,IAAI,UAAU,CAAC,KAAK,EAAE;AACpB,gBAAA,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;gBACjC,MAAM,IAAI,WAAW,CAAC;gBACtB,KAAK,IAAI,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE;oBACnE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAE,CAAC,GAAE,IAAI,CAAC,MAAO,CAAC,SAAS,GAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,IAAE,CAAC,GAAC,GAAG,GAAC,GAAG,CAAC,GAAG,MAAM,CAAC;AAC1I,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AAEF;;AChND;;;;;;;;AAQG;AACG,MAAO,OAAgB,SAAQ,gBAAsB,CAAA;AAEzD;;;AAGG;IACH,GAAG,CAAC,GAAM,EAAE,KAAiB,EAAA;;QAE3B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;;QAGnC,IAAI,WAAW,GAAgC,IAAI,CAAC;AACpD,QAAA,OAAO,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC1B,YAAA,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;AAClC,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;AAGG;AACH,IAAA,MAAM,CAAC,GAAM,EAAA;QACX,IAAI,IAAI,CAAC,IAAI,EAAE;;YAEb,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACzC,YAAA,IAAI,cAAc,EAAE;;AAElB,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,aAAA;AACD,YAAA,OAAO,cAAc,CAAC;AACvB,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;AAEG;AACK,IAAA,OAAO,CAAC,IAA0B,EAAA;AACxC,QAAA,IAAI,CAAC,IAAI;YAAE,OAAO;;QAElB,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;;AAEvC,YAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;;AAE/B,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAC3B,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE;;AAEtC,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC5B,aAAA;AACF,SAAA;aAAM,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;;AAEhD,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,EAAE;;AAEhC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC7B,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,EAAE;;AAEvC,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC5B,aAAA;AACF,SAAA;KACF;AACD;;AAEG;AACK,IAAA,cAAc,CAAC,QAA8B,EAAA;;AAEnD,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAA4B,CAAC;AACvD,QAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;QAGvB,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,YAAA,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpC,SAAA;AAAM,aAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,EAAE;;AAEjC,YAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;AACtB,SAAA;;;AAID,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;;AAGrC,QAAA,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAE5B,QAAA,IAAI,aAAa,EAAE;AACjB,YAAA,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACjC,SAAA;KAEF;AACD;;AAEG;AACK,IAAA,eAAe,CAAC,QAA8B,EAAA;;AAEpD,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAA4B,CAAC;AACvD,QAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;AAGvB,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;AACrC,QAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAExB,QAAA,IAAI,aAAa,IAAI,aAAa,CAAC,IAAI,EAAE;;AAEvC,YAAA,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;;AAEtC,YAAA,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7B,SAAA;;AAGD,QAAA,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;;AAGhC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;KAC/B;AACD;;AAEG;AACK,IAAA,eAAe,CAAC,QAA8B,EAAA;;AAEpD,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,KAA6B,CAAC;AACzD,QAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;AAGxB,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;AACrC,QAAA,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAExB,QAAA,IAAI,aAAa,EAAE;YACjB,IAAI,aAAa,CAAC,KAAK,EAAE;AACvB,gBAAA,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;;AAE1C,aAAA;;AAEC,YAAA,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACnC,SAAA;;AAGD,QAAA,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;;;;AAMjC,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KACjC;AACD;;AAEG;AACK,IAAA,gBAAgB,CAAC,QAA8B,EAAA;;AAErD,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,KAA6B,CAAC;AACzD,QAAA,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;QAGxB,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,YAAA,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACpC,SAAA;AAAM,aAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,IAAI,EAAE;;AAEjC,YAAA,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AACvB,SAAA;;;AAID,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;;AAGrC,QAAA,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE5B,QAAA,IAAI,aAAa,EAAE;AACjB,YAAA,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAClC,SAAA;KAEF;AACF;;;AC9KD;;AAEG;AACG,MAAO,OAAa,SAAQ,WAAgB,CAAA;AAKhD,IAAA,WAAA,CAAY,UAA0B,EAAA;AACpC,QAAA,KAAK,EAAE,CAAC;QAJF,IAAK,CAAA,KAAA,GAAW,CAAC,CAAC;AACV,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAQ,CAAC;AAiPtD;;AAEG;QACH,IAAoB,CAAAA,IAAA,CAAA,GAAW,SAAS,CAAC;QAhPvC,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAM,UAAU,CAAC,CAAC;KAC3C;IAED,IAAI,UAAU,GAAmB,EAAA,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAC;IAElE,IAAa,cAAc,GAAuB,EAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAA,EAAE;IAE9F,IAAa,IAAI,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE;IAEzC,KAAK,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;AACnB,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AAChC,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;AAC7B,SAAA;KACF;IAED,KAAK,GAAA;QACH,MAAM,IAAI,GAAG,IAAI,OAAO,CAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAClB,QAAA,OAAO,IAAI,CAAC;KACb;;IAED,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;KAC9B;AACD;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC5B,IAAI,GAAG,KAAK,SAAS,EAAE;YACrB,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC;AAC9B,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;;IAED,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;KAC7B;AACD;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,IAAI,GAAG,KAAK,SAAS,EAAE;YACrB,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC;AAC9B,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;AAEG;IACH,aAAa,GAAA;AACX,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC/B,QAAA,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAChC,QAAA,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;;IAED,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;KAC5B;AACD;;;AAGG;IACM,MAAM,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;KAC5B;AACD;;AAEG;AACH,IAAA,UAAU,CAAC,GAAM,EAAA;QACf,IAAI,OAAO,GAAmB,SAAS,CAAC;AACxC,QAAA,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBAC7D,OAAO,GAAG,OAAO,CAAC;gBAClB,MAAM;AACP,aAAA;AACF,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;AACD;;AAEG;AACH,IAAA,QAAQ,CAAC,GAAM,EAAA;QACb,IAAI,OAAO,GAAmB,SAAS,CAAC;AACxC,QAAA,KAAI,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AAC9B,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBAC1D,OAAO,GAAG,OAAO,CAAC;AACnB,aAAA;AAAM,iBAAA;gBACL,MAAM;AACP,aAAA;AACF,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;AACD;;AAEG;AACH,IAAA,QAAQ,CAAC,GAAM,EAAA;QACb,IAAI,OAAO,GAAmB,SAAS,CAAC;AACxC,QAAA,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACnD,OAAO,GAAG,OAAO,CAAC;AACnB,aAAA;AAAM,iBAAA;gBACL,MAAM;AACP,aAAA;AACF,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;AACD;;AAEG;AACH,IAAA,SAAS,CAAC,GAAM,EAAA;QACd,IAAI,OAAO,GAAmB,SAAS,CAAC;AACxC,QAAA,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AAC/B,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBACtD,OAAO,GAAG,OAAO,CAAC;gBAClB,MAAM;AACP,aAAA;AACF,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;AACD;;;AAGG;AACM,IAAA,CAAC,IAAI,GAAA;QACZ,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE;AACjC,YAAA,MAAM,GAAG,CAAC;AACX,SAAA;KACF;AACD;;;AAGG;AACM,IAAA,CAAC,MAAM,GAAA;QACd,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE;AACnC,YAAA,MAAM,GAAI,CAAC;AACZ,SAAA;KACF;AACD;;;AAGG;AACM,IAAA,CAAC,OAAO,GAAA;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;KAChC;AACD;;;AAGG;AACH,IAAA,WAAW,CAAC,GAAM,EAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KACjC;;AAED,IAAA,aAAa,CAAC,KAAQ,EAAA;AACpB,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC/C;;AAEQ,IAAA,GAAG,CAAC,GAAM,EAAA;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;KAC7B;;IAED,YAAY,CAAC,GAAM,EAAE,YAAwB,EAAA;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC;KAC5C;AACD;;;;;AAKG;AACM,IAAA,GAAG,CAAC,GAAM,EAAA;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KACjC;AACD;;;;;;AAMG;IACH,GAAG,CAAC,GAAM,EAAE,KAAQ,EAAA;AAClB,QAAA,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE;AAC5C,YAAA,MAAM,IAAI,wBAAwB,CAAC,yDAAyD,CAAC,CAAC;AAC/F,SAAA;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,IAAI,CAAC,KAAK,EAAE,CAAC;AACd,SAAA;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;AAC5B,QAAA,OAAO,OAAO,CAAC;KAChB;;AAED,IAAA,MAAM,CAAiC,GAA6C,EAAA;AAClF,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAS,CAAC;QAChC,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC;KACrD;;AAED,IAAA,MAAM,CAAC,GAAM,EAAA;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpC,IAAK,IAAI,KAAK,SAAS,EAAG;YACxB,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;AAC7B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;AAGG;IACM,GAAG,CAAC,GAAM,EAAE,KAAQ,EAAA;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACrB,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;AAIG;IACM,OAAO,CAAC,QAAoD,EAAE,OAAa,EAAA;QAClF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,QAAQ,CAAC,KAAU,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;KAC9E;AAKD;;AAEG;IACM,GAACA,IAAA,GAJT,MAAM,CAAC,WAAW,EAIR,MAAM,CAAC,QAAQ,EAAC,GAAA;AACzB,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAM,CAAC,CAAC;AAC/B,SAAA;KACF;AACD;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;KAC9B;IAED,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;KAC3B;AAEF;;;AClRD;;;AAGG;AACG,MAAO,OAAW,SAAQ,WAAc,CAAA;AAG5C,IAAA,WAAA,CAAY,UAA0B,EAAA;AACpC,QAAA,KAAK,EAAE,CAAC;AAyGV;;AAEG;QACH,IAAoB,CAAAA,IAAA,CAAA,GAAW,SAAS,CAAC;QA3GvC,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAU,UAAU,CAAC,CAAC;KAC9C;AACD;;AAEG;AACH,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;KACvB;AACD;;AAEG;AACH,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;KAC7B;AACD;;AAEG;AACH,IAAA,MAAM,CAAC,GAAM,EAAA;AACX,QAAA,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,SAAS,EAAE;KACjD;AACD;;AAEG;AACH,IAAA,SAAS,CAAc,UAAyB,EAAA;QAC9C,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,KAAK,IAAI,EAAE,IAAI,UAAU,EAAE;gBACzB,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AACjC,oBAAA,MAAM,EAAE,CAAC;AACV,iBAAA;AACF,aAAA;AACF,SAAA;QACD,OAAO,MAAM,GAAG,CAAC,CAAC;KACnB;AACD;;AAEG;IACH,KAAK,GAAA;QACH,MAAM,EAAE,GAAG,IAAI,OAAO,CAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChD,QAAA,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACnB,QAAA,OAAO,EAAE,CAAC;KACX;AACD;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KACnB;AACD;;AAEG;AACH,IAAA,QAAQ,CAAC,GAAM,EAAA;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC3B;AACD;;;;;AAKG;AACH,IAAA,MAAM,CAAC,GAAM,EAAA;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAC9B;AACD;;AAEG;AACH,IAAA,CAAC,OAAO,GAAA;AACN,QAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;AACpB,YAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAClB,SAAA;KACF;AACD;;AAEG;IACH,OAAO,CAAC,UAAsD,EAAE,OAAa,EAAA;AAC3E,QAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;AACpB,YAAA,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC5B,SAAA;KACF;AACD;;AAEG;AACH,IAAA,GAAG,CAAC,GAAM,EAAA;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC3B;AACD;;AAEG;AACH,IAAA,CAAC,IAAI,GAAA;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACzB;AACD;;AAEG;AACH,IAAA,CAAC,MAAM,GAAA;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACzB;AACD;;;AAGG;AACH,IAAA,MAAM,CAAC,GAAM,EAAA;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;KAC5C;AAKD;;AAEG;IACH,GAACA,IAAA,GAJA,MAAM,CAAC,WAAW,EAIjB,MAAM,CAAC,QAAQ,EAAC,GAAA;QAChB,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;AAChC,YAAA,MAAM,GAAG,CAAC;AACX,SAAA;KACF;AACD;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;KAC7B;AACD;;AAEG;IACH,IAAI,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;KAC5B;AACD;;AAEG;AACH,IAAA,OAAO,CAAC,GAAM,EAAA;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;KAClC;AACD;;AAEG;AACH,IAAA,KAAK,CAAC,GAAM,EAAA;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KAChC;AACD;;AAEG;AACH,IAAA,MAAM,CAAC,GAAM,EAAA;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;KACjC;AACD;;AAEG;AACH,IAAA,KAAK,CAAC,GAAM,EAAA;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KAChC;AACD;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;AAEG;IACH,QAAQ,GAAA;AACN,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAClB,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;KACzB;AAEF;;AC5LD;;AAEG;MAIU,WAAW,CAAA;AAEtB,IAAA,WAAA,CAAoB,KAAiB,EAAA;QAAjB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;AAOrC;;;;;;;;;;;;;;;AAeE;;QAGF,IAAW,CAAA,WAAA,GAA4E,CAAC,GAAG,EAAE,MAAM,KAAI,EAAA,OAAO,UAAU,CAAC,MAAI,EAAC,OAAO,GAAG,CAAA,EAAC,CAAC,CAAC,EAAC,CAAA;KAzBnG;;AAGzC,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAsBD,IAAA,GAAG,CAAQ,GAAW,EAAE,OAAgB,EAAE,OAA0B,EAAA;AAClE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CACzC,KAAK,CAAC,EAAC,KAAK,EAAC,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,EAAC,CAAC,EACjE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B,CAAC;KACH;AAED,IAAA,MAAM,CAAQ,GAAW,EAAE,OAAgB,EAAE,OAA0B,EAAA;AACrE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAI,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAC5C,KAAK,CAAC,EAAC,KAAK,EAAC,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,EAAC,CAAC,EACjE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B,CAAC;KACH;AAED,IAAA,IAAI,CAAQ,GAAW,EAAE,IAAS,EAAE,OAAgB,EAAE,OAA0B,EAAA;AAC9E,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAChD,KAAK,CAAC,EAAC,KAAK,EAAC,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,EAAC,CAAC,EACjE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B,CAAC;KACH;AAED,IAAA,GAAG,CAAQ,GAAW,EAAE,IAAS,EAAE,OAAgB,EAAE,OAA0B,EAAA;AAC7E,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAC/C,KAAK,CAAC,EAAC,KAAK,EAAC,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,EAAC,CAAC,EACjE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAC7B,CAAC;KACH;;wGAvDU,WAAW,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,WAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA,CAAA;2FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;ACZD;;AAEG;MACmB,MAAM,CAAA;AAC1B;;;;AAIG;AACH,IAAA,MAAM,CAAC,KAAU,EAAA;AACf,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;KACtB;AAEF;;ACXK,MAAgB,UAAW,SAAQ,MAAM,CAAA;;AAC/B,UAAO,CAAA,OAAA,GAAO,WAAW,CAAC;AAC1B,UAAS,CAAA,SAAA,GAAK,aAAa,CAAC;AAC5B,UAAU,CAAA,UAAA,GAAI,cAAc,CAAC;AAC7B,UAAQ,CAAA,QAAA,GAAM,YAAY,CAAC;AAC3B,UAAQ,CAAA,QAAA,GAAM,YAAY,CAAC;AAC3B,UAAO,CAAA,OAAA,GAAO,WAAW,CAAC;AAC1B,UAAI,CAAA,IAAA,GAAU,QAAQ,CAAC;AACvB,UAAS,CAAA,SAAA,GAAK,aAAa,CAAC;AAC5B,UAAU,CAAA,UAAA,GAAI,cAAc,CAAC;AAC7B,UAAQ,CAAA,QAAA,GAAM,YAAY,CAAC;AAC3B,UAAQ,CAAA,QAAA,GAAM,YAAY,CAAC;AAC3B,UAAO,CAAA,OAAA,GAAO,WAAW,CAAC;AAC1B,UAAY,CAAA,YAAA,GAAE,gBAAgB,CAAC;AAC/B,UAAW,CAAA,WAAA,GAAG,eAAe,CAAC;AAC9B,UAAQ,CAAA,QAAA,GAAM,YAAY,CAAC;AAC3B,UAAW,CAAA,WAAA,GAAG,eAAe,CAAC;AAC9B,UAAa,CAAA,aAAA,GAAI,iBAAiB,CAAC;AACnC,UAAc,CAAA,cAAA,GAAG,kBAAkB;;ACXnD;;AAEG;MACU,MAAM,CAAA;AACjB;;;;;AAKG;AACH,IAAA,OAAO,MAAM,CAAI,GAAG,IAAS,EAAA;AAC3B,QAAA,OAAO,IAAI,SAAS,CAAI,IAAI,CAAC,CAAC;KAC/B;AACD;;;;;;;;;;AAUG;AACH,IAAA,OAAO,YAAY,CAAI,WAAqB,EAAE,GAAM,EAAE,SAAsB,EAAA;;;AAG1E,QAAA,MAAM,UAAU,GAAG,SAAS,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;;QAGpF,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,QAAA,IAAI,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AACtC,QAAA,IAAI,WAAmB,CAAC;;;QAIxB,OAAO,UAAU,IAAI,QAAQ,EAAE;;AAE7B,YAAA,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC;;YAGnE,IAAI,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE;AACnD,gBAAA,OAAO,WAAW,CAAC;AACpB,aAAA;;YAGD,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE;;AAEtD,gBAAA,UAAU,GAAG,WAAW,GAAG,CAAC,CAAC;AAC9B,aAAA;AAAM,iBAAA;;AAEL,gBAAA,QAAQ,GAAG,WAAW,GAAG,CAAC,CAAC;AAC5B,aAAA;AACF,SAAA;;QAED,OAAO,CAAC,CAAC,CAAC;KACX;AACD;;;;;;AAMG;AACH,IAAA,OAAO,UAAU,CAAQ,EAAiB,EAAE,EAAiB,EAAA;QAC3D,OAAO,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;KAClC;AACD;;;;;;;;AAQG;AACH,IAAA,OAAO,MAAM,CAAQ,IAAc,EAAE,IAAc,EAAA;AACjD,QAAA,IAAI,EAAE,IAAa,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,EAAE,EAAE;YACP,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACpC,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AACD;;;;;;;;;;AAUG;AACH,IAAA,OAAO,MAAM,CAAI,GAAQ,EAAE,GAAW,EAAE,MAAS,EAAA;AAC/C,QAAA,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE;AACpB,YAAA,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;AAC1B,YAAA,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;YACjB,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjC,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;;;;;;;AAUG;AACH,IAAA,OAAO,QAAQ,CAAI,GAAQ,EAAE,GAAW,EAAE,MAAS,EAAA;AACjD,QAAA,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE;AACpB,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClD,YAAA,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AACtB,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;;;;AAOG;AACH,IAAA,OAAO,MAAM,CAAI,GAAQ,EAAE,SAAkB,EAAA;AAC3C,QAAA,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,GAAG,CAAC,EAAE;AACtC,YAAA,IAAI,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE;gBAC3B,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAChC,aAAA;AACD,YAAA,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AAChD,SAAA;AACD,QAAA,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC;KACpB;AACD;;;;;AAKG;IACH,OAAO,MAAM,CAAI,GAAQ,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;KAClB;AACF;;AC1JD;;AAEG;AACU,MAAA,MAAO,SAAQ,IAAI,CAAC,MAAM,CAAA;AAG9B,IAAA,WAAW,OAAO,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA,EAAC;;AACrD,IAAA,WAAW,MAAM,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA,EAAC;;AACvD,IAAA,WAAW,MAAM,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA,EAAC;;AACpD,IAAA,WAAW,OAAO,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA,EAAC;;AACrD,IAAA,WAAW,kBAAkB,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA,EAAC;;AACnE,IAAA,WAAW,mBAAmB,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA,EAAC;;IACpE,WAAW,KAAK,GAAY,EAAA,OAAO,MAAM,CAAC,kBAAkB,CAAA,EAAC;;IAC7D,WAAW,MAAM,GAAY,EAAA,OAAO,MAAM,CAAC,mBAAmB,CAAA,EAAC;;AAC/D,IAAA,WAAW,MAAM,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA,EAAC;;AACpD,IAAA,WAAW,OAAO,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA,EAAC;;AACxD,IAAA,WAAW,OAAO,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA,EAAC;;AACrD,IAAA,WAAW,KAAK,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA,EAAC;;AACtD,IAAA,WAAW,QAAQ,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA,EAAC;;AACtD,IAAA,WAAW,KAAK,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA,EAAC;;AACtD,IAAA,WAAW,MAAM,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA,EAAC;;AACpD,IAAA,WAAW,KAAK,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA,EAAC;;AACtD,IAAA,WAAW,MAAM,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA,EAAC;;AACvD,IAAA,WAAW,aAAa,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA,EAAC;;IAC9D,WAAW,GAAG,GAAY,EAAA,OAAO,MAAM,CAAC,kBAAkB,CAAA,EAAC;;AAC3D,IAAA,WAAW,EAAE,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA,EAAC;;AACnD,IAAA,WAAW,EAAE,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA,EAAC;;AACnD,IAAA,WAAW,EAAE,GAAY,EAAA,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA,EAAC;;AAQ1D;;;;;AAKG;IACH,WAAY,CAAA,GAAY,EAAE,OAA4B,EAAA;QACpD,KAAK,CAAC,GAAG,IAAI,MAAM,CAAC,kBAAkB,EAAE,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAS,CAAC;KAC5C;AACD;;;;AAIG;AACH,IAAA,OAAO,kBAAkB,GAAA;QACvB,QAAQ,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE;KAC1G;AACD;;;;;;;AAOG;AACH,IAAA,OAAO,EAAE,CAAC,GAAW,EAAE,OAA4B,EAAA;QACjD,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;KACvC;AACD;;;;;;;;AAQG;AACK,IAAA,OAAO,SAAS,CAAC,GAAW,EAAE,OAA4B,EAAA;AAChE,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE;AAClC,YAAA,MAAM,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AAC9B,SAAA;QACD,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC9C,IAAI,MAAM,GAAuB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5D,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,MAAM,GAAG,UAAU,CAAC;YACpB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACpC,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AACD;;;AAGG;AACH,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AAC/D,QAAA,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACpB;AACD;;;AAGG;AACH,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAE;QACjE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,QAAA,QAAQ,CAAC,IAAE,GAAG,GAAG,EAAE,GAAG,CAAC,EAAE;KAC1B;AACD;;;;AAIG;AACH,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;KACvB;AACD;;;;AAIG;IACH,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,MAAM,CAAE,IAAI,CAAC,QAAQ,CAAE,CAAC;KACpC;AACD;;;;AAIG;IACH,YAAY,GAAA;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;AACvC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,wBAAwB,CAAG,CAAA,CAAA,CAAC,CAAC;QACjE,IAAI,IAAI,IAAI,CAAC,EAAE;AACb,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,qBAAqB,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;YACxE,IAAI,IAAI,GAAG,CAAC,EAAE;gBACZ,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AACtC,aAAA;YACD,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AAChC,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AACD;;;;AAIG;IACH,mBAAmB,GAAA;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;AACvC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,qBAAqB,CAAG,CAAA,CAAA,CAAC,CAAC;QAC9D,IAAI,IAAI,IAAI,CAAC,EAAE;AACb,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,wBAAwB,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;YAC3E,IAAI,IAAI,GAAG,CAAC,EAAE;gBACZ,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AACtC,aAAA;YACD,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AAChC,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AACD;;;;AAIG;IACH,aAAa,GAAA;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;QACvC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,qBAAqB,CAAG,CAAA,CAAA,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,wBAAwB,CAAG,CAAA,CAAA,CAAC,IAAI,CAAC,CAAC;KAC1H;;AArID;AACuB,MAAqB,CAAA,qBAAA,GAAG,GAAG,CAAC;AACnD;AACuB,MAAwB,CAAA,wBAAA,GAAG,GAAG;;AChCvD;;AAEG;MACU,KAAK,CAAA;AAEhB;;;AAGG;AACH,IAAA,OAAO,OAAO,GAAA;QACZ,OAAO,IAAI,IAAI,EAAE,CAAC;KACnB;AACD;;;;AAIG;IACH,OAAO,WAAW,CAAC,IAAU,EAAA;QAC3B,IAAI,IAAI,IAAI,IAAI;AACd,YAAA,OAAO,GAAG,CAAC;AACb,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC9B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC3B,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;KACpE;AACD;;;;;AAKG;AACH,IAAA,OAAO,aAAa,CAAC,IAAa,EAAE,OAAgB,EAAA;AAClD,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC9B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACnC,OAAO,GAAG,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAE,CAAC;AAC9C,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAC9F;AACD;;;;AAIG;IACH,OAAO,UAAU,CAAC,IAAa,EAAA;AAC7B,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAClD,QAAA,QAAQ,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;KACxE;AACD;;;;;;AAMG;AACH,IAAA,OAAO,eAAe,CAAC,GAA8B,EAAE,KAAa,EAAE,IAAY,EAAA;;AAEhF,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC9B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;AACnC,QAAA,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;AAClC,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YAC5B,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;KACtD;AACD;;;;;;;AAOG;IACH,OAAO,aAAa,CAAC,CAAS,EAAE,GAA8B,EAAE,KAAa,EAAE,IAAY,EAAA;;AAEzF,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC9B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;AACnC,QAAA,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;AAClC,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAClD,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;KAC3E;AACD;;;;AAIG;IACH,OAAO,gBAAgB,CAAC,GAAW,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC9B,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;AAC9B,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC3B,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AAC3B,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,QAAA,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,YAAY,IAAI,YAAY,CAAC;KAC/F;AACD;;;;;AAKG;AACH,IAAA,OAAO,SAAS,CAAC,KAAW,EAAE,KAAW,EAAA;AACvC,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI;AAChC,YAAA,OAAO,IAAI,CAAC;;;AAGd,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;KAC9D;AACD;;;;;AAKG;AACH,IAAA,OAAO,YAAY,CAAC,KAAW,EAAE,KAAW,EAAA;AAC1C,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI;AAChC,YAAA,OAAO,IAAI,CAAC;;AAEd,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;KAChC;AACD;;;;;;AAMG;AACH,IAAA,OAAO,YAAY,CAAC,IAAU,EAAE,IAAY,EAAA;AAC1C,QAAA,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAC9B,YAAA,OAAO,IAAI,CAAC;AACd,QAAA,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAChC,QAAA,OAAO,EAAE,CAAC;KACX;AACD;;;;;;AAMG;AACH,IAAA,OAAO,YAAY,CAAC,IAAU,EAAE,IAAY,EAAA;AAC1C,QAAA,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAC9B,YAAA,OAAO,IAAI,CAAC;AACd,QAAA,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;AACtC,QAAA,OAAO,EAAE,CAAC;KACX;AACD;;;;AAIG;IACH,OAAO,MAAM,CAAC,EAAU,EAAA;AACtB,QAAA,OAAO,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;KAC5B;AACD;;;;AAIG;IACH,OAAO,KAAK,CAAC,IAAiB,EAAA;QAC5B,IAAI,IAAI,IAAI,IAAI;AACd,YAAA,OAAO,GAAG,CAAC;AACb,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;KACrJ;AACD;;AAEG;AACH,IAAA,OAAO,QAAQ,CAAC,IAAiB,EAAE,WAAoB,IAAI,EAAA;QACzD,IAAI,IAAI,IAAI,IAAI;AACd,YAAA,OAAO,IAAI,CAAC;QAEd,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9G,aAAC,CAAC,QAAQ;gBACR,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC7H,oBAAA,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE;kBAC1B,EAAE,CAAC,CAAC;AACV;;;;;;;;;AASE;KACH;AACD;;;;;AAKG;IACH,OAAO,OAAO,CAAC,IAAkB,EAAA;QAC/B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAC/B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/B,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;KACzD;AACD;;;;;AAKG;IACH,OAAO,OAAO,CAAC,IAAkB,EAAA;QAC/B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAC/B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/B,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;KAC7D;AACD;;;;;AAKG;IACH,OAAO,OAAO,CAAC,IAAkB,EAAA;QAC/B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAC/B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/B,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAC3C;AACD;;;;;AAKG;IACH,OAAO,OAAO,CAAC,IAAkB,EAAA;QAC/B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAC/B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/B,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;KAC7C;AACD;;;;;AAKG;IACH,OAAO,OAAO,CAAC,IAAkB,EAAA;QAC/B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAC/B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,KAAK,GAAW,KAAK,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;AAC5C,QAAA,IAAI,KAAK,GAAW,KAAK,GAAG,CAAC,CAAC;AAC9B,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;KAC/C;AACD;;;;;AAKG;IACH,OAAO,OAAO,CAAC,IAAkB,EAAA;QAC/B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAC/B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,KAAK,GAAW,KAAK,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;AAC5C,QAAA,IAAI,KAAK,GAAW,KAAK,GAAG,CAAC,CAAC;AAC9B,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;KACnD;AACD;;;;AAIG;IACH,OAAO,UAAU,CAAC,IAAkB,EAAA;QAClC,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAC/B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/B,QAAA,IAAI,KAAa,CAAC;AAClB,QAAA,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACrB,YAAA,KAAK,CAAC,CAAC;AACP,YAAA,KAAK,CAAC,CAAC;AACP,YAAA,KAAK,CAAC;gBACJ,KAAK,GAAG,CAAC,CAAC;gBAAC,MAAM;AACnB,YAAA,KAAK,CAAC,CAAC;AACP,YAAA,KAAK,CAAC,CAAC;AACP,YAAA,KAAK,CAAC;gBACJ,KAAK,GAAG,CAAC,CAAC;gBAAC,MAAM;AACnB,YAAA,KAAK,CAAC,CAAC;AACP,YAAA,KAAK,CAAC,CAAC;AACP,YAAA,KAAK,CAAC;gBACJ,KAAK,GAAG,CAAC,CAAC;gBAAC,MAAM;AACnB,YAAA,KAAK,CAAC,CAAC;AACP,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,KAAK,EAAE;gBACL,KAAK,GAAG,CAAC,CAAC;gBAAC,MAAM;AACnB,YAAA;gBACE,KAAK,GAAG,GAAG,CAAC;gBAAC,MAAM;AACtB,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;;AAIG;IACH,OAAO,UAAU,CAAC,IAAY,EAAA;AAC5B,QAAA,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC;KACjE;AACD;;;;AAIG;IACH,OAAO,IAAI,CAAC,IAAkB,EAAA;QAC5B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAC/B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/B,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;KAC7B;AACD;;;;AAIG;IACH,OAAO,IAAI,CAAC,IAAkB,EAAA;QAC5B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAC/B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/B,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;KAC9B;AACD;;;;;;AAMG;IACH,OAAO,YAAY,CAAC,IAAkB,EAAA;QACpC,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAC/B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAC/B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,GAAG,KAAK,CAAC,EAAE;YACb,GAAG,GAAG,CAAC,CAAC;AACT,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;;AACD;;;;;AAKG;IACH,OAAO,YAAY,CAAC,IAAW,EAAA;QAC7B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAC/B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAE,EAAE,IAAI,CAAE,GAAG,CAAC,CAAE,CAAC;KACvE;AACD;;;;;AAKG;IACH,OAAO,cAAc,CAAC,IAAkB,EAAA;QACtC,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACrE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;KACtD;AACD;;;;;;;;AAQG;IACH,OAAO,OAAO,CAAC,IAAkB,EAAA;QAC/B,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAC/B,QAAA,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;;QAE/B,MAAM,cAAc,GAAG,IAAI,IAAI,CAC7B,IAAI,CAAC,WAAW,EAAE,EAClB,IAAI,CAAC,QAAQ,EAAE,EACf,IAAI,CAAC,OAAO,EAAE,CACf,CAAC;;QAGF,cAAc,CAAC,OAAO,CACpB,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CACnE,CAAC;;AAGF,QAAA,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;;QAGnE,aAAa,CAAC,OAAO,CACnB,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CACjE,CAAC;;QAGF,MAAM,EAAE,GAAG,cAAc,CAAC,iBAAiB,EAAE,GAAG,aAAa,CAAC,iBAAiB,EAAE,CAAC;QAClF,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;;AAGxD,QAAA,MAAM,QAAQ,GAAG,CAAM,cAAc,GAAQ,aAAa,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;KACjC;;;AAnYc,KAAQ,CAAA,QAAA,GAAW,MAAM;;ACL1C,MAAM,MAAM,GAAW,6CAA6C,CAAC;MAExD,IAAI,CAAA;AAGb,IAAA,WAAA,CAAY,IAA8B,EAAA;QAFlC,IAAG,CAAA,GAAA,GAAU,CAAC,CAAC;AAGnB,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,QAAO,IAAI,CAAC,KAAK,QAAQ,EAAE;;gBAE3B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAClC,IAAI,KAAK,IAAI,CAAC,EAAE;oBACZ,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;;oBAExC,IAAI,GAAG,GAAY,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,oBAAA,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACjC,oBAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAChB,wBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACnC,qBAAA;AACD,oBAAA,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE;wBACjB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAC9B,qBAAA;AACD,oBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC5D,iBAAA;AACJ,aAAA;;AAEG,gBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtB,SAAA;KACJ;AAEO,IAAA,GAAG,CAAE,KAAuB,EAAA;QAChC,IAAI,CAAC,GAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChC,QAAA,CAAC,CAAC,OAAO,CAAE,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAC,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,GAAC,EAAE,GAAG,CAAC,CAAC,UAAU,EAAE,IAAI,IAAI;YAC9D,CAAC,CAAC,eAAe,EAAE,CAAC;AAChC,QAAA,OAAO,IAAI,CAAC;KACf;IAED,OAAO,GAAA;QACH,OAAO,IAAI,CAAC,GAAG,CAAC;KACnB;IAED,QAAQ,GAAA;QACJ,MAAM,EAAE,GAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC,GAAG,GAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAC,EAAE,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAC,EAAE,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACtH;IAED,MAAM,GAAA;QACF,OAAO,GAAG,GAAC,IAAI,CAAC,QAAQ,EAAE,GAAC,GAAG,CAAC;KAClC;IAED,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC3B;AAEJ;;AC5CD,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B;AACA;AACA,MAAM,OAAO,GAAG,yGAAyG,CAAC;AAC1H,MAAM,UAAU,GAAG,kJAAkJ,CAAC;AACtK,MAAM,cAAc,GAAG,aAAa,CAAC;AAErC;AACa,MAAA,IAAI,GAAG;AAClB,IAAA,IAAI,EAAE;AACJ,QAAA,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAChE,QAAA,YAAY,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC;QAC/F,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QACjH,cAAc,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;AACxI,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AAChE,QAAA,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC;QAC5F,eAAe,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;QACrG,cAAc,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;AAC3I,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;AACvE,QAAA,YAAY,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC;QACvF,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QACpH,cAAc,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;AAC1I,KAAA;AACD,IAAA,IAAI,EAAE;AACJ,QAAA,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AACzD,QAAA,YAAY,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QACjG,eAAe,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;QACnH,cAAc,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC;AACrI,KAAA;EACD;AAEF,MAAM,GAAG,GAAa,CAAC,GAAQ,EAAE,GAAG,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAE5E,MAAM,KAAK,GAAa,CAAC,IAAS,EAAE,GAAY,KAAS;AACvD,IAAA,MAAM,CAAC,GAAG,OAAO,GAAG,GAAG,QAAQ,GAAG,KAAK,CAAC,CAAC;IACzC,OAAO;QACL,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE;QAC7B,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE;QAC5B,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE;QAC9B,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE;QACjC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE;QAC9B,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE;QAChC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE;QAChC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,EAAE;AACrC,QAAA,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,CAAC,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAC5B,CAAC,EAAE,MAAM,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC;QACnC,CAAC,EAAE,MAAM,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;QACjC,CAAC,EAAE,MAAM,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;KAClC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,SAAS,GAA4D;AACzE,IAAA,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;AAC/B,IAAA,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;AAC/B,IAAA,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAC7B,IAAA,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;AAC3B,IAAA,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;AAClC,IAAA,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC9B,EAAE,MAAM,EAAE,MAAM,CAAC,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE;CACpD,CAAC;AAEF;;;;AAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsFG;AACG,MAAO,gBAAiB,SAAQ,UAAU,CAAA;IAU9C,WAAY,CAAA,OAAA,GAAkB,WAAW,EAAE,OAA+B,EAAA;AACxE,QAAA,KAAK,EAAE,CAAC;QARF,IAAY,CAAA,YAAA,GAA+C,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAI7F,IAAY,CAAA,YAAA,GAAa,EAAE,CAAC;QAC5B,IAAO,CAAA,OAAA,GAA8B,SAAS,CAAC;QAKrD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,YAAY,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,CAAC;QACjG,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QAE/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC;QACxD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACpF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AAEhE,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;YACzC,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACjD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAE,CAAC;AAChD,YAAA,QAAQ,OAAO;;gBAEb,KAAK,UAAU,CAAC,SAAS;AACvB,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC7E,MAAM;gBACR,KAAK,UAAU,CAAC,UAAU;AACxB,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAC9E,MAAM;gBACR,KAAK,UAAU,CAAC,QAAQ;AACtB,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;oBAC5E,MAAM;gBACR,KAAK,UAAU,CAAC,QAAQ;AACtB,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;oBAC5E,MAAM;gBACR,KAAK,UAAU,CAAC,OAAO;AACrB,oBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;oBACpC,MAAM;gBACR,KAAK,UAAU,CAAC,IAAI;AAClB,oBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;oBACtC,MAAM;gBACR,KAAK,UAAU,CAAC,WAAW;AACzB,oBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;oBAC9B,MAAM;gBACR,KAAK,UAAU,CAAC,YAAY;AAC1B,oBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;oBAC7B,MAAM;gBACR,KAAK,UAAU,CAAC,OAAO,CAAC;gBACxB,KAAK,UAAU,CAAC,UAAU;AACxB,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAC9E,MAAM;gBACR,KAAK,UAAU,CAAC,SAAS;AACvB,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC7E,MAAM;gBACR,KAAK,UAAU,CAAC,QAAQ;AACtB,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;oBAC5E,MAAM;gBACR,KAAK,UAAU,CAAC,QAAQ;AACtB,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;oBAC5E,MAAM;gBACR,KAAK,UAAU,CAAC,QAAQ;oBACtB,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAClG,MAAM;gBACR,KAAK,UAAU,CAAC,WAAW;AACzB,oBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC;oBAC/C,MAAM;gBACR,KAAK,UAAU,CAAC,aAAa;AAC3B,oBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAAC;oBACjD,MAAM;gBACR,KAAK,UAAU,CAAC,cAAc;AAC5B,oBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,8BAA8B,CAAC;oBACtD,MAAM;AACR,gBAAA,KAAK,uBAAuB;AAC1B,oBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,6BAA6B,CAAC;oBACrD,MAAM;AACR,gBAAA;oBACE,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;AACpH,aAAA;AACF,SAAA;AAAM,aAAA;;YAEL,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,YAAA,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE;AAChD,gBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACxC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAqC,CAAC;AAC1E,aAAA;AACF,SAAA;KACF;AAEO,IAAA,UAAU,CAAC,IAAU,EAAA;AAC3B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC;QACvC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3B,MAAM,UAAU,GAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAE,IAAI,CAAC;QACvD,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,UAA+B,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACvF,OAAO;AACL,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;YACd,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpB,YAAA,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnD,YAAA,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACpD,YAAA,GAAG,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpC,YAAA,IAAI,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,EAAE,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC5C,GAAG,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;YAC5C,IAAI,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;AAC5C,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;YACd,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AAClB,YAAA,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACxB,YAAA,GAAG,EAAE,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtC,YAAA,IAAI,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtC,YAAA,EAAE,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,YAAA,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE;AACzB,YAAA,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAC/B,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;YACd,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpB,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;YACd,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpB,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;YACd,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpB,YAAA,CAAC,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC;AAChC,YAAA,EAAE,EAAE,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AACxC,YAAA,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxB,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;AACjC,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;AACjC,YAAA,CAAC,EAAE,MACD,GAAG;kBACC,IAAI,CAAC,OAAO;AACd,kBAAE,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC;YAC3C,CAAC,EAAE,MAAK;AACN,gBAAA,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aACpG;YACD,CAAC,EAAE,MAAK;AACN,gBAAA,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAClB,gBAAA,OAAO,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aACzF;YACD,EAAE,EAAE,MAAK;AACP,gBAAA,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAClB,gBAAA,OAAO,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aAClI;YACD,GAAG,EAAE,MAAK;AACR,gBAAA,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAClB,gBAAA,OAAO,GAAG,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aACxI;AACD;;;;;;;AAOE;AACF,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;AACd,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;YACd,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpB,YAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;YACd,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACrB,CAAC;KACH;;AAEO,IAAA,aAAa,CAAC,IAAU,EAAE,KAAA,GAAqC,MAAM,EAAA;AAC3E,QAAA,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;AAEpD,QAAA,IAAI,SAAS,CAAC;AACd,QAAA,QAAQ,KAAK;AACX,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;oBACzB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAChH,iBAAA;AACD,gBAAA,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM;AACR,YAAA,KAAK,QAAQ;AACX,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;oBACzB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AACjH,iBAAA;AACD,gBAAA,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM;AACR,YAAA;AACE,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;oBACzB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAC/G,iBAAA;AACD,gBAAA,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM;AACT,SAAA;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,YAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE;AACxC,gBAAA,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9D,aAAA;AACD,YAAA,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC;AAC7B,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;;;;;;;AASG;IACH,OAAO,cAAc,CAAC,IAAU,EAAA;AAC9B,QAAA,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3C,aAAA,GAAG,EAAG;AACN,aAAA,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;AAC3B,aAAA,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;KACjC;;AACD;;AAEG;AACM,IAAA,MAAM,CAAC,KAA2C,EAAA;QAEzD,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACnC,SAAA;AAAM,aAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAC9D,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACnC,SAAA;AAED,QAAA,IAAI,EAAE,KAAK,YAAY,IAAI,CAAC,EAAE;YAC5B,IAAI,KAAK,YAAY,IAAI,EAAE;AACzB,gBAAA,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;AACxB,aAAA;AAAM,iBAAA;AACL,gBAAA,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,aAAA;AACF,SAAA;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxC,SAAA;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAErC,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,KAAI;YACxC,IAAI,KAAK,IAAI,KAAK,EAAE;AAClB,gBAAA,OAAO,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AACvB,aAAA;AACD,YAAA,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1C,SAAC,CAAC,CAAC;KAEJ;AAEF;;MC5ZY,MAAM,GAAG,IAAI,cAAc,CAAa,QAAQ,EAAE;IAEnD,SAOX;AAPD,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACL,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACJ,IAAA,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAG,CAAA;AACH,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI,CAAA;AACJ,IAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACL,IAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK,CAAA;AACP,CAAC,EAPW,QAAQ,KAAR,QAAQ,GAOnB,EAAA,CAAA,CAAA,CAAA;AAED,IAAK,YAEJ,CAAA;AAFD,CAAA,UAAK,YAAY,EAAA;AACf,IAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACX,CAAC,EAFI,YAAY,KAAZ,YAAY,GAEhB,EAAA,CAAA,CAAA,CAAA;AASD;;AAEG;MAIU,UAAU,CAAA;AAiBrB,IAAA,WAAA,GAAA;AAZA,QAAA,IAAA,CAAA,QAAQ,GAAa,QAAQ,CAAC,IAAI,CAAC;AACnC,QAAA,IAAA,CAAA,cAAc,GAAa,QAAQ,CAAC,IAAI,CAAC;QAIzC,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;QAEnB,IAAO,CAAA,OAAA,GAAe,EAAE,CAAC;AACzB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,OAAO,EAAgB,CAAC;QACrC,IAAW,CAAA,WAAA,GAAG,IAAI,gBAAgB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAInE,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM;AAC7B,aAAA,IAAI,CACH,YAAY,CAAC,IAAI,CAAC,EAClB,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,YAAY,CAAC,KAAK,CAAC,CAAC;aACjD,SAAS,CACR,MAAM,IAAI,CAAC,WAAW,EAAE,CACzB,CAAC;KACL;IAED,OAAO,SAAS,CAAC,IAAY,EAAA;QAC3B,IAAI,MAAM,GAA2B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAC1B,YAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7B,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;IAEO,WAAW,GAAA;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEpC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YACrB,OAAO;AACR,SAAA;QAED,MAAM,IAAI,GAAG,GAAG;cACA,IAAI;AACH,iBAAA,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC1C,iBAAA,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC;AACnD,cAAA,GAAG,CAAC;AAEpB,QAAA,MAAM,IAAI,GAAG,IAAI,cAAc,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,cAAe,EAAE,IAAI,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAEjB;AAES,IAAA,cAAc,CAAC,KAAe,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KAC9B;AAED,IAAA,KAAK,CAAC,OAAe,EAAA;QACnB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;KAC1C;AAED,IAAA,GAAG,CAAC,OAAe,EAAA;QACjB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;KACxC;AAED,IAAA,IAAI,CAAC,OAAe,EAAA;QAClB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KACzC;AAED,IAAA,IAAI,CAAC,OAAe,EAAA;QAClB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KACzC;AAED,IAAA,KAAK,CAAC,OAAe,EAAA;QACnB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;KAC1C;AAED,IAAA,KAAK,CAAC,OAAe,EAAA;QACnB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;KAC1C;IAED,UAAU,CAAC,KAAe,EAAE,OAAe,EAAA;AACzC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACtD,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE;AACzC,YAAA,IAAI,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE;AAChC,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACtC,aAAA;AACF,SAAA;AAAM,aAAA,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,YAAA,MAAM,GAAG,GAAG,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAI,CAAA,EAAA,QAAQ,CAAC,KAAK,CAAC,CAAK,EAAA,EAAA,OAAO,EAAE,CAAC;AACvE,YAAA,QAAQ,KAAK;gBACX,KAAK,QAAQ,CAAC,KAAK;AAAG,oBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAAC,MAAM;gBAChD,KAAK,QAAQ,CAAC,IAAI;AAAI,oBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAAE,MAAM;gBAChD,KAAK,QAAQ,CAAC,IAAI;AAAI,oBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAAE,MAAM;gBAChD,KAAK,QAAQ,CAAC,KAAK,CAAC;gBACpB,KAAK,QAAQ,CAAC,KAAK;AAAG,oBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAAC,MAAM;AAChD,gBAAA;AACE,oBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpB,aAAA;AACF,SAAA;KACF;IAED,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;;AA1Gc,UAAA,CAAA,IAAI,GAAG,IAAI,GAAG,EAAsB,CAAC;uGAFzC,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,UAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA,CAAA;2FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;AChCD;AACO,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC;AACnB,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,MAAM,SAAS,GAAG,CAAC,CAAC;AAC3B;AACO,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,cAAc,GAAI,CAAC,CAAC;MAIX,kBAAkB,CAAA;AACpC,IAAA,MAAM,MAAW;AACjB,IAAA,SAAS,MAAW;AACvB;;ACOK,MAAO,YAAa,SAAQ,kBAAkB,CAAA;AAGhD,IAAA,aAAa,CAAC,EAAc,EAAA;AACxB,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;KACjB;IAED,IAAI,KAAK,KAA4B,OAAO,IAAI,CAAC,GAAG,CAAC,EAAC;AAEtD;;AAEG;AACH,IAAA,eAAe,MAAW;IAE1B,iBAAiB,CAAC,KAAuB,EAAA,GAAU;IAEnD,iBAAiB,CAAC,KAAuB,EAAA,GAAU;IAEnD,eAAe,CAAC,KAA2B,EAAA,GAAU;IAErD,aAAa,CAAC,KAAyB,EAAA,GAAU;AAEjD,IAAA,UAAU,MAAW;IAErB,aAAa,CAAC,KAAyB,EAAA,GAAU;IAEjD,kBAAkB,CAAC,KAA8B,EAAA,GAAU;IAE3D,WAAW,CAAC,KAAuB,EAAA,GAAU;AAE7C,IAAA,WAAW,MAAW;IAEtB,eAAe,CAAC,KAA2B,EAAA,GAAU;IAErD,aAAa,CAAC,KAAyB,EAAA,GAAU;IAEjD,YAAY,CAAC,KAAwB,EAAA,GAAU;IAE/C,iBAAiB,CAAC,KAA6B,EAAA,GAAU;AACzD;;;;;;;;;AASG;IACH,kBAAkB,CAAC,KAA8B,EAAA,GAAU;AAC3D;;;;;AAKG;IACH,gBAAgB,CAAC,KAA0B,EAAA,GAAU;AAErD,IAAA,OAAO,MAAW;IAElB,aAAa,CAAC,KAAyB,EAAA,GAAU;IAEjD,WAAW,CAAC,KAAuB,EAAA,GAAU;;yGA9DpC,YAAY,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;6GAAZ,YAAY,EAAA,CAAA,CAAA;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;;;ACTX;;AAEG;MACU,WAAW,CAAA;AACtB;;;;;AAKG;AACH,IAAA,OAAO,MAAM,CAAI,CAAgB,EAAE,GAAG,QAAsB,EAAA;QAC1D,IAAI,CAAC,CAAC,EAAE;YACN,MAAM,IAAI,oBAAoB,EAAE,CAAC;AAClC,SAAA;QACD,IAAI,MAAM,GAAC,CAAC,CAAC;AACb,QAAA,KAAK,IAAI,EAAE,IAAI,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACb,gBAAA,MAAM,EAAE,CAAC;AACV,aAAA;AACF,SAAA;QACD,OAAO,MAAM,GAAG,CAAC,CAAC;KACnB;AACD;;;;;AAKG;AACH,IAAA,OAAO,SAAS,CAAI,CAAgB,EAAE,CAAa,EAAA;QACjD,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,QAAA,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE;YACpB,IAAK,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAG;AACxB,gBAAA,MAAM,EAAE,CAAC;AACV,aAAA;AACF,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AACD;;;;;AAKG;AACH,IAAA,OAAO,GAAG,CAAI,CAAgB,EAAE,UAA0B,EAAA;QACxD,IAAI,OAAO,GAA2B,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE;AACnB,YAAA,UAAU,GAAG,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;AACpD,YAAA,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE;gBACpB,IAAI,OAAO,KAAK,SAAS,EAAE;oBACzB,OAAO,GAAG,IAAI,CAAC;AAChB,iBAAA;qBAAM,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;oBAChD,OAAO,GAAG,IAAI,CAAC;AAChB,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;AACD;;;;;AAKG;AACH,IAAA,OAAO,GAAG,CAAI,CAAgB,EAAE,UAA0B,EAAA;QACxD,IAAI,OAAO,GAA2B,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE;AACnB,YAAA,UAAU,GAAG,UAAU,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;AACpD,YAAA,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE;gBACpB,IAAI,OAAO,KAAK,SAAS,EAAE;oBACzB,OAAO,GAAG,IAAI,CAAC;AAChB,iBAAA;qBAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;oBAC7C,OAAO,GAAG,IAAI,CAAC;AAChB,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,OAAO,CAAC;KAChB;AACD;;;;;;AAMG;AACH,IAAA,OAAO,UAAU,CAAI,IAAa,EAAE,MAAkB,EAAE,MAAkB,EAAA;QACxE,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,QAAA,IAAI,IAAI,IAAI,MAAM,KAAK,MAAM,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;gBAC1B,IAAI,KAAK,KAAK,MAAM,EAAE;AACpB,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACzB,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACd,aAAC,CAAC,CAAC;AACJ,SAAA;QACD,OAAO,MAAM,GAAG,CAAC,CAAC;KACnB;AACD;;;;AAIG;IACH,OAAO,OAAO,CAAI,IAAa,EAAA;AAC7B,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;AACrC,YAAA,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;AAKG;IACH,OAAO,SAAS,CAAY,MAAS,EAAA;QACnC,MAAM,GAAG,GAAe,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9C,QAAA,OAAyB,GAAG,CAAC;KAC9B;AACD;;;;;AAKG;IACH,OAAO,aAAa,CAAY,MAAS,EAAA;QACvC,MAAM,IAAI,GAAY,IAAI,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9C,QAAA,OAA0B,IAAI,CAAC;KAChC;AACD;;;;;;AAMG;AACH,IAAA,OAAO,YAAY,CAAM,GAAM,EAAE,KAAO,EAAA;AACtC,QAAA,MAAM,GAAG,GAAiB,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACtD,QAAA,OAA2B,GAAG,CAAC;KAChC;AAEF;;MCzJqB,iBAAiB,CAAA;AAGnC,IAAA,WAAA,CAAY,CAAU,EAAA;QAFZ,IAAK,CAAA,KAAA,GAAQ,IAAI,CAAC;KAEF;IAE1B,OAAO,GAAA;QACH,IAAI,IAAI,CAAC,KAAK;YACV,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AACnC,QAAA,OAAO,IAAI,CAAC;KACf;IAED,QAAQ,GAAA;QACJ,IAAI,IAAI,CAAC,KAAK;YACV,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACpC,QAAA,OAAO,IAAI,CAAC;KACf;IAED,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;KACvB;AAEJ;;ACnBK,MAAO,IAAK,SAAQ,iBAAiB,CAAA;AACvC,IAAA,WAAA,CAAa,CAAU,EAAA;QACnB,KAAK,CAAC,CAAC,CAAC,CAAC;AACT,QAAA,IAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YACrB,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,CAAE,CAAE,CAAE,CAAE,CAAE,CAAC;AACxC,SAAA;KACJ;AACJ;;ACPK,MAAO,OAAQ,SAAQ,IAAI,CAAA;AAC7B,IAAA,WAAA,CAAa,KAAW,EAAA;QACpB,KAAK,CAAC,KAAK,CAAC,CAAC;KAChB;IAED,QAAQ,GAAA;;QAEJ,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;KAC5C;AACJ;;ACTK,MAAO,QAAS,SAAQ,IAAI,CAAA;AAE9B,IAAA,WAAA,CAAa,KAAW,EAAA;QACpB,KAAK,CAAC,KAAK,CAAC,CAAC;KAChB;IAED,QAAQ,GAAA;;QAEJ,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;KAC3C;AAEJ;;ACXK,MAAO,OAAQ,SAAQ,iBAAiB,CAAA;IAE5C,WAAY,CAAA,CAAU,EAAE,IAAA,GAAe,EAAE,EAAA;QACvC,KAAK,CAAC,CAAC,CAAC,CAAC;AACT,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,KAAK,GAAG,CAAE,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAE,CAAC;AACtC,SAAA;KACF;AACF;;ACRK,MAAO,MAAO,SAAQ,iBAAiB,CAAA;AACzC,IAAA,WAAA,CAAa,CAAU,EAAA;QACnB,KAAK,CAAC,CAAC,CAAC,CAAC;AACT,QAAA,IAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAG;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAE,CAAE,CAAE,CAAE,CAAE,CAAC;AAC3C,SAAA;KACJ;AACJ;;ACPK,MAAO,KAAM,SAAQ,iBAAiB,CAAA;AACxC,IAAA,WAAA,CAAa,CAAU,EAAA;QACnB,KAAK,CAAC,CAAC,CAAC,CAAC;AACT,QAAA,IAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAG;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAE,CAAE,CAAE,CAAE,CAAE,CAAC;AAC3C,SAAA;KACJ;AACJ;;ACPK,MAAO,OAAQ,SAAQ,iBAAiB,CAAA;AAC1C,IAAA,WAAA,CAAa,CAAU,EAAA;QACnB,KAAK,CAAC,CAAC,CAAC,CAAC;AACT,QAAA,IAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAG;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAE,CAAE,CAAE,CAAE,CAAE,CAAC;AACzC,SAAA;KACJ;AACJ;;ACPK,MAAO,IAAK,SAAQ,iBAAiB,CAAA;AACvC,IAAA,WAAA,CAAa,CAAU,EAAA;QACnB,KAAK,CAAC,CAAC,CAAC,CAAC;AACT,QAAA,IAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAG;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAE,CAAE,CAAE,CAAE,CAAE,CAAC;AACzC,SAAA;KACJ;AACJ;;ACPK,MAAO,KAAM,SAAQ,iBAAiB,CAAA;AACxC,IAAA,WAAA,CAAa,CAAU,EAAA;QACnB,KAAK,CAAC,CAAC,CAAC,CAAC;AACT,QAAA,IAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAG;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAE,CAAE,CAAE,CAAE,CAAE,CAAC;AACzC,SAAA;KACJ;AACJ;;ACPK,MAAO,IAAK,SAAQ,iBAAiB,CAAA;AACvC,IAAA,WAAA,CAAa,CAAU,EAAA;QACnB,KAAK,CAAC,CAAC,CAAC,CAAC;QACT,IAAK,EAAE,CAAC,IAAE,IAAI,IAAI,CAAC,KAAG,SAAS,CAAC,EAAG;YAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,CAAE,CAAE,CAAC,CAAE,CAAE,CAAC;AACzC,SAAA;KACJ;AACJ;;ACPK,MAAO,KAAM,SAAQ,iBAAiB,CAAA;AACxC,IAAA,WAAA,CAAa,CAAU,EAAA;QACnB,KAAK,CAAC,CAAC,CAAC,CAAC;QACT,IAAK,EAAE,CAAC,IAAE,IAAI,IAAI,CAAC,KAAG,SAAS,CAAC,EAAG;YAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,CAAE,CAAE,CAAC,CAAE,CAAE,CAAC;AACzC,SAAA;KACJ;AACJ;;MCTY,OAAO,CAAA;AAElB;;;;;;;;;AASG;AACK,IAAA,OAAO,UAAU,CAAC,MAAc,EAAE,IAA4B,EAAA;AACpE,QAAA,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AAClD,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC;AAChC,YAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAC,GAAG,CAAC,CAAC;AACxC,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;;AAKG;IACH,OAAO,QAAQ,CAAC,MAAc,EAAA;AAC5B;;;;;;;;;;;;;AAaE;QAEF,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;KACnD;AACD;;;;;;AAMG;IACH,OAAO,QAAQ,CAAC,MAAc,EAAA;QAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;KACjD;AACD;;;;AAIG;IACH,OAAO,YAAY,CAAC,IAAe,EAAA;QACjC,IAAI,GAAG,GAAQ,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAEvB,QAAA,IAAI,KAAK,GAA0B,IAAI,CAAC,UAAU,CAAC;AACnD,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,KAAK,IAAI,CAAC,GAAQ,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACjC,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACpC,aAAA;AACF,SAAA;AAED,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;AAIG;IACH,OAAO,WAAW,CAAC,MAAqB,EAAA;QACtC,IAAI,MAAM,IAAI,IAAI;AAAG,YAAA,OAAO,MAAM,CAAC;AACnC,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;AACtB,aAAA,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;AACtB,aAAA,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC;AACtB,aAAA,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC;AACpB,aAAA,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;KACnC;AACD;;;;AAIG;IACH,OAAO,aAAa,CAAC,MAAqB,EAAA;QACxC,IAAI,MAAM,IAAI,IAAI;AAAG,YAAA,OAAO,MAAM,CAAC;AACnC,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;AACpB,aAAA,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;AACtB,aAAA,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;AACtB,aAAA,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AACpB,aAAA,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACrC;AAEF;;ACtFD,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;AAEvB;;AAEG;MACU,KAAK,CAAA;AAChB;;;;AAIG;IACH,OAAO,QAAQ,CAAC,KAAU,EAAA;QACxB,IAAI,KAAK,IAAI,IAAI;AACf,YAAA,OAAO,IAAI,CAAC;QACd,IAAI,KAAK,YAAY,IAAI;AACvB,YAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;KACtB;AACD;;;;AAIG;IACH,OAAO,SAAS,CAAC,KAAU,EAAA;QACzB,IAAI,KAAK,IAAI,IAAI;AACf,YAAA,OAAO,IAAI,CAAC;AACd,QAAA,IAAI,CAAC,KAAK;AACR,YAAA,OAAO,CAAC,CAAC;;QAEX,KAAK,GAAG,CAAC,KAAK,CAAC;QACf,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,CAAC,QAAQ,EAAE;AAC7C,YAAA,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAChC,YAAA,OAAO,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;AAChC,SAAA;AACD,QAAA,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;QAC5B,OAAO,KAAK,KAAK,KAAK,IAAI,SAAS,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,IAAI,CAAC,CAAC;KACtE;AACD;;;;AAIG;IACH,OAAO,QAAQ,CAAC,KAAU,EAAA;QACxB,IAAI,KAAK,IAAI,IAAI;AACf,YAAA,OAAO,IAAI,CAAC;AACd,QAAA,IAAI,CAAC,KAAK;AACR,YAAA,OAAO,CAAC,CAAC;AACX,QAAA,QAAQ,QAAQ,KAAK,CAAC;AACpB,YAAA,KAAK,QAAQ;AAAE,gBAAA,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAAC,MAAM;AACvD,SAAA;AACD,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;KACtB;AACD;;;;;AAKG;AACH,IAAA,OAAO,SAAS,CAAC,KAAU,EAAE,OAAe,EAAE,EAAA;QAC5C,IAAI,KAAK,IAAI,IAAI;AACf,YAAA,OAAO,IAAI,CAAC;AACd,QAAA,IAAI,CAAC,KAAK;AACR,YAAA,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AACxB,QAAA,QAAQ,QAAQ,KAAK,CAAC;AACpB,YAAA,KAAK,QAAQ;AAAE,gBAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAAC,MAAM;AACxD,SAAA;AACD,QAAA,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACjC;AACD;;;;AAIG;IACH,OAAO,SAAS,CAAC,KAAU,EAAA;QACzB,IAAI,KAAK,IAAI,IAAI;AACf,YAAA,OAAO,IAAI,CAAC;AACd,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AAChC,gBAAA,KAAK,MAAM,CAAC;AACZ,gBAAA,KAAK,KAAK,CAAC;AACX,gBAAA,KAAK,GAAG,CAAC;AACT,gBAAA,KAAK,GAAG,CAAC;AACT,gBAAA,KAAK,IAAI;oBACP,KAAK,GAAG,IAAI,CAAC;oBACb,MAAM;AACR,gBAAA,KAAK,OAAO,CAAC;AACb,gBAAA,KAAK,IAAI,CAAC;AACV,gBAAA,KAAK,GAAG,CAAC;AACT,gBAAA,KAAK,GAAG;oBACN,KAAK,GAAG,KAAK,CAAC;oBACd,MAAM;AACT,aAAA;AACF,SAAA;AACD,QAAA,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;KACvB;AACD;;;;AAIG;IACH,OAAO,MAAM,CAAC,KAAU,EAAA;QACtB,IAAI,KAAK,IAAI,IAAI;AACf,YAAA,OAAO,IAAI,CAAC;AACd,QAAA,MAAM,IAAI,GAAG,QAAQ,KAAK,CAAC,CAAC;QAC5B,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,YAAY,IAAI;AACjE,YAAA,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;AAIG;IACH,OAAO,MAAM,CAAC,KAAU,EAAA;QACtB,IAAI,KAAK,IAAI,IAAI;AACf,YAAA,OAAO,IAAI,CAAC;AACd,QAAA,MAAM,IAAI,GAAG,QAAQ,KAAK,CAAC,CAAC;AAC5B,QAAA,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,YAAY,IAAI;AAC1F,YAAA,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;AAIG;IACH,OAAO,UAAU,CAAC,KAAU,EAAA;QAC1B,IAAI,KAAK,IAAI,IAAI;AACf,YAAA,OAAO,IAAI,CAAC;AACd,QAAA,MAAM,IAAI,GAAG,QAAQ,KAAK,CAAC,CAAC;QAC5B,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,YAAY,IAAI;AACjE,YAAA,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7B,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;AAKG;AACH,IAAA,OAAO,MAAM,CAAC,KAAU,EAAE,IAAY,EAAA;QACpC,IAAI,KAAK,IAAI,IAAI;AACf,YAAA,OAAO,KAAK,CAAC;AACf,QAAA,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE;YAC/B,IAAI,GAAG,QAAQ,CAAC;AACjB,SAAA;QACD,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,GAAG,GAAQ,IAAI,CAAC;QACpB,IAAI,IAAI,GAAW,EAAE,CAAC;QACtB,MAAM,OAAO,GAAW,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,OAAO,IAAI,CAAC,EAAE;;AAEhB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1E,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC9C,YAAA,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAG,CAAC;AACnD,YAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1C,SAAA;AACD,QAAA,QAAQ,IAAI;AACV,YAAA,KAAK,GAAG,CAAC;AACT,YAAA,KAAK,QAAQ,CAAC;AACd,YAAA,KAAK,MAAM,CAAC;AACZ,YAAA,KAAK,WAAW,CAAC;AACjB,YAAA,KAAK,SAAS,CAAC;AACf,YAAA,KAAK,MAAM;AACT,gBAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC5B,MAAM;AACR,YAAA,KAAK,GAAG,CAAC;AACT,YAAA,KAAK,QAAQ,CAAC;AACd,YAAA,KAAK,SAAS,CAAC;AACf,YAAA,KAAK,KAAK;AACR,gBAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC5B,MAAM;AACR,YAAA,KAAK,SAAS,CAAC;AACf,YAAA,KAAK,KAAK;gBACR,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACnC,MAAM;AACR,YAAA,KAAK,OAAO;gBACV,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;gBACxC,MAAM;AACR,YAAA,KAAK,QAAQ;AACX,gBAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAE5B,gBAAA,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;gBACtB,MAAM;AACR,YAAA,KAAK,OAAO,CAAC;AACb,YAAA,KAAK,MAAM;AACT,gBAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAE5B,gBAAA,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrB,MAAM;AACR,YAAA,KAAK,MAAM;AACT,gBAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAE5B,gBAAA,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,MAAM;AACR,YAAA,KAAK,QAAQ,CAAC;AACd,YAAA,KAAK,UAAU;;AAEb,gBAAA,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC7B,MAAM;AACR,YAAA,KAAK,cAAc,CAAC;AACpB,YAAA,KAAK,OAAO;AACV,gBAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAE5B,gBAAA,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrB,MAAM;AACR,YAAA,KAAK,iBAAiB,CAAC;AACvB,YAAA,KAAK,aAAa,CAAC;AACnB,YAAA,KAAK,MAAM;AACT,gBAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAE5B,gBAAA,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,MAAM;AACR,YAAA,KAAK,KAAK,CAAC;AACX,YAAA,KAAK,SAAS;AACZ,gBAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAE5B,gBAAA,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;gBACvB,MAAM;AACR,YAAA,KAAK,MAAM;AACT,gBAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAE5B,gBAAA,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,MAAM;AACR,YAAA,KAAK,OAAO;AACV,gBAAA,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAE5B,gBAAA,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;gBACrB,MAAM;AACR,YAAA,KAAK,GAAG,CAAC;AACT,YAAA,KAAK,MAAM,CAAC;AACZ,YAAA,KAAK,SAAS,CAAC;AACf,YAAA,KAAK,SAAS;AACZ,gBAAA,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC7B,MAAM;AACR,YAAA,KAAK,GAAG,CAAC;AACT,YAAA,KAAK,MAAM;AACT,gBAAA,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,MAAM;AACR,YAAA,KAAK,GAAG,CAAC;AACT,YAAA,KAAK,MAAM;AACT,gBAAA,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,MAAM;AACR,YAAA,KAAK,GAAG,CAAC;AACT,YAAA,KAAK,UAAU,CAAC;AAChB,YAAA,KAAK,WAAW;AACd,gBAAA,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC9B,MAAM;AACR,YAAA,KAAK,MAAM,CAAC;AACZ,YAAA,KAAK,OAAO;AACV,gBAAA,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtB,MAAM;AACR,YAAA,KAAK,MAAM;AACT,gBAAA,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC5B,MAAM;AACR,YAAA,KAAK,KAAK;gBACR,IAAI,KAAK,YAAY,WAAW,EAAE;oBAChC,GAAG,GAAG,KAAK,CAAC;AACb,iBAAA;AAAM,qBAAA;oBACL,IAAI;wBACF,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,qBAAA;AAAC,oBAAA,OAAO,KAAK,EAAE;wBACd,GAAG,GAAG,IAAI,CAAC;AACZ,qBAAA;AACF,iBAAA;gBACD,MAAM;AACR,YAAA;gBACE,GAAG,GAAG,IAAI,CAAC;AACd,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AAEF;;MChSY,OAAO,CAAA;AAElB;;;;AAIG;AACH,IAAA,aAAa,KAAK,CAAC,YAAoB,EAAA;AACrC,QAAA,IAAI,OAAkC,CAAC;QACvC,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAI;YACrC,OAAO,GAAG,QAAQ,CAAC;AACrB,SAAC,CAAC,CAAC;QACH,UAAU,CAAC,MAAM,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AAC1C,QAAA,OAAO,OAAO,CAAC;KAChB;AAEF;;ACjBD;;AAEG;MACU,OAAO,CAAA;AAElB;;;;;;;;;AASG;AACH,IAAA,OAAO,KAAK,CAAC,KAAa,EAAE,OAAe,CAAC,EAAA;QAC1C,IAAI,GAAG,GAAG,GAAG,CAAC;AACd,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;AACjB,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACnD,YAAA,MAAM,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC;;YAEvB,IAAI,KAAK,GAAG,CAAC;AACX,gBAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAC,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC;iBAClD,IAAI,KAAK,GAAG,CAAC;gBAChB,GAAG,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,GAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;;AAEzD,gBAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,IAAI,GAAG,CAAC,EAAE;AACZ,gBAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;;AAKG;AACH,IAAA,OAAO,QAAQ,CAAC,KAAa,EAAE,OAAe,CAAC,EAAA;AAC7C,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;AACjB,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACnD,IAAI,IAAI,IAAI,CAAC,EAAE;AACb,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1B,aAAA;AACD,YAAA,MAAM,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC;YACvB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACtC,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;;AAKG;AACH,IAAA,OAAO,QAAQ,CAAC,KAAa,EAAE,OAAgB,EAAA;AAC7C,QAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC1B,YAAA,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC;YACtB,OAAO,GAAG,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;AAC3F,SAAA;AACD,QAAA,OAAO,GAAG,CAAA;KACX;AACD;;;;;AAKG;AACH,IAAA,OAAO,KAAK,CAAC,EAAO,EAAE,EAAO,EAAA;AAC3B,QAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;KACrC;AACD;;;;;;;AAOG;AACH,IAAA,OAAO,OAAO,CAAC,KAAa,EAAE,QAAgB,EAAE,QAAgB,EAAA;QAC9D,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACpF,YAAA,OAAO,KAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,QAAQ,CAAC;AAC/C,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;AAjFuB,OAAe,CAAA,eAAA,GAAG,EAAE;;ACJ9C,MAAM,GAAG,GAAG,SAAS,CAAC;AAgBtB;AACA,MAAM,KAAK,GAAuB;AAChC,IAAA,MAAM,EAAE;AACN,QAAA,CAAC,EAAE;YACD,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;AACpC,YAAA,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AAC3C,YAAA,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACtD,SAAA;AACD,QAAA,CAAC,EAAE;YACD,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;AACjC,YAAA,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACxC,YAAA,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACnD,SAAA;AACD,QAAA,CAAC,EAAE;YACD,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;AACjC,YAAA,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACxC,YAAA,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACnD,SAAA;AACD,QAAA,CAAC,EAAE;YACD,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;AAChC,YAAA,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACvC,YAAA,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AAClD,SAAA;AACD,QAAA,CAAC,EAAE;YACD,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;AAC/B,YAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACrC,YAAA,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AAC9C,SAAA;AACF,KAAA;IACD,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAC3F,IAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC;AACrH,IAAA,KAAK,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,CAAC;AAC7I,IAAA,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC;IAC9G,iBAAiB,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE;AAC1C,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE;AACL,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;AAC9B,oBAAA,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACpC,oBAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AAC/C,iBAAA;AACD,gBAAA,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;AAChC,oBAAA,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACtC,oBAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AAC/C,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA,KAAK,EAAE;AACL,gBAAA,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;AAC/B,oBAAA,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACtC,oBAAA,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACjD,iBAAA;AACD,gBAAA,QAAQ,EAAE;oBACR,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;AAC7B,oBAAA,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AACpC,oBAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AAC/C,iBAAA;AACF,aAAA;AACD,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,KAAK,EAAE,GAAG;AACX,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA,KAAK,EAAE;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACxC,gBAAA,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC3H,aAAA;AACD,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,KAAK,EAAE,GAAG;AACX,SAAA;AACF,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,KAAK,EAAE,OAAO;AACf,KAAA;CACF,CAAC;AACF;AACA,MAAM,KAAK,GAAuB;AAChC,IAAA,MAAM,EAAE;QACN,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACzC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACtC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACrC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACrC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACvC,KAAA;IACD,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;AACtF,IAAA,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC3F,QAAQ,EAAE,CAAC,SAAS,CAAC;AACrB,IAAA,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC;AAC9G,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE;AACL,YAAA,KAAK,EAAE;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;gBAC5E,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC1E,aAAA;AACD,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA,KAAK,EAAE;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;gBACxC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAClF,aAAA;AACD,YAAA,KAAK,EAAE,KAAK;AACb,SAAA;AACF,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,WAAW,EAAE,GAAG;AAChB,QAAA,SAAS,EAAE,GAAG;AACf,KAAA;CACF,CAAA;AACD;AACA,MAAM,KAAK,GAAuB;AAChC,IAAA,MAAM,EAAE;QACN,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACzC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACtC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACrC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACrC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACvC,KAAA;IACD,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;AACtF,IAAA,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAC3F,QAAQ,EAAE,CAAC,SAAS,CAAC;AACrB,IAAA,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC;AAC9G,IAAA,QAAQ,EAAE;AACR,QAAA,KAAK,EAAE;AACL,YAAA,KAAK,EAAE;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;gBAC5F,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC7E,aAAA;AACD,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA,KAAK,EAAE;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;gBACxC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAClF,aAAA;AACD,YAAA,KAAK,EAAE,KAAK;AACb,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA,KAAK,EAAE;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;gBAC5E,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC1E,aAAA;AACD,YAAA,KAAK,EAAE,KAAK;AACb,SAAA;AACF,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,WAAW,EAAE,GAAG;AAChB,QAAA,SAAS,EAAE,GAAG;AACf,KAAA;CACF,CAAA;AACD;AACa,MAAA,uBAAuB,GAAG,IAAI,GAAG,CAAuC;IACnF,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;AAC/B,IAAA,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;AAClD,CAAA;;AC9KD;;;;AAIG;MACU,aAAa,CAAA;AACxB;;;;;;;AAOG;IACK,OAAO,WAAW,CAAC,MAAc,EAAE,aAAiC,EAAE,KAAmC,EAAE,OAAgF,EAAA;QACjM,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,KAAK,GAAG,mBAAmB,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;QAE3D,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE;YACpC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,EAAE;gBACT,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAChC,gBAAA,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;gBACjD,IAAI,MAAM,GAAG,CAAC,EAAE;oBACd,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC;AACpC,iBAAA;gBACD,GAAG,IAAI,GAAG,CAAC;AACZ,aAAA;YACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;AAClC,SAAA;;QAED,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,EAAE;YACT,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9B,YAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;gBAC9B,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AACxD,aAAA;AAAM,iBAAA;AACL,gBAAA,GAAG,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AACtC,aAAA;AACF,SAAA;;QAED,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,EAAE;YACT,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE;;AAExB,gBAAA,SAAS,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;gBAC7C,MAAM,GAAG,CAAC,CAAC;AACZ,aAAA;AAAM,iBAAA;gBACL,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,gBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE;AAClD,oBAAA,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;AACtC,iBAAA;AAAM,qBAAA;oBACL,SAAS,IAAI,GAAG,CAAC;AAClB,iBAAA;AACF,aAAA;AACF,SAAA;;AAED,QAAA,IAAI,IAAI,CAAC;QACT,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,WAAW,GAAgC,SAAS,CAAC;QACzD,IAAI,aAAa,KAAK,SAAS,EAAE;AAC/B,YAAA,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7G,SAAA;aAAM,IAAI,OAAO,CAAC,QAAQ,EAAE;YAC3B,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,WAAW,EAAE;AACf,gBAAA,SAAS,GAAG,WAAW,CAAC,SAAS,IAAI,IAAI,CAAC;gBAC1C,IAAI,OAAO,CAAC,UAAU,EAAE;AACtB,oBAAA,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC5G,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACrD,oBAAA,SAAS,IAAI,SAAS,IAAI,EAAE,GAAG,SAAS,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;AACtD,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5G,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAClB,SAAA;QAED,IAAI,MAAM,GAAG,CAAC,EAAE;YACd,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9B,YAAA,IAAI,SAAS,IAAI,KAAK,CAAC,iBAAiB,KAAK,OAAO,CAAC,UAAU,IAAI,aAAa,IAAI,CAAC,CAAC,EAAE;gBACtF,IAAI,GAAG,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;AAChD,aAAA;YACD,SAAS,IAAI,IAAI,CAAC;AACnB,SAAA;aAAM,IAAI,SAAS,IAAI,CAAC,EAAE;AACzB,YAAA,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,SAAA;AAED,QAAA,OAAO,CAAC,GAAG,GAAG,SAAS,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC;KAC5J;AACD;;;;;;AAMG;AACH,IAAA,OAAO,YAAY,CAAC,KAAa,EAAE,OAAsC,EAAA;QACvE,MAAM,OAAO,GAAG,OAAO,EAAE,MAAM,YAAY,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEjG,MAAM,KAAK,GAAG,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,SAAA;QACD,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACxB,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,GAAG,CAAC;AACtC,SAAA;QAED,OAAO,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;KACvF;AACD;;;;;;;AAOG;AACH,IAAA,OAAO,aAAa,CAAC,KAAa,EAAE,OAAqF,EAAA;QACvH,MAAM,OAAO,GAAG,OAAO,EAAE,MAAM,YAAY,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjG,MAAM,KAAK,GAAG,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC;QAE7D,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,SAAS,CAAC,CAAA,gBAAA,EAAmB,OAAO,CAAC,QAAQ,CAAE,CAAA,CAAC,CAAC;AAC5D,SAAA;AAED,QAAA,IAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,EAAE,CAAC;AACvC,QAAA,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACnE,YAAA,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,SAAA;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC7B,MAAM,IAAI,SAAS,CAAC,CAAqB,kBAAA,EAAA,QAAQ,CAAgB,aAAA,EAAA,OAAO,CAAC,QAAQ,CAAG,CAAA,CAAA,CAAC,CAAC;AACvF,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC3B,YAAA,MAAM,IAAI,UAAU,CAAC,kBAAkB,KAAK,CAAA,CAAE,CAAC,CAAC;AACjD,SAAA;QAED,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxB,YAAA,QAAQ,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC;AAC9C,SAAA;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,OAAO,IAAI,GAAG,CAAC,CAAC;QAEpD,IAAI,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QACnG,IAAI,IAAI,IAAI,EAAE,EAAE;YACd,IAAI,IAAI,GAAG,CAAC;AACb,SAAA;AACD,QAAA,OAAO,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI;cACxC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI;AAC/B,cAAE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAC9B,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,IAAI,IAAI,EAAE,CAC9F,CACN,CAAC;KACjB;AACD;;;;;;;;AAQG;AACH,IAAA,OAAO,SAAS,CAAC,KAAa,EAAE,IAAY,EAAE,OAAqG,EAAA;QACjJ,MAAM,OAAO,GAAG,OAAO,EAAE,MAAM,YAAY,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACjG,QAAA,IAAI,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,MAAM,EAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AACzI,QAAA,IAAK,EAAE,OAAO,EAAE,aAAa,IAAE,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,EAAG;AACjE,YAAA,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,KAAK,EAAE,EAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAC,CAAC,GAAG,GAAG,GAAE,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACnH,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAEF;;AC3LD;;AAEG;AACG,MAAgB,YAAa,SAAQ,MAAM,CAAA;AAQ/C;;AAEG;AACM,IAAA,MAAM,CAAC,KAAa,EAAA;AAC3B,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC5B;;AAXa,YAAO,CAAA,OAAA,GAAG,WAAW,CAAC;AACtB,YAAO,CAAA,OAAA,GAAG,WAAW,CAAC;AACtB,YAAQ,CAAA,QAAA,GAAG,YAAY,CAAC;AACxB,YAAO,CAAA,OAAA,GAAG,WAAW,CAAC;AACtB,YAAI,CAAA,IAAA,GAAG,QAAQ;;ACX/B;;;;;;;;;;;;;AAaiG;AA8BjG,MAAM,SAAS,GAAG,WAAW,CAAC;AAC9B,MAAM,YAAY,GAAG,YAAY,CAAC;AAElC,MAAM,eAAe,GAAS,WAAW,CAAC;AAC1C,MAAM,oBAAoB,GAAI,CAAC,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;AAqBG;AACG,MAAO,aAAc,SAAQ,YAAY,CAAA;IAS7C,WAAY,CAAA,OAAA,GAAkB,eAAe,EAAE,OAA8B,EAAA;AAC3E,QAAA,KAAK,EAAE,CAAC;QAJF,IAAY,CAAA,YAAA,GAAiB,KAAK,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAMxE,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,YAAY,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,CAAC;AAEjG,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,CAAC;QAC9D,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,oBAAoB,EAAE,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAEhE,IAAI;AACF,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAE,CAAC,WAAW,EAAE,CAAA;AAC3E,YAAA,QAAQ,SAAS;gBACf,KAAK,YAAY,CAAC,OAAO,CAAC;gBAC1B,KAAK,YAAY,CAAC,OAAO,CAAC;AAC1B,gBAAA,KAAK,WAAW;AACd,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1D,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC7B,MAAM;gBACR,KAAK,YAAY,CAAC,QAAQ;oBACxB,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrG,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC7B,MAAM;gBACR,KAAK,YAAY,CAAC,IAAI;oBACpB,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACzF,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC7B,MAAM;gBACR,KAAK,YAAY,CAAC,OAAO;AACvB,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AACvE,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC7B,MAAM;AACR,gBAAA;;AAEE,oBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,KAAI,EAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAA,EAAE,CAAC,CAAC;AAC3G,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;;;;;AAKV,YAAA,IAAI,CAAC,MAAM,GAAG,CAAU,CAAC;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC;AACxD,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChE,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9B,SAAA;KACF;AAEO,IAAA,SAAS,CAAC,IAAY,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;KAC/B;IAEO,iBAAiB,CAAC,OAAe,MAAM,EAAA;QAC7C,MAAM,OAAO,GAAe,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC5F,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QAExB,IAAI,GAAG,IAAI,CAAC,EAAE;AACZ,YAAA,OAAO,OAAO,CAAC;AAChB,SAAA;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,YAAA,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;AACtB,YAAA,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;AAClB,YAAA,OAAO,OAAO,CAAC;AAChB,SAAA;QACD,OAAO,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;;QAG3D,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9D,QAAA,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;;QAElD,MAAM,IAAI,GAAG,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QAE1D,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3C,QAAA,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AAC7D,QAAA,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;;;QAI7D,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;;AAE9C,QAAA,OAAO,CAAC,OAAO,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;;AAE/D,QAAA,OAAO,CAAC,SAAS,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;;AAG9D,QAAA,IAAI,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,CAAC,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,OAAO,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACxC,QAAA,OAAO,OAAO,CAAC;KAChB;AAEO,IAAA,aAAa,CAAC,KAAa,EAAE,OAAmB,EAAE,OAAiE,EAAA;AACzH,QAAA,MAAM,MAAM,GAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC3E,QAAA,IAAI,UAAU,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAI,UAAU,EAAE;;AAEd,YAAA,MAAM,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC;AACtB,YAAA,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;AACnB,SAAA;QAED,IAAI,UAAU,GAAG,GAAG,CAAC;AACrB,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE;YAChE,UAAU,GAAG,KAAK,CAAC;AACpB,SAAA;QACD,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;;;QAGlF,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;;AAIpC,QAAA,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnE,QAAA,IAAI,CAAC,WAAW,KAAK,WAAW,IAAI,WAAW,CAAC,MAAM,IAAI,YAAY,CAAC,EAAE;YACvE,WAAW,GAAG,YAAY,GAAG,CAAC;AAC5B,kBAAE,EAAE;kBACF,CAAC,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC9E,SAAA;AAED,QAAA,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC;AAC5B,QAAA,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC;AAC9B,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;QAGrC,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE;;YAEjD,UAAU,GAAG,KAAK,CAAC;AACnB,YAAA,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;AAClB,SAAA;AAED,QAAA,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,mBAAmB,EAAE;AAC9C,YAAA,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;AACnB,SAAA;AAAM,aAAA,IAAI,UAAU,IAAI,OAAO,CAAC,mBAAmB,EAAE;AACpD,YAAA,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;AACnB,SAAA;AAAM,aAAA,IAAI,UAAU,EAAE;YACrB,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,mBAAmB;AACnE,kBAAE,EAAE;kBACF,GAAG,CAAC;AACT,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;IAEO,cAAc,CAAC,MAAmB,EAAE,OAAmB,EAAA;AAC7D,QAAA,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;;AAEnB,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;;QAE7D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEnC,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7C,QAAA,IAAI,WAAW,GAAG,CAAC,CAAC,EAAE;AACpB,YAAA,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,WAAW,EAAE,GAAG,CAAC,CAAC;AACjF,SAAA;aAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACvC,YAAA,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;AACrB,SAAA;;;AAID,QAAA,MAAM,YAAY,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAClE,QAAA,IAAI,YAAY,EAAE;YAChB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;AACxC,YAAA,MAAM,MAAM,GAAG,GAAG,GAAG,YAAY,CAAC;YAClC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE;gBACrC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;;AAE7C,gBAAA,IAAI,EAAE,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,YAAY,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,YAAY,EAAE;AACtE,oBAAA,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;AACpC,iBAAA;AACF,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;AAChC,SAAA;QAED,MAAM,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;AACnD,cAAE,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ;cACjC,EAAE,CAAC;KAER;AACD;;AAEG;AACM,IAAA,MAAM,CAAC,KAAoB,EAAA;QAElC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;;YAEzC,QAAQ,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;AACrC,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;;YAEnB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC;AACpE,SAAA;QAED,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACnC,QAAA,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;AAC5C,YAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAChC,SAAA;AAAM,aAAA,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;AAClD,YAAA,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,eAAe,GAAG,IAAI,CAAC;AACxB,SAAA;;AAGD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;AACzF,QAAA,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA,EAAG,MAAM,CAAC,IAAI,CAAG,EAAA,MAAM,CAAC,MAAM,CAAA,EAAG,OAAO,CAAC,MAAM,EAAE,CAAC;KAC3E;;AAEF;;AC/RD;;;;;AAKG;AACG,MAAO,YAAa,SAAQ,MAAM,CAAA;AACtC;;;;;;;;;;AAUG;AACH,IAAA,OAAO,MAAM,CAAC,KAAoB,EAAE,OAAgB,EAAA;AAElD,QAAA,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAChC,QAAA,IAAK,CAAC,OAAO,KAAK,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,GAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAG;AAClF,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACtB,SAAA;AAED,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,KAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAEtD,IAAI,KAAK,IAAI,IAAI,EAAE;AACjB,YAAA,OAAO,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7B,SAAA;QAED,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,QAAA,IAAI,CAAC,CAAC;AACN,QAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;YACtB,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,EAAE;AACV,gBAAA,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AACzC,gBAAA,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;AAC5C,aAAA;AAAM,iBAAA;AACL,gBAAA,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AACtB,gBAAA,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBACpB,MAAM;AACP,aAAA;AACF,SAAA;QAED,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,IAAI,GAAG,CAAE,CAAC;AACnF,SAAA;AAED,QAAA,OAAO,GAAG,CAAC;KACZ;AAEF;;MCvDY,QAAQ,CAAA;AAIjB,IAAA,WAAA,CAAY,CAA6B,EAAA;QAHxB,IAAQ,CAAA,QAAA,GAAW,MAAM,CAAC;QACnC,IAAG,CAAA,GAAA,GAAG,CAAC,CAAC;QAGZ,IAAI,CAAC,YAAY,QAAQ,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE;AACjE,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAC1B,SAAA;AAAM,aAAA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;AAC5B,YAAA,IAAI,CAAC,GAAG,GAAG,CAAE,CAAC;AACjB,SAAA;KACJ;AAED,IAAA,OAAO,CAAC,CAA4B,EAAA;QAChC,IAAI,CAAC,IAAI,IAAI;AAAG,YAAA,OAAO,GAAG,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,GAAE,CAAC,CAAC,CAAC,CAAC;KACzE;IAED,OAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;KACzB;IAED,OAAO,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;KAC/B;IAED,QAAQ,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC;KACjC;IAED,UAAU,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;KAC1B;AAED,IAAA,GAAG,CAAC,CAA4B,EAAA;QAC5B,IAAI,CAAC,IAAI,IAAI,EAAE;AACX,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAC3C,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,QAAQ,CAAC,CAA4B,EAAA;QACjC,IAAI,CAAC,IAAI,IAAI,EAAE;AACX,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AAC3C,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACf;IAED,OAAO,GAAA;QACH,OAAO,IAAI,CAAC,GAAG,CAAC;KACnB;IAED,MAAM,GAAA;AACF,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;KACzB;IAED,QAAQ,GAAA;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAE,IAAI,CAAC,OAAO,EAAE,CAAE,CAAC;AAC1C,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AACpC,QAAA,OAAO,IAAI,GAAC,cAAc,GAAE,CAAC,CAAC,WAAW,EAAE;AAC3B,YAAA,GAAG,GAAC,CAAC,CAAC,aAAa,EAAE;AACrB,YAAA,GAAG,GAAC,CAAC,CAAC,aAAa,EAAE;AACrB,YAAA,GAAG,GAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;KAC9C;AAEJ;;ICnEW,WAIX;AAJD,CAAA,UAAY,UAAU,EAAA;AAClB,IAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,SAAY,CAAA;AACZ,IAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX,IAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACf,CAAC,EAJW,UAAU,KAAV,UAAU,GAIrB,EAAA,CAAA,CAAA;;ACJM,IAAI,YAAY,GAAG,UAAU,GAAO,EAAA;AACvC,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC;AACrC,CAAC,CAAC;AACK,IAAI,kBAAkB,GAAG,UAAU,GAAO,EAAA;AAC7C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC;AAC3C,CAAC,CAAC;AACK,IAAI,kBAAkB,GAAG,UAAU,GAAO,EAAA;AAC7C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC;AAC3C,CAAC,CAAC;AACK,IAAI,gBAAgB,GAAG,UAAU,GAAO,EAAA;AAC3C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC;AACzC,CAAC,CAAC;AACK,IAAI,eAAe,GAAG,UAAU,GAAO,EAAA;AAC5C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC;AACtC,CAAC,CAAC;AACK,IAAI,eAAe,GAAG,UAAU,GAAO,EAAA;AAC1C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC;AACxC,CAAC,CAAC;AACK,IAAI,gBAAgB,GAAG,UAAU,GAAO,EAAA;AAC3C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC;AACzC,CAAC,CAAC;AACK,IAAI,eAAe,GAAG,UAAU,GAAO,EAAA;AAC1C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,eAAe,CAAC;AACxC,CAAC,CAAC;AACK,IAAI,aAAa,GAAG,UAAU,GAAO,EAAA;AACxC,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC;AACtC,CAAC,CAAC;AACK,IAAI,iBAAiB,GAAG,UAAU,GAAO,EAAA;AAC5C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,iBAAiB,CAAC;AAC1C,CAAC,CAAC;AACK,IAAI,gBAAgB,GAAG,UAAU,GAAO,EAAA;AAC3C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC;AACzC,CAAC,CAAC;AACK,IAAI,mBAAmB,GAAG,UAAU,GAAO,EAAA;AAC9C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,mBAAmB,CAAC;AAC5C,CAAC,CAAC;AACK,IAAI,iBAAiB,GAAG,UAAU,GAAO,EAAA;AAC5C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,iBAAiB,CAAC;AAC1C,CAAC,CAAC;AACK,IAAI,gBAAgB,GAAG,UAAU,GAAO,EAAA;AAC3C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC;AACzC,CAAC,CAAC;AACK,IAAI,uBAAuB,GAAG,UAAU,GAAO,EAAA;AAClD,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,uBAAuB,CAAC;AAChD,CAAC,CAAC;AACK,IAAI,uBAAuB,GAAG,UAAU,IAAQ,EAAA;AACnD,IAAA,OAAO,IAAI,CAAC,IAAI,KAAK,uBAAuB,CAAC;AACjD,CAAC,CAAC;AACK,IAAI,kBAAkB,GAAG,UAAU,GAAO,EAAA;AAC7C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,kBAAkB,CAAC;AAC3C,CAAC,CAAC;AACK,IAAI,gBAAgB,GAAG,UAAU,GAAO,EAAA;AAC3C,IAAA,OAAO,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC;AACzC,CAAC;;MC7CY,SAAS,CAAA;AAIlB,IAAA,OAAO,sBAAsB,CAAC,IAAW,EAAE,IAAc,EAAA;AACrD,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;AAClB,QAAA,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;KACpD;AAED,IAAA,OAAO,oBAAoB,CAAC,IAAW,EAAE,IAAc,EAAA;AACnD,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACnB,QAAA,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;KACrD;IAED,OAAO,yBAAyB,CAAC,IAAc,EAAA;AAC3C,QAAA,IAAI,IAAI,EAAE;AACN,YAAA,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;AAC1D,SAAA;KACJ;IAED,OAAO,uBAAuB,CAAC,KAAsC,EAAA;AACjE,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACxB,YAAA,SAAS,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AACjE,SAAA;KACJ;IAED,OAAO,qBAAqB,CAAC,KAAsC,EAAA;AAC/D,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AACxB,YAAA,SAAS,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAChE,SAAA;KACJ;IAED,OAAO,0BAA0B,CAAC,KAAiB,EAAA;AAC/C,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YACxB,SAAS,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,SAAA;KACJ;IAED,OAAO,sBAAsB,CAAC,IAAW,EAAA;AACrC,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;KACnD;IAED,OAAO,WAAW,CAAC,IAAY,EAAA;QAC3B,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC9B,OAAO,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACvC,SAAA;QACD,OAAO,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KACxC;;AAnDc,SAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;AACvC,SAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;AAqD3D,IAAI,QAAQ,GAAI,CAAC,CAAK,KAAc,EAAA,OAAO,QAAO,CAAC,CAAC,KAAG,QAAQ,CAAA,EAAC,CAAC;AACjE,IAAI,MAAM,GAAM,CAAC,CAAK,KAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,EAAC,EAAC,CAAC;AAEvE;AACA,SAAS,CAAC,uBAAuB,CAAC;;IAE9B,EAAC,IAAI,EAAC,SAAS,EAAK,IAAI,EAAE,CAAC,CAAK,EAAE,EAAM,EAAE,EAAM,KAAgB,EAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;AAC9F,IAAA,EAAC,IAAI,EAAC,MAAM,EAAQ,IAAI,EAAE,CAAC,CAAK,EAAE,IAAQ,EAAE,GAAA,GAAW,IAAI,OAAW,OAAO,CAAC,CAAC,IAAE,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAC,EAAC;IACnI,EAAC,IAAI,EAAC,OAAO,EAAO,IAAI,EAAE,CAAC,EAAM,EAAE,EAAM,OAAO,OAAO,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA,EAAC,EAAE;IAC/E,EAAC,IAAI,EAAC,QAAQ,EAAM,IAAI,EAAE,CAAC,EAAM,EAAE,EAAM,OAAO,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAC,EAAE;AACjF,IAAA,EAAC,IAAI,EAAC,KAAK,EAAS,IAAI,EAAE,CAAC,IAAY,EAAE,EAAM,EAAE,EAAM,KAAM,EAAA,OAAO,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,EAAC,EAAE;IACtF,EAAC,IAAI,EAAC,QAAQ,EAAM,IAAI,EAAE,CAAC,CAAM,EAAE,GAAG,IAAW,KAAM,EAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAC,EAAC;IACjF,EAAC,IAAI,EAAC,QAAQ,EAAM,IAAI,EAAE,CAAC,CAAK,OAAI,QAAQ,CAAC,KAAG,IAAI,EAAC,EAAC,EAAC;IACvD,EAAC,IAAI,EAAC,UAAU,EAAI,IAAI,EAAE,CAAC,CAAK,OAAI,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAC,EAAC;IACjE,EAAC,IAAI,EAAC,QAAQ,EAAM,IAAI,EAAE,CAAC,EAAM,EAAE,EAAM,OAAO,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAC,EAAE;AACjF,IAAA,EAAC,IAAI,EAAC,KAAK,EAAS,IAAI,EAAE,CAAC,CAAQ,EAAE,CAAQ,EAAE,CAAQ,OAAO,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,EAAE;AACnG,IAAA,EAAC,IAAI,EAAC,QAAQ,EAAM,IAAI,EAAE,CAAC,CAAK,KAAM,EAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA,EAAC,EAAE;;AAEzD,IAAA,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAQ,KAAI,EAAE,IAAG,CAAC,IAAE,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAC,EAAE;AAChG,IAAA,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAQ,KAAI,EAAE,IAAG,CAAC,IAAE,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAC,EAAE;AACvG,IAAA,EAAC,IAAI,EAAC,QAAQ,EAAU,IAAI,EAAE,CAAC,CAAQ,EAAE,KAAY,KAAI,EAAE,IAAG,CAAC,IAAE,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,GAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAC,EAAE;IACnH,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAQ,OAAI,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAC,EAAC;IACvE,EAAC,IAAI,EAAC,QAAQ,EAAU,IAAI,EAAE,CAAC,CAAQ,EAAE,CAAkB,GAAA,QAAQ,OAAI,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,EAAC,EAAC;IACpG,EAAC,IAAI,EAAC,QAAQ,EAAU,IAAI,EAAE,CAAC,CAAQ,EAAE,CAAkB,GAAA,QAAQ,OAAI,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,EAAC,EAAC;AACpG,IAAA,EAAC,IAAI,EAAC,UAAU,EAAQ,IAAI,EAAE,CAAC,CAAQ,EAAE,SAAgB,EAAE,IAAY,OAAM,IAAG,CAAC,IAAE,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,GAAC,CAAC,EAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAAC,EAAE;AACjJ,IAAA,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAQ,EAAE,KAAY,KAAM,EAAA,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,EAAC,EAAC;IACvI,EAAC,IAAI,EAAC,QAAQ,EAAU,IAAI,EAAE,CAAC,CAAQ,EAAE,GAAG,CAAO,KAAI,EAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA,EAAC,EAAE;AACxF,IAAA,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAQ,OAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAC,EAAE,CAAC,EAAC,EAAC;IAC9F,EAAC,IAAI,EAAC,SAAS,EAAS,IAAI,EAAE,CAAC,CAAQ,OAAI,OAAO,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAC,EAAC;IACvE,EAAC,IAAI,EAAC,QAAQ,EAAU,IAAI,EAAE,CAAC,CAAQ,KAAI,EAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,EAAC;IAC1E,EAAC,IAAI,EAAC,UAAU,EAAQ,IAAI,EAAE,CAAC,CAAQ,OAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,EAAC;IAC/D,EAAC,IAAI,EAAC,WAAW,EAAO,IAAI,EAAE,CAAC,CAAQ,EAAE,CAAQ,OAAI,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE,EAAC;AAChK,IAAA,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAS,OAAI,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA,EAAC,EAAC;IAC5F,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAQ,EAAE,SAAgB,OAAI,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA,EAAC,EAAC;IAChG,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAQ,EAAE,KAAY,OAAM,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAC,EAAE;IAC5F,EAAC,IAAI,EAAC,UAAU,EAAQ,IAAI,EAAE,CAAC,CAAQ,EAAE,KAAc,OAAO,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAC,EAAE;IACnG,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAQ,KAAG,EAAC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAC,EAAC;AAC5E,IAAA,EAAC,IAAI,EAAC,OAAO,EAAW,IAAI,EAAE,CAAC,CAAQ,OAAM,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,CAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,EAAC,EAAE;AACtG,IAAA,EAAC,IAAI,EAAC,OAAO,EAAW,IAAI,EAAE,CAAC,CAAQ,EAAE,MAAc,KAAoB,EAAA,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAE,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAC,EAAE;IAC1I,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAQ,EAAE,IAAW,EAAE,KAAa,KAAM,EAAA,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,QAAO,KAAK,CAAC,KAAG,QAAQ,GAAC,IAAI,GAAC,KAAK,GAAC,SAAS,CAAC,CAAC,EAAC,EAAE;IAClL,EAAC,IAAI,EAAC,QAAQ,EAAU,IAAI,EAAE,CAAC,CAAQ,OAAI,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAC,EAAC;IACtE,EAAC,IAAI,EAAC,SAAS,EAAS,IAAI,EAAE,CAAC,CAAQ,EAAE,IAAW,EAAE,MAAc,KAAM,EAAA,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,OAAO,CAAA,EAAG,CAAC,CAAE,CAAA,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAC,EAAE;IAChJ,EAAC,IAAI,EAAC,UAAU,EAAQ,IAAI,EAAE,CAAC,CAAQ,EAAE,IAAW,EAAE,MAAc,KAAM,EAAA,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,GAAC,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAC,EAAE;IAC9I,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAQ,EAAE,SAAgB,EAAE,KAAa,KAAM,EAAA,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAAC,EAAE;IAClJ,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAQ,EAAE,SAAgB,EAAE,KAAa,KAAM,EAAA,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAE,OAAO,CAAC,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EAAC,EAAE;IACvJ,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAQ,OAAM,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA,EAAC,EAAC;AACvE,IAAA,EAAC,IAAI,EAAC,QAAQ,EAAU,IAAI,EAAE,CAAC,CAAQ,EAAE,KAAY,KAAM,EAAA,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAC,EAAE;IACpH,EAAC,IAAI,EAAC,SAAS,EAAS,IAAI,EAAE,CAAC,CAAQ,EAAE,SAAgB,EAAE,WAAkB,EAAE,MAAe,KAAI,EAAE,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,OAAO,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,GAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,EAAC,EAAE;IAC1N,EAAC,IAAI,EAAC,SAAS,EAAS,IAAI,EAAE,CAAC,CAAQ,OAAI,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAC,EAAC;IACvE,EAAC,IAAI,EAAC,OAAO,EAAW,IAAI,EAAE,CAAC,CAAQ,EAAE,KAAY,OAAM,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAC,EAAE;IAC7F,EAAC,IAAI,EAAC,WAAW,EAAO,IAAI,EAAE,CAAC,CAAQ,EAAE,KAAc,OAAO,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAC,EAAE;AACpG,IAAA,EAAC,IAAI,EAAC,OAAO,EAAW,IAAI,EAAE,CAAC,CAAA,GAAS,CAAC,KAAM,EAAA,IAAI,CAAC,GAAC,CAAC,EAAE;AAAC,YAAA,OAAO,EAAE,CAAC;SAAC,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAC,EAAC;IAC5F,EAAC,IAAI,EAAC,YAAY,EAAM,IAAI,EAAE,CAAC,CAAQ,EAAE,SAAgB,EAAE,IAAY,KAAM,EAAA,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAE,OAAO,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAAC,EAAE;IACpJ,EAAC,IAAI,EAAC,QAAQ,EAAU,IAAI,EAAE,CAAC,CAAQ,EAAE,IAAW,EAAE,EAAU,KAAM,EAAA,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAC,EAAE;IACpI,EAAC,IAAI,EAAC,OAAO,EAAW,IAAI,EAAE,CAAC,CAAQ,EAAE,CAAQ,OAAI,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE,EAAC;AAC5J,IAAA,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAQ,EAAE,KAAc,KAAM,EAAA,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,CAAE,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAC,EAAE;IAChI,EAAC,IAAI,EAAC,SAAS,EAAS,IAAI,EAAE,CAAC,CAAQ,EAAE,KAAc,OAAO,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAC,EAAE;IACpG,EAAC,IAAI,EAAC,WAAW,EAAO,IAAI,EAAE,CAAC,CAAQ,EAAE,KAAc,OAAO,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAC,EAAE;AACnG,IAAA,EAAC,IAAI,EAAC,OAAO,EAAW,IAAI,EAAE,CAAC,CAAQ,OAAM,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,CAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,EAAC,EAAE;AACtG,IAAA,EAAC,IAAI,EAAC,SAAS,EAAS,IAAI,EAAE,CAAC,CAAQ,OAAM,IAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,CAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAC,EAAC;;AAG/K,IAAA,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAqB,KAAI,EAAG,OAAO,CAAC,CAAC,IAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,EAAC,EAAE;AACnG,IAAA,EAAC,IAAI,EAAC,UAAU,EAAQ,IAAI,EAAE,CAAC,CAAqB,KAAI,EAAG,OAAO,CAAC,CAAC,IAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,EAAC,EAAE;AACnG,IAAA,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAO,KAAI,EAAE,CAAC,GAAG,CAAC,KAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,OAAO,EAAE,GAAC,IAAI,CAAA,EAAC,EAAE;IACrG,EAAC,IAAI,EAAC,SAAS,EAAS,IAAI,EAAE,CAAC,CAAO,KAAI,EAAE,CAAC,GAAG,CAAC,KAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,EAAC,OAAO,EAAC,MAAM,EAAC,CAAC,GAAC,IAAI,CAAA,EAAC,EAAE;AACrI,IAAA,EAAC,IAAI,EAAC,WAAW,EAAO,IAAI,EAAE,CAAC,CAAO,KAAI,EAAE,CAAC,GAAG,CAAC,KAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAE,GAAC,IAAI,CAAA,EAAC,EAAE;IACpG,EAAC,IAAI,EAAC,WAAW,EAAO,IAAI,EAAE,CAAC,EAAO,EAAE,EAAO,OAAO,OAAO,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAC,EAAE;AACxF,IAAA,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAO,KAAI,EAAE,CAAC,GAAG,CAAC,KAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAE,GAAC,IAAI,CAAA,EAAC,EAAE;AACtG,IAAA,EAAC,IAAI,EAAC,OAAO,EAAW,IAAI,EAAE,CAAC,CAAO,KAAI,EAAE,CAAC,GAAG,CAAC,KAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAE,GAAC,IAAI,CAAA,EAAC,EAAE;AACtG,IAAA,EAAC,IAAI,EAAC,cAAc,EAAI,IAAI,EAAE,CAAC,CAAO,KAAI,EAAE,CAAC,GAAG,CAAC,KAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,eAAe,EAAE,GAAC,IAAI,CAAA,EAAC,EAAE;AAC7G,IAAA,EAAC,IAAI,EAAC,SAAS,EAAS,IAAI,EAAE,CAAC,CAAO,KAAI,EAAE,CAAC,GAAG,CAAC,KAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,UAAU,EAAE,GAAC,IAAI,CAAA,EAAC,EAAE;AACxG,IAAA,EAAC,IAAI,EAAC,OAAO,EAAW,IAAI,EAAE,CAAC,CAAO,KAAI,EAAE,CAAC,GAAG,CAAC,KAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,QAAQ,EAAE,GAAC,IAAI,CAAA,EAAC,EAAE;AACtG,IAAA,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,MAAO,EAAA,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,EAAC,EAAE;IAC1D,EAAC,IAAI,EAAC,cAAc,EAAI,IAAI,EAAE,CAAC,CAAM,EAAE,CAAQ,OAAM,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,EAAC,EAAE;IACvF,EAAC,IAAI,EAAC,cAAc,EAAI,IAAI,EAAE,CAAC,CAAM,EAAE,CAAQ,OAAM,OAAO,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,EAAC,EAAE;AACvF,IAAA,EAAC,IAAI,EAAC,SAAS,EAAS,IAAI,EAAE,CAAC,CAAO,KAAI,EAAE,CAAC,GAAG,CAAC,KAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,UAAU,EAAE,GAAC,IAAI,CAAA,EAAC,EAAE;IACxG,EAAC,IAAI,EAAC,cAAc,EAAI,IAAI,EAAE,CAAC,EAAO,EAAE,EAAO,OAAI,OAAO,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA,EAAC,EAAC;IACtF,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAK,OAAM,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC,EAAE;AAChE,IAAA,EAAC,IAAI,EAAC,OAAO,EAAW,IAAI,EAAE,MAAO,EAAA,OAAO,IAAI,IAAI,EAAE,CAAA,EAAC,EAAE;IACzD,EAAC,IAAI,EAAC,UAAU,EAAQ,IAAI,EAAE,MAAO,EAAA,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,iBAAiB,EAAE,CAAA,EAAC,EAAE;AAC/E,IAAA,EAAC,IAAI,EAAC,SAAS,EAAS,IAAI,EAAE,CAAC,CAAO,KAAI,EAAE,CAAC,GAAG,CAAC,KAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAE,GAAC,IAAI,CAAA,EAAC,EAAE;AACpG,IAAA,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAQ,EAAC,CAAS,EAAC,CAAS,KAAO,EAAA,OAAO,IAAI,IAAI,CAAC,CAAC,EAAC,CAAC,IAAE,CAAC,EAAC,CAAC,IAAE,CAAC,CAAC,CAAC,EAAC,EAAE;AAClG,IAAA,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAO,KAAI,EAAE,CAAC,GAAG,CAAC,KAAG,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,WAAW,EAAE,GAAC,IAAI,CAAA,EAAC,EAAE;;IAEzG,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAQ,KAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO;YAAE,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAC,EAAE;IAC7G,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAQ,OAAI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,EAAC,EAAC;IAChE,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAQ,OAAO,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC,EAAE;IACrE,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAQ,OAAI,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,EAAC,EAAC;IAC/D,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAQ,OAAI,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,EAAC,EAAC;IAC/D,EAAC,IAAI,EAAC,OAAO,EAAW,IAAI,EAAE,CAAC,CAAQ,OAAO,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAC,EAAE;IACtE,EAAC,IAAI,EAAC,SAAS,EAAS,IAAI,EAAE,CAAC,GAAG,CAAU,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,EAAE;IAC5E,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAQ,OAAO,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAC,EAAE;IACtE,EAAC,IAAI,EAAC,QAAQ,EAAU,IAAI,EAAE,CAAC,GAAG,CAAU,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,EAAE;IAC5E,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAQ,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAC,EAAE;AACpE,IAAA,EAAC,IAAI,EAAC,IAAI,EAAc,IAAI,EAAE,CAAC,CAAS,KAAM,EAAA,OAAO,IAAI,CAAC,EAAE,IAAE,CAAC,CAAC,KAAG,SAAS,IAAE,CAAC,GAAC,CAAC,CAAC,CAAC,EAAC,EAAE;AACtF,IAAA,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAS,KAAM,EAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,EAAC,EAAC;IACxF,EAAC,IAAI,EAAC,OAAO,EAAW,IAAI,EAAE,CAAC,CAAQ,EAAE,CAAS,GAAA,CAAC,OAAO,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAC,EAAE;AACvF,IAAA,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAQ,OAAI,OAAO,CAAC,GAAC,CAAC,GAAC,CAAC,IAAE,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAA,EAAC,EAAC;IACpE,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAQ,OAAI,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,EAAC,EAAC;IAC/D,EAAC,IAAI,EAAC,MAAM,EAAY,IAAI,EAAE,CAAC,CAAQ,OAAM,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAC,EAAE;IACpE,EAAC,IAAI,EAAC,KAAK,EAAa,IAAI,EAAE,CAAC,CAAQ,OAAI,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,EAAC,EAAC;IAC/D,EAAC,IAAI,EAAC,UAAU,EAAQ,IAAI,EAAE,CAAC,CAAQ,EAAE,CAAS,GAAA,CAAC,OAAM,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAC,CAAC,CAAC,CAAA,EAAC,EAAC;AAC1F,CAAA,CAAC;;ACjJF;MAGa,SAAS,CAAA;AAMpB;;;;AAIG;IACH,WAAY,CAAA,KAAoB,EAAE,WAAA,GAAuB,IAAI,EAAA;QAVrD,IAAM,CAAA,MAAA,GAAkB,IAAI,CAAC;QAC7B,IAAK,CAAA,KAAA,GAAkB,IAAI,CAAC;QAC5B,IAAI,CAAA,IAAA,GAAe,IAAI,CAAC;QACxB,IAAY,CAAA,YAAA,GAAY,KAAK,CAAC;AAC9B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;AAyGvC,QAAA,IAAA,CAAA,SAAS,GAAG;YAClB,gBAAgB,EAAE,CAAC,GAAQ,EAAE,OAAY,EAAE,WAAiB,KAAI;gBAC9D,QAAQ,GAAG,CAAC,QAAQ;AAClB,oBAAA,KAAK,GAAG;wBACN,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACxG,oBAAA,KAAK,GAAG;wBACN,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;oBACxG,KAAK,IAAI;AACP,wBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AACjH,oBAAA,KAAK,GAAG;wBACN,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACxG,oBAAA,KAAK,GAAG;wBACN,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;oBACxG,KAAK,GAAG;wBACN,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;oBACxG,KAAK,IAAI;wBACP,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACzG,oBAAA,KAAK,KAAK;wBACR,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAC1G,oBAAA,KAAK,IAAI;wBACP,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACzG,oBAAA,KAAK,KAAK;wBACR,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAC1G,oBAAA,KAAK,IAAI;wBACP,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACzG,oBAAA,KAAK,GAAG;wBACN,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACxG,oBAAA,KAAK,IAAI;wBACP,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACzG,oBAAA,KAAK,GAAG;wBACN,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACxG,oBAAA,KAAK,IAAI;wBACP,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;oBACzG,KAAK,IAAI,EAAE;AACT,wBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAC3D,wBAAA,IAAI,CAAC,KAAK;AACR,4BAAA,OAAO,KAAK,CAAC;wBACf,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,KAAK,EAAE;4BACvD,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5E,yBAAA;AACD,wBAAA,OAAO,KAAK,CAAC;AACd,qBAAA;AACD,oBAAA,KAAK,GAAG;wBACN,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACxG,oBAAA,KAAK,GAAG;wBACN,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACxG,oBAAA,KAAK,GAAG;wBACN,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACxG,oBAAA,KAAK,KAAK;wBACR,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACzG,oBAAA,KAAK,IAAI;wBACP,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACzG,oBAAA,KAAK,IAAI;wBACP,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACzG,oBAAA;wBACE,MAAM,IAAI,WAAW,CAAC,CAAA,2BAAA,EAA8B,GAAG,CAAC,QAAQ,CAAE,CAAA,CAAC,CAAC;AACvE,iBAAA;aACF;YAED,qBAAqB,EAAE,CAAC,GAAQ,EAAE,OAAY,EAAE,WAAiB,KAAI;AACnE,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;aACjK;YAED,iBAAiB,EAAE,CAAC,GAAQ,EAAE,OAAY,EAAE,WAAiB,KAAI;gBAC/D,QAAQ,GAAG,CAAC,QAAQ;oBAClB,KAAK,IAAI;wBACP,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;oBACzG,KAAK,IAAI;wBACP,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;oBACzG,KAAK,IAAI;wBACP,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACzG,oBAAA;wBACE,MAAM,IAAI,WAAW,CAAC,CAAA,4BAAA,EAA+B,GAAG,CAAC,QAAQ,CAAE,CAAA,CAAC,CAAC;AACxE,iBAAA;aACF;YAED,eAAe,EAAE,CAAC,GAAQ,EAAE,OAAY,EAAE,WAAiB,KAAI;gBAC7D,QAAQ,GAAG,CAAC,QAAQ;AAClB,oBAAA,KAAK,GAAG;AACN,wBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAC5D,oBAAA,KAAK,GAAG;AACN,wBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;oBAC5D,KAAK,GAAG;AACN,wBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;oBAC5D,KAAK,GAAG;AACN,wBAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;oBAC5D,KAAK,QAAQ;AACX,wBAAA,OAAO,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;oBAClE,KAAK,MAAM;AACT,wBAAA,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAChE,oBAAA;wBACE,MAAM,IAAI,WAAW,CAAC,CAAA,0BAAA,EAA6B,GAAG,CAAC,QAAQ,CAAE,CAAA,CAAC,CAAC;AACtE,iBAAA;aACF;YAED,UAAU,EAAE,CAAC,GAAQ,EAAE,OAAY,EAAE,WAAiB,KAAI;gBACxD,QAAQ,GAAG,CAAC,IAAI;AACd,oBAAA,KAAK,WAAW;AACd,wBAAA,OAAO,SAAS,CAAC;;;AAGnB,oBAAA;AACE,wBAAA,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5B,iBAAA;;aAEF;YAED,cAAc,EAAE,CAAC,GAAQ,EAAE,OAAY,EAAE,WAAiB,KAAI;AAC5D,gBAAA,IAAI,CAACC,uBAAyB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAIC,YAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACxE,oBAAA,IAAI,IAA0B,CAAC;AAE/B,oBAAA,IAAI,QAAQ,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,UAAU,EAAE;wBACpD,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAa,CAAC;AAC7C,qBAAA;AAAM,yBAAA;wBACL,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;4BACtC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC1C,qBAAA;AAED,oBAAA,IAAI,IAAI,EAAE;AACR,wBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACjE,qBAAA;oBACD,MAAM,IAAI,WAAW,CAAC,CAAa,UAAA,EAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAA0B,wBAAA,CAAA,CAAC,CAAC;AAC9E;;;;;;AAME;AACH,iBAAA;gBACD,MAAM,IAAI,WAAW,CAAC,CAA4B,yBAAA,EAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAE,CAAA,CAAC,CAAC;aACtE;YAED,gBAAgB,EAAE,CAAC,GAAQ,EAAE,OAAY,EAAE,WAAiB,KAAI;AAC9D,gBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAC1D,gBAAA,IAAI,CAAC,GAAG;AACN,oBAAA,OAAO,SAAS,CAAC;gBACnB,IAAIA,YAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAChC,oBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;AACtD,iBAAA;gBACD,IAAIC,kBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACtC,oBAAA,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAC/D,iBAAA;AACD,gBAAA,IAAIC,gBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAIC,eAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;oBACvE,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChC,iBAAA;gBACD,IAAI,CAACC,kBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAIC,mBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE;oBACnH,IAAI,IAAI,GAAG,IAAI,CAAC;AAChB,oBAAA,OAAO,GAAG,CAAC,MAAM,CAAC,UAAU,IAAS,EAAA,EAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;AACnI,iBAAA;gBACD,MAAM,IAAI,WAAW,CAAC,CAAA,2BAAA,EAA8B,GAAG,CAAC,QAAQ,CAAE,CAAA,CAAC,CAAC;aACrE;YAED,cAAc,EAAE,CAAC,GAAQ,EAAE,OAAY,EAAE,WAAiB,KAAI;gBAC5D,OAAO,OAAO,CAAC,OAAO,CAAC;aACxB;AAED,YAAA,cAAc,EAAE,CAAC,GAAQ,KAAI;gBAC3B,OAAO,GAAG,CAAC,KAAK,CAAC;aAClB;AACD,YAAA,aAAa,EAAE,CAAC,GAAQ,KAAI;AAC1B;;AAEE;gBACF,OAAO,GAAG,CAAC,KAAK,CAAC;aAClB;AACD,YAAA,aAAa,EAAE,CAAC,GAAQ,KAAI;gBAC1B,OAAO,GAAG,CAAC,KAAK,CAAC;aAClB;AAED,YAAA,cAAc,EAAE,CAAC,GAAQ,KAAI;gBAC3B,OAAO,GAAG,CAAC,KAAK,CAAC;aAClB;AAED,YAAA,WAAW,EAAE,CAAC,GAAQ,KAAI;AACxB,gBAAA,OAAO,IAAI,CAAC;aACb;AAED,YAAA,aAAa,EAAE,CAAC,GAAQ,KAAI;AAC1B,gBAAA,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aAC9B;YAED,eAAe,EAAE,CAAC,GAAQ,EAAE,OAAY,EAAE,WAAiB,KAAI;gBAC7D,IAAI,IAAI,GAAG,IAAI,CAAC;AAChB,gBAAA,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,IAAS,EAAA;oBACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACnD,iBAAC,CAAC,CAAC;aACJ;YAED,gBAAgB,EAAE,CAAC,GAAQ,EAAE,OAAY,EAAE,WAAiB,KAAI;gBAC9D,IAAI,GAAG,GAAQ,EAAE,CAAC;AAClB,gBAAA,IAAI,GAAG,GAAW,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;AACxC,gBAAA,IAAI,IAAY,CAAC;AACjB,gBAAA,IAAI,GAAG,CAAC;AACR,gBAAA,IAAI,KAAK,CAAC;gBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC5B,oBAAA,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,oBAAA,IAAIC,gBAAkB,CAAC,KAAK,CAAC,EAAE;wBAC7B,IAAIN,YAAc,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AAC7B,4BAAA,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,yBAAA;AAAM,6BAAA;AACL,4BAAA,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACvD,yBAAA;AACD,wBAAA,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACvD,wBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AACjB,qBAAA;AACF,iBAAA;AACD,gBAAA,OAAO,GAAG,CAAC;aACZ;SAEF,CAAA;QApTC,IAAI;AACF,YAAA,IAAI,CAAC,YAAY,GAAG,WAAW,IAAI,IAAI,CAAC;AAExC,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAW,CAAC;gBAC9C,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC;AACxD,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,GAAQ,EAAE;YACjB,IAAI,CAAC,MAAM,GAAG,CAAA,cAAA,EAAiB,GAAG,CAAiB,cAAA,EAAA,KAAK,EAAE,CAAC;AAC5D,SAAA;KACF;AACD;;AAEG;IACH,IAAI,KAAK,KAAoB,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE;AAClD;;AAEG;IACH,IAAI,UAAU,KAAoB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE;AACtD;;AAEG;IACH,IAAI,WAAW,KAAc,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE;AACxD;;;;;AAKG;AACH,IAAA,IAAI,CAAC,OAAA,GAAkB,EAAE,EAAE,WAAiB,EAAA;;QAE1C,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,MAAM,IAAI,CAAC,KAAK,CAAC;AAClB,SAAA;QACD,IAAI,GAAG,GAAQ,SAAS,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,EAAE;AACxB,YAAA,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACtD,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;AAIG;IACH,gBAAgB,CAAC,IAAY,EAAE,IAAc,EAAA;QAC3C,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KAC/B;AACD;;;AAGG;AACH,IAAA,qBAAqB,CAAC,IAAc,EAAA;AAClC,QAAA,IAAI,IAAI,EAAE;YACR,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC/B,SAAA;KACF;AACD;;;;AAIG;AACK,IAAA,WAAW,CAAC,IAAY,EAAA;QAC9B,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAChC;AACD;;;;;;;AAOG;AACO,IAAA,QAAQ,CAAC,GAAQ,EAAE,OAAY,EAAE,WAAiB,EAAA;;AAE1D,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAsB,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC9E;AACD;;;;;;AAMG;AACO,IAAA,QAAQ,CAAC,IAAc,EAAE,OAAc,EAAE,OAAY,EAAE,WAAiB,EAAA;QAChF,IAAI,OAAO,GAAG,SAAS,CAAC;QACxB,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO,GAAG,OAAO,CAAC;AACnB,SAAA;QACD,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAQ,KAAI;YAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAClD,SAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;KACpC;AAsNF;;ACxVK,MAAO,kBAAmB,SAAQ,gBAAgB,CAAA;AAEvD;;ACFK,MAAO,oBAAqB,SAAQ,gBAAgB,CAAA;AAEzD;;ACFD;;AAEG;AACG,MAAO,sBAAuB,SAAQ,gBAAgB,CAAA;AAE3D;;ACLK,MAAO,cAAe,SAAQ,gBAAgB,CAAA;AAEnD;;ACAM,MAAM,iBAAiB,GAAW,MAAM;AACxC,MAAM,eAAe,GAAG,kBAAkB;AAkBjD;;;AAGG;MACU,OAAO,CAAA;AAElB;;;;;;AAMG;AACH,IAAA,OAAO,aAAa,CAA2B,MAAc,EAAE,MAA4C,EAAE,EAAc,EAAA;QACzH,IAAI,IAAI,GAAQ,SAAS,CAAC;AAC1B,QAAA,EAAE,GAAG,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAE,OAAO,CAAC,OAAO,EAAE,CAAE,CAAC;AACjD,QAAA,IAAI,MAAM,EAAE;YACV,IAAI,GAAG,EAAE,CAAC;AACV,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC9B,MAAM,GAAG,IAAI,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC,CAAC;AAC/C,aAAA;YACD,IAAI,MAAM,YAAY,UAAU,EAAE;AAChC,gBAAA,IAAI,GAAG,CAAC;gBACR,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,IAAE;AACzB,oBAAA,GAAG,GAAgB,MAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACvC,oBAAA,IAAI,GAAG,EAAE;wBACP,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChD,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAClB,qBAAA;AACH,iBAAC,CAAC,CAAC;AACJ,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,GAAG,EAAC,GAAG,MAAM,EAAC,CAAC;AACpB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAO,CAAC;KACtE;AACD;;;;;AAKG;AACH,IAAA,OAAO,kBAAkB,CAAgC,MAAc,EAAE,MAA4C,EAAA;QACnH,IAAI,IAAI,GAAQ,SAAS,CAAC;AAC1B,QAAA,IAAI,MAAM,EAAE;YACV,IAAI,GAAG,EAAE,CAAC;AACV,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC9B,MAAM,GAAG,IAAI,UAAU,CAAC,EAAC,UAAU,EAAE,MAAM,EAAC,CAAC,CAAC;AAC/C,aAAA;YACD,IAAI,MAAM,YAAY,UAAU,EAAE;AAChC,gBAAA,IAAI,GAAG,CAAC;gBACR,MAAM,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,IAAE;AACzB,oBAAA,GAAG,GAAgB,MAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACvC,oBAAA,IAAI,GAAG,EAAE;wBACP,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChD,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAClB,qBAAA;AACH,iBAAC,CAAC,CAAC;AACJ,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,GAAG,EAAC,GAAG,MAAM,EAAC,CAAC;AACpB,aAAA;AACF,SAAA;QACD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAO,CAAC;KAClE;AACD;;;;;;AAMG;IACH,OAAO,cAAc,CAA4B,EAAa,EAAE,IAAU,EAAE,UAAmB,IAAI,EAAA;AACjG,QAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EAAO,CAAC;KAC5H;IAEO,OAAO,gBAAgB,CAAC,GAAoC,EAAA;AAClE,QAAA,OAAO,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KACzD;IAEO,OAAO,eAAe,CAAC,GAAmC,EAAA;AAChE,QAAA,OAAO,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACzD;AACD;;;;AAIG;IACH,OAAO,UAAU,CAA4B,GAAiD,EAAA;AAC5F,QAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE;AACjC,YAAA,OAAO,GAAQ,CAAC;AACjB,SAAA;AAAC,QAAA,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE;AAC7B,YAAA,OAAO,OAAO,CAAC,eAAe,CAAC,GAAG,CAAM,CAAC;AAC1C,SAAA;AACD,QAAA,OAAO,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAM,CAAC;KAC3C;AACD;;;;AAIG;IACH,OAAO,eAAe,CAAC,GAAQ,EAAA;AAC7B,QAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;eACvB,GAAG,CAAC,OAAO,KAAK,iBAAiB;AACjC,eAAA,GAAG,CAAC,MAAM;AACV,eAAA,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC;;KAErB;AACD;;;;AAIG;IACH,OAAO,oBAAoB,CAAC,GAAQ,EAAA;AAClC,QAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;eACvB,GAAG,CAAC,OAAO,KAAK,iBAAiB;AACjC,eAAA,GAAG,CAAC,MAAM;AACV,eAAA,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC;;KAErB;AACD;;;;AAIG;IACH,OAAO,gBAAgB,CAAC,GAAQ,EAAA;AAC9B,QAAA,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;eACvB,GAAG,CAAC,OAAO,KAAK,iBAAiB;eACjC,GAAG,CAAC,EAAE,KAAK,SAAS;AACpB,gBAAC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;KAC5D;IAED,OAAO,gBAAgB,CAAC,GAAQ,EAAA;QAC9B,OAAO,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;KAC/F;IAED,OAAO,eAAe,CAAC,GAAQ,EAAA;AAC7B,QAAA,OAAO,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;KACnE;AAEF;;AClKK,MAAO,aAAiB,SAAQ,OAAU,CAAA;AAE9C,IAAA,OAAO,CAAC,KAAQ,EAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClB;AAED,IAAA,OAAO,CAAC,KAAQ,EAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClB;AAED,IAAA,IAAI,CAAC,KAAQ,EAAE,KAAA,GAAgB,CAAC,EAAA;AAC9B,QAAA,UAAU,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;;;;;;KAMpD;AAEF;;AClBD;;;;;AAKG;SACa,cAAc,CAC1BO,OAAa,EACb,QAAgB,CAAC,EAAA;AAEjB,IAAA,OAAO,CAAC,KAAoB,KACxB,KAAK,CAAC,IAAI,CACN,SAAS,CAAC,CAAC,MAAqB,KAC5B,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACpD,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,KAAK,EAAE,SAAgB;AAC1B,KAAA,CAAC,EACF,GAAG,CAAC,CAAC,OAAO,KAAI;AACZ,QAAA,IAAI,OAAO,CAAC,KAAK,GAAG,KAAK,EAAE;YACvB,MAAM,OAAO,CAAC,KAAK,CAAC;AACvB,SAAA;KACJ,CAAC,EACFC,KAAa,CAACD,OAAK,CAAC,CACvB,CACJ,CACJ,CAAC;AACV;;ICnBY,kBAA0E;AAAtF,CAAA,UAAY,iBAAiB,EAAA;AAAE,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAS,CAAA;AAAE,IAAA,iBAAA,CAAA,iBAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,qBAAqB,CAAA;AAAE,IAAA,iBAAA,CAAA,iBAAA,CAAA,oBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,oBAAoB,CAAA;AAAA,CAAC,EAA1E,iBAAiB,KAAjB,iBAAiB,GAAyD,EAAA,CAAA,CAAA,CAAA;MAyMhE,gBAAgB,CAAA;AAAtC,IAAA,WAAA,GAAA;QACI,IAAO,CAAA,OAAA,GAAY,KAAK,CAAC;QAGzB,IAAQ,CAAA,QAAA,GAA6C,EAAE,CAAC;KAC3D;AAAA,CAAA;AAEY,MAAA,uBAAuB,GAAwB,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAC,IAAI,EAAE,MAAM,EAAC,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAC,MAAM,GAAG;AACtP,MAAA,yBAAyB,GAAc,EAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,GAAE;AAC7K,MAAA,6BAA6B,GAAkB,EAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAG,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,GAAE;AACrL,MAAM,6BAA6B,GAAkB,EAAC,IAAI,EAAC,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,GAAE;AACvK,MAAM,yBAAyB,GAAc,EAAC,IAAI,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,GAAE;AAC3J,MAAM,0BAA0B,GAAe,EAAC,IAAI,EAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,GAAE;MACxJ,yBAAyB,GAAc,EAAC,IAAI,EAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,GAAE;AACvO,MAAA,6BAA6B,GAAkB,EAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,GAAE;AACvG,MAAA,iCAAiC,GAAsB,EAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,GAAE;AACjH,MAAM,6BAA6B,GAAkB,EAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK;;AChO7J,MAAO,WAAY,SAAQ,SAAS,CAAA;AAIxC,IAAA,WAAA,CAAY,KAAa,EAAE,EAAmB,EAAE,cAAuB,KAAK,EAAA;AAC1E,QAAA,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;;AAGO,IAAA,aAAa,CAAC,IAAc,EAAE,OAAc,EAAE,OAAY,EAAE,WAAiB,EAAA;AACnF,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACxD,YAAA,IAAI,QAAQ,CAAC,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE;AAC5D,gBAAA,IAAI,CAAC,GAAW,CAAC,CAAC,KAAK,CAAC;gBACxB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAC3B,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,aAAa,CAAC,SAAiB,EAAE,GAAW,EAAE,YAA6B,EAAA;AACjF,QAAA,IAAI,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAClC,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACrD,YAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAM,CAAC,CAAC;AAC5B,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE;gBACzC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;AACtC,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAC9B,aAAA;AACF,SAAA;AACD,QAAA,OAAO,YAAY,CAAC;KACrB;;;;AAKO,IAAA,gBAAgB,CAAC,IAAc,EAAE,OAAc,EAAE,OAAY,EAAE,WAAiB,EAAA;QAEtF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,QAAQ,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC;QAEnD,IAAI,MAAM,GAAW,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAE5C,QAAA,MAAM,GAAG,GAAW,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7D,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACtE,QAAA,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5E,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE;AACjC,YAAA,IAAI,GAAG,CAAC;YACR,IAAI,MAAM,GAAW,CAAC,CAAC;YACvB,IAAI,YAAY,GAAW,CAAC,CAAC;AAE7B,YAAA,IAAI,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC;AACzB,YAAA,OAAO,EAAE,KAAK,IAAI,GAAG,EAAE;gBACrB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;AACnE,gBAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACxB,oBAAA,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AACxC,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACjC,gBAAA,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE;oBAC1B,MAAM,GAAG,YAAY,CAAC;AACtB,oBAAA,KAAK,EAAE,CAAC;AACR,oBAAA,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE;wBACzB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;AACnE,wBAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACxB,4BAAA,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC5B,yBAAA;AACF,qBAAA;AACD,oBAAA,MAAM,GAAG,YAAY,GAAG,MAAM,GAAG,GAAG,CAAC;AACtC,iBAAA;AAAM,qBAAA;oBACL,MAAM,GAAG,YAAY,CAAC;AACvB,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;KACnC;;;;AAKO,IAAA,gBAAgB,CAAC,IAAc,EAAE,OAAc,EAAE,OAAY,EAAE,WAAiB,EAAA;QAEtF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,QAAQ,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC;QAEnD,IAAI,MAAM,GAAW,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAE5C,QAAA,MAAM,GAAG,GAAW,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7D,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACtE,QAAA,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5E,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE;AACjC,YAAA,IAAI,GAAG,CAAC;AACR,YAAA,IAAI,KAAK,GAAW,QAAQ,GAAG,CAAC,CAAC;AACjC,YAAA,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE;gBACzB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;AACnE,gBAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAG;AACzB,oBAAA,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC5B,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ,kCAAkC;gBACzD,MAAM,GAAG,MAAM,IAAI,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;AAC5C,aAAA;AACF,SAAA;AAED,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;KACnC;;;;AAKO,IAAA,gBAAgB,CAAC,IAAc,EAAE,OAAc,EAAE,OAAY,EAAE,WAAiB,EAAA;QAEtF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,QAAQ,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC;QAEnD,IAAI,MAAM,GAAQ,SAAS,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAE5C,QAAA,MAAM,GAAG,GAAW,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7D,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACtE,QAAA,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5E,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE;YACjC,QAAQ,IAAI,CAAC,IAAI;AACf,gBAAA,KAAK,UAAU;oBACb,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;AACzE,oBAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;oBACtB,MAAM;AACR,gBAAA,KAAK,SAAS;oBACZ,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;AACxE,oBAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;oBACtB,MAAM;AACR,gBAAA,KAAK,YAAY;AACf,oBAAA,IAAI,GAAG,CAAC;oBACR,IAAI,MAAM,GAAW,CAAC,CAAA;AACtB,oBAAA,IAAI,KAAK,GAAW,QAAQ,GAAG,CAAC,CAAC;AACjC,oBAAA,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE;wBACzB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;AACnE,wBAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACxB,4BAAA,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,yBAAA;AACF,qBAAA;AAED,oBAAA,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACtD,oBAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACnD,wBAAA,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,CAAC;AAC7B,qBAAA;AAAM,yBAAA;wBACL,MAAM,GAAG,IAAI,CAAC;AACf,qBAAA;oBACD,MAAM;AACT,aAAA;AACF,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;;;;AAKO,IAAA,kBAAkB,CAAC,IAAc,EAAE,OAAc,EAAE,OAAY,EAAE,WAAiB,EAAA;QACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,QAAQ,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC;QAEnD,IAAI,MAAM,GAAQ,SAAS,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAE5C,QAAA,MAAM,GAAG,GAAW,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7D,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACtE,QAAA,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5E,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,YAAA,IAAI,GAAG,CAAC;YACR,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,MAAM,GAAW,CAAC,CAAA;AACtB,YAAA,IAAI,KAAK,GAAW,QAAQ,GAAG,CAAC,CAAC;AACjC,YAAA,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE;gBACzB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;AACnE,gBAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACxB,oBAAA,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;AAChB,oBAAA,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,iBAAA;AACF,aAAA;AAED,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,EAAE;AACT,gBAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;gBAExB,IAAI,GAAG,GAAG,CAAC,CAAC;gBACZ,CAAC,GAAG,CAAC,CAAC,CAAC;AACP,gBAAA,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE;AACd,oBAAA,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AACpC,iBAAA;AAED,gBAAA,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE;oBACzB,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC7B,iBAAA;AAAM,qBAAA;;AAEL,oBAAA,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnC,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACL,MAAM,GAAG,IAAI,CAAC;AACf,aAAA;AAEF,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;;;;AAKO,IAAA,gBAAgB,CAAC,IAAc,EAAE,OAAc,EAAE,OAAY,EAAE,WAAiB,EAAA;QACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,QAAQ,IAAI,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC;QAEnD,IAAI,MAAM,GAAQ,SAAS,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAE5C,QAAA,MAAM,GAAG,GAAW,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE7D,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACtE,QAAA,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAE5E,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,YAAA,IAAI,GAAG,CAAC;YACR,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,MAAM,GAAW,CAAC,CAAA;AACtB,YAAA,IAAI,KAAK,GAAW,QAAQ,GAAG,CAAC,CAAC;AACjC,YAAA,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE;gBACzB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;AACnE,gBAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACxB,oBAAA,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;AAChB,oBAAA,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,iBAAA;AACF,aAAA;AAED,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,EAAE;AACT,gBAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;gBAExB,IAAI,GAAG,GAAG,CAAC,CAAC;gBACZ,CAAC,GAAG,CAAC,CAAC,CAAC;AACP,gBAAA,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE;AACd,oBAAA,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AACpC,iBAAA;AAED,gBAAA,IAAI,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE;AACvB,oBAAA,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;AAClB,iBAAA;AAAM,qBAAA;;oBAEL,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACxB,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACL,MAAM,GAAG,IAAI,CAAC;AACf,aAAA;AAEF,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AACD;;AAEG;AACO,IAAA,QAAQ,CAAC,IAAc,EAAE,OAAc,EAAE,OAAY,EAAE,WAAiB,EAAA;QAEhF,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACnE,SAAA;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACnE,SAAA;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACnE,SAAA;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AACxC,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACrE,SAAA;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACnE,SAAA;AAAM,aAAA;YACL,MAAM,GAAG,GAAuB,WAAW,CAAC;YAC5C,QAAQ,IAAI,CAAC,IAAI;gBACf,KAAK,QAAQ,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACzC,KAAK,UAAU,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtC,KAAK,eAAe,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3C,KAAK,YAAY,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;AACzC,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;KAC5D;IAEO,mBAAmB,GAAA;;;;AAKzB,QAAA,MAAM,MAAM,GAAa,CAAC,CAAS,EAAE,CAAM,KAAI,EAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,EAAE,CAAC;AACpE,QAAA,MAAM,MAAM,GAAa,CAAC,CAAS,EAAE,CAAM,KAAI,EAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,EAAE,CAAC;QACpE,MAAM,MAAM,GAAa,CAAC,CAAM,EAAE,CAAM,KAAO,EAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA,EAAE,CAAC;QACvE,MAAM,MAAM,GAAa,CAAC,CAAM,EAAE,CAAM,KAAO,EAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA,EAAE,CAAC;AACvE,QAAA,MAAM,QAAQ,GAAa,CAAC,CAAS,EAAE,CAAM,KAAO,EAAA,OAAO,CAAC,GAAG,CAAC,CAAA,EAAE,CAAC;AACnE,QAAA,MAAM,MAAM,GAAa,CAAC,CAAS,EAAE,CAAM,KAAI,EAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,EAAE,CAAC;AACpE,QAAA,MAAM,OAAO,GAAa,CAAC,CAAS,EAAE,CAAM,KAAI,EAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,EAAE,CAAC;AACrE,QAAA,MAAM,QAAQ,GAAa,CAAC,CAAM,KAAM,EAAA,OAAO,CAAC,CAAA,EAAC,CAAC;AAClD,QAAA,MAAM,OAAO,GAAa,CAAC,CAAM,KAAM,EAAA,OAAO,CAAC,CAAA,EAAC,CAAC;AACjD,QAAA,MAAM,UAAU,GAAa,CAAC,CAAM,KAAM,EAAA,OAAO,CAAC,CAAA,EAAC,CAAC;AACpD,QAAA,MAAM,KAAK,GAAa,CAAC,CAAM,KAAM,EAAA,OAAO,CAAC,CAAA,EAAC,CAAC;AAC/C,QAAA,MAAM,MAAM,GAAa,CAAC,CAAM,KAAM,EAAA,OAAO,CAAC,CAAA,EAAC,CAAC;AAChD,QAAA,MAAM,IAAI,GAAa,CAAC,CAAM,KAAM,EAAA,OAAO,CAAC,CAAA,EAAC,CAAC;AAC9C,QAAA,MAAM,IAAI,GAAa,CAAC,CAAM,KAAM,EAAA,OAAO,CAAC,CAAA,EAAC,CAAC;AAE9C,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;;;AAKpC,QAAA,MAAM,QAAQ,GAAa,CAAC,CAAS,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3E,QAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACrC,QAAA,MAAM,MAAM,GAAa,CAAC,OAAY,EAAE,GAAW,KAAI,EAAG,OAAO,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;AAChI,QAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACnC,QAAA,MAAM,UAAU,GAAa,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;AACjE,QAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;AACvC,QAAA,MAAM,QAAQ,GAAa,CAAC,OAAY,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;AACpF,QAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACrC,QAAA,MAAM,aAAa,GAAa,CAAC,OAAY,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;AAC9F,QAAA,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;AAC1C,QAAA,MAAM,UAAU,GAAa,CAAC,OAAY,OAAO,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAA;AACvF,QAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;AACvC,QAAA,MAAM,QAAQ,GAAa,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;AACjE,QAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,aAAa,GAAa,CAAC,GAAW,EAAE,GAAQ,KAAI,EAAG,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAA;AACzG,QAAA,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;KAC3C;AAEF;;MCvWY,SAAS,CAAA;AAIpB,IAAA,WAAA;;IAEkB,IAAa;;IAEtB,GAAS,EAAA;QAFA,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAS;QAEtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAM;QAPR,IAAiB,CAAA,iBAAA,GAAY,KAAK,CAAC;QACnC,IAAW,CAAA,WAAA,GAAY,IAAI,CAAC;AACtB,QAAA,IAAA,CAAA,SAAS,GAAW,IAAI,CAAC,GAAG,EAAE,CAAC;KAO1C;;IAGL,IAAI,UAAU,KAAa,OAAO,IAAI,CAAC,WAAW,CAAA,EAAC;;IAGnD,IAAI,gBAAgB,KAAa,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAC;;AAGhE,IAAA,cAAc,GAAW,EAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AAAC,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAAC,KAAA,EAAE;AAEjF,CAAA;AAEK,MAAO,OAAQ,SAAQ,SAAS,CAAA;AACpC,IAAA,WAAA,GAAA,EAAgB,KAAK,EAAE,CAAA,EAAE;AAC1B,CAAA;AACD;;;;AAIE;AACI,MAAO,oBAAqB,SAAQ,OAAO,CAAA;AAC/C,IAAA,WAAA;;IAGkB,GAAW;;IAEX,GAAa;;AAEtB,IAAA,UAAA,GAAqB,CAAC,EAAA;AAE3B,QAAA,KAAK,EAAE,CAAA;QANO,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;QAEX,IAAG,CAAA,GAAA,GAAH,GAAG,CAAU;QAEtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;KAElB;AACd,CAAA;AAEK,MAAO,cAAe,SAAQ,OAAO,CAAA;AACzC,IAAA,WAAA;;IAGkB,GAAW;;IAEX,GAAa;;IAEb,MAAkB,EAAA;AAEhC,QAAA,KAAK,EAAE,CAAA;QANO,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;QAEX,IAAG,CAAA,GAAA,GAAH,GAAG,CAAU;QAEb,IAAM,CAAA,MAAA,GAAN,MAAM,CAAY;KAEvB;AACd,CAAA;AACD;;AAEG;AACG,MAAO,gBAAiB,SAAQ,OAAO,CAAA;AAC3C,IAAA,WAAA;;IAGkB,OAAe;;IAEf,OAAe;;IAEf,QAAqB;;IAErB,GAAY;;IAEZ,MAAiD,EAAA;AAE/D,QAAA,KAAK,EAAE,CAAA;QAVO,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;QAEf,IAAO,CAAA,OAAA,GAAP,OAAO,CAAQ;QAEf,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAa;QAErB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAS;QAEZ,IAAM,CAAA,MAAA,GAAN,MAAM,CAA2C;KAEtD;AACd,CAAA;AAEK,MAAO,gBAAiB,SAAQ,OAAO,CAAA;AAC3C,IAAA,WAAA;;IAGkB,GAAW;;AAEpB,IAAA,QAAA,GAAoB,KAAK,EAAA;AAE9B,QAAA,KAAK,EAAE,CAAA;QAJO,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;QAEpB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAiB;KAErB;AACd,CAAA;AAEK,MAAO,oBAAqB,SAAQ,OAAO,CAAA;AAC/C,IAAA,WAAA;;IAGkB,GAAW;;IAEX,GAAoB;;IAEpB,MAAkB,EAAA;AAEhC,QAAA,KAAK,EAAE,CAAA;QANO,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;QAEX,IAAG,CAAA,GAAA,GAAH,GAAG,CAAiB;QAEpB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAY;KAEvB;AACd,CAAA;AACD;;AAEG;AACG,MAAO,kBAAmB,SAAQ,OAAO,CAAA;AAC7C,IAAA,WAAA;;IAGkB,GAAW;;IAEX,IAAY;;IAEZ,IAAS,EAAA;AAEvB,QAAA,KAAK,EAAE,CAAA;QANO,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;QAEX,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QAEZ,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAK;KAEd;AACZ,CAAA;AAEG,MAAO,gBAAiB,SAAQ,OAAO,CAAA;AAC3C,IAAA,WAAA;;IAGkB,MAAc,EAAA;AAE5B,QAAA,KAAK,EAAE,CAAA;QAFO,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAEnB;AACd,CAAA;AACD;;;AAGG;AACG,MAAO,kBAAmB,SAAQ,OAAO,CAAA;AAC7C,IAAA,WAAA;;IAGkB,GAAW;;IAEX,IAAY;;IAEZ,IAAS,EAAA;AAExB,QAAA,KAAK,EAAE,CAAA;QANQ,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;QAEX,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QAEZ,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAK;KAEhB;AACZ,CAAA;AACD;;;AAGG;AACG,MAAO,gBAAiB,SAAQ,OAAO,CAAA;AAC3C,IAAA,WAAA;;IAGkB,GAAW;;IAEX,IAAY;;IAEZ,IAAS;AACzB;;;;;;AAMG;AACI,IAAA,UAAA,GAAsB,CAAC,EAAA;AAE7B,QAAA,KAAK,EAAE,CAAA;QAdQ,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;QAEX,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QAEZ,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAK;QAQlB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAa;KAErB;AACZ,CAAA;AACD;;;;AAIG;AACG,MAAO,mBAAoB,SAAQ,OAAO,CAAA;AAC9C,IAAA,WAAA;;IAGkB,GAAW;;IAEX,IAAY;;IAEZ,IAAS;;AAElB,IAAA,mBAAA,GAA+B,KAAK,EAAA;AAE1C,QAAA,KAAK,EAAE,CAAA;QARQ,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;QAEX,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;QAEZ,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAK;QAElB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAAiB;KAElC;AACZ,CAAA;AACD;;AAEG;AACG,MAAO,uBAAwB,SAAQ,OAAO,CAAA;AAClD,IAAA,WAAA;;IAGkB,GAAW;;IAEX,IAAY,EAAA;AAEzB,QAAA,KAAK,EAAE,CAAA;QAJM,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;QAEX,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAQ;KAEjB;AACZ,CAAA;AACH;;AAEG;AACG,MAAO,mBAAoB,SAAQ,OAAO,CAAA;AAC9C,IAAA,WAAA;;IAGkB,GAAW;;IAEX,GAAoB;;IAEpB,MAAsB,EAAA;AAEpC,QAAA,KAAK,EAAE,CAAA;QANO,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;QAEX,IAAG,CAAA,GAAA,GAAH,GAAG,CAAiB;QAEpB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAgB;KAE3B;AACd,CAAA;AACD;;AAEG;AACG,MAAO,kBAAmB,SAAQ,OAAO,CAAA;AAC7C,IAAA,WAAA;;IAGkB,QAAgB,EAAA;AAE9B,QAAA,KAAK,EAAE,CAAA;QAFO,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;KAErB;AACd,CAAA;AACD;;AAEG;AACG,MAAO,oBAAqB,SAAQ,OAAO,CAAA;AAC/C,IAAA,WAAA;;AAGS,IAAA,YAAA,GAAwB,IAAI,EAAA;AAEjC,QAAA,KAAK,EAAE,CAAA;QAFF,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAgB;KAExB;AACd,CAAA;AACD;;AAEG;AACG,MAAO,iBAAkB,SAAQ,OAAO,CAAA;AAC5C,IAAA,WAAA;;IAEkB,GAAW,EAAA;AACzB,QAAA,KAAK,EAAE,CAAA;QADO,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;KAChB;AACd,CAAA;AACD;;;AAGG;AACG,MAAO,sBAAuB,SAAQ,OAAO,CAAA;AACjD,IAAA,WAAA;;IAGkB,MAAc,EAAA;AAE5B,QAAA,KAAK,EAAE,CAAA;QAFO,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAEnB;AACd,CAAA;AACD;;;AAGG;AACG,MAAO,uBAAwB,SAAQ,OAAO,CAAA;AAClD,IAAA,WAAA;;IAGkB,UAAkB;;IAElB,MAAc,EAAA;AAE5B,QAAA,KAAK,EAAE,CAAA;QAJO,IAAU,CAAA,UAAA,GAAV,UAAU,CAAQ;QAElB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAEnB;AACd,CAAA;AACD;;AAEG;AACG,MAAO,kBAAmB,SAAQ,OAAO,CAAA;AAC7C,IAAA,WAAA,GAAA,EAAgB,KAAK,EAAE,CAAA,EAAE;AAC1B,CAAA;AACD;;AAEG;AACG,MAAO,gBAAiB,SAAQ,OAAO,CAAA;AAC3C,IAAA,WAAA;;IAGkB,YAAoB;;IAEpB,WAAmB;;IAEnB,WAAmB,EAAA;AAEjC,QAAA,KAAK,EAAE,CAAA;QANO,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAQ;QAEpB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAQ;QAEnB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAQ;KAExB;AACd,CAAA;AACD;;AAEG;AACG,MAAO,oBAAqB,SAAQ,OAAO,CAAA;AAC/C,IAAA,WAAA;;IAGkB,WAAqB,EAAA;AAEnC,QAAA,KAAK,EAAE,CAAA;QAFO,IAAW,CAAA,WAAA,GAAX,WAAW,CAAU;KAE1B;AACd;;MC5SY,gBAAgB,CAAA;AAG3B,IAAA,WAAA,CAAY,EAAkB,EAAA;AAC5B,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;KACf;AAGF;;ACPK,MAAO,gBAAiB,SAAQ,gBAAgB,CAAA;IAEpD,WAAY,CAAA,OAAe,EAAS,MAA4B,EAAA;QAC9D,KAAK,CAAC,OAAO,CAAC,CAAC;QADmB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAsB;KAE/D;AAEF;;;AC8BM,MAAM,UAAU,GAAW,WAAW;AACtC,MAAM,cAAc,GAAW,aAAa;AA2BnD;;;;;;;;;;AAUG;MACU,SAAS,CAAA;AA6EpB;;AAEG;IACH,WAAY,CAAA,OAA0B,EAAE,IAA4B,EAAA;AA9E5D,QAAA,IAAA,CAAA,KAAK,GAIT,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QACvC,IAAO,CAAA,OAAA,GAAiB,EAAE,CAAC;QAC3B,IAAO,CAAA,OAAA,GAAW,EAAE,CAAC;QACrB,IAAK,CAAA,KAAA,GAAkB,IAAI,CAAC;;AAE5B,QAAA,IAAA,CAAA,SAAS,GAAkC,CAAC,IAAI,CAAC,CAAC;;AAElD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,EAAuB,CAAC;AAC5C,QAAA,IAAA,CAAA,OAAO,GAAqB,EAAE,CAAC;QAE/B,IAAS,CAAA,SAAA,GAA0C,EAAE,CAAC;QACtD,IAAQ,CAAA,QAAA,GAAmB,EAAE,CAAC;QAC9B,IAAO,CAAA,OAAA,GAAyB,EAAE,CAAC;QAGnC,IAAa,CAAA,aAAA,GAAwB,IAAI,CAAC;AAC1C,QAAA,IAAA,CAAA,aAAa,GAAsB,IAAI,GAAG,EAAE,CAAC;AAC7C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAE,CAAC;AAC3B,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAE,CAAC;;;;AAKpC;;;AAGE;QACM,IAAuB,CAAA,uBAAA,GAAwB,IAAI,CAAC;;AAE3C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC,CAAC;QAEpD,IAAQ,CAAA,QAAA,GAAY,KAAK,CAAC;QAC1B,IAAS,CAAA,SAAA,GAAY,KAAK,CAAC;QAC3B,IAAW,CAAA,WAAA,GAAW,CAAC,CAAC,CAAC;QACzB,IAAW,CAAA,WAAA,GAAW,CAAC,CAAC,CAAC;AACzB,QAAA,IAAA,CAAA,UAAU,GAAW,CAAC,CAAC,CAAC;QACxB,IAAoB,CAAA,oBAAA,GAAW,CAAC,CAAC,CAAC;AAClC,QAAA,IAAA,CAAA,cAAc,GAAW,EAAE,CAAC;AAC5B,QAAA,IAAA,CAAA,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;;AAGjB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,aAAa,EAAQ,CAAC;AACzC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,aAAa,EAAQ,CAAC;AAC3C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,aAAa,EAAoB,CAAC;AACtD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,aAAa,EAAO,CAAC;AACzC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,aAAa,EAAqB,CAAC;AACzD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,aAAa,EAAsB,CAAC;AAC5D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,aAAa,EAAoB,CAAC;AACxD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,aAAa,EAAsB,CAAC;AAC5D,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,aAAa,EAAwB,CAAC;AAChE,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,aAAa,EAAqB,CAAC;AAC1D,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,aAAa,EAAoB,CAAC;AACxD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,aAAa,EAAsB,CAAC;AAC5D,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,aAAa,EAAQ,CAAC;AAE/C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;AAC5C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;AAChD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAC9C,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC;AAC9C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAClD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACtD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAClD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACtD,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC;AAC1D,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAC;AACpD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;AAClD,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACtD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;AA62HtD;;AAEG;QACH,IAAoB,CAAAT,IAAA,CAAA,GAAG,WAAW,CAAC;QAz2HjC,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAE3B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAG;AAC9D,YAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACvB,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;AACH,IAAA,IAAY,aAAa,GAAA;QACvB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACvC;AACD;;AAEG;IACK,cAAc,GAAA;QACpB,IAAI,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;AACjD,QAAA,IAAI,OAA4B,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,MAAM,CAAC,IAAI,CAAS,cAAc,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;;;AAGnD,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC7B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,gBAAA,OAAO,GAAG,EAAE,GAAG,uBAAuB,EAAE,CAAC;gBACzC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/B,gBAAA,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC;AACpB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;AACxC,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE;AAChC,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,uBAAuB,CAAC,CAAC;gBACvF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC;AACzC,aAAA;AACF,SAAA;AACD,QAAA,IAAI,IAAyB,CAAC;AAC9B,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;AAChC,YAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,IAAI;AAAI,gBAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC,KAAK;AAAG,gBAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,yBAAyB,EAAE,CAAC;AACvE,YAAA,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;AACrC,gBAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,WAAW,CAAC;;AAElE,gBAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC;AAEhC,YAAA,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE;AACzB,gBAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;oBAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AACxC,iBAAA;gBACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AACzC,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACnB,gBAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AAC1B,aAAA;AACD,YAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3D,YAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAE5D,YAAA,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI;AACzB,gBAAA,KAAK,MAAM;oBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;oBAAC,MAAM;AAC9E,gBAAA,KAAK,UAAU;oBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;oBAAC,MAAM;AACtF,gBAAA,KAAK,MAAM;oBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;oBAAC,MAAM;AAC9E,gBAAA,KAAK,OAAO;oBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;oBAAC,MAAM;AAChF,gBAAA,KAAK,MAAM;oBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;oBAAC,MAAM;AAC9E,gBAAA,KAAK,UAAU;oBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;oBAAC,MAAM;AACtF,gBAAA,KAAK,cAAc;oBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,iCAAiC,CAAC,CAAC;oBAAC,MAAM;AAC9F,gBAAA,KAAK,UAAU;oBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC;oBAAC,MAAM;AACvF,aAAA;AACF,SAAA;KACF;AACD;;;;AAIG;AACK,IAAA,eAAe,CAAC,KAAa,EAAE,UAAA,GAAsB,KAAK,EAAA;QAChE,IAAI,IAAI,GAAS,EAAE,CAAC;AACpB,QAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1D,QAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAClF;;;;;;AAME;AAEF,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAClC,YAAA,IAAI,IAAiB,CAAC;AACtB,YAAA,IAAI,OAAe,CAAC;AACpB,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,YAAA,OAAO,EAAE,CAAC,GAAG,QAAQ,EAAE;AACrB,gBAAA,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAE,CAAC;AAChC,gBAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;AACnB,gBAAA,IAAY,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;AAC/B,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;AAGG;IACH,SAAS,GAAA;;;;;;AAMP,QAAA,OAAO,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;KACnC;AACD;;;AAGG;IACK,YAAY,GAAA;AAClB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,IAAI,KAAK,CAAC;QAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE,CAAC;QAC5D,OAAO,CAAC,QAAQ,KAAK,QAAQ,WAAW,CAAC,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KAC1F;AACD;;;AAGG;IACK,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;KACpC;AACD;;;AAGG;AACK,IAAA,SAAS,CAAC,IAAY,EAAA;QAC5B,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;KAC/C;AACD;;AAEG;IACK,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,OAAO,EAAE,CAAC;KAClC;AACD;;AAEG;AACK,IAAA,cAAc,CAAC,CAAS,EAAA;AAC9B,QAAA,IAAI,CAAM,CAAC;QACX,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/B,YAAA,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;aACZ,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACxC,CAAC,GAAG,IAAI,CAAC;AACN,aAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1B,CAAC,GAAG,CAAC,CAAC,CAAC;;AAEP,YAAA,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AACd,QAAA,OAAO,CAAC,CAAC;KACV;AACD;;;;;;;;AAQG;IACK,eAAe,CAAC,OAAU,EAAE,GAAW,EAAA;QAC7C,IAAI,OAAO,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE;YAC7C,MAAM,OAAO,GAAwB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,uBAAuB,CAAC;YACpF,QAAQ,OAAO,CAAC,IAAI;gBAClB,KAAK,QAAQ,EAAE;AACb,oBAAA,IAAI,GAAG,GAAS,OAAe,CAAC,GAAG,CAAC,CAAC;AACrC,oBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;AAC1B,wBAAA,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,qBAAA;AACD,oBAAA,OAAO,GAAG,CAAC;AACZ,iBAAA;gBACD,KAAK,SAAS,EAAE;AACd,oBAAA,IAAI,GAAG,GAAI,OAAe,CAAC,IAAI,CAAC;AAChC,oBAAA,IAAI,GAAG,IAAI,GAAG,YAAY,WAAW,EAAE;wBACrC,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,4BAAA,OAAO,MAAM,CAAC;AACf,yBAAA;AACF,qBAAA;AAAM,yBAAA;AACL,wBAAA,GAAG,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;wBACtD,IAAI,GAAG,CAAC,KAAK,EAAE;4BACb,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACtC,4BAAA,OAAO,MAAM,CAAC;AACf,yBAAA;AACD,wBAAA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AACxE,qBAAA;AACD,oBAAA,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1B,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;AAGG;AACK,IAAA,UAAU,CAAC,GAAW,EAAA;AAC5B,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;AACzB,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;AAC3B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;;AAMG;IACK,kBAAkB,CAAC,MAAc,EAAE,MAAoB,EAAA;AAC7D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,MAAM,IAAI,GAAG,EAAE;gBACjB,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5C,aAAA;iBAAM,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,EAAE;AAC5C,gBAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACxB,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;AACrC,oBAAA,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACrC,iBAAA;AACD,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;AAGG;AACK,IAAA,OAAO,CAAC,IAAS,EAAA;AACvB,QAAA,IAAI,SAAS,GAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;YACnC,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAI;AAC9B,gBAAA,IAAI,IAAI,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ;oBAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;;gBAE7C,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAU,IAAI,CAAC,CAAC;aACtD;YACD,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAa;gBAClC,IAAI,IAAI,IAAI,MAAM,EAAE;AAClB,oBAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;wBAC5B,IAAI,IAAI,GAAkB,IAAI,CAAC;wBAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACvC,wBAAA,IAAI,GAAG,EAAE;AACP,4BAAA,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AACjB,yBAAA;AAED,wBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5B,wBAAA,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,IAAI,QAAQ,MAAM,CAAC,CAAC,CAAC;wBAEjD,IAAI,MAAM,KAAK,GAAG,EAAE;AAClB,4BAAA,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;4BAC5B,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;gCAClC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;4BACtC,IAAI,QAAQ,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC/C,4BAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS;AAC9B,gCAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACrB,iCAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE;;AAE/B,gCAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;gCACtB,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;AACrC,oCAAA,EAAE,CAAC,aAAa,CAAC,MAAM,CAAS,SAAS,CAAC,CAAC;AAC5C,iCAAA;AACF,6BAAA;AACF,yBAAA;AAEF,qBAAA;oBACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AACvC,iBAAA;gBACD,OAAO,IAAI,CAAC;aACb;AACF,SAAA,CAAC,CAAC;AACH;;;;AAIE;AACF,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;;;;AAKG;IACK,YAAY,CAAC,eAAwB,IAAI,EAAA;AAC/C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;AAC3B,SAAA;AACD,QAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;AAC3B,QAAA,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;KAC3B;AACD;;;;AAIG;AACK,IAAA,OAAO,CAAC,OAAqB,EAAE,YAAA,GAAwB,IAAI,EAAA;AAEjE,QAAA,IAAI,CAAC,OAAO;YACV,OAAO,GAAG,EAAE,CAAC;AAEf,QAAA,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,KAAK,EAAE,CAAC;AACd,SAAA;AAED,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAChC,QAAA,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,EAAE;YACnB,OAAO;AACR,SAAA;AAED,QAAA,IAAI,CAAC,GAAW,CAAC,CAAC,CAAC;AACnB,QAAA,IAAI,CAAS,CAAC;AACd,QAAA,IAAI,IAAiB,CAAC;AACtB,QAAA,IAAI,IAAS,CAAC;AACd,QAAA,IAAI,OAAe,CAAC;QACpB,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAExC,IAAI,QAAQ,GAAkB,EAAE,CAAC;QACjC,CAAC,GAAG,CAAC,CAAC,CAAC;AACP,QAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;YACjB,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAE,CAAC;AACxC,SAAA;AAED,QAAA,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC;AACtB,QAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;AACjB,YAAA,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACzE,CAAC,GAAG,CAAC,CAAC,CAAC;AACP,YAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;AACjB,gBAAA,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACnB,gBAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;gBACpB,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS;AACnC,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;;oBAErB,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC;AAC5E,aAAA;YACD,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChC,SAAA;;QAED,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACrC,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE,CAAC;AACxD,YAAA,IAAI,OAAO,WAAW,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACnE,gBAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;gBAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;;AAEvB,gBAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;AACzB,gBAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACvB,aAAA;AACF,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;;QAGD,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACnC,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;AACpD,YAAA,IAAI,OAAO,SAAS,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC/D,gBAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC5B,aAAA;AACF,SAAA;QACD,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,CAAC,eAAe,EAAE,CAAC;AAEvB;;;;AAIE;AAEF,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAChB,SAAA;;QAGD,IAAI,CAAC,cAAc,EAAE,CAAC;KAEvB;AACD;;;AAGG;IACK,SAAS,GAAA;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;KACrB;AACD;;;AAGG;IACK,UAAU,GAAA;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;AACD;;;;AAIG;IACK,aAAa,GAAA;AACnB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACjC,IAAI,OAAO,GAAkB,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,IAAG;YACjB,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE;AAC1C,gBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,aAAA;AACH,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC;KAChB;AACD;;;AAGG;AACK,IAAA,eAAe,CAAC,GAAgB,EAAA;AACtC,QAAA,IAAI,GAAG,EAAE;YACP,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC;AACtC,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC/C,YAAA,IAAI,GAAG,IAAK,CAAC,IAAI,EAAE,CAAC;AACpB,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;;AAKG;AACK,IAAA,iBAAiB,CAAC,MAAmB,EAAA;AAC3C,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;AACjC,YAAA,IAAI,GAAG,EAAE;AACP,gBAAA,MAAM,MAAM,GAAW,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACrF,gBAAA,IAAI,MAAwB,CAAC;AAC7B,gBAAA,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACnD,oBAAA,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAE,EAAE,EAAE,GAAG,CAAC,CAAC;oBACpD,MAAM,GAAG,CAAC,MAAO,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC;AACrC,iBAAA;AAAM,qBAAA;oBACL,MAAM,GAAG,MAAM,CAAC;AACjB,iBAAA;gBACD,QAAQ,MAAM,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE;AACvD,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;;;AAKG;AACK,IAAA,iBAAiB,CAAC,MAAiD,EAAA;QACzE,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE;AAC1D,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,YAAA,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACzC,SAAA;QACD,IAAI,MAAM,KAAK,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE;AACxC,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACvC,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;;;AAKG;IACK,kBAAkB,CAAC,kBAA2B,IAAI,EAAA;AACxD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC/B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,QAAQ,GAAa,EAAE,CAAC;QAE5B,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,IAAI,KAAK,CAAC;AAE3E,QAAA,IAAI,kBAAkB,EAAE;AACtB,YAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpB,SAAA;AAAM,aAAA;YACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,gBAAA,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;oBAC7D,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7B,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AACD;;;AAGG;AACK,IAAA,eAAe,CAAC,KAAsB,EAAA;AAC5C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC/B,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACnC,gBAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC;AAClD,aAAA;YACD,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AACrC,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;AACpB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;;AAGG;AACK,IAAA,SAAS,CAAC,UAAsB,EAAA;AACtC,QAAA,IAAI,MAAW,CAAC;AAChB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,QAAQ,UAAU;AAChB,YAAA,KAAK,SAAS;AAAE,gBAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;gBAC7C,MAAM;AACR,YAAA,KAAK,SAAS;AAAE,gBAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;gBAC5C,MAAM;AACR,YAAA;AAAS,gBAAA,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;gBACrC,MAAM;AACT,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AACD;;;AAGG;IACK,cAAc,GAAA;AACpB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;KAC/F;AACD;;;;;AAKG;IACK,mBAAmB,GAAA;AACzB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC7B;AACD;;AAEG;AACK,IAAA,sBAAsB,CAAC,MAAc,EAAE,KAAa,EAAE,MAA2D,EAAE,EAAU,EAAA;QACnI,IAAI,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,IAAI,CAAC,CAAC;AAC5D,QAAA,IAAI,UAAU,GAAG,CAAA,EAAG,KAAK,CAAI,CAAA,EAAA,MAAM,EAAE,CAAC;AACtC,QAAA,QAAQ,YAAY;AAClB,YAAA,KAAK,CAAC;AAAE,gBAAA,UAAU,GAAG,CAAG,EAAA,KAAK,CAAI,CAAA,EAAA,MAAM,EAAE,CAAC;gBAAC,MAAM;AACjD,YAAA,KAAK,CAAC,CAAC;YACP,KAAK,CAAC;gBACJ,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE;AACrC,oBAAA,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;AACnD,iBAAA;AACD,gBAAA,UAAU,GAAG,CAAG,EAAA,MAAM,CAAK,GAAA,CAAA,CAAC;AAC5B,gBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;gBACxB,MAAM;AACT,SAAA;AACD,QAAA,OAAO,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;KACtD;AACD;;;;;;AAMG;AACK,IAAA,qBAAqB,CAAC,GAAM,EAAE,SAAA,GAAqB,KAAK,EAAA;AAC9D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;AACtC,QAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;AAChC,QAAA,IAAI,WAAW,GAAsB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,IAAI,iBAAiB,CAAC,OAAO,CAAC;QAClG,IAAI,IAAI,GAAkB,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,CAAC;QAEN,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAS,GAAG,CAAC,CAAC;QACxD,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,IAAI,WAAW,IAAI,iBAAiB,CAAC,kBAAkB,EAAE;;AAE/F,YAAA,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC;AACzC,SAAA;AAED,QAAA,QAAQ,WAAW;YACjB,KAAK,iBAAiB,CAAC,OAAO;;gBAE5B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3B,oBAAA,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;wBAC5D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,qBAAA;AACF,iBAAA;gBACD,MAAM;YACR,KAAK,iBAAiB,CAAC,mBAAmB;;gBAExC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC3B,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACtC,yBAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG;6BACd,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,IAAI,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC,CAC/E,EACD;wBACA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,qBAAA;AACF,iBAAA;gBACD,MAAM;YACR,KAAK,iBAAiB,CAAC,kBAAkB;;AAEvC,gBAAA;AACE,oBAAA,IAAI,GAAG,EAAE;wBACP,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;4BAC3B,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACtC,iCACE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG;qCAEd,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,IAAI,MAAM,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,IAAI,IAAI,CAAC;4CACxE,SAAS,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAC5E,CACF,EACD;gCACA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA;gBACD,MAAM;AACT,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;AAGG;IACK,aAAa,CAAC,GAAW,EAAE,IAAkB,EAAA;AACnD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;YAChC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,SAAS,GAAQ,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,QAAA,IAAI,OAAO,CAAC;AACZ,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE;gBACpC,SAAS,CAAC,OAAO,CAAC,GAAI,GAAW,CAAC,OAAO,CAAC,CAAC;AAC5C,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACjC,gBAAA,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7B,gBAAA,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,SAAS;oBAClC,SAAS,CAAC,OAAO,CAAC,GAAI,GAAW,CAAC,OAAO,CAAC,CAAC;AAC9C,aAAA;AACF,SAAA;KACF;;;;AAOD;;;;;AAKG;AACH,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,QAAQ,CAAC;KACxB;AACD;;;;;;AAMG;AACH,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,UAAU,CAAE,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,SAAS,CAAE,IAAI,CAAC,CAAC;AAC3H,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;;;AAKG;AACH,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,SAAS,CAAC;KACzB;AACD;;;;AAIG;IACH,IAAI,IAAI,GAAU,EAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE;AACtD;;;;AAIG;AACH,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,OAAO,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;KAC1C;AACD;;;AAGG;IACH,IAAI,WAAW,KAAwC,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE;AAClF;;;;AAIG;AACH,IAAA,IAAI,WAAW,GAAa,EAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE;AACrF;;;;AAIG;IACH,IAAI,WAAW,CAAC,OAAsB,EAAA;AACpC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACjD;AACD;;;;AAIG;AACH,IAAA,IAAI,SAAS,GAAoB,EAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE;AACxF;;;;;;;;;;;AAWG;IACH,IAAI,SAAS,CAAC,OAAsB,EAAA;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,MAAM,CAAC,KAAK,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;KACrF;AACD;;;;AAIG;AACH,IAAA,IAAI,QAAQ,GAAA;QACV,MAAM,GAAG,GAAU,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,GAAW,CAAC,CAAC,CAAC;AACnB,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;YAChC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;AAEG;AACH,IAAA,IAAI,aAAa,GAAA;QACf,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;KACxB;AACD;;AAEG;AACH,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;KAC5B;;;AAKD;;;;;;AAMG;AACH,IAAA,MAAM,CAAC,OAAyB,EAAA;AAC9B,QAAA,IAAI,OAAO,EAAE;YAEX,IAAI,CAAC,YAAY,EAAE,CAAC;YAEpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAChD,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;AACpD,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,IAAI,EAAE,CAAC;YAEpD,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;AAC7C,YAAA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;AACrB,aAAA;AAAM,iBAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,IAAI,EAAC,GAAG,EAAE,GAAI,IAAY,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC,CAAC;AACvF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACpB,aAAA;AAED,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;AAC5C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACxF,aAAA;YACD,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,EAAE,CAAC;AAEb,YAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AAExC,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAE5B,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;AAOG;AACH,IAAA,WAAW,CAAC,IAAA,GAAyB,KAAK,EAAE,UAAmB,KAAK,EAAA;AAClE,QAAA,IAAI,OAAO,EAAE;YACX,IAAI,IAAI,IAAI,KAAK;AAAE,gBAAA,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7C,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AACtD,SAAA;QACD,IAAI,QAAQ,GAAQ,EAAE,CAAC;AACvB,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE;AAChC,YAAA,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE;AACrD,gBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5C,aAAA;AACF,SAAA;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB;AACD;;;;AAIG;AACH,IAAA,cAAc,CAAC,OAA+B,EAAA;AAC5C,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;YAC5B,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;AAMG;IACH,QAAQ,GAAA,EAAa,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAC/C;;;;;;;AAOG;AACH,IAAA,YAAY,GAAa,EAAA,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE;AACnE;;;;;;;AAOG;IACH,aAAa,GAAA;QACX,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,QAAA,IAAI,UAAsB,CAAC;AAC3B,QAAA,IAAI,GAAW,CAAC;QAEhB,UAAU,GAAG,UAAU,CAAC;QACxB,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,UAAU,CAAE,CAAC;QAC5C,OAAO,GAAG,IAAI,CAAC,EAAE;AACf,YAAA,MAAM,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAE,CAAC;AAC9C,SAAA;QACD,UAAU,GAAG,SAAS,CAAA;QACtB,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,UAAU,CAAE,CAAC;QAC5C,OAAO,GAAG,IAAI,CAAC,EAAE;AACf,YAAA,MAAM,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAE,CAAC;AAC9C,SAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BE;AACF,QAAA,OAAO,MAAM,CAAC;KACf;AACD;;;;;;AAMG;AACH,IAAA,aAAa,GAAa,EAAA,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE;AACpE;;;;AAIG;AACH,IAAA,UAAU,KAAa,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACvF;;;;;AAKG;IACH,UAAU,GAAA;QACR,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;;;;;AAYG;IACH,QAAQ,CAAC,GAAG,YAAsB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,YAAY,EAAE;YACtC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,IAAI,GAAG,CAAC;AACR,gBAAA,IAAI,IAAI,CAAC;AACT,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,oBAAA,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;AAC3B,wBAAA,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;wBACnB,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBAC9B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;4BAC5C,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;AAClC,4BAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1B,yBAAA;AACD,wBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;wBACrC,IAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAG;AAC/D,4BAAA,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACf,yBAAA;AACF,qBAAA;AAAM,yBAAA;AACL,wBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AACpB,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACvC,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;;;;;;AAOG;IACH,MAAM,CAAC,GAAG,YAAsB,EAAA;QAC9B,IAAI,GAAG,GAAqB,IAAI,CAAC;AACjC,QAAA,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,KAAa,CAAC;AAClB,YAAA,IAAI,IAAY,CAAC;AACjB,YAAA,IAAI,IAAY,CAAC;AACjB,YAAA,IAAI,GAAQ,CAAC;AACb,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,KAAK,GAAG,CAAC,EAAE;AACb,oBAAA,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AAClD,oBAAA,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBACnD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;AACxC,wBAAA,GAAG,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;wBAC1B,IAAI,GAAG,CAAC,KAAK,EAAE;4BACb,OAAO,GAAG,CAAC,KAAK,CAAC;AAClB,yBAAA;AAAM,6BAAA;4BACL,IAAI;AACF,gCAAA,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACpB,6BAAA;AAAC,4BAAA,OAAO,GAAQ,EAAE;AACjB,gCAAA,QAAQ,GAAG,CAAC,OAAO,EAAE;AACtB,6BAAA;AACF,yBAAA;wBACD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AAC3C,qBAAA;AAAM,yBAAA;wBACL,OAAO,CAAA,cAAA,EAAiB,IAAI,CAAA,CAAE,CAAC;AAChC,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE,CAAA;KACV;AACD;;;;AAIG;IACH,UAAU,GAAA;QACR,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACxC;AACD;;;;;;;;;;;;;;;;;AAiBG;IACH,eAAe,CAAC,GAAW,EAAE,KAAa,EAAA;QACxC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;YACrC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE;AAC3C,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC9C,aAAA;AACF,SAAA;QACD,OAAO,CAAC,GAAG,CAAC;KACb;AACD;;;;;;;;;;AAUG;IACH,SAAS,GAAA;AACP,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACvC,IAAI,UAAU,IAAI,CAAC;YAAE,OAAO,UAAU,CAAC,OAAO,CAAC;;QAG/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YACnC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,EAAE;gBACxC,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,aAAA;AACF,SAAA;;QAED,MAAM,CAAC,WAAW,EAAE,CAAC;AAErB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,GAAG,GAAW,EAAE,CAAC;AACrB,QAAA,IAAI,GAAG,GAAW,CAAC,CAAC,CAAC;AACrB,QAAA,OAAO,EAAE,GAAG,GAAG,KAAK,EAAE;YACpB,GAAG,GAAG,EAAE,CAAC;YACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACnC,gBAAA,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACxC,aAAA;AACF,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;AAIG;IACH,SAAS,GAAA;AACP,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;KAC5B;AACD;;;;AAIG;IACH,MAAM,GAAA,EAAa,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE;AACzE;;;;;AAKG;AACH,IAAA,MAAM,CAAC,GAAW,EAAA;QAChB,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;AACrC,YAAA,IAAI,IAAI,CAAC,WAAW,IAAI,GAAG,EAAE;gBAC3B,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,aAAA;AACD,YAAA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;YACvB,OAAO,UAAU,CAAC,OAAO,CAAA;AAC1B,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;AAKG;AACH,IAAA,YAAY,CAAC,GAAY,EAAA;AACvB,QAAA,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;AACrC,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;;AAMG;AACH,IAAA,OAAO,CAAC,IAAS,EAAA;AACf,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvB,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,KAAK,IAAI,CAAC,EAAE;oBACd,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACrC,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QACD,OAAO,CAAC,CAAC,CAAC;KACX;AACD;;;;;;;;;;AAUG;AACH,IAAA,YAAY,CAAC,UAAsB,EAAE,OAAsD,EAAE,UAAmB,EAAA;QAC9G,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,KAAK,UAAU,IAAI,SAAS,CAAC;YAAE,OAAO,UAAU,CAAC,OAAO,CAAC;AAChF,QAAA,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI;YAAE,OAAO,UAAU,CAAC,OAAO,CAAC;QAEnD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC1C,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,GAAG,QAAQ,CAAC;YAC3F,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC;AACT,QAAA,IAAI,IAAI,CAAC;AACT,QAAA,IAAI,QAAQ,CAAC;AACb,QAAA,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AACxB,QAAA,OAAO,EAAE,CAAC,GAAG,MAAM,EAAE;AACnB,YAAA,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACjB,gBAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBAAE,SAAS;AAClE,aAAA;AACD,YAAA,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AAC3C,gBAAA,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAE,CAAC;gBAChC,IAAK,MAAM,CAAC,CAAC,CAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;oBACzC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtC,oBAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE;AACjC,wBAAA,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAChB,wBAAA,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAChB,wBAAA,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;wBAC5B,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;AAOG;AACH,IAAA,QAAQ,CAAC,GAAoB,EAAE,UAAA,GAAyB,UAAU,EAAA;QAChE,IAAI,KAAK,GAAG,KAAK,CAAC;AAClB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;;YAE3B,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpC,SAAA;AAAM,aAAA;YACL,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE;AACnC,gBAAA,MAAM,GAAG,GAAM,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3B,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAa,CAAC,CAAC;AAC9C,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;;;;;;AAQG;AACH,IAAA,aAAa,CAAC,GAAoB,EAAE,QAAA,GAAuB,UAAU,EAAA;QACnE,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,OAAO,GAAG,SAAS,CAAC;AAExB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;;YAE3B,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzC,SAAA;AAAM,aAAA;YACL,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE;AACnC,gBAAA,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAW,CAAC,CAAC;AAC3D,aAAA;AACF,SAAA;AACD,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChD,SAAA;AACD,QAAA,OAAO,UAAU,CAAC;KACnB;AACD;;;;;;;;;AASG;AACH,IAAA,eAAe,CAAC,GAAW,EAAE,QAAA,GAAuB,UAAU,EAAA;AAC5D,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,QAAQ,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI,CAAC;AAClD,QAAA,QAAQ,GAAG,QAAQ,IAAI,UAAU,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,QAAA,OAAO,EAAE,CAAC,GAAG,MAAM,EAAE;YACnB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;AACjC,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;AACF,SAAA;QACD,OAAO,CAAC,CAAC,CAAC;KACX;AACD;;;;AAIG;IACH,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC;KACjC;AACD;;;;;;AAMG;AACH,IAAA,UAAU,CAAC,KAAc,EAAA;QACvB,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC1B,SAAA;QACD,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACvC,QAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;KAChC;AACD;;;;;;;;AAQG;AACH,IAAA,SAAS,CAAC,GAAoB,EAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACjC,QAAA,IAAI,QAAQ,GAAG,CAAC,KAAK,QAAQ,EAAE;AAC7B,YAAA,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AACjB,YAAA,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;AAC5C,SAAA;AACD,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;YAC3B,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;aAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE;AAC1C,YAAA,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;;YAEvB,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;AAKG;AACH,IAAA,SAAS,KAAa,OAAO,IAAI,CAAC,WAAW,CAAA,EAAE;AAC/C;;;;;;;AAOG;IACH,aAAa,GAAA,EAAa,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;AACrD;;;;;;AAMG;AACH,IAAA,aAAa,CAAC,GAAoB,EAAA;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AACvC,QAAA,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;KACjC;AACD;;;;;;AAMG;AACH,IAAA,cAAc,CAAC,IAAY,EAAA;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;AAC9B,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACjC,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AAChD,SAAA;QACD,OAAO,CAAC,CAAC,CAAC;KACX;AACD;;;;;;AAMG;AACH,IAAA,WAAW,CAAC,MAAuB,EAAA;QACjC,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACxC,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,OAAO,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;AAC9B,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AACD;;;;;;;;AAQG;IACH,WAAW,CAAC,MAAuB,EAAE,IAAY,EAAA;QAC/C,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACxC,QAAA,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;YACtC,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;;;AAUG;IACH,QAAQ,CAAC,MAAuB,EAAE,KAAa,EAAA;QAC7C,MAAM,IAAI,GAA4B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACnE,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YACvB,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAC5C,gBAAA,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,aAAA;AACF,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;;;;;;;AAQG;IACH,cAAc,CAAC,MAAuB,EAAE,IAAS,EAAA;QAC/C,MAAM,IAAI,GAA4B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACnE,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACvB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;YAChE,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,gBAAA,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,aAAA;AACF,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;;;;;;;AAQG;IACH,eAAe,CAAC,MAAuB,EAAE,IAAqB,EAAA;QAC5D,MAAM,IAAI,GAA4B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACnE,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACvB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;YAC9D,IAAI,GAAG,IAAI,CAAC,EAAE;gBACZ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;AACrC,aAAA;AACF,SAAA;AACD,QAAA,OAAO,IAAI,IAAI,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;KACzC;AACD;;;;;;AAMG;AACH,IAAA,SAAS,CAAC,MAAuB,EAAA;QAC/B,MAAM,IAAI,GAA4B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACnE,QAAA,IAAI,IAAI,EAAE;YACR,OAAO,IAAI,CAAC,MAAM,CAAC;AACpB,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;;;;;;;;;AAUG;AACH,IAAA,QAAQ,CAAC,MAAuB,EAAE,KAAa,EAAE,KAAoB,EAAA;QACnE,MAAM,IAAI,GAA4B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,IAAI,IAAI,KAAK,EAAE;AACjB,YAAA,MAAM,MAAM,GAAoB,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;YAClD,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE;gBACvC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBAClC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;gBAClC,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,aAAA;AACF,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;;AASG;AACH,IAAA,WAAW,CAAC,MAAuB,EAAA;QACjC,MAAM,IAAI,GAA4B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACnE,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;AAIG;AACH,IAAA,YAAY,CAAC,MAAuB,EAAA;QAClC,MAAM,IAAI,GAA4B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACnE,QAAA,IAAI,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAClE,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;;;AAKG;AACH,IAAA,WAAW,CAAC,GAAoB,EAAE,SAAA,GAAoB,GAAG,EAAA;AACvD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,KAAK,GAAa,EAAE,CAAC;AACzB,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,YAAA,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,SAAA;AACD,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACjG,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC9B;AACD;;;;;AAKG;AACH,IAAA,cAAc,CAAC,GAAoB,EAAE,SAAA,GAAoB,GAAG,EAAA;AAC1D,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,KAAK,GAAa,EAAE,CAAC;AACzB,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,YAAA,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,SAAA;AACD,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACpG,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC9B;AACD;;;;AAIG;AACH,IAAA,YAAY,CAAC,GAAoB,EAAA;AAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,KAAK,GAAa,EAAE,CAAC;AACzB,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,YAAA,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACzB,SAAA;AACD,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAClG,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;KACzC;AACD;;;;;;;;;;AAUG;IACH,KAAK,GAAA;QACH,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,MAAM,CAAC,UAAU,GAAG,IAAI,OAAO,EAAE,CAAC;AAClC,QAAA,MAAM,CAAC,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;AACrC,QAAA,MAAM,CAAC,WAAW,GAAG,IAAI,OAAO,EAAE,CAAC;AACnC,QAAA,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACvB,MAAM,CAAC,WAAW,EAAE,CAAC;;AAGrB,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;;AAEtB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;QAEnC,MAAM,CAAC,cAAc,EAAE,CAAC;QAExB,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;;;;;;;;;AAgBG;IACH,WAAW,GAAA;AACT,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,MAAM,CAAC,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;AACrC,QAAA,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;;;;AAWG;AACH,IAAA,SAAS,CAAC,KAAmB,EAAA;QAC3B,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC3C,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC9B,YAAA,IAAI,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;AAC/B,YAAA,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAC7D,YAAA,IAAI,GAAG,EAAE;;AAEP,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,oBAAA,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,IAAG,EAAG,OAAO,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE;wBAC7F,GAAG,GAAG,KAAK,CAAC;wBACZ,MAAM;AACP,qBAAA;AACF,iBAAA;AACD,gBAAA,IAAI,GAAG,EAAE;AACP,oBAAA,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,EAAE;wBAC/B,KAAK,CAAC,KAAK,EAAE,CAAC;AACf,qBAAA;oBACD,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;AACjD,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;oBAE9B,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,iBAAA;AACF,aAAA;AACF,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;;AASG;IACH,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACjD,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,aAAA;AAAM,iBAAA;gBACL,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,aAAA;AACF,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;AAGG;IACH,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;KACpC;AACD;;;;;;;;;;;;AAYG;IACH,QAAQ,CAAC,QAAgB,EAAE,MAAc,EAAE,SAAqB,EAAE,MAAoB,EAAE,SAAiB,EAAE,UAAsB,EAAA;AAC/H,QAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,IAAI,IAAI,CAAC,UAAU;YACjG,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC5C,QAAA,IAAI,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AACjD,QAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAClB,YAAA,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;AACrB,YAAA,IAAI,IAAS,CAAC;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC5B,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,gBAAA,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACnD,aAAA;YACD,IAAI,SAAS,IAAI,UAAU,EAAE;gBAC3B,MAAM,CAAC,eAAe,EAAE,CAAC;gBACzB,MAAM,CAAC,cAAc,EAAE,CAAC;AACzB,aAAA;YACD,IAAI,UAAU,IAAI,UAAU,EAAE;gBAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,aAAA;AACF,SAAA;;YACC,OAAO,UAAU,CAAC,OAAO,CAAC;QAC5B,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;AAQG;AACH,IAAA,WAAW,CAAC,QAAgB,EAAE,MAAc,EAAE,WAAuB,UAAU,EAAA;QAC7E,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ;YACjD,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;AACnE,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE;gBAC7E,MAAM,CAAC,KAAK,EAAE,CAAC;AAChB,aAAA;iBAAM,IAAI,QAAQ,IAAI,UAAU,EAAE;gBACjC,MAAM,CAAC,eAAe,EAAE,CAAC;AACzB,gBAAA,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAa,CAAC,CAAC,CAAC;gBACnE,MAAM,CAAC,cAAc,EAAE,CAAC;AACzB,aAAA;YACD,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;;;;;;AAaG;IACH,QAAQ,CAAC,QAAgB,EAAE,MAAc,EAAE,SAAqB,EAAE,MAAoB,EAAE,SAAiB,EAAE,UAAsB,EAAA;AAC/H,QAAA,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,IAAI,IAAI,CAAC,UAAU;YACjG,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC5C,QAAA,IAAI,MAAM,IAAI,IAAI,IAAI,UAAU,IAAI,QAAQ,EAAE;YAC5C,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;AACD,QAAA,IAAI,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;AAC7D,QAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAClB,YAAA,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;YACrB,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC5B,oBAAA,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,IAAI,CAAC;gBACT,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC5B,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,oBAAA,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEnD,iBAAA;AACF,aAAA;AAED,YAAA,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAa,CAAC,CAAC,CAAC;AAE3D,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE;gBAC7E,MAAM,CAAC,KAAK,EAAE,CAAC;AAChB,aAAA;iBAAM,IAAI,SAAS,IAAI,UAAU,EAAE;gBAClC,MAAM,CAAC,eAAe,EAAE,CAAC;gBACzB,MAAM,CAAC,cAAc,EAAE,CAAA;AACxB,aAAA;YACD,IAAI,UAAU,IAAI,UAAU,EAAE;gBAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,cAAc,EAAE,CAAC;AACvB,aAAA;AACF,SAAA;;YACC,OAAO,UAAU,CAAC,OAAO,CAAC;QAE5B,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;AAIG;IACH,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;KAClD;AACD;;;;;AAKG;AACH,IAAA,SAAS,CAAC,IAAqC,EAAA;AAC7C,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;YAC/B,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;QACD,IAAI,OAAO,GAAY,KAAK,CAAC;AAC7B,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACzB,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACjD,IAAI,MAAM,GAAG,CAAC,EAAE;gBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,oBAAA,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAE,IAAc,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE;wBAChE,OAAO,GAAG,IAAI,CAAC;AAChB,qBAAA;AACF,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;gBAClB,OAAO,GAAG,IAAI,CAAC;AAChB,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;gBACpB,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,IAAI,IAAI,GAAG,CAAA,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC,IAAI,CAAC,EAAE;AACV,oBAAA,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAE,IAAY,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE;wBAChE,OAAO,GAAG,IAAI,CAAC;AAChB,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,IAAI,OAAO,EAAE;YACX,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;QAED,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;;;;AAWG;IACH,QAAQ,CAAC,GAAG,IAAS,EAAA;QACnB,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,KAAI;AAE7C,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,gBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBACZ,OAAO;AACR,aAAA;;AAGD,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAEhC,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAA,OAAO,CAAC,GAAG,CAAC,CAAA,EAAE,CAAC,CAAC;gBACjE,OAAO;AACR,aAAA;AAED,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;;AAEtB,aAAA;YAED,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE;gBACpD,IAAI,IAAI,CAAC,WAAW,EAAE;;oBAEpB,IAAI,QAAQ,GAAG,SAAS,CAAC;oBACzB,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE;AAC9C,wBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,wBAAA,IAAI,KAAK,CAAC;AACV,wBAAA,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC;AAC5B,wBAAA,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE;AACtB,4BAAA,KAAK,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;4BACrB,IAAI,KAAK,IAAI,IAAI,EAAE;gCACjB,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACxC,6BAAA;AACF,yBAAA;AACF,qBAAA;oBAED,IAAI,SAAS,GAAG,IAAI,CAAC;AACrB,oBAAA,MAAM,KAAK,GAAG,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAClD,oBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACxC,oBAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;wBAC3B,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;AACzC,4BAAA,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC;AAChC,yBAAA;wBACD,IAAI,SAAS,GAAyC,KAAK,CAAC;AAC5D,wBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;wBACrB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;wBACrD,IAAI,YAAY,YAAY,QAAQ,EAAE;4BACpC,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC;AACpG,yBAAA;;wBAED,SAAS;AACN,6BAAA,IAAI,CAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAE;AAClC,6BAAA,SAAS,CAAC;AACT,4BAAA,IAAI,EAAE,CAAC,OAAO,KAAI;gCAChB,IAAI,IAAI,GAAG,IAAI,CAAC;gCAChB,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,oCAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE;AACrC,wCAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE;AACrC,4CAAA,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;AACvB,yCAAA;AAAM,6CAAA;AACL,4CAAA,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AACvD,yCAAA;AACF,qCAAA;AAAM,yCAAA;wCACL,IAAI,GAAG,OAAO,CAAC;AAChB,qCAAA;AACD,oCAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC1B,wCAAA,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;AACf,qCAAA;AACF,iCAAA;AACD,gCAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;6BAC/B;AACD,4BAAA,KAAK,EAAE,CAAC,GAAyC,KAAI;AACnD,gCAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;gCACtB,IAAI,CAAC,KAAK,EAAE,CAAC;gCACb,IAAI,GAAG,YAAY,gBAAgB,EAAE;AACnC,oCAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,IAAE,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/I,iCAAA;AAAM,qCAAA,IAAI,CAAC,GAAG,CAAC,KAAK,YAAY,gBAAgB,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;oCACvE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvC,iCAAA;AAAM,qCAAA;AACL,oCAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACnC,iCAAA;gCACD,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,gCAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;6BAC7B;4BACD,QAAQ,EAAE,MAAI;AACZ,gCAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,gCAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjC,gCAAA,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;gCACvC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;gCACjE,IAAI,CAAC,cAAc,EAAE,CAAC;gCACtB,OAAO,CAAC,QAAQ,CAAC,CAAC;6BACnB;AACF,yBAAA,CAAC,CAAC;AACN,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7B,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7B,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;AACD;;;;;;AAMG;AACH,IAAA,WAAW,CAAC,GAAW,EAAA;QACrB,OAAO,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,MAAM,KAAI;YACjD,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC;YAChE,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,WAAW,KAAK,iBAAiB,YAAY,QAAQ,CAAC,EAAE;AAEtG,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAC1D,gBAAA,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,cAAc,EAAE;AAClD,oBAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;oBAC5B,OAAO;AACR,iBAAA;gBAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE,CAAC;AAC1D,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACrC,gBAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACvD,oBAAA,IAAI,MAAM,CAAC;oBACX,IAAI,SAAS,GAAQ,EAAE,CAAC;AACxB,oBAAA,OAAO,CAAC,OAAO,CAAC,GAAG,IAAG;AACpB,wBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AACnC,wBAAA,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACpE,qBAAC,CAAC,CAAC;oBACH,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC5H,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC,SAAS,CAAC;AACtG,wBAAA,IAAI,EAAE,CAAC,IAAI,KAAI;AACb,4BAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;yBACrC;AACD,wBAAA,KAAK,EAAE,CAAC,GAAsB,KAAI;AAChC,4BAAA,IAAI,CAAC,GAAG,CAAC,KAAK,YAAY,gBAAgB,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;gCAChE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvC,6BAAA;AAAM,iCAAA;AACL,gCAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACnC,6BAAA;4BACD,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,4BAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;yBAC7B;wBACD,QAAQ,EAAE,MAAK;4BACb,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;4BAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,4BAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;yBAC7B;AACF,qBAAA,CAAC,CAAC;AACJ,iBAAA;AACF,aAAA;AACD,YAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC9B,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,wBAAwB,CAAC,QAAa,EAAA;;AAE5C,QAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE;AACtC,YAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,QAAQ,CAAC,EAAE,CAAC,KAAK,QAAQ,EAAE;AAChF,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AACrC,gBAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC;gBAE1B,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBACpD,IAAI,GAAG,IAAI,CAAC,EAAE;AACZ,oBAAA,IAAI,MAAc,CAAC;AACnB,oBAAA,IAAI,KAAU,CAAC;AACf,oBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC7B,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,IAAG;AACjB,wBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;wBACnC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,EAAE;AACpC,4BAAA,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACvB,4BAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAC3C,yBAAA;AACH,qBAAC,CAAC,CAAC;oBACH,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;AAC3D,iBAAA;AAAM,qBAAA;AACL,oBAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,KAAK,CAAA,mBAAA,CAAqB,CAAC,CAAC;AAC5E,iBAAA;AAEF,aAAA;iBAAM,IAAI,QAAQ,CAAC,KAAK,EAAE;AACzB,gBAAA,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACzE,aAAA;AACF,SAAA;KACF;AACD;;;;;;AAMG;IACH,YAAY,GAAA;QACV,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,IAAI,GAAU,EAAE,CAAC;AACrB,YAAA,IAAI,MAAM,GAAiB,MAAM,CAAC,SAAS,EAAE,CAAC;AAC9C,YAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;YAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AAChC,aAAA;YACD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAG,EAAC,OAAO,CAAC,EAAE,CAAC,CAAA,EAAC,CAAC,CAAC;AAClD,SAAC,CAAC,CAAC;KACJ;AACD;;;;AAIG;IACK,eAAe,GAAA;QACrB,IAAI,GAAG,GAAiB,EAAE,CAAC;AAC3B,QAAA,IAAI,UAAsB,CAAC;AAC3B,QAAA,IAAI,MAAgB,CAAC;AACrB,QAAA,IAAI,IAAY,CAAC;AACjB,QAAA,IAAI,MAA8B,CAAC;AACnC,QAAA,IAAI,CAAC,CAAC;AACN,QAAA,IAAI,IAAI,CAAC;AACT,QAAA,IAAI,QAAQ,CAAC;AACb,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,IAAI,UAAU,GAAe,UAAU,CAAA;AACvC,QAAA,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACpC,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;QACrB,CAAC,GAAG,CAAC,CAAC,CAAC;AACP,QAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;YACjB,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AACjD,YAAA,IAAI,MAAM,IAAI,cAAc,IAAI,MAAM,IAAI,eAAe,EAAE;gBACzD,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,gBAAA,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,GAAG,CAAS,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,gBAAA,UAAU,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACzE,gBAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtB,aAAA;AACF,SAAA;QACD,UAAU,GAAG,SAAS,CAAA;AACtB,QAAA,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACpC,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;QACrB,CAAC,GAAG,CAAC,CAAC,CAAC;AACP,QAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;YACjB,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AACjD,YAAA,IAAI,MAAM,IAAI,cAAc,IAAI,MAAM,IAAI,eAAe,EAAE;gBACzD,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,gBAAA,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,GAAG,CAAS,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,gBAAA,UAAU,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACzE,gBAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtB,aAAA;AACF,SAAA;QACD,UAAU,GAAG,SAAS,CAAA;AACtB,QAAA,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACpC,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;QACrB,CAAC,GAAG,CAAC,CAAC,CAAC;AACP,QAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;YACjB,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AACjD,YAAA,IAAI,MAAM,IAAI,EAAE,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,cAAc,CAAC,EAAE;gBAC7D,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,gBAAA,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC,GAAG,CAAS,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3E,gBAAA,UAAU,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACxE,gBAAA,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtB,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAEvC,QAAA,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;KAC9E;AACD;;;;AAIG;IACH,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;KAC/C;AACD;;;;;;AAMG;AACH,IAAA,UAAU,CAAC,OAAe,EAAE,kBAAA,GAAoE,oBAAoB,EAAA;AAClH,QAAA,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,EAAE,CAAC;AACxB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAA;QAC7B,IAAI,GAAG,GAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;AACjD,QAAA,IAAI,CAAC,GAAG,CAAC,SAAS,YAAY,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAChE,MAAM,OAAO,GAAgB,GAAG,CAAC;AACjC,YAAA,MAAM,OAAO,GAAiB,OAAO,CAAC,IAAI,CAAC;AAC3C,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;AAC3B,YAAA,IAAI,IAAI,CAAC;AACT,YAAA,IAAI,GAAW,CAAC;AAChB,YAAA,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC5B,gBAAA,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;AACtB,oBAAA,GAAG,GAAG,MAAM,CAAC,eAAe,CAAO,OAAO,CAAC,CAAC,CAAC,CAAC,IAAK,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;oBAC7E,IAAI,GAAG,IAAI,CAAC,EAAE;AACZ,wBAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAC;AAC7E,qBAAA;AAAM,yBAAA,IAAI,MAAM,CAAC,eAAe,CAAO,OAAO,CAAC,CAAC,CAAC,CAAC,IAAK,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE;;AAEtF,qBAAA;yBAAM,IAAI,kBAAkB,IAAI,oBAAoB,EAAE;wBACrD,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,GAAG,GAAG,MAAM,CAAC,eAAe,CAAO,OAAO,CAAC,CAAC,CAAC,CAAC,IAAK,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;AAC7E,oBAAA,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM;AACvB,wBAAA,KAAK,cAAc,CAAC;AACpB,wBAAA,KAAK,eAAe;AAClB,4BAAA,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,cAAc,EAAE;;AAEpD,gCAAA,IAAI,GAAG,MAAM,CAAC,eAAe,CAAO,OAAO,CAAC,CAAC,CAAC,CAAC,IAAK,CAAC,UAAU,CAAC,CAAC,CAAC;gCAClE,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,6BAAA;4BACD,IAAI,GAAG,IAAI,CAAC,EAAE;gCACZ,KAAK,IAAI,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC/B,oCAAA,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE;AAChB,wCAAA,MAAM,CAAC,IAAK,CAAC,GAAG,CAAC,GAAS,OAAO,CAAC,CAAC,CAAC,CAAC,IAAK,CAAC,GAAG,CAAC,CAAC;AACvD,qCAAA;yCAAM,IAAI,kBAAkB,IAAI,oBAAoB,EAAE;wCACrD,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,qCAAA;AACF,iCAAA;AACF,6BAAA;iCAAM,IAAI,kBAAkB,IAAI,oBAAoB,EAAE;gCACrD,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,6BAAA;4BACD,MAAM;AACT,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AACD;;;;;;;;;;;AAWG;AACH,IAAA,MAAM,CAAC,MAAA,GAAkB,IAAI,EAAE,YAAqB,IAAI,EAAA;QACtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YAErC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACtC,gBAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC5B,OAAO;AACR,aAAA;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,gBAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC5B,OAAO;AACR,aAAA;AACD,YAAA,MAAM,UAAU,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAC5C,YAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;AAChC,gBAAA,IAAI,MAAM,EAAE;AACV,oBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;AACzB,wBAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;wBAC5B,OAAO;AACR,qBAAA;AACF,iBAAA;AACD,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,gBAAA,IAAI,YAAY,GAA0D,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;gBAEjH,IAAI,CAAC,cAAc,EAAE;;;;AAIlB,qBAAA,SAAS,CAAC;AACT,oBAAA,IAAI,EAAE,CAAC,IAAI,KAAI;AACb,wBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;qBAChD;AACD,oBAAA,KAAK,EAAE,CAAC,GAAsB,KAAI;AAChC,wBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;wBAEvB,IAAI,SAAS,GAAG,KAAK,CAAC;wBACtB,IAAI,GAAG,CAAC,KAAK,EAAE;AACb,4BAAA,IAAI,GAAG,CAAC,KAAK,YAAY,gBAAgB,EAAE;;gCAEzC,IAAI,CAAC,aAAa,CAAC,OAAO,CACxB,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,CACtF,CAAC;gCACF,SAAS,GAAG,IAAI,CAAC;AAClB,6BAAA;AAAM,iCAAA,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;AAC5B,gCAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;gCACzB,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC9B,oCAAA,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,iCAAA;;AAED,gCAAA,IAAG,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;oCACpC,IAAI,CAAC,aAAa,CAAC,OAAO,CACxB,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,EAC9D,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,CAC7B,CAAC;oCACF,SAAS,GAAG,IAAI,CAAC;AAClB,iCAAA;AACF,6BAAA;AACF,yBAAA;wBACD,IAAI,CAAC,SAAS,EAAE;AACd,4BAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACnC,yBAAA;wBAED,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,wBAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;qBAC7B;oBACD,QAAQ,EAAE,MAAK;AACb,wBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,wBAAA,IAAI,SAAS,EAAE;4BAAE,IAAI,CAAC,WAAW,EAAE,CAAA;AAAE,yBAAA;AACrC,wBAAA,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;AACrG,wBAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACpC,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,wBAAA,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;qBAC7B;AACF,iBAAA,CAAC,CAAC;AACN,aAAA;AAEH,SAAC,CAAC,CAAC;KACJ;AACD;;AAEG;IACK,cAAc,GAAA;QACpB,IAAI,UAAU,GAAa,EAAE,CAAC;QAC9B,IAAI,UAAU,GAAmC,EAAE,CAAC;QACpD,IAAI,UAAU,GAAmC,EAAE,CAAC;AACpD,QAAA,IAAI,MAAgB,CAAC;AACrB,QAAA,IAAI,IAAY,CAAC;AACjB,QAAA,IAAI,MAA8B,CAAC;QAEnC,MAAM,WAAW,GAAmC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC;QACpF,MAAM,YAAY,GAAmC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAA;QACrF,MAAM,YAAY,GAAmC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC;QACtF,MAAM,YAAY,GAAmC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC;AAEtF,QAAA,IAAI,SAAkB,CAAC;AACvB,QAAA,IAAI,SAAkB,CAAC;AACvB,QAAA,IAAI,SAAkB,CAAC;QAEvB,IAAI,WAAW,YAAY,QAAQ,EAAE;YACnC,SAAS,GAAG,IAAI,CAAC;YACjB,SAAS,GAAG,IAAI,CAAC;YACjB,SAAS,GAAG,IAAI,CAAC;AAClB,SAAA;AAAM,aAAA;AACL,YAAA,SAAS,IAAI,YAAY,YAAY,QAAQ,CAAC,CAAC;AAC/C,YAAA,SAAS,IAAI,YAAY,YAAY,QAAQ,CAAC,CAAC;AAC/C,YAAA,SAAS,IAAI,YAAY,YAAY,QAAQ,CAAC,CAAC;AAChD,SAAA;;AAED,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACX,IAAI,UAAU,GAAe,UAAU,CAAA;AACvC,QAAA,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACpC,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,QAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;YACjB,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AACjD,YAAA,QAAQ,MAAM;AACZ,gBAAA,KAAK,cAAc;AAAG,oBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAAC,MAAM;AACzE,gBAAA,KAAK,eAAe;AAAE,oBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAAC,MAAM;AAC1E,aAAA;AACF,SAAA;QACD,CAAC,GAAG,CAAC,CAAC,CAAC;QACP,UAAU,GAAG,SAAS,CAAA;AACtB,QAAA,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACpC,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,QAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;YACjB,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AACjD,YAAA,QAAQ,MAAM;AACZ,gBAAA,KAAK,cAAc;AAAG,oBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAAC,MAAM;AACzE,gBAAA,KAAK,eAAe;AAAE,oBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAAC,MAAM;AAC1E,aAAA;AACF,SAAA;QACD,CAAC,GAAG,CAAC,CAAC,CAAC;QACP,UAAU,GAAG,SAAS,CAAC;AACvB,QAAA,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACpC,QAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,QAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;YACjB,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AACjD,YAAA,QAAQ,MAAM;AACZ,gBAAA,KAAK,eAAe,CAAC;AACrB,gBAAA,KAAK,cAAc;oBACjB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3B,MAAM;AACT,aAAA;AACF,SAAA;;AAGD,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAEhC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,IAAI,GAAG,CAAC;QAE3D,IAAI,aAAa,GAAoB,EAAE,CAAC;QACxC,IAAI,aAAa,GAAoB,EAAE,CAAC;QACxC,IAAI,aAAa,GAAoB,EAAE,CAAC;;AAGxC,QAAA,IAAI,SAAS,CAAC;AACd,QAAA,IAAI,SAAc,CAAC;AACnB,QAAA,IAAI,MAAc,CAAC;AACnB,QAAA,IAAI,MAAmB,CAAC;AACxB,QAAA,IAAI,SAAwB,CAAC;AAC7B,QAAA,IAAI,GAAW,CAAC;AAChB,QAAA,IAAI,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACtC,CAAC,GAAG,CAAC,CAAC,CAAC;AACP,YAAA,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;AACzB,YAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;gBACjB,SAAS,GAAG,EAAE,CAAC;AACf,gBAAA,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5D,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACzC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5C,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACzE,iBAAA;gBACD,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBAClD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;oBACtC,SAAS,GAAG,SAAS,CAAC;AACvB,iBAAA;gBACD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAClI,aAAA;AACF,SAAA;;AAED,QAAA,IAAI,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;YAC5E,CAAC,GAAG,CAAC,CAAC,CAAC;AACP,YAAA,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;YACzB,IAAI,OAAO,GAAQ,EAAE,CAAC;AACtB,YAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;AACjB,gBAAA,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAS,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,gBAAA,IAAI,SAAS,EAAE;oBACb,OAAO,GAAG,EAAE,CAAC;oBACb,SAAS,GAAG,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;wBACnC,IAAI,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AACvC,wBAAA,IAAI,IAAI,EAAE;AACR,4BAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACpC,4BAAA,OAAO,CAAC,MAAM,CAAC,GAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAS,CAAC,GAAG,CAAC,CAAC;AAClD,yBAAA;AACH,qBAAC,CAAC,CAAC;oBAEH,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9B,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvB,oBAAA,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAChE,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACzC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC5C,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAC5E,qBAAA;oBACD,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAClD,oBAAA,aAAa,CAAC,IAAI,CAChB,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CACnJ,CAAC;AACH,iBAAA;AACF,aAAA;AACF,SAAA;;AAED,QAAA,IAAI,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,YAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;AAC3E,YAAA,IAAI,IAAS,CAAC;AACd,YAAA,IAAI,IAAI,CAAC;YACT,CAAC,GAAG,CAAC,CAAC,CAAC;AACP,YAAA,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;AACzB,YAAA,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE;gBACjB,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9B,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxB,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,GAAG,EAAE,CAAC;AACV,gBAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE;AACpB,oBAAA,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,CAAE,CAAC;AAEtC,oBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE;wBAElC,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;;4BAExC,SAAS;AACV,yBAAA;AAED,wBAAA,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;wBACtC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,qBAAA;AACF,iBAAA;AACD,gBAAA,aAAa,CAAC,IAAI,CAChB,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CACxI,CAAC;AAEH,aAAA;AACF,SAAA;QAED,IAAI,oBAAoB,GAAgC,IAAI,CAAC;QAC7D,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,IAAI,CAAC,EAAE;;YAE5C,IAAI,CAAC,EAAE,IAAI,CAAC;AACZ,YAAA,IAAI,OAAO,CAAC;YACZ,IAAI,GAAG,GAAG,EAAE,CAAC;;YAEb,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAuB,cAAc,EAAG,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AAE5J,YAAA,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC;YAC5B,IAAI,IAAI,GAAG,CAAC,EAAE;AACZ,gBAAA,GAAG,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAQ,CAAC;gBAC3C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AACzB,oBAAA,OAAO,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC5H,oBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnB,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,oBAAoB,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;AACjD,aAAA;AAED,YAAA,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC;YAC5B,IAAI,IAAI,GAAG,CAAC,EAAE;AACZ,gBAAA,GAAG,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAQ,CAAC;gBAC3C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AACzB,oBAAA,OAAO,GAAG;wBACR,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG;wBAChC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;wBACpC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;AAC5C,wBAAA,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;qBACxB,CAAC;AACF,oBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnB,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,oBAAoB,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;AACjD,aAAA;AAED,YAAA,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC;YAC5B,IAAI,IAAI,GAAG,CAAC,EAAE;AACZ,gBAAA,GAAG,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAQ,CAAC;gBAC3C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AACzB,oBAAA,OAAO,GAAG;wBACR,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;AACpC,wBAAA,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;qBACxB,CAAC;AACF,oBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnB,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,oBAAoB,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;AACjD,aAAA;AACF,SAAA;;QAID,IAAI,OAAO,GAAuB,KAAK,CAAC;QAExC,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,MAAM,OAAO,GAAqB,EAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAC,CAAC;YAC1E,IAAI,WAAW,YAAY,QAAQ,EAAE;AACnC,gBAAA,IAAI,oBAAoB;AACtB,oBAAA,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;;oBAE5E,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;AACjH,aAAA;AAAM,iBAAA;gBACL,IAAI,QAAQ,GAAuB,KAAK,CAAC;gBACzC,IAAI,QAAQ,GAAuB,KAAK,CAAC;gBACzC,IAAI,QAAQ,GAAuB,KAAK,CAAC;AACzC,gBAAA,IAAI,YAAY,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,oBAAA,IAAI,oBAAoB;AACtB,wBAAA,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;;AAE9E,wBAAA,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAC1E,iBAAA;AACD,gBAAA,IAAI,YAAY,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,oBAAA,IAAI,oBAAoB;AACtB,wBAAA,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;;AAE9E,wBAAA,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAC1E,iBAAA;AACD,gBAAA,IAAI,YAAY,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,oBAAA,IAAI,oBAAoB;AACtB,wBAAA,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;;AAE9E,wBAAA,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAC1E,iBAAA;gBACD,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAChD,aAAA;AACF,SAAA;AAED,QAAA,OAAO,OAAO,CAAC;KAChB;AACD;;;;AAIG;IACK,qBAAqB,CAAC,IAAS,EAAE,OAA8D,EAAA;;;QAKrG,IAAI,SAAS,GAAW,CAAC,CAAC;QAC1B,IAAI,MAAM,GAAuB,EAAE,CAAC;AAEpC,QAAA,IAAI,IAAI,EAAE;;AAER,YAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;;gBAElC,IAAI,IAAI,CAAC,KAAK,EAAE;;AAEd,oBAAA,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACjE,iBAAA;;AAED,gBAAA,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE;;AAErD,oBAAA,IAAI,OAAO,GAAU,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACjE,oBAAA,IAAI,OAAO,GAAU,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACjE,oBAAA,IAAI,OAAO,GAAU,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBACjE,IAAI,GAAG,EAAE,CAAC;oBACV,IAAI,GAAG,EAAE,CAAC,CAAC;AACX,oBAAA,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;oBACrB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;;wBAExB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAE,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAC,CAAE,CAAC,CAAC;AAC1E,qBAAA;AACD,oBAAA,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;oBACrB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;;wBAExB,IAAI,CAAC,IAAI,CAAE,OAAO,CAAC,UAAU,CAAC,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC;AAC3E,qBAAA;AACD,oBAAA,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;oBACrB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;;wBAExB,IAAI,CAAC,IAAI,CAAE,OAAO,CAAC,UAAU,CAAE,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC;AAC5E,qBAAA;AACF,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;AACf,iBAAA;AACF,aAAA;AACD,YAAA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACzB,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,MAAM,GAAG,GAAU,IAAI,CAAC;AACxB,gBAAA,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;AAC1B,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;AACxD,gBAAA,IAAI,MAAW,CAAC;gBAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;;oBAE/B,IAAK,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAG;AACtC,wBAAA,SAAS,EAAE,CAAC;wBACZ,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACnB,wBAAA,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;;AAEjB,4BAAA,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;AAC1B,gCAAA,IAAI,GAAG,CAAC;AACR,gCAAA,IAAI,UAAsB,CAAC;gCAE3B,IAAI,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AACtC,gCAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;oCAC7B,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oCACjC,IAAI,QAAQ,IAAI,CAAC,EAAE;AACjB,wCAAA,MAAM,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,0HAA0H,CAAC,CAAC,CAAC;wCAClK,SAAS;AACV,qCAAA;AACF,iCAAA;AAAM,qCAAA;oCACL,QAAQ,GAAG,CAAC,CAAC;AACd,iCAAA;gCAED,UAAU,GAAG,UAAU,CAAC;AACxB,gCAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gCACtC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;gCAC3C,IAAI,GAAG,GAAG,CAAC,EAAE;oCACX,UAAU,GAAG,SAAS,CAAC;AACvB,oCAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oCACtC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;AAC5C,iCAAA;gCACD,IAAI,GAAG,IAAI,CAAC,EAAE;AACZ,oCAAA,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,cAAc,EAAE;;wCAE/D,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAW,CAAC,CAAC;;AAEhD,wCAAA,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC;AAC7B,qCAAA;AAAM,yCAAA;AACL,wCAAA,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC;AAC7B,qCAAA;;oCAGD,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;AACxC,oCAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC/B,wCAAA,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE;AACvB,4CAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gDACzB,MAAM,CAAC,GAAG,CAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAC1C,6CAAA;AACF,yCAAA;AACF,qCAAA;oCAED,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAE3C,iCAAA;AAAM,qCAAA;;oCAEL,UAAU,GAAG,SAAS,CAAC;AACvB,oCAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oCACtC,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;oCAC3C,IAAI,GAAG,IAAI,CAAC,EAAE;AACZ,wCAAA,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACtB,wCAAA,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC;AAC7B,qCAAA;AAAM,yCAAA;wCACL,OAAO,CAAC,GAAG,CAAC,CAAA,WAAA,EAAc,EAAE,CAAgC,6BAAA,EAAA,CAAC,CAAE,CAAA,CAAC,CAAC;AAClE,qCAAA;AACF,iCAAA;AACF,6BAAA;AAAM,iCAAA;AACL,gCAAA,MAAM,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAA,YAAA,EAAe,EAAE,CAAiC,8BAAA,EAAA,CAAC,CAAE,CAAA,CAAC,CAAC,CAAC;AAC9F,6BAAA;AACF,yBAAA;AAAM,6BAAA;;4BAEL,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE;AAC9B,gCAAA,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,2CAA2C,CAAC,CAAA,CAAE,EAAE,CAAC;AACtF,6BAAA;4BACD,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACvB,4BAAA,MAAM,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1D,yBAAA;AACF,qBAAA;AAAM,yBAAA;;AAEN,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;;AAErB,YAAA,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;AACjB,SAAA;KACF;AACD;;;;;;;;;;AAUG;AACH,IAAA,eAAe,CAAC,GAAoB,EAAE,UAAA,GAAyB,UAAU,EAAA;AACvE,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,YAAA,OAAQ,GAAW,CAAC,UAAU,CAAC,CAAC;AACjC,SAAA;aAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC1C,YAAA,OAAQ,MAAM,CAAC,GAAG,CAAS,CAAC,UAAU,CAAC,CAAC;AACzC,SAAA;QACD,OAAO,CAAC,CAAC,CAAC;KACX;AACD;;;;;;;AAOG;AACH,IAAA,eAAe,CAAC,KAAa,EAAE,UAAA,GAAyB,UAAU,EAAA;QAChE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC1C,QAAA,IAAI,KAAK,GAAW,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,KAAK,GAAW,MAAM,CAAC,MAAM,CAAC;AAClC,QAAA,OAAO,EAAE,KAAK,GAAG,KAAK,EAAE;YACtB,IAAK,MAAM,CAAC,KAAK,CAAS,CAAC,UAAU,CAAC,IAAI,KAAK,EAAE;AAC/C,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACF,SAAA;QACD,OAAO,CAAC,CAAC,CAAC;KACX;AACD;;;;;;;;;;;AAWG;AACH,IAAA,aAAa,CAAC,GAAW,EAAE,SAAiC,IAAI,EAAE,aAAyB,UAAU,EAAA;QACnG,MAAM,MAAM,GAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC/C,QAAA,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE;AAC7B,YAAA,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACtC,SAAA;QACD,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE;AACnC,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAW,CAAC;YACnC,IAAI,MAAM,IAAI,IAAI,EAAE;;AAElB,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACvB,oBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAC1B,wBAAA,OAAO,cAAc,CAAC;;AAEtB,wBAAA,OAAO,MAAM,CAAC;AACjB,iBAAA;AAAM,qBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AACnC,oBAAA,OAAO,eAAe,CAAC;AACxB,iBAAA;AACD,gBAAA,OAAO,cAAc,CAAC;AACvB,aAAA;AAAM,iBAAA;gBACL,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACxC,IAAI,OAAO,IAAI,EAAE,EAAE;AACjB,oBAAA,MAAM,SAAS,GAAQ,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,GAAG,CAAS,IAAI,CAAC,CAAC;oBACxE,IAAI,SAAS,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,EAAE;AACpD,wBAAA,OAAO,eAAe,CAAC;AACxB,qBAAA;AACD,oBAAA,OAAO,cAAc,CAAC;AACvB,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;;;;;;;;;;AAWG;AACH,IAAA,aAAa,CAAC,GAAW,EAAE,MAA8B,EAAE,UAAsB,EAAE,MAAkB,EAAA;AACnG,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,MAAM,GAAQ,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE;AACnC,YAAA,MAAM,GAAG,GAAM,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3B,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YACjE,IAAI,IAAI,GAAG,SAAS,CAAC;AACrB,YAAA,QAAQ,UAAU;AAChB,gBAAA,KAAK,MAAM;AACT,oBAAA,QAAQ,MAAM;AACZ,wBAAA,KAAK,eAAe;4BAClB,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,gCAAA,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gCACtC,IAAI,CAAC,IAAI,EAAE;oCACT,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,iCAAA;AACF,6BAAA;AACD,4BAAA,MAAM,CAAC,UAAU,CAAC,MAAM,CAAS,GAAG,CAAC,CAAC;AACtC,4BAAA,IAAI,CAAC,aAAa,CAAS,GAAG,EAAE,IAAI,CAAC,CAAC;4BACtC,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,wBAAA,KAAK,MAAM;4BACT,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,wBAAA,KAAK,cAAc;4BACjB,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,gCAAA,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gCACtC,IAAI,CAAC,IAAI,EAAE;oCACT,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,iCAAA;AACF,6BAAA;AACD,4BAAA,IAAI,CAAC,aAAa,CAAS,GAAG,EAAE,IAAI,CAAC,CAAC;4BACtC,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,wBAAA,KAAK,cAAc;4BACjB,OAAO,UAAU,CAAC,OAAO,CAAC;AAC7B,qBAAA;oBACD,MAAM;AACR,gBAAA,KAAK,cAAc;AACjB,oBAAA,QAAQ,MAAM;AACZ,wBAAA,KAAK,eAAe;AAClB,4BAAA,MAAM,CAAC,UAAU,CAAC,MAAM,CAAS,GAAG,CAAC,CAAC;4BACtC,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,wBAAA,KAAK,MAAM;4BACT,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,wBAAA,KAAK,cAAc;4BACjB,OAAO,UAAU,CAAC,OAAO,CAAC;wBAC5B,KAAK,cAAc;4BACjB,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,gCAAA,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gCACtC,IAAI,CAAC,IAAI,EAAE;oCACT,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,iCAAA;AAAM,qCAAA;oCACL,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAS,GAAG,CAAC,CAAC;AACtD,oCAAA,IAAI,OAAO,EAAE;AACX,wCAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wCAC1B,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;AACpC,4CAAA,MAAM,CAAC,aAAa,CAAC,MAAM,CAAS,GAAG,CAAC,CAAC;AAC1C,yCAAA;AACF,qCAAA;AACF,iCAAA;AACF,6BAAA;;AACC,gCAAA,MAAM,CAAC,aAAa,CAAC,MAAM,CAAS,GAAG,CAAC,CAAC;4BAC3C,OAAO,UAAU,CAAC,OAAO,CAAC;AAC7B,qBAAA;oBACD,MAAM;AACR,gBAAA,KAAK,eAAe;AAClB,oBAAA,QAAQ,MAAM;AACZ,wBAAA,KAAK,eAAe;4BAClB,OAAO,UAAU,CAAC,OAAO,CAAC;wBAC5B,KAAK,MAAM,CAAC;AACZ,wBAAA,KAAK,cAAc;AACjB,4BAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAS,GAAG,CAAC,CAAC;4BACnC,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,wBAAA,KAAK,cAAc;4BACjB,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,gCAAA,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gCACtC,IAAI,CAAC,IAAI,EAAE;oCACT,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,iCAAA;AAAM,qCAAA;oCACL,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAS,GAAG,CAAC,CAAC;AACtD,oCAAA,IAAI,OAAO,EAAE;AACX,wCAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wCAC1B,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;AACpC,4CAAA,MAAM,CAAC,aAAa,CAAC,MAAM,CAAS,GAAG,CAAC,CAAC;AAC1C,yCAAA;AACF,qCAAA;AACF,iCAAA;AACF,6BAAA;;AACC,gCAAA,MAAM,CAAC,aAAa,CAAC,MAAM,CAAS,GAAG,CAAC,CAAC;4BAC3C,OAAO,UAAU,CAAC,OAAO,CAAC;AAC7B,qBAAA;oBACD,MAAM;AACR,gBAAA,KAAK,cAAc;AACjB,oBAAA,QAAQ,MAAM;AACZ,wBAAA,KAAK,eAAe;4BAClB,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,gCAAA,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gCACtC,IAAI,CAAC,IAAI,EAAE;oCACT,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,iCAAA;AACF,6BAAA;AACD,4BAAA,IAAI,CAAC,aAAa,CAAS,GAAG,EAAE,IAAI,CAAC,CAAC;4BACtC,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,wBAAA,KAAK,MAAM;AACT,4BAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAS,GAAG,CAAC,CAAC;4BACnC,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,wBAAA,KAAK,cAAc;4BACjB,IAAI,MAAM,IAAI,IAAI,EAAE;AAClB,gCAAA,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gCACtC,IAAI,CAAC,IAAI,EAAE;oCACT,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,iCAAA;AACF,6BAAA;AACD,4BAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAS,GAAG,CAAC,CAAC;AACnC,4BAAA,IAAI,CAAC,aAAa,CAAS,GAAG,EAAE,IAAI,CAAC,CAAC;4BACtC,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,wBAAA,KAAK,cAAc;AACjB,4BAAA,MAAM,CAAC,aAAa,CAAC,MAAM,CAAS,GAAG,CAAC,CAAC;4BACzC,OAAO,UAAU,CAAC,OAAO,CAAC;AAC7B,qBAAA;oBACD,MAAM;AACT,aAAA;AACF,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;;;;;;;;AAeG;IACH,OAAO,CAAC,GAAW,EAAE,MAAuB,EAAE,UAAyB,GAAA,UAAU,EAAE,QAAA,GAAoB,KAAK,EAAA;QAC1G,MAAM,MAAM,GAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE;AACnC,YAAA,MAAM,IAAI,GAAM,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5B,YAAA,IAAI,QAAQ,GAAW,CAAC,CAAC,CAAC;YAC1B,IAAI,IAAI,GAAa,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,gBAAA,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;AACxD,aAAA;iBAAM,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;gBAC9C,QAAQ,GAAG,MAAM,CAAC;AACnB,aAAA;YACD,IAAI,QAAQ,IAAI,CAAC,EAAE;AACjB,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/B,gBAAA,IAAI,QAAQ,EAAE;AACZ,oBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,GAAG,CAAS,IAAI,CAAC,CAAC;AAClE,oBAAA,IAAI,QAAQ,EAAE;AACZ,wBAAA,MAAM,OAAO,GAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvC,wBAAA,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC;AAC1B,4BAAA,OAAO,OAAO,CAAC;AAClB,qBAAA;AACF,iBAAA;AACD,gBAAA,OAAQ,IAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,aAAA;AACF,SAAA;QACD,MAAM,IAAI,KAAK,CAAC,CAAA,qBAAA,EAAwB,GAAG,CAAI,CAAA,EAAA,MAAM,CAAc,YAAA,CAAA,CAAC,CAAC;KACtE;AACD;;;;;;;;;;;;AAYG;IACH,aAAa,CAAC,GAAW,EAAE,MAAuB,EAAE,UAAyB,GAAA,UAAU,EAAE,QAAA,GAAoB,KAAK,EAAA;AAChH,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC9D,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK,CAAC;AAC7D,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAC9B;AACD;;;;;;;;;;;;AAYG;IACH,aAAa,CAAC,GAAW,EAAE,MAAuB,EAAE,UAAyB,GAAA,UAAU,EAAE,QAAA,GAAoB,KAAK,EAAA;AAChH,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC9D,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,KAAK,CAAC;AAC7D,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAC9B;AACD;;;;;;;;;;AAUG;IACH,cAAc,CAAC,GAAW,EAAE,MAAuB,EAAE,UAAyB,GAAA,UAAU,EAAE,QAAA,GAAoB,KAAK,EAAA;AACjH,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC9D,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,YAAY,OAAO;AAAE,YAAA,OAAO,KAAK,CAAC;AAC5D,QAAA,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;KAC/B;AACD;;;;;;;;;;;AAWG;IACH,WAAW,CAAC,GAAW,EAAE,MAAuB,EAAE,UAAyB,GAAA,UAAU,EAAE,QAAA,GAAoB,KAAK,EAAA;AAC9G,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC9D,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,YAAY,IAAI;AAAE,YAAA,OAAO,KAAK,CAAC;AACzD,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC5B;AACD;;;;;;;;;;;AAWG;IACH,eAAe,CAAC,GAAW,EAAE,MAAuB,EAAE,UAAyB,GAAA,UAAU,EAAE,QAAA,GAAoB,KAAK,EAAA;AAClH,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC9D,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,YAAY,QAAQ;AAAE,YAAA,OAAO,KAAK,CAAC;AAC7D,QAAA,OAAO,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;KAChC;AACD;;;;;;;;;;;AAWG;IACH,WAAW,CAAC,GAAW,EAAE,MAAuB,EAAE,UAAyB,GAAA,UAAU,EAAE,QAAA,GAAoB,KAAK,EAAA;AAC9G,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC9D,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,YAAY,IAAI;AAAE,YAAA,OAAO,KAAK,CAAC;AACzD,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC5B;AACD;;;;;;;;;AASG;AACH,IAAA,OAAO,CAAC,GAAW,EAAE,MAAuB,EAAE,KAAU,EAAA;QACtD,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;YACrC,IAAI,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACxC,YAAA,IAAI,IAAI,EAAE;gBACR,MAAM,IAAI,GAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjC,gBAAA,MAAM,OAAO,GAAW,IAAI,CAAC,IAAI,CAAC;AAClC,gBAAA,MAAM,MAAM,GAAQ,IAAI,CAAC,OAAO,CAAC,CAAC;AAElC,gBAAA,IAAI,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;;AAE5C,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;AAEtB,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,MAAM,EAAE;AAC5B,oBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACrF,iBAAA;gBAED,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,aAAA;AACF,SAAA;AAED,QAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;KACnD;AACD;;;;;;;;;;AAUG;IACH,SAAS,CAAC,MAAc,GAAG,EAAA;AACzB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC9B,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACzB,IAAI,KAAK,CAAC,GAAG,CAAC;AAAE,gBAAA,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACrC,SAAA;AAAM,aAAA;YACL,GAAG,GAAG,CAAC,CAAC,CAAC;AACV,SAAA;QACD,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE;AACvC,YAAA,IAAI,IAAI,GAAQ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3C,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,gBAAA,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,aAAA;YACD,MAAM,CAAC,eAAe,EAAE,CAAC;YAEzB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC,CAAC;;YAI7C,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;;;;AAWG;IACH,SAAS,CAAC,MAAc,QAAQ,EAAA;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,QAAQ,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;AAE7B,QAAA,IAAI,SAAiB,CAAC;AACtB,QAAA,IAAI,IAAiB,CAAC;QACtB,IAAI,IAAI,GAAQ,IAAI,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QAE1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACjC,YAAA,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAE,CAAC;AAChC,YAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;gBACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,CAAA;;AAEjE,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC1B,SAAA;AACD,QAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;YACrC,SAAS,GAAG,GAAG,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACxC,SAAA;AAAM,aAAA;YACL,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,SAAA;AAED,QAAA,MAAM,CAAC,UAAU,CAAC,GAAG,CAAS,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,eAAe,EAAE,CAAC;;AAIzB,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;;;;AAKG;AACH,IAAA,MAAM,YAAY,CAAC,UAAsB,EAAE,WAAoB,IAAI,EAAA;AACjE,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAChC,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;AACjC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7B,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,QAAA,IAAI,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5D,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;AAC1B,QAAA,QAAQ,UAAU;AAChB,YAAA,KAAK,OAAO;AAAE,gBAAA,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAAC,MAAM;AAChD,YAAA,KAAK,MAAM,CAAC;AACZ,YAAA,KAAK,OAAO;AACV,gBAAA;AACE,oBAAA,MAAM,KAAK,GAAG,CAAC,UAAU,IAAI,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC;AAClD,oBAAA,IAAI,CAAC,CAAC;AACN,oBAAA,IAAI,QAAQ,EAAE;wBACZ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AAC7B,4BAAA,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpB,4BAAA,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC;gCACpB,GAAG,IAAI,KAAK,CAAC;;gCAEb,GAAG,IAAI,MAAM,CAAC;AACjB,yBAAA;AACF,qBAAA;AACD,oBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,oBAAA,IAAI,GAAG,CAAC;AACR,oBAAA,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE;wBACpB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AAC7B,4BAAA,GAAG,GAAI,IAAI,CAAC,CAAC,CAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;4BACrC,IAAI,GAAG,IAAI,IAAI;gCACb,GAAG,GAAG,EAAE,CAAC;AACN,iCAAA,IAAI,OAAO,GAAG,IAAI,QAAQ,EAAE;AAC/B,gCAAA,GAAG,GAAG,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;AACtD,6BAAA;4BACD,GAAG,IAAI,GAAG,CAAC;AACX,4BAAA,IAAI,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC;gCACpB,GAAG,IAAI,KAAK,CAAC;;gCAEb,GAAG,IAAI,MAAM,CAAC;AACjB,yBAAA;AACF,qBAAA;AACF,iBAAA;gBACD,MAAM;AACR,YAAA,KAAK,MAAM;AACT,gBAAA;AACE,oBAAA,IAAI,QAAQ,EAAE;wBACZ,GAAG,GAAG,6DAA6D,CAAC;AACrE,qBAAA;oBACD,GAAG,IAAI,YAAY,CAAC;AACpB,oBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,oBAAA,IAAI,GAAG,CAAC;AACR,oBAAA,IAAI,SAAiB,CAAC;AACtB,oBAAA,IAAI,IAAY,CAAC;AACjB,oBAAA,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE;wBACpB,SAAS,GAAG,EAAE,CAAC;wBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACjC,4BAAA,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;4BACpB,GAAG,GAAI,IAAI,CAAC,CAAC,CAAS,CAAC,IAAI,CAAC,CAAC;4BAC7B,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,gCAAA,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gCAC/C,SAAS,IAAI,QAAQ,IAAI,CAAA,CAAA,EAAI,GAAG,CAAK,EAAA,EAAA,IAAI,OAAO,CAAC;AAClD,6BAAA;AACF,yBAAA;AACD,wBAAA,IAAI,SAAS,EAAE;AACb,4BAAA,GAAG,IAAI,CAAA,OAAA,EAAU,SAAS,CAAA,YAAA,CAAc,CAAC;AAC1C,yBAAA;AACF,qBAAA;oBACD,GAAG,IAAI,aAAa,CAAC;AACtB,iBAAA;gBACD,MAAM;AACT,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;;;;;;;;;;;;;;;;;;AAqBG;AACH,IAAA,YAAY,CAAC,UAAsB,EAAE,MAAc,EAAE,OAAuG,EAAA;QAC1J,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC5C,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACtC,gBAAA,IAAI,IAAiB,CAAC;AACtB,gBAAA,IAAI,OAAe,CAAC;gBAEpB,IAAI,MAAM,GAAW,CAAC,CAAC;AAEvB,gBAAA,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AACxB,gBAAA,IAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC;AACtC,gBAAA,IAAI,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;AAClC,gBAAA,IAAI,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC;AACtC,gBAAA,IAAI,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;AAClC,gBAAA,IAAI,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC;;AAG1C,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAEhC,gBAAA,QAAQ,UAAU;AAChB,oBAAA,KAAK,OAAO,CAAC;AACb,oBAAA,KAAK,MAAM;AACT,wBAAA,MAAM,SAAS,GAAG,UAAU,IAAI,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;AACpD,wBAAA,IAAI,KAAK,GAAa,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3D,wBAAA,IAAI,MAAgB,CAAC;AACrB,wBAAA,IAAI,KAAK,CAAC;AAEV,wBAAA,IAAI,QAAQ,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE;AACvC,4BAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;4BACZ,OAAO;AACR,yBAAA;AAED,wBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BACrC,IAAI,CAAC,GAAG,QAAQ;gCAAE,SAAS;AAC3B,4BAAA,IAAI,MAAM,IAAI,CAAC,GAAG,MAAM;gCAAE,SAAS;AAEnC,4BAAA,MAAM,EAAE,CAAC;AACT,4BAAA,MAAM,IAAI,GAAQ,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAEhE,4BAAA,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAC3C,4BAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gCACtC,IAAI,CAAC,GAAG,QAAQ;oCAAE,SAAS;AAC3B,gCAAA,IAAI,MAAM,IAAI,CAAC,GAAG,MAAM;oCAAE,SAAS;gCAEnC,IAAI,CAAC,GAAG,UAAU,EAAE;AAClB,oCAAA,IAAI,UAAU,IAAI,CAAC,GAAG,UAAU;wCAAE,SAAS;AAC3C,oCAAA,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1C,oCAAA,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAE,CAAC;AAChC,oCAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;AACpB,oCAAA,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC;AAC5D,iCAAA;AAAM,qCAAA;oCACL,MAAM;AACP,iCAAA;AACF,6BAAA;4BACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,yBAAA;AACD,wBAAA,IAAI,MAAM;4BAAE,IAAI,CAAC,eAAe,EAAE,CAAC;wBACnC,OAAO,CAAC,MAAM,CAAC,CAAC;wBAChB,MAAM;AACR,oBAAA,KAAK,MAAM;wBACT,IAAI;4BACF,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACpC,4BAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;AACpC,4BAAA,IAAI,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC;AAEnC,4BAAA,IAAI,QAAQ,IAAI,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE;AAC1C,gCAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gCACZ,OAAO;AACR,6BAAA;AAED,4BAAA,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gCAChD,IAAI,CAAC,GAAG,QAAQ;oCAAE,SAAS;AAC3B,gCAAA,IAAI,MAAM,IAAI,CAAC,GAAG,MAAM;oCAAE,SAAS;AAEnC,gCAAA,IAAI,OAAO,GAAc,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrC,gCAAA,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,EAAE;AACpE,oCAAA,MAAM,EAAE,CAAC;oCACT,MAAM,MAAM,GAAQ,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oCAClD,MAAM,OAAO,GAAa,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9C,oCAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;AACjC,oCAAA,MAAM,IAAI,GAAQ,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACtF,oCAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,oCAAA,OAAO,EAAE,CAAC,GAAG,SAAS,EAAE;wCACtB,IAAI,CAAC,GAAG,QAAQ;4CAAE,SAAS;AAC3B,wCAAA,IAAI,MAAM,IAAI,CAAC,GAAG,MAAM;4CAAE,SAAS;wCAEnC,IAAI,CAAC,GAAG,UAAU,EAAE;AAClB,4CAAA,IAAI,UAAU,IAAI,CAAC,GAAG,UAAU;gDAAE,SAAS;AAC3C,4CAAA,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAE,CAAC;AAChC,4CAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;4CACpB,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC;AACxE,4CAAA,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,QAAQ,EAAE;AACpC,gDAAA,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACtD,6CAAA;AACF,yCAAA;AAAM,6CAAA;4CACL,MAAM;AACP,yCAAA;AACF,qCAAA;oCACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,iCAAA;AACD,gCAAA,IAAI,MAAM;oCAAE,IAAI,CAAC,eAAe,EAAE,CAAC;gCACnC,OAAO,CAAC,MAAM,CAAC,CAAC;AACjB,6BAAA;AACF,yBAAA;AAAC,wBAAA,OAAO,GAAG,EAAE;AACZ,4BAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACd,yBAAA;wBACD,MAAM;AACR,oBAAA,KAAK,OAAO;wBACV,IAAI;4BACF,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,4BAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC1B,gCAAA,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;AACf,6BAAA;AACD,4BAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC1B,gCAAA,MAAM,IAAI,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;AACvD,6BAAA;4BACD,IAAI,GAAG,GAAU,IAAI,CAAC;AACtB,4BAAA,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;AACrB,4BAAA,IAAI,MAAM,CAAC;AAEX,4BAAA,IAAI,QAAQ,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE;AACrC,gCAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gCACZ,OAAO;AACR,6BAAA;4BAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gCAC5B,IAAI,CAAC,GAAG,QAAQ;oCAAE,SAAS;AAC3B,gCAAA,IAAI,MAAM,IAAI,CAAC,GAAG,MAAM;oCAAE,SAAS;AACnC,gCAAA,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,gCAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC5B,oCAAA,MAAM,EAAE,CAAC;oCACT,MAAM,OAAO,GAAa,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9C,oCAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;AACjC,oCAAA,MAAM,IAAI,GAAQ,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACtF,oCAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,oCAAA,OAAO,EAAE,CAAC,GAAG,SAAS,EAAE;wCACtB,IAAI,CAAC,GAAG,QAAQ;4CAAE,SAAS;AAC3B,wCAAA,IAAI,MAAM,IAAI,CAAC,GAAG,MAAM;4CAAE,SAAS;wCAEnC,IAAI,CAAC,GAAG,UAAU,EAAE;AAClB,4CAAA,IAAI,UAAU,IAAI,CAAC,GAAG,UAAU;gDAAE,SAAS;AAC3C,4CAAA,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAE,CAAC;AAChC,4CAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;4CACpB,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC;AACzE,yCAAA;AAAM,6CAAA;4CACL,MAAM;AACP,yCAAA;AACF,qCAAA;oCACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAEjC,iCAAA;AAAM,qCAAA;AACL,oCAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACxC,iCAAA;AACF,6BAAA;AACD,4BAAA,IAAI,MAAM;gCAAE,IAAI,CAAC,eAAe,EAAE,CAAC;4BACnC,OAAO,CAAC,MAAM,CAAC,CAAC;AAEjB,yBAAA;AAAC,wBAAA,OAAO,GAAG,EAAE;AACZ,4BAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACd,yBAAA;wBACD,MAAM;AACT,iBAAA;AACF,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACb,aAAA;AAEH,SAAC,CAAC,CAAC;KACJ;AACD;;;;;;;;;;;;;;AAcG;IACH,QAAQ,CAAC,IAAY,EAAE,GAAgB,EAAA;AACrC,QAAA,IAAI,QAAQ,IAAI,CAAC,KAAK,QAAQ,EAAE;AAC9B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,YAAA,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACvB,gBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,aAAA;AACD,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACjC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AACD;;;;;;;;AAQG;IACH,QAAQ,CAAC,IAAmB,EAAE,GAAgB,EAAA;AAC5C,QAAA,IAAI,GAAe,CAAC;AACpB,QAAA,IAAI,OAAY,CAAC;AACjB,QAAA,IAAI,MAAM,CAAC;AACX,QAAA,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,EAAE;AAC5B,YAAA,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;YACf,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;gBACrC,MAAM,GAAG,GAAG,CAAC;AACb,gBAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAS,MAAM,CAAC,CAAC;AACrC,aAAA;AACF,SAAA;AAAM,aAAA;YACL,OAAO,GAAG,GAAG,CAAC;AACf,SAAA;QACD,IAAI,QAAQ,IAAI,CAAC,KAAK,QAAQ,IAAI,OAAO,EAAE;AACzC,YAAA,IAAI,GAA4B,CAAC;AACjC,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,IAAI,IAAI,IAAI,EAAE;AAAE,gBAAA,OAAO,SAAS,CAAC;;AAEjC;;;;;;;;;;;AAWE;YACF,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,GAAG,EAAE;gBACR,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAClC,IAAI,GAAG,CAAC,KAAK,EAAE;oBACb,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACtC,oBAAA,OAAO,SAAS,CAAC;AAClB,iBAAA;gBACD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAChC,aAAA;YACD,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAEjC,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;;;;;;;;;;;AAcG;AACH,IAAA,IAAI,CAAC,IAAY,EAAE,QAAgB,EAAE,MAAc,EAAA;AACjD,QAAA,IAAI,GAAG,GAAW,CAAC,CAAC,CAAC;AACrB,QAAA,IAAI,KAAa,CAAC;AAClB,QAAA,IAAI,GAAQ,CAAC;AACb,QAAA,IAAI,GAAgB,CAAC;QAErB,IAAI,EAAE,QAAQ,IAAI,CAAC,KAAK,QAAQ,IAAI,QAAQ,QAAQ,CAAC,KAAK,QAAQ,CAAC,IAAI,QAAQ,MAAM,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC,CAAC;QAC/G,IAAI,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;AAE1B,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACnB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC;AACpB,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;AACxD,YAAA,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,SAAA;AAAM,aAAA;YACL,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACpC,IAAI,GAAG,CAAC,KAAK,EAAE;gBACb,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvC,aAAA;AACD,YAAA,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAC3B,YAAA,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC3B,SAAA;QACD,IAAI,QAAQ,GAAG,MAAM,EAAE;;AAErB,YAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/C,YAAA,QAAQ,GAAG,CAAC,GAAG,MAAM,GAAG,QAAQ,CAAC;AACjC,YAAA,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;AACnB,YAAA,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE;AAC1B,gBAAA,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;gBACxC,IAAI,QAAQ,GAAG,CAAC,KAAK,SAAS,IAAI,GAAG,EAAE;oBACrC,GAAG,GAAG,KAAK,CAAC;oBACZ,MAAM;AACP,iBAAA;AACF,aAAA;AACF,SAAA;AAAM,aAAA;YACL,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACjC,YAAA,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/C,YAAA,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC;AACrB,YAAA,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE;AACxB,gBAAA,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;gBACxC,IAAI,QAAQ,GAAG,CAAC,KAAK,SAAS,IAAI,GAAG,EAAE;oBACrC,GAAG,GAAG,KAAK,CAAC;oBACZ,MAAM;AACP,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;AAIG;AACH,IAAA,cAAc,CAAC,IAAY,EAAA;AACzB,QAAA,MAAM,SAAS,GAAiB,IAAI,OAAO,EAAE,CAAC;AAC9C,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACnB,QAAA,IAAI,IAAI,EAAE;YACR,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AACd,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjC,gBAAA,IAAI,GAAG,GAAW,CAAC,CAAC,CAAC;AACrB,gBAAA,IAAI,GAAQ,CAAC;AACb,gBAAA,OAAO,EAAE,GAAG,GAAG,QAAQ,EAAE;AACvB,oBAAA,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;oBACpC,IAAI,GAAG,KAAK,SAAS,EAAE;AACrB,wBAAA,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpB,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;;;;;;;;AASG;AACH,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;KAC/B;AACD;;AAEG;IACO,eAAe,GAAA;AACvB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACjD,QAAA,IAAI,IAAI,GAAQ,MAAM,CAAC,IAAI,CAAC;;QAG5B,MAAM,GAAG,GAAQ,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,GAAG,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;AACrC,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,IAAI,MAAM,CAAC,WAAW,EAAE;gBACtB,IAAI,GAAG,GAAgB,IAAI,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBACnE,IAAI,GAAG,CAAC,KAAK,EAAE;oBACb,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACtC,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,GAAM,CAAC;AACX,oBAAA,IAAI,GAAQ,CAAC;AACb,oBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;AACxB,oBAAA,OAAO,EAAE,KAAK,IAAI,CAAC,EAAE;AACnB,wBAAA,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAClB,wBAAA,IAAI,GAAG,EAAE;4BACP,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;4BAC3B,IAAI,QAAQ,GAAG,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,EAAE;AACtC,gCAAA,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,6BAAA;AACF,yBAAA;AACF,qBAAA;AACD,oBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AACjB,wBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;;AAEf,wBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACzB,iBAAA;AACF,aAAA;AACF,SAAA;;AACC,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QAExB,MAAM,CAAC,eAAe,EAAE,CAAC;AAEzB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACnB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;AACtB,aAAA;AAAM,iBAAA;gBACL,MAAM,CAAC,cAAc,EAAE,CAAC;AACzB,aAAA;AACF,SAAA;QAED,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;AAQG;AACH,IAAA,MAAM,SAAS,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;KAC7B;AACD;;AAEG;IACO,aAAa,GAAA;AACrB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,IAAI,EAAE;YACf,IAAI,MAAM,CAAC,SAAS,EAAE;gBACpB,IAAI,KAAK,GAAW,GAAG,CAAC;gBACxB,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACvC,KAAK,GAAG,IAAI,CAAC;AACd,iBAAA;gBACD,IAAI,MAAM,GAAa,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrD,IAAI,IAAI,GAAa,EAAE,CAAC;gBACxB,IAAI,IAAI,GAAa,EAAE,CAAC;AACxB,gBAAA,IAAI,IAAY,CAAC;AACjB,gBAAA,IAAI,GAAW,CAAC;AAChB,gBAAA,IAAI,GAAW,CAAC;AAChB,gBAAA,IAAI,CAAC,GAAW,CAAC,CAAC,CAAC;gBACnB,MAAM,KAAK,GAAW,eAAe,CAAC;gBACtC,MAAM,MAAM,GAAW,gBAAgB,CAAC;AACxC,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACtC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACxB,oBAAA,IAAI,IAAI,EAAE;wBACR,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,4BAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACxB,gCAAA,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAA;AACrD,6BAAA;AAAM,iCAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC9B,gCAAA,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,MAAM,CAAA;AACpD,6BAAA;AACF,yBAAA;AACD,wBAAA,CAAC,EAAE,CAAC;AACJ,wBAAA,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;wBACd,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBACxC,IAAI,GAAG,GAAG,CAAC,EAAE;AACX,4BAAA,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACpC,4BAAA,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACd,4BAAA,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC;AACzB,yBAAA;AAAM,6BAAA;4BACL,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BACvC,IAAI,GAAG,GAAG,CAAC,EAAE;AACX,gCAAA,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACpC,gCAAA,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC;AACzB,6BAAA;AAAM,iCAAA;AACL,gCAAA,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAChB,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA;gBAED,IAAI,IAAI,GAAkB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAS,KAAI;oBAC/C,IAAI,GAAG,GAAG,IAAI,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBACrC,IAAI,GAAG,CAAC,KAAK,EAAE;wBACb,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACvC,qBAAA;AACD,oBAAA,OAAO,GAAG,CAAC;AACb,iBAAC,CAAC,CAAC;gBAEH,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAE9C,gBAAA,IAAI,WAAW,GAAG,CAAC,CAAM,EAAE,CAAM,KAAI;oBACnC,IAAI,GAAG,GAAG,CAAC,CAAC;AACZ,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACpC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACzB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzB,wBAAA,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC;AAExB,wBAAA,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI;AAC1B,4BAAA,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;wBACjB,IAAI,EAAE,IAAI,IAAI;AACZ,4BAAA,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;6BACZ,IAAI,EAAE,IAAI,IAAI;AACjB,4BAAA,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AACb,6BAAA,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC,EAAE;4BAC9B,IAAI,KAAK,KAAK,QAAQ;AACpB,gCAAA,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;iCACtD,IAAI,KAAK,KAAK,QAAQ,EAAE;;AAE3B,gCAAA,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3F,6BAAA;iCAAM,IAAI,KAAK,KAAK,SAAS;AAC5B,gCAAA,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;AAEzE,gCAAA,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAC5D,yBAAA;;AACC,4BAAA,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAC5D,qBAAA;AACD,oBAAA,OAAO,GAAG,CAAC;AACb,iBAAC,CAAA;AAED,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC9B,MAAM,CAAC,SAAS,EAAE,CAAC;AACnB,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAEf,MAAM,CAAC,eAAe,EAAE,CAAC;AAEzB,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;AACnB,oBAAA,IAAI,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;AACzB,wBAAA,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5B,qBAAA;oBACD,MAAM,CAAC,cAAc,EAAE,CAAC;AACzB,iBAAA;gBACD,OAAO,UAAU,CAAC,OAAO,CAAA;AAE1B,aAAA;;gBACC,OAAO,UAAU,CAAC,OAAO,CAAC;AAC7B,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;;;;AAWG;IACH,SAAS,CAAC,GAAW,EAAE,MAAe,EAAA;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;;AAElB,YAAA,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,aAAa,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAgB,CAAC,CAAC;AACzD,aAAA;;AACC,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;YACrC,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;QACD,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAW,CAAC;AACtC,YAAA,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACjC,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9B,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACL,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AAChC,oBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,iBAAA;AACF,aAAA;YACD,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;AAQG;AACH,IAAA,UAAU,CAAC,GAAe,EAAA;AACxB,QAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAa,CAAC,CAAC;AAC9C,SAAA;QACD,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;AACrC,YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAS,GAAG,CAAW,CAAC,CAAC;AACjE,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AACD;;;;;;AAMG;AACH,IAAA,cAAc,CAAC,GAAW,EAAA;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACxB,QAAA,OAAO,EAAE,GAAG,GAAG,MAAM,EAAE;AACrB,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AACxB,gBAAA,OAAO,GAAG,CAAC;AACZ,aAAA;AACF,SAAA;QACD,OAAO,CAAC,CAAC,CAAC;KACX;AACD;;;;;AAKG;IACH,eAAe,GAAA;QACb,IAAI,GAAG,GAAQ,EAAE,CAAC;QAClB,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,OAAO,IAAI,IAAI,CAAC,EAAE;YAChB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1B,YAAA,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;;AAKG;IACH,aAAa,GAAA;QACX,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,OAAO,IAAI,IAAI,CAAC,EAAE;AAChB,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED;;;;;AAKE;AAEF;;;AAGG;IACH,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;;QAExB,IAAI,CAAC,YAAY,EAAE,CAAC;;AAEpB,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;;AAE3B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,OAAO,EAAE,CAAC;QAEnC,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;;AAE9B,YAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;AACnC,SAAA;AACD,QAAA,IAAI,CAAC,uBAAuB,EAAE,WAAW,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;KACrC;AACD;;;;AAIG;IACH,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,UAAU,CAAC;KACxB;AACD;;;AAGG;IACH,UAAU,GAAA;QACR,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;AAMD;;;;AAIG;IACH,CAAC,UAAU,CAAC,UAAA,GAAuB,UAAU,EAAA;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC1C,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;AAC/B,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,QAAA,OAAO,EAAE,KAAK,GAAG,QAAQ,EAAE;AACzB,YAAA,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB,SAAA;KACF;AACD;;AAEG;IACH,GAACA,IAAA,GAjBA,MAAM,CAAC,WAAW,EAiBjB,MAAM,CAAC,QAAQ,EAAC,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;KAC1B;AAEF,CAAA;AAGD;;AAEG;MACmB,UAAU,CAAA;AAG9B,IAAA,WAAA,CAAY,EAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;KACf;AAeF,CAAA;AAED;;AAEG;AACG,MAAO,UAA6B,SAAQ,UAAa,CAAA;AAY7D,IAAA,WAAA,CAAY,EAAgB,EAAE,OAAe,EAAE,SAA+B,EAAE,OAAa,EAAA;QAC3F,KAAK,CAAC,EAAE,CAAC,CAAC;QAZJ,IAAK,CAAA,KAAA,GAAyB,IAAI,CAAC;QACnC,IAAK,CAAA,KAAA,GAAyB,IAAI,CAAC;QAEnC,IAAM,CAAA,MAAA,GAAW,CAAC,CAAC;QAEnB,IAAG,CAAA,GAAA,GAAW,EAAE,CAAC;QACjB,IAAU,CAAA,UAAA,GAAuB,SAAS,CAAC;QAC3C,IAAU,CAAA,UAAA,GAAa,EAAE,CAAC;QAE3B,IAAW,CAAA,WAAA,GAA4C,IAAI,CAAC;AAyGnE,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,QAAgB,EAAE,OAAY,KAAa;YACvD,IAAI,GAAG,GAAG,QAAQ,CAAC;YACnB,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACxC,aAAA;;AAED,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;;AAE7D,YAAA,OAAO,GAAG,CAAC;AACb,SAAC,CAAA;AAED,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,QAAgB,EAAE,OAAY,KAAa;YACvD,IAAI,GAAG,GAAG,QAAQ,CAAC;YACnB,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACxC,aAAA;;AAED,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;;AAEzG,YAAA,OAAO,GAAG,CAAC;AACb,SAAC,CAAA;AAzHC,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAC1C,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,QAAA,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;AACvB,YAAA,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;AACnC,SAAA;QACD,IAAI,CAAC,KAAK,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,KAAK,EAAE,CAAC;KACpC;IAED,IAAI,EAAE,KAAa,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE;IACrC,IAAI,UAAU,GAAoB,EAAA,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC1D,IAAA,IAAI,UAAU,GAAA,EAAa,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;IAC3F,IAAI,KAAK,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE;IAC3C,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE;IACzC,IAAI,SAAS,KAA2B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE;IAC5D,IAAI,SAAS,KAA2B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE;;AAIpD,IAAA,OAAO,CAAC,GAAW,EAAA;QACzB,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;KACxC;AAEO,IAAA,YAAY,CAAC,GAAW,EAAA;AAC9B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AAClD,QAAA,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;AAClD,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/B,SAAA;QACD,OAAO,CAAC,CAAC,CAAC;KACX;AACD;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;KAC7B;AACD;;;;AAIG;AACH,IAAA,WAAW,CAAC,GAAW,EAAA;AACrB,QAAA,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;QACjB,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAEnC,IAAI,QAAQ,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEnC,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACjC,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE;YACjB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE;AAC/B,gBAAA,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAChC,MAAM;AACP,aAAA;AACF,SAAA;QACD,IAAI,QAAQ,IAAI,CAAC,EAAE;YACjB,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;gBACtC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AACtC,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAC;AACxB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KAC5B;AACD;;;;;AAKG;IACH,IAAI,CAAC,GAAW,EAAE,MAAc,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;YAC3B,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACnE,YAAA,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACzB,YAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,KAAK,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,EAAE;;AAEhE,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,gBAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;AAC1B,aAAA;AACD,YAAA,OAAO,MAAM,CAAC;AACf,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AACD;;;;;;;AAOG;AACH,IAAA,UAAU,CAAC,GAAW,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACrB,YAAA,OAAO,GAAG,CAAC;AACZ,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;KAC/B;AAwBF;;MCprIY,UAAU,CAAA;AAGnB,IAAA,WAAA,CAAqB,KAAa,EAAU,KAAmB,GAAA,QAAQ,EAAU,QAAc,EAAA;QAA1E,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;QAAU,IAAK,CAAA,KAAA,GAAL,KAAK,CAAsB;QAAU,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAM;QAFvF,IAAM,CAAA,MAAA,GAAQ,SAAS,CAAC;KAEmE;IAEnG,IAAI,IAAI,KAAY,OAAO,IAAI,CAAC,KAAK,CAAC,EAAC;IACvC,IAAI,IAAI,KAAe,OAAO,IAAI,CAAC,KAAK,CAAC,EAAC;AAE1C,IAAA,OAAO,GAAG,CAAC,GAAG,GAAkD,EAAA;AAC5D,QAAA,IAAI,MAAM,GAAG,IAAI,KAAK,EAAc,CAAC;AACrC,QAAA,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE;AACnB,YAAA,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,gBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAChF,aAAA;AACJ,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACjB;IAED,QAAQ,GAAA,EAAS,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,EAAC;AAExC,IAAA,QAAQ,CAAC,GAAQ,EAAA;AACb,QAAA,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;AAC5B,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;AAChC,YAAA,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,OAAO,EAAE,CAAC;KACb;IAED,OAAO,GAAA,EAAS,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAA,EAAC;IAEpD,KAAK,GAAA;AACD,QAAA,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9D;AAEJ;;;ACtBD,MAAM,iBAAiB,GAAW,QAAQ,CAAC;AAE3C;;;;;;;AAOG;MAKmB,UAAU,CAAA;IAgB9B,IACI,UAAU,KAA+B,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE;IACvE,IAAI,UAAU,CAAC,EAA4B,EAAA;AACzC,QAAA,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACtC,SAAA;KACF;IACD,IACI,EAAE,KAAqB,OAAO,IAAI,CAAC,UAAU,CAAA,EAAE;;IACnD,IAAI,EAAE,CAAC,MAAkC,EAAA;AACvC,QAAA,IAAI,EAAc,CAAC;;QAInB,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,uBAAuB,KAAK,MAAM,CAAC,aAAa;YAAE,OAAO;AAE7E,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;AACzB,QAAA,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,aAAa,CAAC;AACpD;;;;;;;;;;;;;;;;;;;;AAoBE;AACF,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,EAAE,CAAA;AAChC,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAE7B,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACxD,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAEvC,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YAEvB,IAAI,KAAK,GAAa,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAe,CAAC;YAC1E,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC1B,gBAAA,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,EAAE;AACrB,oBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACpB,iBAAA;AACH,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,IAAI,KAAK,EAAG;gBACtE,IAAI,CAAC,WAAW,GAAG,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC;AAClD,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;AAC/B,aAAA;AAED,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;gBACjC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACrG,aAAA;AACF,SAAA;KACF;;IAMD,IAAI,WAAW,KAAe,OAAO,IAAI,CAAC,YAAY,CAAA,EAAE;;IACxD,IAAI,WAAW,CAAC,KAAe,EAAA;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACzE,SAAA;KACF;;AAwBD,IAAA,WAAA,GAAA;AAvHQ,QAAA,IAAA,CAAA,UAAU,GAAmB,IAAI,SAAS,EAAE,CAAC;QAI7C,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;QAC3B,IAAY,CAAA,YAAA,GAAW,CAAC,CAAC,CAAC;AAE1B,QAAA,IAAA,CAAA,YAAY,GAAa,EAAE,CAAC;AAE1B,QAAA,IAAA,CAAA,iBAAiB,GAAiB,IAAI,YAAY,EAAE,CAAC;;QAGxD,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;;QAyElC,IAAM,CAAA,MAAA,GAAU,EAAE,CAAC;;QAEnB,IAAQ,CAAA,QAAA,GAAe,EAAE,CAAC;;AAWhB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAkB,CAAC;AACjD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAwB,CAAC;;AAE7D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAS,CAAC;AAC3C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAS,CAAC;AAC5C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;;QAEjC,IAAgB,CAAA,gBAAA,GAAG,IAAI,eAAe,CAAuB,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3F,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,aAAa,EAAoB,CAAC;AACrD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,aAAa,EAAsB,CAAC;AACzD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,aAAa,EAAoB,CAAC;AACrD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,aAAa,EAAsB,CAAC;AACzD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,aAAa,EAAoB,CAAC;AACrD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,aAAa,EAA2B,CAAC;AACnE,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,aAAa,EAAuB,CAAC;AAC3D,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,aAAa,EAA0B,CAAC;AACjE,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,aAAa,EAA2B,CAAC;;AAEhE,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,aAAa,EAAQ,CAAC;AACvC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,aAAa,EAAoB,CAAC;AAmtC1E;;AAEG;QACH,IAAoB,CAAA,EAAA,CAAA,GAAG,YAAY,CAAC;;KAltCnC;AACD;;AAEG;IACO,iBAAiB,GAAA;QACzB,MAAM,aAAa,GAAmB,EAAE,CAAC;AAEzC,QAAA,aAAa,CAAC,IAAI;;QAEhB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAuB,KAAI;AACtD,YAAA,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;gBAC3B,IAAI,MAAM,GAAG,IAAI,CAAC;AAClB,gBAAA,IAAI,GAAG,GAAW,CAAC,CAAC,CAAC;AACrB,gBAAA,MAAM,QAAQ,GAAmB,IAAI,CAAC,eAAe,EAAE,CAAC;AACxD,gBAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC7B,oBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACtB,oBAAA,KAAK,IAAI,CAAC,GAAW,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;wBACrD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;wBAC/B,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,4BAAA,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7D,yBAAA;AAAM,6BAAA;AACL,4BAAA,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AACtD,yBAAA;wBACD,IAAI,CAAC,MAAM,EAAE;4BAAE,MAAK;AAAE,yBAAA;AACvB,qBAAA;AACD,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACrB,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACnD,oBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEpC,iBAAA;AAAM,qBAAA;AACL,oBAAA,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;oBACtB,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,wBAAA,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7D,qBAAA;AAAM,yBAAA;;;AAGL,wBAAA,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AACtD,qBAAA;AACD,oBAAA,IAAI,MAAM,EAAE;AACV,wBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACpC,qBAAA;AACF,iBAAA;AACD;;;;;;;AAOE;AACH,aAAA;AACH,SAAC,CAAC;;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;;AAE9E,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAG;AAClC,YAAA,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;AAC3B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC9B,aAAA;AACH,SAAC,CAAC;;QAGF,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,IAAM,EAAA,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC;;QAE5F,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,IAAM,EAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC;;QAElF,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAM,EAAA,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC;;QAG9E,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,KAA2B,KAAI;AAC/D,YAAA,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;AAC3B,gBAAA,MAAM,OAAO,GAAG,IAAI,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9D,gBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACnC,aAAA;AACH,SAAC,CAAC;;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,IAAG,EAAG,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,CAAA,EAAE,CAAC;;AAE1E,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,IAAG,EAAG,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAA,EAAE,CAAC;;AAE5E,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;;AAG7D,QAAA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,IAAG,EAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC;;QAE5E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA,EAAE,CAAC;;QAEtE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,IAAG,EAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC;;QAEhF,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,IAAG,EAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC;;AAE5E,QAAA,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;AAE1D,QAAA,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;QAExD,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,IAAG,EAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC;;QAExF,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,IAAG,EAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC;;QAEpF,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAG,EAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC;;QAElF,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,KAAK,IAAM,EAAA,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC;;QAE1F,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,IAAM,EAAA,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC;;QAE5F,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,IAAG,EAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC;;QAEpF,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,IAAM,EAAA,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,CAAA,EAAE,CAAC,CACjF,CAAC;AAEF,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAE3D;AACD;;AAEG;IACO,qBAAqB,GAAA;AAC7B,QAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;KACtC;;AAIS,IAAA,iBAAiB,CAAC,IAAW,EAAA;AACrC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAChB,SAAA;KACF;AAES,IAAA,gBAAgB,CAAC,KAAuB,EAAA;QAChD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AAES,IAAA,mBAAmB,CAAC,KAA0B,EAAA;AACtD,QAAA,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;YAC3B,OAAO,UAAU,CAAC,OAAO,CAAC;AAC3B,SAAA;QACD,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;AAKG;AACH,IAAA,aAAa,CAAC,GAAW,EAAE,GAAW,EAAE,KAAiB,EAAA;AACvD,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;;QAGnB,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;;;QAGvC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;AAEnC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;KAElB;AAED,IAAA,aAAa,CAAC,GAAW,EAAE,GAAoB,EAAE,KAAiB,EAAA;AAChE,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;KACxE;AACD;;;;;;AAMG;IACH,eAAe,CAAC,EAAY,EAAA,GAAW;;AAGvC;;AAEG;IACH,IAAI,WAAW,KAAa,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE;IACvD,IAAI,WAAW,CAAC,KAAa,EAAA;QAC3B,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE;AAChD,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC3B,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAA,CAAE,CAAC,CAAA;AACjD,SAAA;KACF;AACD;;;;AAIG;IACH,IAAI,SAAS,KAAc,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE;AACpD;;AAEG;IACH,IAAI,WAAW,GAAwC,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE;AACpF;;;;AAIG;IACH,IAAI,OAAO,GAAc,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAA,EAAE;AACjD;;;;AAIG;IACH,IAAI,QAAQ,GAAc,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAA,EAAE;AACnD;;;AAGE;IACF,IAAI,IAAI,GAAY,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AAC1C;;;;AAIG;IACH,IAAI,UAAU,GAAwB,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;AAClE;;;;AAIG;IACH,IAAI,cAAc,GAAc,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE;AAChE;;;AAGG;IACH,IAAI,WAAW,GAAoB,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE;AAChE,IAAA,IAAI,WAAW,CAAC,KAAoB,EAAA,EAAI,IAAI,CAAC,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC,EAAE;AACtE;;;AAGE;IACF,IAAI,SAAS,GAAoB,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;AAC5D,IAAA,IAAI,SAAS,CAAC,KAAoB,EAAA,EAAI,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE;;AAIlE;;;;;;;;;AASG;AACH,IAAA,MAAM,WAAW,GAA0B,EAAA,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE;AAChF;;;;;;;;AAQG;AACH,IAAA,MAAM,SAAS,GAA0B,EAAA,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE;AAc5E;;;;AAIG;AACH,IAAA,KAAK,KAAW,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;AAClC;;;;;AAKG;IACH,UAAU,GAAA,EAAiB,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE;AACzD;;;;;;AAMG;AACH,IAAA,MAAM,CAAC,OAAyB,EAAgB,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE;AACjF;;;;AAIG;IACH,QAAQ,GAAA,EAAW,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE;AAC/C;;;;AAIG;IACH,gBAAgB,CAAC,OAA2B,KAAK,EAAA;QAC/C,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAe,CAAC;KACtD;AACD;;;;AAIG;IACH,UAAU,GAAA,EAAuB,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE;AAC/D;;;;;;;;;;;AAWG;AACH,IAAA,aAAa,CAAC,GAAW,EAAE,SAAiC,IAAI,EAAE,aAAyB,UAAU,EAAA;AACnG,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;KACvD;AACD;;;;;;;;;;AAUG;AACH,IAAA,aAAa,CAAC,GAAW,EAAE,MAA8B,EAAE,UAAsB,EAAE,MAAkB,EAAA;AACnG,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;KAC/D;AACD;;;;;;;;;AASG;IACH,OAAO,CAAC,GAAW,EAAE,MAAuB,EAAE,KAAU,EAAA,EAAgB,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE;AACrH;;;;;;;;;AASG;AACH,IAAA,aAAa,CAAC,GAAoB,EAAE,WAAuB,UAAU,EAAA,EAAa,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE;AAChI;;;;;;;;AAQG;AACH,IAAA,QAAQ,CAAC,GAAoB,EAAE,WAAuB,UAAU,EAAA,EAAa,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE;AACtH;;;;;AAKG;IACH,QAAQ,GAAA,EAAa,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE;AACjD;;;;;;AAMG;IACH,aAAa,GAAA,EAAa,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,EAAE;AAC3D;;;;;;;AAOG;IACH,YAAY,GAAA,EAAa,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;AACzD;;;;;;;AAOG;IACH,aAAa,GAAA,EAAa,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,EAAE;AAC3D;;;;;;;;;AASG;AACH,IAAA,SAAS,CAAC,GAAA,GAAc,GAAG,EAAA,EAAgB,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3E;;;;;;;;;;;;;;;;;;;AAmBG;AACH,IAAA,QAAQ,CAAC,GAAG,YAAsB,EAAiB,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE;AAC9F;;;;;;;;AAQG;AACH,IAAA,IAAI,CAAC,IAAS,EAAE,GAAQ,EAAE,OAAqB,EAAA;QAC7C,IAAI,GAAG,GAAQ,SAAS,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;YACnB,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACnC,SAAA;QACD,IAAI,GAAG,IAAI,SAAS,EAAE;AACpB,YAAA,GAAG,GAAG,OAAO,EAAE,QAAQ,CAAC;AACzB,SAAA;QACD,IAAI,GAAG,KAAK,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,CAAC,EAAE;AAC/C,YAAA,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;AACzD,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;;;;;AAQG;AACH,IAAA,QAAQ,CAAC,IAAmB,EAAE,GAAgB,EAAS,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;AAC5F;;;;;;;;;;;;AAYG;IACH,IAAI,CAAC,IAAY,EAAE,QAAgB,EAAE,MAAc,EAAA,EAAY,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE;AAC7G;;;;AAIG;AACH,IAAA,cAAc,CAAC,IAAY,EAAc,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE;AAC/E;;;;;;AAMG;AACH,IAAA,OAAO,CAAC,IAAS,EAAY,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE;AAC5D;;;;;;;;;;AAUG;AACH,IAAA,SAAS,CAAC,GAAA,GAAc,QAAQ,EAAA,EAAY,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;AAC5E;;;;;AAKG;IACH,MAAM,YAAY,CAAC,UAAsB,EAAE,QAAoB,GAAA,IAAI,EAAqB,EAAA,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE;AAClJ;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACH,IAAA,MAAM,YAAY,CAAC,UAAsB,EAAE,MAAc,EAAE,OAAyG,EAAA;AAClK,QAAA,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;KAChE;AACD;;;;;;AAMG;AACH,IAAA,WAAW,CAAC,GAAW,EAAyB,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE;AAClF;;;;;;;;;;;;;;AAcG;IACH,OAAO,CAAC,GAAW,EAAE,MAAuB,EAAE,UAAyB,GAAA,UAAU,EAAE,QAAA,GAAoB,KAAK,EAAA;AAC1G,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;KAC3D;AACD;;;;AAIG;IACH,MAAM,GAAA,EAAa,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAA,EAAE;AAC5C;;;;;;;;;AASG;AACH,IAAA,MAAM,CAAC,MAAc,EAAA;AACnB,QAAA,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;AAC5B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,MAAM,IAAI,UAAU,EAAE;AACxB,YAAA,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC;AACzB,SAAA;aAAM,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE;YAClD,MAAM,KAAK,GAAG,IAAI,uBAAuB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;gBAC3B,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5B,gBAAA,IAAI,EAAE,IAAI,UAAU,CAAC,OAAO,EAAE;oBAC5B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;AACrE,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AACD;;;;;;;;;;;AAWG;AACH,IAAA,eAAe,CAAC,GAAoB,EAAE,UAAA,GAAyB,UAAU,EAAA;QACvE,OAAO,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;KACjD;AACD;;;;;;;;AAQG;AACH,IAAA,eAAe,CAAC,KAAa,EAAE,UAAA,GAAyB,UAAU,EAAA;QAChE,OAAO,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;KACnD;AACD;;;;;;AAMG;AACH,IAAA,YAAY,CAAC,GAAY,EAAA,EAAS,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE;AACtF;;;;AAIG;AACH,IAAA,kBAAkB,KAAa,OAAO,CAAC,CAAC,CAAA,EAAE;AAC1C;;;;AAIG;AACH,IAAA,iBAAiB,KAAa,OAAO,CAAC,CAAC,CAAA,EAAE;AACzC;;;;;;;AAOG;AACH,IAAA,gBAAgB,KAAa,OAAO,CAAC,CAAC,CAAC,EAAE;AACzC;;;AAGG;IACH,eAAe,GAAA,EAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC1D;;;;AAIG;IACH,WAAW,GAAA,EAAa,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE;AACvD;;;;AAIG;IACH,SAAS,GAAA,EAAa,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE;AACnD;;;;;AAKG;IACH,aAAa,GAAA,EAAa,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,EAAE;AAC3D;;;;;AAKG;AACH,IAAA,aAAa,CAAC,GAAoB,EAAY,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE;AAClF;;;;;;;;;;;;;;;;AAgBG;IACH,WAAW,CAAC,cAAsC,IAAI,EAAA;QACpD,IAAI,EAAE,GAAoB,IAAI,CAAC;AAC/B,QAAA,IAAI,KAAK,GAAW,CAAC,CAAC,CAAC;QACvB,IAAI,WAAW,IAAI,IAAI,EAAE;AACvB,YAAA,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AAChC,SAAA;AACD,QAAA,IAAI,QAAQ,WAAW,CAAC,KAAK,QAAQ,EAAE;AACrC,YAAA,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;AACjC,YAAA,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC;AAC7D,SAAA;;YACC,KAAK,GAAG,WAAW,CAAC;QACtB,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC9C,YAAA,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3B,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AACD;;;;;;AAMG;AACH,IAAA,SAAS,CAAC,MAAuB,EAAA;QAC/B,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KAClC;AACD;;;;;;;AAOG;IACH,QAAQ,CAAC,MAAuB,EAAE,KAAa,EAAA;QAC7C,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KACxC;IAED,cAAc,CAAC,MAAuB,EAAE,KAA6B,EAAA;QACnE,OAAO,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC9C;AACD;;;;AAIG;AACH,IAAA,YAAY,CAAC,MAAuB,EAAA;QAClC,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;KACrC;AACD;;;;;;;;AAQG;IACH,eAAe,CAAC,MAAuB,EAAE,KAAU,EAAA;QACjD,OAAO,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC/C;AACD;;;;AAIG;AACH,IAAA,kBAAkB,CAAC,IAAY,EAAA;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,GAAG,GAAW,MAAM,CAAC;AACzB,QAAA,IAAI,GAAG,EAAE;YACP,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AAC/B,gBAAA,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;AACxB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;;AAKG;IACH,YAAY,GAAA,EAAsB,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;AAClE;;;;;;;;;;AAUG;IACH,KAAK,GAAA,EAAiB,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE;AAC/C;;;;;;;;;;;;;;AAcG;IACH,WAAW,GAAA,EAAiB,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAA,EAAE;AAC1D;;;;;;;;;AASG;AACH,IAAA,QAAQ,CAAC,GAAG,IAAS,EAAqB,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE;AAC7E;;;;;;;;;;;AAWG;AACH,IAAA,MAAM,CAAC,MAAA,GAAkB,IAAI,EAAE,YAAqB,IAAI,EAAA;QACtD,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;KAC1C;AACD;;;;;;;;;;;AAWG;IACH,QAAQ,CAAC,QAAgB,EAAE,MAAc,EAAE,SAAqB,EAAE,MAAsB,EAAE,SAAiB,EAAE,UAAsB,EAAA;AACjI,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;KACrF;AACD;;;;;;;;;;;;;AAaG;IACH,QAAQ,CAAC,QAAgB,EAAE,MAAc,EAAE,SAAqB,EAAE,MAAsB,EAAE,SAAiB,EAAE,UAAsB,EAAA;AACjI,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;KACrF;AACD;;;;;;;;;AASG;AACH,IAAA,WAAW,CAAC,QAAgB,EAAE,MAAc,EAAE,WAAuB,UAAU,EAAA;AAC7E,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;KACxD;AACD;;;;;;;;AAQG;AACH,IAAA,SAAS,CAAC,GAAoB,EAAA;QAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAClC,QAAA,IAAI,EAAE,IAAI,UAAU,CAAC,OAAO,EAAE;YAC5B,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACvG,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;AACD;;;;;;;;;;;;AAYG;AACH,IAAA,SAAS,CAAC,MAAe,EAAA;AACvB,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;AAC3B,SAAA;;AACC,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC1B,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;AAGG;AACH,IAAA,SAAS,KAAa,OAAO,CAAC,CAAC,CAAA,EAAE;AACjC;;;AAGG;AACH,IAAA,SAAS,KAAa,OAAO,CAAC,CAAC,CAAA,EAAE;AACjC;;;AAGG;AACH,IAAA,QAAQ,KAAa,OAAO,CAAC,CAAC,CAAA,EAAE;AAChC;;;;;;;;;;;;;;;;;AAiBG;IACH,MAAM,MAAM,CAAC,KAAa,EAAA,EAAqB,OAAO,CAAC,CAAC,CAAC,EAAE;AAC3D;;;;;;;AAOG;IACH,MAAM,eAAe,GAA0B,EAAA,OAAO,UAAU,CAAC,OAAO,CAAC,EAAE;AAC3E;;;;;;;AAOG;IACH,MAAM,cAAc,GAA0B,EAAA,OAAO,UAAU,CAAC,OAAO,CAAC,EAAE;AAC1E;;;;;;;;;AASG;IACH,MAAM,cAAc,GAA0B,EAAA,OAAO,UAAU,CAAC,OAAO,CAAC,EAAE;AAC1E;;;;;;;AAOG;IACH,MAAM,aAAa,GAA0B,EAAA,OAAO,UAAU,CAAC,OAAO,CAAC,EAAE;AACzE;;;;;;;AAOG;IACH,MAAM,eAAe,GAA0B,EAAA,OAAO,UAAU,CAAC,OAAO,CAAC,EAAE;AAC3E;;;;;;;AAOG;IACH,MAAM,cAAc,GAA0B,EAAA,OAAO,UAAU,CAAC,OAAO,CAAC,EAAE;AAC1E;;;;;;;;;;;;;AAaG;AACO,IAAA,MAAM,cAAc,CAAC,GAAW,EAAE,SAAA,GAAqB,KAAK,EAAE,MAAkB,GAAA,IAAI,EAAE,OAAA,GAAqC,MAAM,EAAA;QACzI,OAAO,UAAU,CAAC,OAAO,CAAC;KAC3B;AACD;;;;;;;;;;;AAWG;IACH,MAAM,WAAW,CAAC,GAAW,EAAA,EAAqB,OAAO,CAAC,CAAC,CAAC,EAAE;AAC9D;;;;;;;;;;;AAWG;AACH,IAAA,SAAS,CAAC,KAAqB,EAAgB,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;AACjF;;;;;;;;;AASG;IACH,YAAY,GAAA,EAAiB,OAAO,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE;AAC7D;;;AAGG;IACH,QAAQ,GAAA,EAAc,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE;AAClD;;;;;;AAMG;AACH,IAAA,cAAc,CAAC,GAAW,EAAY,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3E;;;;AAIG;IACH,eAAe,GAAA,EAAqB,OAAO,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,EAAE;AACvE;;;;;AAKG;AACH,IAAA,aAAa,GAAc,EAAA,OAAO,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;AAC5E;;;;;AAKG;AACH,IAAA,UAAU,CAAC,GAAW,EAAa,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE;AACpE;;;;AAIG;IACH,eAAe,GAAA,EAAc,OAAO,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,EAAE;AAC/D;;;;AAIG;AACH,IAAA,YAAY,KAAiB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE;AACtF;;;;AAIG;IACH,aAAa,GAAA,EAAa,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,EAAE;AAC3D;;;;;;;;;AASG;AACH,IAAA,SAAS,CAAC,GAAW,EAAE,MAAe,EAAgB,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE;AAC9F;;;;;AAKG;AACH,IAAA,YAAY,CAAC,GAAW,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO;AAClE,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAA,OAAO,SAAS,CAAC;KAClB;AACD;;;;;;;;;;;;;;;;AAgBG;AACH,IAAA,eAAe,CAAC,GAAW,EAAE,KAAa,EAAY,EAAA,OAAO,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE;AACnG;;;AAGG;IACH,UAAU,GAAA,EAAa,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE;AACrD;;;;;;;;;;AAUG;IACH,SAAS,GAAA,EAAiB,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE;AACvD;;;;AAIG;IACH,SAAS,GAAA,EAAiC,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE;AACvE;;;;AAIG;IACH,iBAAiB,GAAA;QACf,IAAI,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,QAAA,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3C,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,SAAA;AACD,QAAA,OAAO,GAAG,CAAC;KACZ;AACD;;;;;;AAMG;IACH,eAAe,CAAC,KAAa,EAAE,IAAS,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAA;KACxB;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;KAC5B;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,CAAC;KACrC;IAED,WAAW,GAAA;AACT,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;;IAGD,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;KACpB;AAKD;;;;AAIG;IACH,CAAC,UAAU,CAAC,UAAsB,EAAA;QAChC,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;KACvC;AACD;;AAEG;IACH,GAAC,EAAA,GAZA,MAAM,CAAC,WAAW,EAYjB,MAAM,CAAC,QAAQ,EAAC,GAAA;QAChB,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;KAC7B;;uGA11CmB,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAV,UAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,gTAFpB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;2FAEQ,UAAU,EAAA,UAAA,EAAA,CAAA;kBAJ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,YAAY;AACtB,oBAAA,QAAQ,EAAE,EAAE;AACb,iBAAA,CAAA;0EAgBe,GAAG,EAAA,CAAA;sBAAhB,KAAK;uBAAC,KAAK,CAAA;gBAER,UAAU,EAAA,CAAA;sBADb,KAAK;uBAAC,YAAY,CAAA;gBASf,EAAE,EAAA,CAAA;sBADL,KAAK;uBAAC,WAAW,CAAA;gBA2ER,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,iBAAiB,EAAA,CAAA;sBAA1B,MAAM;gBAEG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,eAAe,EAAA,CAAA;sBAAxB,MAAM;gBACG,WAAW,EAAA,CAAA;sBAApB,MAAM;;;ACtJT;;AAEG;;ACFH;;AAEG;;;;"}