{"version":3,"file":"queueable.modern.mjs","sources":["../src/Deferred.ts","../.yarn/cache/fast-list-npm-1.0.3-73493e1bdd-2bc01386f6.zip/node_modules/fast-list/fast-list.js","../src/Buffer.ts","../src/common.ts","../src/fromDom.ts","../src/fromEmitter.ts","../src/adapters/Multicast.ts","../src/adapters/LastResult.ts","../src/adapters/Channel.ts"],"sourcesContent":["/**\n * Exposes the promise executor callbacks (resolve, reject).\n */\nexport default class Deferred<A> {\n  promise: Promise<A>;\n  constructor() {\n    this.promise = new Promise((resolve, reject) => {\n      this.resolve = (value) => {\n        resolve(value);\n        return this.promise;\n      };\n      this.reject = (reason) => {\n        reject(reason);\n        return this.promise;\n      };\n    });\n  }\n}\n\nexport default interface Deferred<A> {\n  resolve(value: A | PromiseLike<A>): Promise<A>;\n  reject(reason?: string | Error): Promise<A>;\n}\n",";(function() { // closure for web browsers\n\nfunction Item (data, prev, next) {\n  this.next = next\n  if (next) next.prev = this\n  this.prev = prev\n  if (prev) prev.next = this\n  this.data = data\n}\n\nfunction FastList () {\n  if (!(this instanceof FastList)) return new FastList\n  this._head = null\n  this._tail = null\n  this.length = 0\n}\n\nFastList.prototype =\n{ push: function (data) {\n    this._tail = new Item(data, this._tail, null)\n    if (!this._head) this._head = this._tail\n    this.length ++\n  }\n\n, pop: function () {\n    if (this.length === 0) return undefined\n    var t = this._tail\n    this._tail = t.prev\n    if (t.prev) {\n      t.prev = this._tail.next = null\n    }\n    this.length --\n    if (this.length === 1) this._head = this._tail\n    else if (this.length === 0) this._head = this._tail = null\n    return t.data\n  }\n\n, unshift: function (data) {\n    this._head = new Item(data, null, this._head)\n    if (!this._tail) this._tail = this._head\n    this.length ++\n  }\n\n, shift: function () {\n    if (this.length === 0) return undefined\n    var h = this._head\n    this._head = h.next\n    if (h.next) {\n      h.next = this._head.prev = null\n    }\n    this.length --\n    if (this.length === 1) this._tail = this._head\n    else if (this.length === 0) this._head = this._tail = null\n    return h.data\n  }\n\n, item: function (n) {\n    if (n < 0) n = this.length + n\n    var h = this._head\n    while (n-- > 0 && h) h = h.next\n    return h ? h.data : undefined\n  }\n\n, slice: function (n, m) {\n    if (!n) n = 0\n    if (!m) m = this.length\n    if (m < 0) m = this.length + m\n    if (n < 0) n = this.length + n\n\n    if (m === n) {\n      return []\n    }\n\n    if (m < n) {\n      throw new Error(\"invalid offset: \"+n+\",\"+m+\" (length=\"+this.length+\")\")\n    }\n\n    var len = m - n\n      , ret = new Array(len)\n      , i = 0\n      , h = this._head\n    while (n-- > 0 && h) h = h.next\n    while (i < len && h) {\n      ret[i++] = h.data\n      h = h.next\n    }\n    return ret\n  }\n\n, drop: function () {\n    FastList.call(this)\n  }\n\n, forEach: function (fn, thisp) {\n    var p = this._head\n      , i = 0\n      , len = this.length\n    while (i < len && p) {\n      fn.call(thisp || this, p.data, i, this)\n      p = p.next\n      i ++\n    }\n  }\n\n, map: function (fn, thisp) {\n    var n = new FastList()\n    this.forEach(function (v, i, me) {\n      n.push(fn.call(thisp || me, v, i, me))\n    })\n    return n\n  }\n\n, filter: function (fn, thisp) {\n    var n = new FastList()\n    this.forEach(function (v, i, me) {\n      if (fn.call(thisp || me, v, i, me)) n.push(v)\n    })\n    return n\n  }\n\n, reduce: function (fn, val, thisp) {\n    var i = 0\n      , p = this._head\n      , len = this.length\n    if (!val) {\n      i = 1\n      val = p && p.data\n      p = p && p.next\n    }\n    while (i < len && p) {\n      val = fn.call(thisp || this, val, p.data, this)\n      i ++\n      p = p.next\n    }\n    return val\n  }\n}\n\nif (\"undefined\" !== typeof(exports)) module.exports = FastList\nelse if (\"function\" === typeof(define) && define.amd) {\n  define(\"FastList\", function() { return FastList })\n} else (function () { return this })().FastList = FastList\n\n})()\n","import fastList from 'fast-list';\n\n/**\n * First-in, first-out (FIFO) buffer (queue) with default item values.\n * Optionally circular based on {@link Buffer.limit}.\n * Can be switched to LIFO with {@link Buffer#reverse}.\n */\nexport default class Buffer<A> {\n  #list: fastList.List<A>;\n  #reversed = false;\n  length = 0;\n\n  constructor(\n    /** The length after which the buffer becomes circular, i.e., discards oldest items. */\n    readonly limit = Infinity,\n  ) {\n    this.#list = new fastList();\n  }\n  /**\n   * Add an item to the end of the buffer.\n   */\n  enqueue(value: A): void {\n    const list = this.#list;\n    if (list.length === this.limit) {\n      // Discard oldest item\n      list.shift();\n    } else {\n      this.length += 1;\n    }\n    list.push(value);\n  }\n  /**\n   * Return the oldest item from the buffer.\n   */\n  dequeue(): A {\n    if (this.length === 0) {\n      throw Error('Buffer is empty');\n    }\n    this.length -= 1;\n    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n    return this.#reversed ? this.#list.pop()! : this.#list.shift()!;\n  }\n\n  clear(): void {\n    this.length = 0;\n    this.#list.drop();\n  }\n\n  forEach(f: (value: A) => void): void {\n    this.#list.forEach(f);\n  }\n\n  reverse() {\n    this.#reversed = true;\n    return this;\n  }\n\n  [Symbol.iterator]() {\n    return {\n      next: () => {\n        return this.length > 0\n          ? {\n              value: this.dequeue(),\n              done: false as const,\n            }\n          : {\n              done: true as const,\n              value: undefined,\n            };\n      },\n      [Symbol.iterator]() {\n        return this;\n      },\n    };\n  }\n\n  static from<A>(iterable: Iterable<A>, limit: number) {\n    const buffer = new Buffer<A>(limit);\n    for (const value of iterable) {\n      buffer.enqueue(value);\n    }\n    return buffer;\n  }\n}\n","export interface Returnable<A> extends AsyncIterableIterator<A> {\n  return(value?: A): Promise<IteratorResult<A>>;\n}\n\nexport interface PushAdapter<A> extends AsyncIterableIterator<A> {\n  push(value: A): Promise<IteratorResult<A>>;\n  wrap(onReturn?: () => void): AsyncIterableIterator<A>;\n}\n\n/** The result returned from closed iterators. */\nexport const doneResult = Object.freeze({\n  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n  value: undefined!,\n  done: true,\n});\n\nexport const donePromise = Promise.resolve(doneResult);\n","import { PushAdapter } from './common';\n\nexport type EventMap = GlobalEventHandlersEventMap;\n\n// TODO add overloads for special event targets (Window, Document)\n/**\n * Convert DOM events to an async iterable iterator.\n */\nconst fromDom =\n  <T extends keyof EventMap>(init: () => PushAdapter<EventMap[T]>) =>\n  (\n    type: T,\n    target: Target<T>,\n    options?: boolean | AddEventListenerOptions,\n  ): AsyncIterableIterator<EventMap[T]> => {\n    const adapter = init();\n    const listener = (event: EventMap[T]) => void adapter.push(event);\n    target.addEventListener(type, listener, options);\n    return adapter.wrap(() => target.removeEventListener(type, listener, options));\n  };\n\nexport type Listener<T extends keyof EventMap> = (e: EventMap[T]) => void;\n\nexport type Target<\n  T extends keyof EventMap,\n  L = Listener<T>,\n  O = boolean | AddEventListenerOptions,\n> = EventTarget & {\n  addEventListener(type: T, listener: L, options?: O): void;\n  removeEventListener(type: T, listener: L, options?: O): void;\n};\n\nexport default fromDom;\n","import { PushAdapter } from './common';\n\n// TODO implement strict-event-emitter-types support\n/**\n * Convert node EventEmitter events to an async iterable iterator.\n */\nconst fromEmitter =\n  <Event>(init: () => PushAdapter<Event>) =>\n  (type: string | symbol, emitter: NodeJS.EventEmitter): AsyncIterableIterator<Event> => {\n    const adapter = init();\n    const listener = (event: Event) => void adapter.push(event);\n    emitter.addListener(type, listener);\n    return adapter.wrap(() => void emitter.removeListener(type, listener));\n  };\n\nexport default fromEmitter;\n","import Channel from './Channel';\nimport { PushAdapter } from '../common';\n\n/**\n * Multicasts pushed values to a variable number of async iterable iterators\n * as receivers or subscribers.\n *\n * Does not buffer pushed values; if no receivers are registered, pushed\n * values are silently discarded.\n */\nexport default class Multicast<A> implements AsyncIterable<A> {\n  onStart?(): void;\n  onStop?(): void;\n\n  readonly receivers: Set<PushAdapter<A>> = new Set();\n\n  constructor(private readonly init: () => PushAdapter<A> = () => new Channel()) {}\n\n  /**\n   * Pushes a value to all registered receivers.\n   */\n  push(value: A): this {\n    this.receivers.forEach((balancer) => balancer.push(value));\n    return this;\n  }\n\n  /**\n   * Creates and registers a receiver.\n   */\n  [Symbol.asyncIterator](): AsyncIterableIterator<A> {\n    const producer = this.init();\n    const { receivers } = this;\n    receivers.add(producer);\n    if (this.onStart && receivers.size === 1) {\n      this.onStart();\n    }\n    return producer.wrap(() => {\n      receivers.delete(producer);\n      if (this.onStop && receivers.size === 0) {\n        this.onStop();\n      }\n    });\n  }\n}\n","import Deferred from '../Deferred';\nimport { PushAdapter, doneResult } from '../common';\nimport fromDom from '../fromDom';\nimport fromEmitter from '../fromEmitter';\n\nexport default class LastResult<A> implements PushAdapter<A> {\n  private buffer: Deferred<IteratorResult<A>> = new Deferred();\n  private closed = false;\n  private resolved = false;\n  private requested = false;\n\n  static fromDom = fromDom(() => new LastResult());\n  static fromEmitter = fromEmitter(() => new LastResult());\n\n  push(value: A, done = false): Promise<IteratorResult<A>> {\n    if (this.closed) {\n      throw Error('Iterator closed');\n    }\n    const result = {\n      value,\n      done,\n    };\n    if (this.resolved === false) {\n      this.resolved = true;\n    } else {\n      this.buffer = new Deferred();\n      this.resolved = false;\n    }\n    this.requested = false;\n    this.buffer.resolve(result);\n    return this.buffer.promise;\n  }\n\n  async next(): Promise<IteratorResult<A>> {\n    if (this.closed) {\n      return doneResult;\n    }\n    this.requested = true;\n    return this.buffer.promise;\n  }\n\n  async return(value?: A): Promise<IteratorResult<A>> {\n    this.closed = true;\n    if (!this.resolved && this.requested) {\n      this.buffer.resolve(doneResult);\n    }\n    return Promise.resolve({\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      value: value!,\n      done: true,\n    });\n  }\n\n  wrap(onReturn?: () => void) {\n    const wrapped = {\n      next: () => this.next(),\n      [Symbol.asyncIterator]() {\n        return this;\n      },\n      return: (value?: A) => {\n        if (onReturn) {\n          onReturn();\n        }\n        return this.return(value);\n      },\n    };\n    return wrapped;\n  }\n\n  [Symbol.asyncIterator]() {\n    return this;\n  }\n}\n","import Deferred from '../Deferred';\nimport Buffer from '../Buffer';\nimport { PushAdapter, doneResult } from '../common';\nimport fromDom from '../fromDom';\nimport fromEmitter from '../fromEmitter';\n\n/**\n * Async iterable iterator with a non-optional return method.\n */\nexport interface WrappedBalancer<A> extends AsyncIterableIterator<A> {\n  // TODO the result can be undefined as well\n  return(value?: A): Promise<IteratorResult<A>>;\n  throw?: undefined;\n}\n\nexport interface Unpushed<A> {\n  result: IteratorResult<A>;\n  defer: Deferred<IteratorResult<A>>;\n}\n/**\n * Balances a push queue with a pull queue, also known as a\n * dropping-buffer channel, since the queues are FIFO and\n * can be set to be bounded, i.e., to drop the oldest enqueued\n * values if the limit is exceeded. The channel is unbounded\n * by default.\n */\nexport default class Channel<A> implements PushAdapter<A> {\n  /** Pushed results waiting for pulls to resolve */\n  readonly pushBuffer: Buffer<Unpushed<A>>;\n  /** Unresolved pulls waiting for results to be pushed */\n  readonly pullBuffer: Buffer<Deferred<IteratorResult<A>>>;\n  /** Determines whether new values can be pushed or pulled */\n  private closed = false;\n\n  static fromDom = fromDom(() => new Channel());\n  static fromEmitter = fromEmitter(() => new Channel());\n\n  constructor(\n    /** Limit (bounds) after which the oldest buffered value is dropped. */\n    limit = Infinity,\n  ) {\n    this.pushBuffer = new Buffer(limit);\n    this.pullBuffer = new Buffer(limit);\n  }\n\n  /**\n   * Pull a promise of the next result.\n   */\n  next(): Promise<IteratorResult<A>> {\n    if (this.closed) {\n      return Promise.resolve(doneResult);\n    }\n    if (this.pushBuffer.length === 0) {\n      const defer = new Deferred<IteratorResult<A>>();\n      // Buffer the pull to be resolved later\n      this.pullBuffer.enqueue(defer);\n      // Return the buffered promise that will be resolved and dequeued when a value is pushed\n      return defer.promise;\n    }\n    const { result, defer } = this.pushBuffer.dequeue();\n    defer.resolve(result);\n    if (result.done) {\n      this.close();\n    }\n    return defer.promise;\n  }\n\n  /**\n   * Push the next result value.\n   *\n   * @param value - Result\n   * @param done - If true, closes the balancer when this result is resolved\n   * @throws Throws if the balancer is already closed\n   */\n  push(value: A, done = false): Promise<IteratorResult<A>> {\n    if (this.closed) {\n      return Promise.resolve(doneResult);\n    }\n    const result = {\n      value,\n      done,\n    };\n    if (this.pullBuffer.length > 0) {\n      return this.pullBuffer.dequeue().resolve(result);\n    }\n    const defer = new Deferred<IteratorResult<A>>();\n    this.pushBuffer.enqueue({ result, defer });\n    return defer.promise;\n  }\n\n  /**\n   * Returns itself, since {@link Channel} already implements the iterator protocol.\n   */\n  [Symbol.asyncIterator]() {\n    return this;\n  }\n\n  /**\n   * Closes the balancer; clears the queues and makes {@link Channel#next} only\n   * return `doneResult`.\n   *\n   * @param value - The result value to be returned\n   */\n  async return(value?: A): Promise<IteratorResult<A>> {\n    this.close();\n    return {\n      done: true,\n      // TODO: fix assertion\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      value: value!, // asserting as non-undefined because the TS lib types are incorrect\n    };\n  }\n\n  close(): void {\n    if (this.closed) {\n      return;\n    }\n    this.closed = true;\n    // Clear the queues\n    this.pushBuffer.forEach(({ defer: { resolve } }) => void resolve(doneResult));\n    this.pushBuffer.clear();\n    this.pullBuffer.forEach(({ resolve }) => void resolve(doneResult));\n    this.pullBuffer.clear();\n  }\n\n  /**\n   * Convert {@link Channel} to a generic async iterable iterator to hide implementation details.\n   *\n   * @param onReturn - Optional callback for when the iterator is closed with {@link Channel#return}\n   * @throws Throws if called when closed\n   */\n  wrap(onReturn?: () => void): WrappedBalancer<A> {\n    if (this.closed) {\n      throw Error('Balancer is closed');\n    }\n    return {\n      [Symbol.asyncIterator]() {\n        return this;\n      },\n      next: () => this.next(),\n      return: async (value?: A) => {\n        if (onReturn) {\n          onReturn();\n        }\n        return this.return(value);\n      },\n    };\n  }\n}\n"],"names":["Deferred","constructor","this","promise","Promise","resolve","reject","value","reason","Item","data","prev","next","FastList","_head","_tail","length","prototype","push","pop","t","undefined","unshift","shift","h","item","n","slice","m","Error","len","ret","Array","i","drop","call","forEach","fn","thisp","p","map","v","me","filter","reduce","val","module","_Symbol$iterator","_list","_classPrivateFieldLooseKey","_reversed","Symbol","iterator","Buffer","limit","Infinity","Object","defineProperty","writable","_classPrivateFieldLooseBase","fastList","enqueue","list","dequeue","clear","f","reverse","done","static","iterable","buffer","doneResult","freeze","fromDom","init","type","target","options","adapter","listener","event","addEventListener","wrap","removeEventListener","fromEmitter","emitter","addListener","removeListener","_Symbol$asyncIterator","asyncIterator","Channel","closed","pushBuffer","pullBuffer","defer","result","close","_Symbol$asyncIterator$2","async","onReturn","_this","return","Multicast","receivers","Set","balancer","_Symbol$asyncIterator$1","producer","add","onStart","size","delete","onStop","LastResult","resolved","requested"],"mappings":"AAGc,MAAOA,EAEnBC,cACEC,KAAKC,QAAU,IAAIC,QAAQ,CAACC,EAASC,KACnCJ,KAAKG,QAAWE,IACdF,EAAQE,GACGL,KAACC,SAEdD,KAAKI,OAAUE,IACbF,EAAOE,GACIN,KAACC,QACd,EAEJ,8NChBD,WAED,SAASM,EAAMC,EAAMC,EAAMC,GACzBV,KAAKU,KAAOA,EACRA,IAAMA,EAAKD,KAAOT,MACtBA,KAAKS,KAAOA,EACRA,IAAMA,EAAKC,KAAOV,MACtBA,KAAKQ,KAAOA,CACd,CAEA,SAASG,IACP,KAAMX,gBAAgBW,GAAW,OAAO,IAAIA,EAC5CX,KAAKY,MAAQ,KACbZ,KAAKa,MAAQ,KACbb,KAAKc,OAAS,CAChB,CAEAH,EAASI,UACT,CAAEC,KAAM,SAAUR,GACdR,KAAKa,MAAQ,IAAIN,EAAKC,EAAMR,KAAKa,MAAO,MACnCb,KAAKY,QAAOZ,KAAKY,MAAQZ,KAAKa,OACnCb,KAAKc,QACN,EAEDG,IAAK,WACH,GAAoB,IAAhBjB,KAAKc,OAAT,CACA,IAAII,EAAIlB,KAAKa,MAQb,OAPAb,KAAKa,MAAQK,EAAET,KACXS,EAAET,OACJS,EAAET,KAAOT,KAAKa,MAAMH,KAAO,MAE7BV,KAAKc,SACe,IAAhBd,KAAKc,OAAcd,KAAKY,MAAQZ,KAAKa,MAChB,IAAhBb,KAAKc,SAAcd,KAAKY,MAAQZ,KAAKa,MAAQ,MAC/CK,EAAEV,IATqBW,CAU/B,EAEDC,QAAS,SAAUZ,GACjBR,KAAKY,MAAQ,IAAIL,EAAKC,EAAM,KAAMR,KAAKY,OAClCZ,KAAKa,QAAOb,KAAKa,MAAQb,KAAKY,OACnCZ,KAAKc,QACN,EAEDO,MAAO,WACL,GAAoB,IAAhBrB,KAAKc,OAAT,CACA,IAAIQ,EAAItB,KAAKY,MAQb,OAPAZ,KAAKY,MAAQU,EAAEZ,KACXY,EAAEZ,OACJY,EAAEZ,KAAOV,KAAKY,MAAMH,KAAO,MAE7BT,KAAKc,SACe,IAAhBd,KAAKc,OAAcd,KAAKa,MAAQb,KAAKY,MAChB,IAAhBZ,KAAKc,SAAcd,KAAKY,MAAQZ,KAAKa,MAAQ,MAC/CS,EAAEd,IATqBW,CAU/B,EAEDI,KAAM,SAAUC,GACVA,EAAI,IAAGA,EAAIxB,KAAKc,OAASU,GAE7B,IADA,IAAIF,EAAItB,KAAKY,MACNY,KAAM,GAAKF,GAAGA,EAAIA,EAAEZ,KAC3B,OAAOY,EAAIA,EAAEd,UAAOW,CACrB,EAEDM,MAAO,SAAUD,EAAGE,GAMlB,GALKF,IAAGA,EAAI,GACPE,IAAGA,EAAI1B,KAAKc,QACbY,EAAI,IAAGA,EAAI1B,KAAKc,OAASY,GACzBF,EAAI,IAAGA,EAAIxB,KAAKc,OAASU,GAEzBE,IAAMF,EACR,MAAO,GAGT,GAAIE,EAAIF,EACN,MAAM,IAAIG,MAAM,mBAAmBH,EAAE,IAAIE,EAAE,YAAY1B,KAAKc,OAAO,KAOrE,IAJA,IAAIc,EAAMF,EAAIF,EACVK,EAAM,IAAIC,MAAMF,GAChBG,EAAI,EACJT,EAAItB,KAAKY,MACNY,KAAM,GAAKF,GAAGA,EAAIA,EAAEZ,KAC3B,KAAOqB,EAAIH,GAAON,GAChBO,EAAIE,KAAOT,EAAEd,KACbc,EAAIA,EAAEZ,KAER,OAAOmB,CACR,EAEDG,KAAM,WACJrB,EAASsB,KAAKjC,KACf,EAEDkC,QAAS,SAAUC,EAAIC,GAIrB,IAHA,IAAIC,EAAIrC,KAAKY,MACTmB,EAAI,EACJH,EAAM5B,KAAKc,OACRiB,EAAIH,GAAOS,GAChBF,EAAGF,KAAKG,GAASpC,KAAMqC,EAAE7B,KAAMuB,EAAG/B,MAClCqC,EAAIA,EAAE3B,KACNqB,GAEH,EAEDO,IAAK,SAAUH,EAAIC,GACjB,IAAIZ,EAAI,IAAIb,EAIZ,OAHAX,KAAKkC,QAAQ,SAAUK,EAAGR,EAAGS,GAC3BhB,EAAER,KAAKmB,EAAGF,KAAKG,GAASI,EAAID,EAAGR,EAAGS,GACxC,GACWhB,CACR,EAEDiB,OAAQ,SAAUN,EAAIC,GACpB,IAAIZ,EAAI,IAAIb,EAIZ,OAHAX,KAAKkC,QAAQ,SAAUK,EAAGR,EAAGS,GACvBL,EAAGF,KAAKG,GAASI,EAAID,EAAGR,EAAGS,IAAKhB,EAAER,KAAKuB,EACjD,GACWf,CACR,EAEDkB,OAAQ,SAAUP,EAAIQ,EAAKP,GACzB,IAAIL,EAAI,EACJM,EAAIrC,KAAKY,MACTgB,EAAM5B,KAAKc,OAMf,IALK6B,IACHZ,EAAI,EACJY,EAAMN,GAAKA,EAAE7B,KACb6B,EAAIA,GAAKA,EAAE3B,MAENqB,EAAIH,GAAOS,GAChBM,EAAMR,EAAGF,KAAKG,GAASpC,KAAM2C,EAAKN,EAAE7B,KAAMR,MAC1C+B,IACAM,EAAIA,EAAE3B,KAER,OAAOiC,CACR,GAGkCC,UAAiBjC,CAKrD,CA/IA,iCCAD,IAAAkC,EAAiC,IAAAC,eAAAC,EAAA,QAAAC,eAAAD,EAAAF,YAAAA,EAyD9BI,OAAOC,SAlDW,MAAAC,EAKnBpD,YAEWqD,EAAQC,UAAQC,OAAAC,eAAAvD,KAAA8C,EAAAU,CAAAA,UAAAnD,EAAAA,eAAAiD,OAAAC,eAAAvD,KAAAgD,EAAAQ,CAAAA,UAAAnD,EAAAA,OALf,IAAKL,KACjBc,OAAS,EAIEd,KAAKoD,MAALA,EAETK,EAAAzD,KAAI8C,GAAAA,GAAS,IAAIY,CACnB,CAIAC,QAAQtD,GACN,MAAMuD,EAAIH,EAAGzD,KAAI8C,GAAAA,GACbc,EAAK9C,SAAWd,KAAKoD,MAEvBQ,EAAKvC,QAELrB,KAAKc,QAAU,EAEjB8C,EAAK5C,KAAKX,EACZ,CAIAwD,UACE,GAAoB,IAAhB7D,KAAKc,OACP,MAAMa,MAAM,mBAId,OAFA3B,KAAKc,QAAU,EAER2C,EAAIzD,KAAAgD,GAAAA,GAAaS,EAAAzD,KAAI8C,GAAAA,GAAO7B,MAASwC,OAAIX,GAAAA,GAAOzB,OACzD,CAEAyC,QACE9D,KAAKc,OAAS,EACd2C,EAAIzD,KAAA8C,GAAAA,GAAOd,MACb,CAEAE,QAAQ6B,GACNN,EAAIzD,KAAA8C,GAAAA,GAAOZ,QAAQ6B,EACrB,CAEAC,UAEE,OADAP,EAAIzD,KAAAgD,GAAAA,IAAa,MAEnB,CAEAH,CAAAA,KACE,MAAO,CACLnC,KAAMA,IACOV,KAACc,OAAS,EACjB,CACET,MAAOL,KAAK6D,UACZI,MAAM,GAER,CACEA,MAAM,EACN5D,WAAOc,GAGf,CAAC8B,OAAOC,YACN,WACF,EAEJ,CAEAgB,YAAeC,EAAuBf,GACpC,MAAMgB,EAAS,IAAIjB,EAAUC,GAC7B,IAAK,MAAM/C,KAAS8D,EAClBC,EAAOT,QAAQtD,GAEjB,OAAO+D,CACT,ECxEW,MAAAC,EAAaf,OAAOgB,OAAO,CAEtCjE,WAAOc,EACP8C,MAAM,IAGmB/D,QAAQC,QAAQkE,GCRrC,MAAAE,EACuBC,GAC3B,CACEC,EACAC,EACAC,KAEA,MAAMC,EAAUJ,IACVK,EAAYC,IAA4BF,EAAQ5D,KAAK8D,EAAM,EAEjE,OADAJ,EAAOK,iBAAiBN,EAAMI,EAAUF,GACjCC,EAAQI,KAAK,IAAMN,EAAOO,oBAAoBR,EAAMI,EAAUF,GAAQ,ECZ3EO,EACIV,GACR,CAACC,EAAuBU,KACtB,MAAMP,EAAUJ,IACVK,EAAYC,IAAsBF,EAAQ5D,KAAK8D,EAAM,EAE3D,OADAK,EAAQC,YAAYX,EAAMI,GACnBD,EAAQI,KAAK,KAAWG,EAAQE,eAAeZ,EAAMI,EAAS,UCZzES,ECAAA,ECIyCA,EAyFtCrC,OAAOsC,cAnEI,MAAOC,EAWnBzF,YAEEqD,EAAQC,UAPFoC,KAAAA,QAAS,EASfzF,KAAK0F,WAAa,IAAIvC,EAAOC,GAC7BpD,KAAK2F,WAAa,IAAIxC,EAAOC,EAC/B,CAKA1C,OACE,GAAIV,KAAKyF,OACP,OAAOvF,QAAQC,QAAQkE,GAEzB,GAA+B,IAA3BrE,KAAK0F,WAAW5E,OAAc,CAChC,MAAM8E,EAAQ,IAAI9F,EAIlB,OAFAE,KAAK2F,WAAWhC,QAAQiC,GAEjBA,EAAM3F,OACd,CACD,MAAM4F,OAAEA,EAAMD,MAAEA,GAAU5F,KAAK0F,WAAW7B,UAK1C,OAJA+B,EAAMzF,QAAQ0F,GACVA,EAAO5B,MACTjE,KAAK8F,QAEAF,EAAM3F,OACf,CASAe,KAAKX,EAAU4D,GAAO,GACpB,GAAIjE,KAAKyF,OACP,OAAOvF,QAAQC,QAAQkE,GAEzB,MAAMwB,EAAS,CACbxF,QACA4D,QAEF,GAAIjE,KAAK2F,WAAW7E,OAAS,EAC3B,OAAWd,KAAC2F,WAAW9B,UAAU1D,QAAQ0F,GAE3C,MAAMD,EAAQ,IAAI9F,EAElB,OADAE,KAAK0F,WAAW/B,QAAQ,CAAEkC,SAAQD,UAC3BA,EAAM3F,OACf,CAKA8F,CAAAT,KACE,OACFtF,IAAA,CAQAgG,aAAa3F,GAEX,OADAL,KAAK8F,QACE,CACL7B,MAAM,EAGN5D,MAAOA,EAEX,CAEAyF,QACM9F,KAAKyF,SAGTzF,KAAKyF,QAAS,EAEdzF,KAAK0F,WAAWxD,QAAQ,EAAG0D,OAASzF,eAAqBA,EAAQkE,EAAW,GAC5ErE,KAAK0F,WAAW5B,QAChB9D,KAAK2F,WAAWzD,QAAQ,EAAG/B,cAAmBA,EAAQkE,EAAW,GACjErE,KAAK2F,WAAW7B,QAClB,CAQAkB,KAAKiB,GAAqBC,IAAAA,EACxBlG,KAAA,GAAIA,KAAKyF,OACP,MAAM9D,MAAM,sBAEd,MAAO,CACL,CAACsB,OAAOsC,iBACN,WACF,EACA7E,KAAMA,IAAMV,KAAKU,OACjByF,OAAQH,eAAO3F,GAIb,OAHI4F,GACFA,IAEKC,EAAKC,OAAO9F,EACrB,EAEJ,EAzHmBmF,EAQZjB,QAAUA,EAAQ,IAAM,IAAIiB,GARhBA,EASZN,YAAcA,EAAY,IAAM,IAAIM,GFnCbF,EA6B7BrC,OAAOsC,cAnBI,MAAOa,EAMnBrG,YAA6ByE,EAA6BA,KAAM,IAAIgB,IAASxF,KAFpEqG,UAAiC,IAAIC,IAEjBtG,KAAIwE,KAAJA,CAAmD,CAKhFxD,KAAKX,GAEH,OADAL,KAAKqG,UAAUnE,QAASqE,GAAaA,EAASvF,KAAKX,IAC5CL,IACT,CAKAwG,CAAAlB,KACE,MAAMmB,EAAWzG,KAAKwE,QAChB6B,UAAEA,GAAcrG,KAKtB,OAJAqG,EAAUK,IAAID,GACVzG,KAAK2G,SAA8B,IAAnBN,EAAUO,MAC5B5G,KAAK2G,UAEAF,EAASzB,KAAK,KACnBqB,EAAUQ,OAAOJ,GACbzG,KAAK8G,QAA6B,IAAnBT,EAAUO,MAC3B5G,KAAK8G,QACN,EAEL,ECvCuCxB,EAkEtCrC,OAAOsC,cAhEW,MAAAwB,EAAUhH,cACrBqE,KAAAA,OAAsC,IAAItE,EAC1C2F,KAAAA,QAAS,EAAKzF,KACdgH,UAAW,EACXC,KAAAA,WAAY,CAAK,CAKzBjG,KAAKX,EAAU4D,GAAO,GACpB,GAAIjE,KAAKyF,OACP,MAAM9D,MAAM,mBAEd,MAAMkE,EAAS,CACbxF,QACA4D,QAUF,OARsB,IAAlBjE,KAAKgH,SACPhH,KAAKgH,UAAW,GAEhBhH,KAAKoE,OAAS,IAAItE,EAClBE,KAAKgH,UAAW,GAElBhH,KAAKiH,WAAY,EACjBjH,KAAKoE,OAAOjE,QAAQ0F,GACT7F,KAACoE,OAAOnE,OACrB,CAEA+F,aACE,OAAIhG,KAAKyF,OACApB,GAETrE,KAAKiH,WAAY,EACNjH,KAACoE,OAAOnE,QACrB,CAEA+F,aAAa3F,GAKX,OAJAL,KAAKyF,QAAS,GACTzF,KAAKgH,UAAYhH,KAAKiH,WACzBjH,KAAKoE,OAAOjE,QAAQkE,GAEfnE,QAAQC,QAAQ,CAErBE,MAAOA,EACP4D,MAAM,GAEV,CAEAe,KAAKiB,GAaH,MAZgB,CACdvF,KAAMA,IAAMV,KAAKU,OACjB,CAACuC,OAAOsC,iBACN,OAAOvF,IACT,EACAmG,OAAS9F,IACH4F,GACFA,IAEKjG,KAAKmG,OAAO9F,IAIzB,CAEAiF,CAAAA,KACE,OACFtF,IAAA,EAlEmB+G,EAMZxC,QAAUA,EAAQ,IAAM,IAAIwC,GANhBA,EAOZ7B,YAAcA,EAAY,IAAM,IAAI6B"}