{
  "version": 3,
  "sources": ["../../../src/index.ts", "../../../src/linked-work.ts", "../../../src/scheduler.ts", "../../../src/reactivity/core.ts", "../../../src/reactivity/readonly.ts", "../../../src/reactivity/trackable.ts", "../../../src/reactivity/refs.ts", "../../../src/reactivity/array.ts", "../../../src/reactivity/debounce.ts", "../../../src/utils/is-plain-object.ts", "../../../src/reactivity/nodes/reactive-keys.ts", "../../../src/reactivity/reactive-map.ts", "../../../src/reactivity/reactive-object.ts", "../../../src/reactivity/reactive-set.ts", "../../../src/reactivity/nodes/reactive-weak-keys.ts", "../../../src/reactivity/reactive-weak-map.ts", "../../../src/reactivity/reactive-weak-set.ts", "../../../src/reactivity/reactive.ts", "../../../src/reactivity/resource.ts", "../../../src/reactivity/template.ts"],
  "sourcesContent": ["/**\n * @license\n * MIT License\n *\n * Copyright (c) 2021 Alexis Munsayac\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n *\n * @author Alexis Munsayac <alexis.munsayac@gmail.com>\n * @copyright Alexis Munsayac 2021\n */\nexport {\n  startTransition,\n  isTransitionPending,\n  batch,\n  unbatch,\n  createRoot,\n  // captures\n  capturedBatchCleanup,\n  capturedErrorBoundary,\n  capturedContext,\n  captured,\n  // cleanup\n  onCleanup,\n  batchCleanup,\n  unbatchCleanup,\n  // error boundary\n  onError,\n  errorBoundary,\n  captureError,\n  // computation\n  computation,\n  // effects\n  effect,\n  syncEffect,\n  // subscription\n  untrack,\n  watch,\n  // context\n  contextual,\n  createContext,\n  Context,\n  writeContext as provide,\n  readContext as inject,\n  writeContext,\n  readContext,\n  // selector\n  selector,\n  // atoms\n  atom,\n  Atom,\n  computed,\n  // signal\n  signal,\n  Signal,\n  // deferred\n  deferred,\n} from './reactivity/core';\n// Extensions\nexport {\n  ref,\n  isRef,\n  computedRef,\n  deferredRef,\n} from './reactivity/refs';\nexport {\n  readonly,\n  isReadonly,\n} from './reactivity/readonly';\nexport {\n  isTrackable,\n  track,\n} from './reactivity/trackable';\nexport {\n  map,\n  index,\n} from './reactivity/array';\nexport {\n  debounced,\n  debouncedRef,\n} from './reactivity/debounce';\nexport {\n  default as reactive,\n} from './reactivity/reactive';\nexport {\n  default as resource,\n  Resource,\n  ResourceOptions,\n} from './reactivity/resource';\nexport {\n  template,\n  templateRef,\n} from './reactivity/template';\nexport {\n  Effect,\n  Cleanup,\n  ErrorCapture,\n  Ref,\n} from './reactivity/types';\n", "/* eslint-disable max-classes-per-file */\nlet STATE = 0;\n\nexport abstract class LinkedWork {\n  tag: number;\n\n  id: number;\n\n  alive = true;\n\n  links: Set<LinkedWork> | undefined = undefined;\n\n  constructor(\n    tag: number,\n  ) {\n    this.tag = tag;\n    this.id = STATE++;\n  }\n\n  register(link: LinkedWork) {\n    if (this.links) {\n      this.links.add(link);\n    } else {\n      this.links = new Set([link]);\n    }\n  }\n\n  abstract enqueue(queue: Set<LinkedWork>): void;\n\n  abstract run(): void;\n\n  call() {\n    if (this.alive) {\n      this.run();\n    }\n  }\n}\n\nexport class Publisher extends LinkedWork {\n  link(link: Subscriber): void {\n    link.register(this);\n    this.register(link);\n  }\n\n  enqueue(queue: Set<LinkedWork>) {\n    if (this.links) {\n      for (const item of this.links.keys()) {\n        item.enqueue(queue);\n      }\n    }\n  }\n\n  run() {\n    if (this.links) {\n      for (const item of this.links.keys()) {\n        item.call();\n      }\n    }\n  }\n\n  destroy() {\n    this.alive = false;\n  }\n}\n\nexport abstract class Subscriber extends LinkedWork {\n  enqueue(queue: Set<LinkedWork>) {\n    // Sets are internally ordered, so we can emulate\n    // a simple queue where we move the node to the end\n    // of the order\n    // Currently this is the fastest and cheapest\n    // non-linked list operation we can do\n    queue.delete(this);\n    queue.add(this);\n  }\n\n  abstract run(): void;\n\n  clear() {\n    if (this.links) {\n      for (const item of this.links.keys()) {\n        if (item.links instanceof Set) {\n          item.links.delete(this);\n        } else {\n          item.links = undefined;\n        }\n      }\n      this.links.clear();\n    }\n  }\n\n  destroy() {\n    this.alive = false;\n    this.clear();\n  }\n}\n", "// From: https://github.com/solidjs/solid/blob/main/packages/solid/src/reactive/scheduler.ts\n\n// Basic port modification of Reacts Scheduler: https://github.com/facebook/react/tree/master/packages/scheduler\nexport interface Task {\n  id: number;\n  fn: ((didTimeout: boolean) => void) | null;\n  startTime: number;\n  expirationTime: number;\n}\n\n// experimental new feature proposal stuff\ntype NavigatorScheduling = Navigator & {\n  scheduling: { isInputPending?: () => boolean };\n};\n\nlet taskIdCounter = 1;\nlet isCallbackScheduled = false;\nlet isPerformingWork = false;\nconst taskQueue: Task[] = [];\nlet currentTask: Task | null = null;\nlet shouldYieldToHost: (() => boolean) | null = null;\nconst yieldInterval = 5;\nlet deadline = 0;\nconst maxYieldInterval = 300;\nlet scheduleCallback: (() => void) | null = null;\nlet scheduledCallback: ((hasTimeRemaining: boolean, initialTime: number) => boolean) | null = null;\n\nconst maxSigned31BitInt = 1073741823;\n/* istanbul ignore next */\nfunction setupScheduler() {\n  const channel = new MessageChannel();\n  const port = channel.port2;\n  scheduleCallback = () => port.postMessage(null);\n  channel.port1.onmessage = () => {\n    if (scheduledCallback !== null) {\n      const currentTime = performance.now();\n      deadline = currentTime + yieldInterval;\n      const hasTimeRemaining = true;\n      try {\n        const hasMoreWork = scheduledCallback(hasTimeRemaining, currentTime);\n        if (!hasMoreWork) {\n          scheduledCallback = null;\n        } else port.postMessage(null);\n      } catch (error) {\n        // If a scheduler task throws, exit the current browser task so the\n        // error can be observed.\n        port.postMessage(null);\n        throw error;\n      }\n    }\n  };\n\n  if (\n    typeof navigator !== 'undefined'\n    && (navigator as NavigatorScheduling).scheduling\n    && (navigator as NavigatorScheduling).scheduling.isInputPending\n  ) {\n    const { scheduling } = navigator as NavigatorScheduling;\n    shouldYieldToHost = () => {\n      const currentTime = performance.now();\n      if (currentTime >= deadline) {\n        // There's no time left. We may want to yield control of the main\n        // thread, so the browser can perform high priority tasks. The main ones\n        // are painting and user input. If there's a pending paint or a pending\n        // input, then we should yield. But if there's neither, then we can\n        // yield less often while remaining responsive. We'll eventually yield\n        // regardless, since there could be a pending paint that wasn't\n        // accompanied by a call to `requestPaint`, or other main thread tasks\n        // like network events.\n        if (scheduling.isInputPending!()) {\n          return true;\n        }\n        // There's no pending input. Only yield if we've reached the max\n        // yield interval.\n        return currentTime >= maxYieldInterval;\n      }\n      // There's still time left in the frame.\n      return false;\n    };\n  } else {\n    // `isInputPending` is not available. Since we have no way of knowing if\n    // there's pending input, always yield at the end of the frame.\n    shouldYieldToHost = () => performance.now() >= deadline;\n  }\n}\n\nfunction enqueue(queue: Task[], task: Task) {\n  function findIndex() {\n    let m = 0;\n    let n = queue.length - 1;\n\n    while (m <= n) {\n      const k = (n + m) >> 1;\n      const cmp = task.expirationTime - queue[k].expirationTime;\n      if (cmp > 0) m = k + 1;\n      else if (cmp < 0) n = k - 1;\n      else return k;\n    }\n    return m;\n  }\n  queue.splice(findIndex(), 0, task);\n}\n\nfunction workLoop(hasTimeRemaining: boolean, initialTime: number) {\n  let currentTime = initialTime;\n  currentTask = taskQueue[0] || null;\n  while (currentTask !== null) {\n    if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost!())) {\n      // This currentTask hasn't expired, and we've reached the deadline.\n      break;\n    }\n    const callback = currentTask.fn;\n    if (callback !== null) {\n      currentTask.fn = null;\n      const didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n      callback(didUserCallbackTimeout);\n      currentTime = performance.now();\n      if (currentTask === taskQueue[0]) {\n        taskQueue.shift();\n      }\n    } else taskQueue.shift();\n    currentTask = taskQueue[0] || null;\n  }\n  // Return whether there's additional work\n  return currentTask !== null;\n}\n\nfunction flushWork(hasTimeRemaining: boolean, initialTime: number) {\n  // We'll need a host callback the next time work is scheduled.\n  isCallbackScheduled = false;\n  isPerformingWork = true;\n  try {\n    return workLoop(hasTimeRemaining, initialTime);\n  } finally {\n    currentTask = null;\n    isPerformingWork = false;\n  }\n}\n\nexport function requestCallback(fn: () => void, options?: { timeout?: number }): Task {\n  if (!scheduleCallback) setupScheduler();\n  const startTime = performance.now();\n  let timeout = maxSigned31BitInt;\n\n  if (options && options.timeout) timeout = options.timeout;\n\n  const newTask: Task = {\n    id: taskIdCounter++,\n    fn,\n    startTime,\n    expirationTime: startTime + timeout,\n  };\n\n  enqueue(taskQueue, newTask);\n  if (!isCallbackScheduled && !isPerformingWork) {\n    isCallbackScheduled = true;\n    scheduledCallback = flushWork;\n    if (scheduleCallback) {\n      scheduleCallback();\n    }\n  }\n\n  return newTask;\n}\n\nexport function cancelCallback(task: Task): void {\n  task.fn = null;\n}\n", "/* eslint-disable max-classes-per-file */\n/**\n * @license\n * MIT License\n *\n * Copyright (c) 2021 Alexis Munsayac\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n *\n * @author Alexis Munsayac <alexis.munsayac@gmail.com>\n * @copyright Alexis Munsayac 2021\n */\nimport { LinkedWork, Publisher, Subscriber } from '../linked-work';\n// import {\n//   createLinkedWork,\n//   destroyLinkedWork,\n//   enqueuePublisherWork,\n//   enqueueSubscriberWork,\n//   evaluatePublisherWork,\n//   evaluateSubscriberWork,\n//   LinkedWork,\n//   publisherLinkSubscriber,\n//   setRunner,\n//   unlinkLinkedWorkPublishers,\n// } from '../linked-work.old';\nimport {\n  cancelCallback,\n  requestCallback,\n  Task,\n} from '../scheduler';\nimport {\n  Cleanup,\n  Effect,\n  ErrorCapture,\n  Ref,\n} from './types';\n\nconst { is } = Object;\n\n// Work types\nconst WORK_ATOM = 0b00000001;\nconst WORK_COMPUTATION = 0b00000010;\nconst WORK_EFFECT = 0b00000100;\nconst WORK_SYNC_EFFECT = 0b00001000;\n\n// Execution contexts\n\n// Context for whether the scope is tracking for subscribers\nexport let TRACKING: Subscriber | undefined;\n// Context for whether the updates are being batched\nlet BATCH_UPDATES: Set<LinkedWork> | undefined;\n// Context for whether or not there is an error boundary\nlet ERROR_BOUNDARY: ErrorBoundary | undefined;\n// Context for whether there is a context instance\nlet CONTEXT: ContextTree | undefined;\n// Context for whether there is a cleanup boundary\nexport let CLEANUP: Set<Cleanup> | undefined;\n\nexport function unbatch<T>(callback: () => T): T {\n  const parent = BATCH_UPDATES;\n  BATCH_UPDATES = undefined;\n  try {\n    return callback();\n  } finally {\n    BATCH_UPDATES = parent;\n  }\n}\n\nexport function unbatchCleanup<T>(callback: () => T): T {\n  const parent = CLEANUP;\n  CLEANUP = undefined;\n  try {\n    return callback();\n  } finally {\n    CLEANUP = parent;\n  }\n}\n\nexport function untrack<T>(callback: () => T): T {\n  const parent = TRACKING;\n  TRACKING = undefined;\n  try {\n    return callback();\n  } finally {\n    TRACKING = parent;\n  }\n}\n\nexport function createRoot<T>(callback: () => T): T {\n  const parentBatchUpdates = BATCH_UPDATES;\n  const parentTracking = TRACKING;\n  const parentCleanup = CLEANUP;\n  BATCH_UPDATES = undefined;\n  TRACKING = undefined;\n  CLEANUP = undefined;\n  try {\n    return callback();\n  } finally {\n    CLEANUP = parentCleanup;\n    TRACKING = parentTracking;\n    BATCH_UPDATES = parentBatchUpdates;\n  }\n}\n\nexport function capturedBatchCleanup<T extends any[], R>(\n  callback: (...args: T) => R,\n): (...args: T) => R {\n  const current = CLEANUP;\n  return (...args) => {\n    const parent = CLEANUP;\n    CLEANUP = current;\n    try {\n      return callback(...args);\n    } finally {\n      CLEANUP = parent;\n    }\n  };\n}\n\nexport function capturedErrorBoundary<T extends any[], R>(\n  callback: (...args: T) => R,\n): (...args: T) => R {\n  const current = ERROR_BOUNDARY;\n  return (...args) => {\n    const parent = ERROR_BOUNDARY;\n    ERROR_BOUNDARY = current;\n    try {\n      return callback(...args);\n    } finally {\n      ERROR_BOUNDARY = parent;\n    }\n  };\n}\n\nexport function capturedContext<T extends any[], R>(\n  callback: (...args: T) => R,\n): (...args: T) => R {\n  const current = CONTEXT;\n  return (...args) => {\n    const parent = CONTEXT;\n    CONTEXT = current;\n    try {\n      return callback(...args);\n    } finally {\n      CONTEXT = parent;\n    }\n  };\n}\n\nexport function captured<T extends any[], R>(\n  callback: (...args: T) => R,\n): (...args: T) => R {\n  const currentErrorBoundary = ERROR_BOUNDARY;\n  const currentCleanup = CLEANUP;\n  const currentContext = CONTEXT;\n  return (...args) => {\n    const parentErrorBoundary = ERROR_BOUNDARY;\n    const parentCleanup = CLEANUP;\n    const parentContext = CONTEXT;\n    ERROR_BOUNDARY = currentErrorBoundary;\n    CLEANUP = currentCleanup;\n    CONTEXT = currentContext;\n    try {\n      return callback(...args);\n    } finally {\n      CONTEXT = parentContext;\n      CLEANUP = parentCleanup;\n      ERROR_BOUNDARY = parentErrorBoundary;\n    }\n  };\n}\n\nexport function onCleanup(cleanup: Cleanup): Cleanup {\n  if (CLEANUP) {\n    CLEANUP.add(cleanup);\n  }\n  return cleanup;\n}\n\nfunction exhaustCleanup(\n  cleanups: Set<Cleanup>,\n): void {\n  for (const cleanup of cleanups) {\n    cleanup();\n  }\n}\n\nexport function batchCleanup(callback: () => void): Cleanup {\n  const cleanups = new Set<Cleanup>();\n  const parentCleanup = CLEANUP;\n  CLEANUP = cleanups;\n  try {\n    callback();\n  } finally {\n    CLEANUP = parentCleanup;\n  }\n  let alive = true;\n  // Create return cleanup\n  return onCleanup(() => {\n    if (alive) {\n      alive = false;\n      if (cleanups.size) {\n        // Untrack before running cleanups\n        const parent = TRACKING;\n        TRACKING = undefined;\n        try {\n          exhaustCleanup(cleanups);\n        } finally {\n          TRACKING = parent;\n        }\n      }\n    }\n  });\n}\n\n// ErrorBoundary\ninterface ErrorBoundary {\n  calls: Set<ErrorCapture> | undefined;\n  parent: ErrorBoundary | undefined;\n}\n\nfunction createErrorBoundary(parent?: ErrorBoundary): ErrorBoundary {\n  return { parent, calls: undefined };\n}\n\nfunction runErrorHandlers(calls: IterableIterator<ErrorCapture>, error: unknown): void {\n  for (const item of calls) {\n    item(error);\n  }\n}\n\nfunction handleError(instance: ErrorBoundary | undefined, error: unknown): void {\n  if (instance) {\n    const { calls, parent } = instance;\n    // Check if the current boundary has listeners\n    if (calls && calls.size) {\n      // Untrack before passing error\n      const parentTracking = TRACKING;\n      TRACKING = undefined;\n      try {\n        runErrorHandlers(calls.keys(), error);\n      } catch (value) {\n        // If the error handler fails, forward the new error and the current error\n        handleError(parent, value);\n        handleError(parent, error);\n      } finally {\n        TRACKING = parentTracking;\n      }\n    } else {\n      // Forward the error to the parent\n      handleError(parent, error);\n    }\n  } else {\n    throw error;\n  }\n}\n\nfunction registerErrorCapture(\n  instance: ErrorBoundary,\n  capture: ErrorCapture,\n): Cleanup {\n  if (!instance.calls) {\n    instance.calls = new Set();\n  }\n  instance.calls.add(capture);\n  return () => {\n    if (instance.calls) {\n      instance.calls.delete(capture);\n    }\n  };\n}\n\nfunction NO_OP() {\n  // no-op\n}\n\nexport function onError(errorCapture: ErrorCapture): Cleanup {\n  if (ERROR_BOUNDARY) {\n    return onCleanup(registerErrorCapture(ERROR_BOUNDARY, errorCapture));\n  }\n  return NO_OP;\n}\n\nexport function errorBoundary<T>(callback: () => T): T {\n  const parentInstance = ERROR_BOUNDARY;\n  ERROR_BOUNDARY = createErrorBoundary(parentInstance);\n  try {\n    return callback();\n  } finally {\n    ERROR_BOUNDARY = parentInstance;\n  }\n}\n\nexport function captureError(): ErrorCapture {\n  const boundary = ERROR_BOUNDARY;\n  return (error) => {\n    handleError(boundary, error);\n  };\n}\n\n/**\n * Linked Work\n */\nexport type ReactiveAtom = Publisher;\n\nexport function createReactiveAtom(): ReactiveAtom {\n  return new Publisher(WORK_ATOM);\n}\n\nexport function destroyReactiveAtom(target: ReactiveAtom): void {\n  target.destroy();\n}\n\nexport function captureReactiveAtomForCleanup(target: ReactiveAtom): void {\n  if (CLEANUP) {\n    CLEANUP.add(() => target.destroy());\n  }\n}\n\nexport function trackReactiveAtom(target: ReactiveAtom): void {\n  target.link(TRACKING!);\n}\n\nfunction exhaustUpdates(instance: Set<LinkedWork>): void {\n  for (const work of instance) {\n    if (work.alive) {\n      work.call();\n    }\n  }\n}\n\nfunction runUpdates(instance: Set<LinkedWork>) {\n  BATCH_UPDATES = instance;\n  try {\n    exhaustUpdates(instance);\n  } finally {\n    BATCH_UPDATES = undefined;\n  }\n}\n\nexport function notifyReactiveAtom(target: ReactiveAtom): void {\n  if (target.alive) {\n    if (BATCH_UPDATES) {\n      target.enqueue(BATCH_UPDATES);\n    } else {\n      const instance = new Set<LinkedWork>();\n      target.enqueue(instance);\n      runUpdates(instance);\n    }\n  }\n}\n\nexport function batch<T extends any[]>(\n  callback: (...arg: T) => void,\n  ...args: T\n): void {\n  if (BATCH_UPDATES) {\n    callback(...args);\n  } else {\n    const instance = new Set<LinkedWork>();\n    BATCH_UPDATES = instance;\n    try {\n      callback(...args);\n    } finally {\n      BATCH_UPDATES = undefined;\n    }\n    runUpdates(instance);\n  }\n}\n\nabstract class ProcessWork extends Subscriber {\n  cleanup: Cleanup | undefined = undefined;\n\n  errorBoundary: ErrorBoundary | undefined;\n\n  context: ContextTree | undefined;\n\n  constructor(tag: number) {\n    super(tag);\n    this.errorBoundary = ERROR_BOUNDARY;\n    this.context = CONTEXT;\n  }\n\n  abstract process(): void;\n\n  run() {\n    this.clear();\n    const parentContext = CONTEXT;\n    const parentTracking = TRACKING;\n    const parentErrorBoundary = ERROR_BOUNDARY;\n    ERROR_BOUNDARY = this.errorBoundary;\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    TRACKING = this;\n    CONTEXT = this.context;\n    try {\n      this.process();\n    } catch (value) {\n      handleError(this.errorBoundary, value);\n    } finally {\n      CONTEXT = parentContext;\n      TRACKING = parentTracking;\n      ERROR_BOUNDARY = parentErrorBoundary;\n    }\n  }\n\n  destroy(): void {\n    super.destroy();\n    batch(() => {\n      if (this.cleanup) {\n        this.cleanup();\n      }\n    });\n  }\n}\n\nclass ComputationWork<T> extends ProcessWork {\n  callback: ((prev?: T) => T);\n\n  current: T | undefined;\n\n  constructor(callback: (prev?: T) => T, initial?: T) {\n    super(WORK_COMPUTATION);\n    this.callback = callback;\n    this.current = initial;\n  }\n\n  process(): void {\n    batch(() => {\n      if (this.cleanup) {\n        this.cleanup();\n      }\n      this.cleanup = batchCleanup(() => {\n        this.current = this.callback(this.current);\n      });\n    });\n  }\n}\n\nexport function computation<T>(callback: (prev?: T) => T, initial?: T): Cleanup {\n  const work = new ComputationWork(callback, initial);\n  work.call();\n  return onCleanup(() => {\n    work.destroy();\n  });\n}\n\nclass SyncEffectWork extends ProcessWork {\n  callback: Effect;\n\n  constructor(callback: Effect) {\n    super(WORK_SYNC_EFFECT);\n    this.callback = callback;\n  }\n\n  process(): void {\n    batch(() => {\n      if (this.cleanup) {\n        this.cleanup();\n      }\n      this.cleanup = batchCleanup(this.callback);\n    });\n  }\n}\n\nexport function syncEffect(callback: Effect): Cleanup {\n  const work: SyncEffectWork = new SyncEffectWork(callback);\n  work.call();\n  return onCleanup(() => {\n    work.destroy();\n  });\n}\n\nclass EffectWork extends ProcessWork {\n  callback: Effect;\n\n  timeout: ReturnType<typeof requestCallback> | undefined = undefined;\n\n  constructor(callback: Effect) {\n    super(WORK_EFFECT);\n    this.callback = callback;\n  }\n\n  process(): void {\n    batch(() => {\n      if (this.cleanup) {\n        this.cleanup();\n      }\n      this.cleanup = batchCleanup(this.callback);\n    });\n  }\n\n  run(): void {\n    const newCallback = captured(() => {\n      super.run();\n    });\n\n    if (this.timeout) {\n      cancelCallback(this.timeout);\n    }\n    this.timeout = requestCallback(newCallback);\n  }\n\n  destroy(): void {\n    super.destroy();\n    if (this.timeout) {\n      cancelCallback(this.timeout);\n    }\n  }\n}\n\nexport function effect(callback: Effect): Cleanup {\n  const work: EffectWork = new EffectWork(callback);\n  work.call();\n  return onCleanup(() => {\n    work.destroy();\n  });\n}\n\ninterface WatchRef<T> {\n  current: T;\n}\n\nexport function watch<T, R>(\n  source: () => T,\n  listen: (next: T, prev?: T) => R,\n  isEqual: (next: T, prev: T) => boolean = is,\n): () => R {\n  let ref: WatchRef<T> | undefined;\n  let result: WatchRef<R> | undefined;\n  let cleanup: Cleanup | undefined;\n\n  return () => {\n    const next = source();\n    const prev = ref?.current;\n    if ((ref && !isEqual(next, ref.current)) || !ref) {\n      if (cleanup) {\n        cleanup();\n      }\n      cleanup = batchCleanup(() => {\n        ref = { current: next };\n        result = { current: listen(next, prev) };\n      });\n    }\n    if (!result) {\n      throw new Error('Unexpected missing result');\n    }\n    return result.current;\n  };\n}\n\nexport type Signal<T> = [\n  () => T,\n  (value: T) => void,\n];\n\nexport function signal<T>(\n  value: T,\n  isEqual: (next: T, prev: T) => boolean = is,\n): Signal<T> {\n  const instance = createReactiveAtom();\n  captureReactiveAtomForCleanup(instance);\n  return [\n    () => {\n      if (TRACKING) {\n        trackReactiveAtom(instance);\n      }\n      return value;\n    },\n    (next) => {\n      if (!isEqual(next, value)) {\n        value = next;\n        notifyReactiveAtom(instance);\n      }\n    },\n  ];\n}\n\nexport interface Atom<T> {\n  (): T;\n  (next: T): T;\n}\n\nexport function atom<T>(value: T, isEqual: (next: T, prev: T) => boolean = is): Atom<T> {\n  const instance = createReactiveAtom();\n  captureReactiveAtomForCleanup(instance);\n  return (...args: [] | [T]) => {\n    if (args.length === 1) {\n      const next = args[0];\n      if (!isEqual(next, value)) {\n        value = next;\n        notifyReactiveAtom(instance);\n      }\n    } else if (TRACKING) {\n      trackReactiveAtom(instance);\n    }\n    return value;\n  };\n}\n\nexport function computed<T>(\n  compute: () => T,\n  isEqual: (next: T, prev: T) => boolean = is,\n): () => T {\n  const instance = createReactiveAtom();\n  captureReactiveAtomForCleanup(instance);\n\n  let value: T;\n  let initial = true;\n  let cleanup: Cleanup | undefined;\n\n  const setup = captured(() => {\n    cleanup = syncEffect(() => {\n      const next = compute();\n      if (initial) {\n        initial = false;\n        value = next;\n      } else if (!isEqual(value, next)) {\n        value = next;\n        notifyReactiveAtom(instance);\n      }\n    });\n  });\n\n  return () => {\n    if (TRACKING) {\n      trackReactiveAtom(instance);\n      if (instance.links && instance.links.size === 1) {\n        setup();\n      }\n      onCleanup(() => {\n        if (instance.links && instance.links.size === 0 && cleanup) {\n          cleanup();\n        }\n      });\n    } else {\n      value = compute();\n    }\n    return value;\n  };\n}\n\ninterface ContextTree {\n  parent?: ContextTree;\n  data: Record<string, Ref<any> | undefined>;\n}\n\nexport function contextual<T>(callback: () => T): T {\n  const parent = CONTEXT;\n  CONTEXT = {\n    parent,\n    data: {},\n  };\n  try {\n    return callback();\n  } finally {\n    CONTEXT = parent;\n  }\n}\n\nexport interface Context<T> {\n  id: number;\n  defaultValue: T;\n}\n\nlet CONTEXT_ID = 0;\n\nexport function createContext<T>(defaultValue: T): Context<T> {\n  return {\n    id: CONTEXT_ID++,\n    defaultValue,\n  };\n}\n\nexport function writeContext<T>(context: Context<T>, value: T): void {\n  const parent = CONTEXT;\n  if (parent) {\n    parent.data[context.id] = { value };\n\n    // If provide is called in a linked work,\n    // make sure to delete the written data.\n    if (CLEANUP) {\n      CLEANUP.add(() => {\n        parent.data[context.id] = undefined;\n      });\n    }\n  }\n}\n\nexport function readContext<T>(context: Context<T>): T {\n  let current = CONTEXT;\n  while (current) {\n    const currentData = current.data[context.id];\n    if (currentData) {\n      return currentData.value;\n    }\n    if (CONTEXT) {\n      current = CONTEXT.parent;\n    } else {\n      break;\n    }\n  }\n  return context.defaultValue;\n}\n\nexport function selector<T, U extends T>(\n  source: () => T,\n  isEqual: (a: U, b: T) => boolean = is,\n): (item: U) => boolean {\n  const subs = new Map<U, Set<LinkedWork>>();\n  let v: T;\n  syncEffect(\n    watch(source, (current, prev) => {\n      for (const key of subs.keys()) {\n        if (isEqual(key, current) || (prev !== undefined && isEqual(key, prev))) {\n          const listeners = subs.get(key);\n          if (listeners && listeners.size) {\n            for (const listener of listeners) {\n              if (listener.alive) {\n                listener.enqueue(BATCH_UPDATES!);\n              }\n            }\n          }\n        }\n      }\n      v = current;\n    }),\n  );\n  return (key: U) => {\n    const current = TRACKING;\n    if (current) {\n      let listeners: Set<LinkedWork>;\n      const currentListeners = subs.get(key);\n      if (currentListeners) {\n        listeners = currentListeners;\n      } else {\n        listeners = new Set([current]);\n        subs.set(key, listeners);\n      }\n      if (CLEANUP) {\n        CLEANUP.add(() => {\n          if (listeners.size > 1) {\n            listeners.delete(current);\n          } else {\n            subs.delete(key);\n          }\n        });\n      }\n    }\n    return isEqual(key, v);\n  };\n}\n\nconst TRANSITIONS = new Set<LinkedWork>();\nconst [readTransitionPending, writeTransitionPending] = signal(false);\nlet task: Task | undefined;\n\nfunction flushTransition() {\n  writeTransitionPending(false);\n  task = undefined;\n  if (TRANSITIONS.size) {\n    const transitions = new Set(TRANSITIONS);\n    // Clear the original so that\n    // the next transitions are\n    // deferred\n    TRANSITIONS.clear();\n    runUpdates(transitions);\n  }\n}\n\nfunction scheduleTransition() {\n  writeTransitionPending(true);\n  if (task) {\n    cancelCallback(task);\n  }\n  task = requestCallback(flushTransition);\n}\n\nexport function startTransition(callback: () => void): void {\n  const parent = BATCH_UPDATES;\n  BATCH_UPDATES = TRANSITIONS;\n  try {\n    callback();\n  } finally {\n    BATCH_UPDATES = parent;\n  }\n  scheduleTransition();\n}\n\nexport function isTransitionPending(): boolean {\n  return readTransitionPending();\n}\n\nexport function deferred<T>(\n  callback: () => T,\n  isEqual: (next: T, prev: T) => boolean = is,\n): () => T {\n  const instance = createReactiveAtom();\n  captureReactiveAtomForCleanup(instance);\n\n  let value: T;\n\n  const setup = captured(() => {\n    effect(() => {\n      const next = callback();\n      if (!isEqual(value, next)) {\n        value = next;\n        notifyReactiveAtom(instance);\n      }\n    });\n  });\n\n  let doSetup = true;\n\n  return () => {\n    if (doSetup) {\n      value = untrack(callback);\n      setup();\n      doSetup = false;\n    }\n    if (TRACKING) {\n      trackReactiveAtom(instance);\n    }\n    return value;\n  };\n}\n", "import { ReactiveBaseObject } from './types';\n\nexport const READONLY = Symbol('COMPOSTATE_READONLY');\n\nexport type WithReadonly = {\n  [READONLY]: boolean;\n};\n\nexport function isReadonly<T extends ReactiveBaseObject>(object: T): object is Readonly<T> {\n  return object && typeof object === 'object' && READONLY in object;\n}\n\nconst HANDLER = {\n  set() {\n    return true;\n  },\n};\n\nexport function readonly<T extends ReactiveBaseObject>(object: T): T {\n  if (isReadonly(object)) {\n    return object;\n  }\n  const newReadonly = new Proxy(object, HANDLER);\n  (newReadonly as WithReadonly)[READONLY] = true;\n  return newReadonly;\n}\n", "import {\n  ReactiveAtom,\n  TRACKING,\n  trackReactiveAtom,\n} from './core';\n\nexport const TRACKABLE = Symbol('COMPOSTATE_TRACKABLE');\n\nexport type WithTrackable = {\n  [TRACKABLE]: ReactiveAtom | undefined;\n};\n\nexport function registerTrackable<T>(\n  instance: ReactiveAtom,\n  trackable: T,\n): T {\n  (trackable as unknown as WithTrackable)[TRACKABLE] = instance;\n  return trackable;\n}\n\nexport function isTrackable<T>(\n  trackable: T,\n): boolean {\n  return trackable && typeof trackable === 'object' && TRACKABLE in trackable;\n}\n\nexport function getTrackableAtom<T>(\n  trackable: T,\n): ReactiveAtom | undefined {\n  return (trackable as unknown as WithTrackable)[TRACKABLE];\n}\n\nexport function track<T>(source: T): T {\n  if (TRACKING) {\n    const instance = getTrackableAtom(source);\n    if (instance) {\n      trackReactiveAtom(instance);\n    }\n  }\n  return source;\n}\n", "import {\n  createReactiveAtom,\n  watch,\n  notifyReactiveAtom,\n  TRACKING,\n  trackReactiveAtom,\n  ReactiveAtom,\n  untrack,\n  captureReactiveAtomForCleanup,\n  syncEffect,\n  captured,\n  effect,\n} from './core';\nimport {\n  readonly,\n} from './readonly';\nimport {\n  TRACKABLE,\n  WithTrackable,\n} from './trackable';\nimport {\n  Ref,\n} from './types';\n\nconst { is } = Object;\n\nexport const REF = Symbol('COMPOSTATE_REF');\n\nexport type WithRef = {\n  [REF]: boolean;\n};\n\nexport function isRef<T>(object: any): object is Ref<T> {\n  return object && typeof object === 'object' && REF in object;\n}\n\nexport function computedRef<T>(\n  compute: () => T,\n  isEqual: (next: T, prev: T) => boolean = is,\n): Readonly<Ref<T>> {\n  const instance = createReactiveAtom();\n  captureReactiveAtomForCleanup(instance);\n\n  let value: T;\n  let initial = true;\n  let doSetup = true;\n\n  const setup = captured(() => {\n    syncEffect(\n      watch(compute, (current) => {\n        value = current;\n        if (initial) {\n          initial = false;\n        } else {\n          notifyReactiveAtom(instance);\n        }\n      }, isEqual),\n    );\n  });\n\n  const node: Ref<T> & WithRef & WithTrackable = readonly({\n    [REF]: true,\n    [TRACKABLE]: instance,\n    get value(): T {\n      if (doSetup) {\n        setup();\n        doSetup = false;\n      }\n      if (TRACKING) {\n        trackReactiveAtom(instance);\n      }\n      return value;\n    },\n  });\n\n  return node;\n}\n\nclass RefNode<T> implements WithRef {\n  private val: T;\n\n  private instance: ReactiveAtom;\n\n  private isEqual: (next: T, prev: T) => boolean;\n\n  [REF]: boolean;\n\n  constructor(\n    value: T,\n    instance: ReactiveAtom,\n    isEqual: (next: T, prev: T) => boolean,\n  ) {\n    this.val = value;\n    this.instance = instance;\n    this.isEqual = isEqual;\n    this[REF] = true;\n  }\n\n  get value() {\n    if (TRACKING) {\n      trackReactiveAtom(this.instance);\n    }\n    return this.val;\n  }\n\n  set value(next: T) {\n    if (!this.isEqual(next, this.val)) {\n      this.val = next;\n      notifyReactiveAtom(this.instance);\n    }\n  }\n}\n\nexport function ref<T>(\n  value: T,\n  isEqual: (next: T, prev: T) => boolean = is,\n): Ref<T> {\n  const instance = createReactiveAtom();\n  captureReactiveAtomForCleanup(instance);\n  return new RefNode(value, instance, isEqual);\n}\n\nexport function deferredRef<T>(\n  callback: () => T,\n  isEqual: (next: T, prev: T) => boolean = is,\n): Readonly<Ref<T>> {\n  const instance = createReactiveAtom();\n  captureReactiveAtomForCleanup(instance);\n\n  let value: T;\n\n  const setup = captured(() => {\n    effect(() => {\n      const next = callback();\n      if (!isEqual(value, next)) {\n        value = next;\n        notifyReactiveAtom(instance);\n      }\n    });\n  });\n\n  let doSetup = true;\n\n  const node: Ref<T> & WithRef & WithTrackable = readonly({\n    [REF]: true,\n    [TRACKABLE]: instance,\n    get value(): T {\n      if (doSetup) {\n        value = untrack(callback);\n        setup();\n        doSetup = false;\n      }\n      if (TRACKING) {\n        trackReactiveAtom(instance);\n      }\n      return value;\n    },\n  });\n\n  return node;\n}\n", "import {\n  batchCleanup,\n  createRoot,\n  onCleanup,\n  untrack,\n} from './core';\nimport { ref } from './refs';\nimport { Cleanup, Ref } from './types';\n\nfunction dispose(d: Cleanup[]) {\n  for (let i = 0, len = d.length; i < len; i++) d[i]();\n}\n\n// From https://github.com/solidjs/solid/blob/main/packages/solid/src/reactive/array.ts\n\ninterface Mapper<T, U> {\n  (v: T): U;\n  (v: T, i: Ref<number>): U;\n}\n\nexport function map<T, U>(\n  list: () => T[],\n  mapFn: Mapper<T, U>,\n): () => U[] {\n  let items: T[] = [];\n  let mapped: U[] = [];\n  let disposers: (() => void)[] = [];\n  let len = 0;\n  let indexes: Ref<number>[] = [];\n\n  onCleanup(() => dispose(disposers));\n\n  return () => {\n    const newItems = list();\n    let i: number;\n    let j: number;\n\n    function mapper() {\n      let result: U | undefined;\n      disposers[j] = batchCleanup(() => {\n        if (mapFn.length === 1) {\n          result = mapFn(newItems[j]);\n        } else {\n          const key = ref(j);\n          indexes[j] = key;\n          result = mapFn(newItems[j], key);\n        }\n      });\n      return result as U;\n    }\n    return untrack(() => {\n      const newLen = newItems.length;\n      let newIndices: Map<T, number>;\n      let newIndicesNext: number[];\n      let temp: U[];\n      let tempdisposers: Cleanup[];\n      let tempIndexes: Ref<number>[];\n      let start: number;\n      let end: number;\n      let newEnd: number;\n      let item: T;\n\n      // fast path for empty arrays\n      if (newLen === 0) {\n        if (len !== 0) {\n          dispose(disposers);\n          disposers = [];\n          items = [];\n          mapped = [];\n          len = 0;\n          indexes = [];\n        }\n      } else if (len === 0) {\n        // fast path for new create\n        mapped = new Array<U>(newLen);\n        for (j = 0; j < newLen; j++) {\n          items[j] = newItems[j];\n          mapped[j] = createRoot(mapper);\n        }\n        len = newLen;\n      } else {\n        temp = new Array<U>(newLen);\n        tempdisposers = new Array<Cleanup>(newLen);\n        tempIndexes = new Array<Ref<number>>(newLen);\n\n        // skip common prefix\n        for (\n          start = 0, end = Math.min(len, newLen);\n          start < end && items[start] === newItems[start];\n          start++\n        );\n\n        // common suffix\n        for (\n          end = len - 1, newEnd = newLen - 1;\n          end >= start && newEnd >= start && items[end] === newItems[newEnd];\n          end--, newEnd--\n        ) {\n          temp[newEnd] = mapped[end];\n          tempdisposers[newEnd] = disposers[end];\n          tempIndexes[newEnd] = indexes[end];\n        }\n\n        // 0) prepare a map of all indices in newItems,\n        // scanning backwards so we encounter them in natural order\n        newIndices = new Map<T, number>();\n        newIndicesNext = new Array<number>(newEnd + 1);\n        for (j = newEnd; j >= start; j--) {\n          item = newItems[j];\n          i = newIndices.get(item)!;\n          newIndicesNext[j] = i === undefined ? -1 : i;\n          newIndices.set(item, j);\n        }\n        // 1) step through all old items and see if they can be found\n        // in the new set; if so, save them in a temp array and\n        // mark them moved; if not, exit them\n        for (i = start; i <= end; i++) {\n          item = items[i];\n          j = newIndices.get(item)!;\n          if (j !== undefined && j !== -1) {\n            temp[j] = mapped[i];\n            tempdisposers[j] = disposers[i];\n            tempIndexes[j] = indexes[i];\n            j = newIndicesNext[j];\n            newIndices.set(item, j);\n          } else disposers[i]();\n        }\n        // 2) set all the new values, pulling from the temp array if copied,\n        // otherwise entering the new value\n        for (j = start; j < newLen; j++) {\n          if (j in temp) {\n            mapped[j] = temp[j];\n            disposers[j] = tempdisposers[j];\n            const refIndex = tempIndexes[j];\n            if (refIndex) {\n              indexes[j] = refIndex;\n              indexes[j].value = j;\n            }\n          } else mapped[j] = createRoot(mapper);\n        }\n        // 3) in case the new set is shorter than the old, set the length of the mapped array\n        mapped = mapped.slice(0, (len = newLen));\n        // 4) save a copy of the mapped items for the next update\n        items = newItems.slice(0);\n      }\n      return mapped;\n    });\n  };\n}\n\nexport function index<T, U>(\n  list: () => T[],\n  mapFn: (v: Ref<T>, i: number) => U,\n): () => U[] {\n  let items: T[] = [];\n  let mapped: U[] = [];\n  let disposers: (() => void)[] = [];\n  let refs: Ref<T>[] = [];\n  let len = 0;\n  let i: number;\n\n  onCleanup(() => dispose(disposers));\n  return () => {\n    const newItems = list();\n\n    function mapper() {\n      let result: U | undefined;\n      disposers[i] = batchCleanup(() => {\n        const item = ref(newItems[i]);\n        refs[i] = item;\n        result = mapFn(item, i);\n      });\n      return result as U;\n    }\n\n    return untrack(() => {\n      if (newItems.length === 0) {\n        if (len !== 0) {\n          dispose(disposers);\n          disposers = [];\n          items = [];\n          mapped = [];\n          len = 0;\n          refs = [];\n        }\n        return mapped;\n      }\n\n      for (i = 0; i < newItems.length; i++) {\n        if (i < items.length && items[i] !== newItems[i]) {\n          refs[i].value = newItems[i];\n        } else if (i >= items.length) {\n          mapped[i] = createRoot(mapper);\n        }\n      }\n      for (; i < items.length; i++) {\n        disposers[i]();\n      }\n      len = newItems.length;\n      disposers.length = len;\n      refs.length = len;\n      items = newItems.slice(0);\n      mapped = mapped.slice(0, len);\n      return mapped;\n    });\n  };\n}\n", "import {\n  captured,\n  captureReactiveAtomForCleanup,\n  createReactiveAtom,\n  notifyReactiveAtom,\n  onCleanup,\n  syncEffect,\n  TRACKING,\n  trackReactiveAtom,\n  untrack,\n  watch,\n} from './core';\nimport { readonly } from './readonly';\nimport { REF, WithRef } from './refs';\nimport { WithTrackable, TRACKABLE } from './trackable';\nimport { Ref } from './types';\n\nconst { is } = Object;\n\nexport function debouncedRef<T>(\n  source: () => T,\n  timeoutMS: number,\n  isEqual: (next: T, prev: T) => boolean = is,\n): Ref<T> {\n  const instance = createReactiveAtom();\n  captureReactiveAtomForCleanup(instance);\n\n  let value: T;\n\n  const setup = captured(() => {\n    syncEffect(\n      watch(source, (next) => {\n        const timeout = setTimeout(() => {\n          value = next;\n          notifyReactiveAtom(instance);\n        }, timeoutMS);\n\n        onCleanup(() => {\n          clearTimeout(timeout);\n        });\n      }, isEqual),\n    );\n  });\n\n  let doSetup = true;\n\n  const node: Ref<T> & WithRef & WithTrackable = readonly({\n    [REF]: true,\n    [TRACKABLE]: instance,\n    get value(): T {\n      if (doSetup) {\n        value = untrack(source);\n        setup();\n        doSetup = false;\n      }\n      if (TRACKING) {\n        trackReactiveAtom(instance);\n      }\n      return value;\n    },\n  });\n\n  return node;\n}\n\nexport function debounced<T>(\n  source: () => T,\n  timeoutMS: number,\n  isEqual: (next: T, prev: T) => boolean = is,\n): () => T {\n  const instance = createReactiveAtom();\n  captureReactiveAtomForCleanup(instance);\n\n  let value: T;\n\n  const setup = captured(() => {\n    syncEffect(\n      watch(source, (next) => {\n        const timeout = setTimeout(() => {\n          value = next;\n          notifyReactiveAtom(instance);\n        }, timeoutMS);\n\n        onCleanup(() => {\n          clearTimeout(timeout);\n        });\n      }, isEqual),\n    );\n  });\n\n  let doSetup = true;\n\n  return () => {\n    if (doSetup) {\n      value = untrack(source);\n      setup();\n      doSetup = false;\n    }\n    if (TRACKING) {\n      trackReactiveAtom(instance);\n    }\n    return value;\n  };\n}\n", "/**\n * @license\n * MIT License\n *\n * Copyright (c) 2021 Alexis Munsayac\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n *\n * @author Alexis Munsayac <alexis.munsayac@gmail.com>\n * @copyright Alexis Munsayac 2021\n */\nexport default function isPlainObject(obj: unknown): obj is Record<string | symbol, any> {\n  // Basic check for Type object that's not null\n  if (typeof obj === 'object' && obj !== null) {\n    // If Object.getPrototypeOf supported, use it\n    if (typeof Object.getPrototypeOf === 'function') {\n      const proto = Object.getPrototypeOf(obj);\n      return proto === Object.prototype || proto === null;\n    }\n\n    // Otherwise, use internal class\n    // This should be reliable as if getPrototypeOf not supported, is pre-ES5\n    return Object.prototype.toString.call(obj) === '[object Object]';\n  }\n\n  // Not an object\n  return false;\n}\n", "/**\n * @license\n * MIT License\n *\n * Copyright (c) 2021 Alexis Munsayac\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n *\n * @author Alexis Munsayac <alexis.munsayac@gmail.com>\n * @copyright Alexis Munsayac 2021\n */\nimport {\n  createReactiveAtom,\n  destroyReactiveAtom,\n  notifyReactiveAtom,\n  ReactiveAtom,\n  trackReactiveAtom,\n} from '../core';\n\nexport type ReactiveKeys<K> = Map<K, ReactiveAtom>;\n\nexport function createReactiveKeys<K>(): ReactiveKeys<K> {\n  return new Map();\n}\n\nexport function destroyReactiveKeys<K>(keys: ReactiveKeys<K>): void {\n  for (const value of keys.values()) {\n    destroyReactiveAtom(value);\n  }\n}\n\nfunction getAtom<K>(atoms: ReactiveKeys<K>, key: K): ReactiveAtom {\n  const current = atoms.get(key);\n  if (current) {\n    return current;\n  }\n  const atom = createReactiveAtom();\n  atoms.set(key, atom);\n  return atom;\n}\n\nexport function notifyReactiveKeys<K>(\n  keys: ReactiveKeys<K>,\n  key: K,\n  destroy?: boolean,\n): void {\n  const atom = getAtom(keys, key);\n  notifyReactiveAtom(atom);\n  if (destroy) {\n    destroyReactiveAtom(atom);\n  }\n}\n\nexport function trackReactiveKeys<K>(\n  keys: ReactiveKeys<K>,\n  key: K,\n): void {\n  trackReactiveAtom(getAtom(keys, key));\n}\n\nexport function notifyAllReactiveKeys<K>(\n  keys: ReactiveKeys<K>,\n  destroy?: boolean,\n): void {\n  if (keys.size) {\n    for (const value of keys.values()) {\n      notifyReactiveAtom(value);\n      if (destroy) {\n        destroyReactiveAtom(value);\n      }\n    }\n    if (destroy) {\n      keys.clear();\n    }\n  }\n}\n", "/**\n * @license\n * MIT License\n *\n * Copyright (c) 2021 Alexis Munsayac\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n *\n * @author Alexis Munsayac <alexis.munsayac@gmail.com>\n * @copyright Alexis Munsayac 2021\n */\nimport {\n  createReactiveAtom,\n  notifyReactiveAtom,\n  destroyReactiveAtom,\n  onCleanup,\n  TRACKING,\n} from './core';\nimport {\n  createReactiveKeys,\n  destroyReactiveKeys,\n  notifyAllReactiveKeys,\n  notifyReactiveKeys,\n  ReactiveKeys,\n  trackReactiveKeys,\n} from './nodes/reactive-keys';\nimport { registerTrackable } from './trackable';\n\nexport default class ReactiveMap<K, V> implements Map<K, V> {\n  private source: Map<K, V>;\n\n  private atom = createReactiveAtom();\n\n  private collection?: ReactiveKeys<K>;\n\n  constructor(source: Map<K, V>) {\n    this.source = source;\n\n    onCleanup(() => {\n      if (this.collection) {\n        destroyReactiveKeys(this.collection);\n      }\n      destroyReactiveAtom(this.atom);\n    });\n\n    registerTrackable(this.atom, this);\n  }\n\n  clear(): void {\n    this.source.clear();\n    if (this.collection) {\n      notifyAllReactiveKeys(this.collection, true);\n    }\n    notifyReactiveAtom(this.atom);\n  }\n\n  delete(key: K): boolean {\n    const result = this.source.delete(key);\n    if (result) {\n      if (this.collection) {\n        notifyReactiveKeys(this.collection, key, true);\n      }\n      notifyReactiveAtom(this.atom);\n    }\n    return result;\n  }\n\n  forEach(\n    callbackfn: (value: V, key: K, map: Map<K, V>) => void,\n    thisArg?: ReactiveMap<K, V>,\n  ): void {\n    this.forEach(callbackfn, thisArg);\n  }\n\n  get size(): number {\n    return this.source.size;\n  }\n\n  entries(): IterableIterator<[K, V]> {\n    return this.source.entries();\n  }\n\n  keys(): IterableIterator<K> {\n    return this.source.keys();\n  }\n\n  values(): IterableIterator<V> {\n    return this.source.values();\n  }\n\n  [Symbol.iterator](): IterableIterator<[K, V]> {\n    return this.source[Symbol.iterator]();\n  }\n\n  get [Symbol.toStringTag](): string {\n    return this.source[Symbol.toStringTag];\n  }\n\n  get(key: K): V | undefined {\n    if (TRACKING) {\n      if (!this.collection) {\n        this.collection = createReactiveKeys();\n      }\n      trackReactiveKeys(this.collection, key);\n    }\n    return this.source.get(key);\n  }\n\n  set(key: K, value: V): this {\n    const current = this.source.get(key);\n    if (!Object.is(current, value)) {\n      this.source.set(key, value);\n      if (this.collection) {\n        notifyReactiveKeys(this.collection, key);\n      }\n      notifyReactiveAtom(this.atom);\n    }\n    return this;\n  }\n\n  has(key: K): boolean {\n    if (TRACKING) {\n      if (!this.collection) {\n        this.collection = createReactiveKeys();\n      }\n      trackReactiveKeys(this.collection, key);\n    }\n    return this.source.has(key);\n  }\n}\n", "/**\n * @license\n * MIT License\n *\n * Copyright (c) 2021 Alexis Munsayac\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n *\n * @author Alexis Munsayac <alexis.munsayac@gmail.com>\n * @copyright Alexis Munsayac 2021\n */\nimport {\n  createReactiveAtom,\n  destroyReactiveAtom,\n  notifyReactiveAtom,\n  onCleanup,\n  TRACKING,\n} from './core';\nimport {\n  createReactiveKeys,\n  destroyReactiveKeys,\n  notifyReactiveKeys,\n  ReactiveKeys,\n  trackReactiveKeys,\n} from './nodes/reactive-keys';\nimport { registerTrackable } from './trackable';\nimport { ReactiveObject } from './types';\n\nclass ReactiveObjectHandler<T extends ReactiveObject> {\n  collection?: ReactiveKeys<string | symbol | number>;\n\n  atom = createReactiveAtom();\n\n  destroy() {\n    if (this.collection) {\n      destroyReactiveKeys(this.collection);\n    }\n    destroyReactiveAtom(this.atom);\n  }\n\n  get(target: T, key: string | symbol, receiver: any) {\n    if (TRACKING) {\n      if (!this.collection) {\n        this.collection = createReactiveKeys();\n      }\n      trackReactiveKeys(this.collection, key);\n    }\n    return Reflect.get(target, key, receiver);\n  }\n\n  has(target: T, key: string | symbol) {\n    if (TRACKING) {\n      if (!this.collection) {\n        this.collection = createReactiveKeys();\n      }\n      trackReactiveKeys(this.collection, key);\n    }\n    return Reflect.has(target, key);\n  }\n\n  deleteProperty(target: T, key: string | symbol) {\n    const deleted = Reflect.deleteProperty(target, key);\n    if (deleted) {\n      if (this.collection) {\n        notifyReactiveKeys(this.collection, key, true);\n      }\n      notifyReactiveAtom(this.atom);\n    }\n    return deleted;\n  }\n\n  set(target: T, key: string | symbol, value: any, receiver: any) {\n    const current = Reflect.get(target, key, receiver);\n\n    const result = Reflect.set(target, key, value, receiver);\n\n    if (result && !Object.is(current, value)) {\n      if (this.collection) {\n        notifyReactiveKeys(this.collection, key);\n      }\n      notifyReactiveAtom(this.atom);\n    }\n\n    return result;\n  }\n}\n\nexport default function createReactiveObject<T extends ReactiveObject>(\n  source: T,\n): T {\n  const handler = new ReactiveObjectHandler();\n\n  onCleanup(() => {\n    handler.destroy();\n  });\n\n  const proxy = new Proxy(source, handler);\n\n  registerTrackable(handler.atom, proxy);\n\n  return proxy as T;\n}\n", "/**\n * @license\n * MIT License\n *\n * Copyright (c) 2021 Alexis Munsayac\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n *\n * @author Alexis Munsayac <alexis.munsayac@gmail.com>\n * @copyright Alexis Munsayac 2021\n */\nimport {\n  createReactiveAtom,\n  destroyReactiveAtom,\n  notifyReactiveAtom,\n  onCleanup,\n  TRACKING,\n} from './core';\nimport {\n  createReactiveKeys,\n  destroyReactiveKeys,\n  notifyAllReactiveKeys,\n  notifyReactiveKeys,\n  ReactiveKeys,\n  trackReactiveKeys,\n} from './nodes/reactive-keys';\nimport { registerTrackable } from './trackable';\n\nexport default class ReactiveSet<V> implements Set<V> {\n  private collection?: ReactiveKeys<V>;\n\n  private atom = createReactiveAtom();\n\n  private source: Set<V>;\n\n  constructor(source: Set<V>) {\n    this.source = source;\n\n    onCleanup(() => {\n      if (this.collection) {\n        destroyReactiveKeys(this.collection);\n      }\n      destroyReactiveAtom(this.atom);\n    });\n\n    registerTrackable(this.atom, this);\n  }\n\n  clear(): void {\n    this.source.clear();\n    if (this.collection) {\n      notifyAllReactiveKeys(this.collection, true);\n    }\n    notifyReactiveAtom(this.atom);\n  }\n\n  delete(value: V): boolean {\n    const result = this.source.delete(value);\n    if (result) {\n      if (this.collection) {\n        notifyReactiveKeys(this.collection, value, true);\n      }\n      notifyReactiveAtom(this.atom);\n    }\n    return result;\n  }\n\n  forEach(\n    callbackfn: (value: V, key: V, map: Set<V>) => void,\n    thisArg?: ReactiveSet<V>,\n  ): void {\n    this.forEach(callbackfn, thisArg);\n  }\n\n  get size(): number {\n    return this.source.size;\n  }\n\n  entries(): IterableIterator<[V, V]> {\n    return this.source.entries();\n  }\n\n  keys(): IterableIterator<V> {\n    return this.source.keys();\n  }\n\n  values(): IterableIterator<V> {\n    return this.source.values();\n  }\n\n  [Symbol.iterator](): IterableIterator<V> {\n    return this.source[Symbol.iterator]();\n  }\n\n  get [Symbol.toStringTag](): string {\n    return this.source[Symbol.toStringTag];\n  }\n\n  add(value: V): this {\n    const shouldNotify = !this.source.has(value);\n    this.source.add(value);\n    if (shouldNotify) {\n      if (this.collection) {\n        notifyReactiveKeys(this.collection, value);\n      }\n      notifyReactiveAtom(this.atom);\n    }\n    return this;\n  }\n\n  has(value: V): boolean {\n    if (TRACKING) {\n      if (!this.collection) {\n        this.collection = createReactiveKeys();\n      }\n      trackReactiveKeys(this.collection, value);\n    }\n    return this.source.has(value);\n  }\n}\n", "/**\n * @license\n * MIT License\n *\n * Copyright (c) 2021 Alexis Munsayac\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n *\n * @author Alexis Munsayac <alexis.munsayac@gmail.com>\n * @copyright Alexis Munsayac 2021\n */\nimport {\n  createReactiveAtom,\n  destroyReactiveAtom,\n  notifyReactiveAtom,\n  ReactiveAtom,\n  trackReactiveAtom,\n} from '../core';\n\nexport type ReactiveWeakKeys<K extends object> = WeakMap<K, ReactiveAtom>;\n\nexport function createReactiveWeakKeys<K extends object>(): ReactiveWeakKeys<K> {\n  return new WeakMap<K, ReactiveAtom>();\n}\n\nfunction getAtom<K extends object>(atoms: ReactiveWeakKeys<K>, key: K): ReactiveAtom {\n  const current = atoms.get(key);\n  if (current) {\n    return current;\n  }\n  const atom = createReactiveAtom();\n  atoms.set(key, atom);\n  return atom;\n}\n\nexport function notifyReactiveWeakKeys<K extends object>(\n  atoms: ReactiveWeakKeys<K>,\n  key: K,\n  destroy?: boolean,\n): void {\n  const atom = getAtom(atoms, key);\n  notifyReactiveAtom(atom);\n  if (destroy) {\n    destroyReactiveAtom(atom);\n  }\n}\n\nexport function trackReactiveWeakKeys<K extends object>(\n  atoms: ReactiveWeakKeys<K>,\n  key: K,\n): void {\n  trackReactiveAtom(getAtom(atoms, key));\n}\n", "/**\n * @license\n * MIT License\n *\n * Copyright (c) 2021 Alexis Munsayac\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n *\n * @author Alexis Munsayac <alexis.munsayac@gmail.com>\n * @copyright Alexis Munsayac 2021\n */\nimport {\n  createReactiveAtom,\n  destroyReactiveAtom,\n  notifyReactiveAtom,\n  onCleanup,\n  TRACKING,\n} from './core';\nimport {\n  createReactiveWeakKeys,\n  notifyReactiveWeakKeys,\n  ReactiveWeakKeys,\n  trackReactiveWeakKeys,\n} from './nodes/reactive-weak-keys';\nimport { registerTrackable } from './trackable';\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport default class ReactiveWeakMap<K extends object, V> implements WeakMap<K, V> {\n  private source: WeakMap<K, V>;\n\n  private atom = createReactiveAtom();\n\n  private collection?: ReactiveWeakKeys<K>;\n\n  constructor(source: WeakMap<K, V>) {\n    this.source = source;\n\n    onCleanup(() => {\n      destroyReactiveAtom(this.atom);\n    });\n\n    registerTrackable(this.atom, this);\n  }\n\n  delete(key: K): boolean {\n    const result = this.source.delete(key);\n    if (result) {\n      if (this.collection) {\n        notifyReactiveWeakKeys(this.collection, key, true);\n      }\n      notifyReactiveAtom(this.atom);\n    }\n    return result;\n  }\n\n  get [Symbol.toStringTag](): string {\n    return this.source[Symbol.toStringTag];\n  }\n\n  get(key: K): V | undefined {\n    if (TRACKING) {\n      if (!this.collection) {\n        this.collection = createReactiveWeakKeys();\n      }\n      trackReactiveWeakKeys(this.collection, key);\n    }\n    return this.source.get(key);\n  }\n\n  set(key: K, value: V): this {\n    const current = this.source.get(key);\n    if (!Object.is(current, value)) {\n      this.source.set(key, value);\n      if (this.collection) {\n        notifyReactiveWeakKeys(this.collection, key);\n      }\n      notifyReactiveAtom(this.atom);\n    }\n    return this;\n  }\n\n  has(key: K): boolean {\n    if (TRACKING) {\n      if (!this.collection) {\n        this.collection = createReactiveWeakKeys();\n      }\n      trackReactiveWeakKeys(this.collection, key);\n    }\n    return this.source.has(key);\n  }\n}\n", "/**\n * @license\n * MIT License\n *\n * Copyright (c) 2021 Alexis Munsayac\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n *\n * @author Alexis Munsayac <alexis.munsayac@gmail.com>\n * @copyright Alexis Munsayac 2021\n */\nimport {\n  createReactiveAtom,\n  destroyReactiveAtom,\n  notifyReactiveAtom,\n  onCleanup,\n  TRACKING,\n} from './core';\nimport {\n  createReactiveWeakKeys,\n  notifyReactiveWeakKeys,\n  ReactiveWeakKeys,\n  trackReactiveWeakKeys,\n} from './nodes/reactive-weak-keys';\nimport { registerTrackable } from './trackable';\n\nexport default class ReactiveWeakSet<V extends object> implements WeakSet<V> {\n  private atom = createReactiveAtom();\n\n  private collection?: ReactiveWeakKeys<V>;\n\n  private source: WeakSet<V>;\n\n  constructor(source: WeakSet<V>) {\n    this.source = source;\n\n    onCleanup(() => {\n      destroyReactiveAtom(this.atom);\n    });\n\n    registerTrackable(this.atom, this);\n  }\n\n  delete(value: V): boolean {\n    const result = this.source.delete(value);\n    if (result) {\n      if (this.collection) {\n        notifyReactiveWeakKeys(this.collection, value, true);\n      }\n      notifyReactiveAtom(this.atom);\n    }\n    return result;\n  }\n\n  get [Symbol.toStringTag](): string {\n    return this.source[Symbol.toStringTag];\n  }\n\n  add(value: V): this {\n    const shouldNotify = !this.source.has(value);\n    this.source.add(value);\n    if (shouldNotify) {\n      if (this.collection) {\n        notifyReactiveWeakKeys(this.collection, value);\n      }\n      notifyReactiveAtom(this.atom);\n    }\n    return this;\n  }\n\n  has(value: V): boolean {\n    if (TRACKING) {\n      if (!this.collection) {\n        this.collection = createReactiveWeakKeys();\n      }\n      trackReactiveWeakKeys(this.collection, value);\n    }\n    return this.source.has(value);\n  }\n}\n", "/**\n * @license\n * MIT License\n *\n * Copyright (c) 2021 Alexis Munsayac\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n *\n * @author Alexis Munsayac <alexis.munsayac@gmail.com>\n * @copyright Alexis Munsayac 2021\n */\n/* eslint-disable @typescript-eslint/ban-types */\nimport isPlainObject from '../utils/is-plain-object';\nimport ReactiveMap from './reactive-map';\nimport createReactiveObject from './reactive-object';\nimport ReactiveSet from './reactive-set';\nimport ReactiveWeakMap from './reactive-weak-map';\nimport ReactiveWeakSet from './reactive-weak-set';\n\nconst proxies = new WeakMap();\n\nfunction getReactive(source: unknown): any {\n  if (source instanceof Map) {\n    return new ReactiveMap(source);\n  }\n  if (source instanceof Set) {\n    return new ReactiveSet(source);\n  }\n  if (source instanceof WeakMap) {\n    return new ReactiveWeakMap(source);\n  }\n  if (source instanceof WeakSet) {\n    return new ReactiveWeakSet(source);\n  }\n  if (Array.isArray(source) || isPlainObject(source)) {\n    return createReactiveObject(source);\n  }\n  throw new Error('invalid reactive source');\n}\n\nfunction reactive<T extends any[]>(source: T): T;\nfunction reactive<T extends Record<string | symbol, any>>(source: T): T;\nfunction reactive<V>(source: Set<V>): ReactiveSet<V>;\nfunction reactive<K, V>(source: Map<K, V>): ReactiveMap<K, V>;\nfunction reactive<V extends object>(source: WeakSet<V>): ReactiveWeakSet<V>;\nfunction reactive<K extends object, V>(source: WeakMap<K, V>): ReactiveWeakMap<K, V>;\nfunction reactive(source: any): any {\n  const currentProxy = proxies.get(source);\n  if (currentProxy) {\n    return currentProxy;\n  }\n\n  const newProxy = getReactive(source);\n  proxies.set(source, newProxy);\n  return newProxy;\n}\n\nexport default reactive;\n", "import {\n  onCleanup, batch, effect, syncEffect,\n} from './core';\nimport reactive from './reactive';\n\nexport interface ResourcePending {\n  status: 'pending';\n  value?: undefined;\n}\n\nexport interface ResourceFailure {\n  status: 'failure';\n  value: any;\n}\n\nexport interface ResourceSuccess<T> {\n  status: 'success';\n  value: T;\n}\n\nexport type Resource<T> =\n  | ResourcePending\n  | ResourceFailure\n  | ResourceSuccess<T>;\n\nexport interface ResourceOptions<T> {\n  initialValue?: T;\n  timeoutMS?: number;\n}\n\nexport default function resource<T>(\n  fetcher: () => Promise<T>,\n  options: ResourceOptions<T> = {},\n): Resource<T> {\n  const baseState: Resource<T> = options.initialValue != null\n    ? { status: 'success', value: options.initialValue }\n    : { status: 'pending' };\n\n  const state = reactive<Resource<T>>(baseState);\n\n  effect(() => {\n    let alive = true;\n\n    const promise = fetcher();\n\n    const stop = syncEffect(() => {\n      // If there's a transition timeout,\n      // do not fallback to pending state.\n      if (options.timeoutMS) {\n        const timeout = setTimeout(() => {\n          // Resolution takes too long,\n          // fallback to pending state.\n          state.status = 'pending';\n        }, options.timeoutMS);\n\n        onCleanup(() => {\n          clearTimeout(timeout);\n        });\n      } else {\n        state.status = 'pending';\n      }\n    });\n\n    promise.then(\n      (value) => {\n        if (alive) {\n          stop();\n          batch(() => {\n            state.status = 'success';\n            state.value = value;\n          });\n        }\n      },\n      (value: any) => {\n        if (alive) {\n          stop();\n          batch(() => {\n            state.status = 'failure';\n            state.value = value;\n          });\n        }\n      },\n    );\n\n    onCleanup(() => {\n      alive = false;\n    });\n  });\n\n  return state;\n}\n", "import { computed } from './core';\nimport { computedRef, isRef } from './refs';\nimport { Ref } from './types';\n\nfunction isLazy<T>(value: any): value is () => T {\n  return typeof value === 'function';\n}\nexport function templateRef<T>(\n  strings: TemplateStringsArray,\n  ...args: (T | Ref<T> | (() => T))[]\n): Ref<string> {\n  return computedRef(() => {\n    let result = '';\n    let a = 0;\n    for (let i = 0, len = strings.length; i < len; i++) {\n      result = `${result}${strings[i]}`;\n      if (a < args.length) {\n        const node = args[a++];\n        if (isRef(node)) {\n          result = `${result}${String(node.value)}`;\n        } else if (isLazy(node)) {\n          result = `${result}${String(node())}`;\n        } else {\n          result = `${result}${String(node)}`;\n        }\n      }\n    }\n    return result;\n  });\n}\n\nexport function template<T>(\n  strings: TemplateStringsArray,\n  ...args: (T | Ref<T> | (() => T))[]\n): () => string {\n  return computed(() => {\n    let result = '';\n    let a = 0;\n    for (let i = 0, len = strings.length; i < len; i++) {\n      result = `${result}${strings[i]}`;\n      if (a < args.length) {\n        const node = args[a++];\n        if (isRef(node)) {\n          result = `${result}${String(node.value)}`;\n        } else if (isLazy(node)) {\n          result = `${result}${String(node())}`;\n        } else {\n          result = `${result}${String(node)}`;\n        }\n      }\n    }\n    return result;\n  });\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,IAAI,QAAQ;AAEL,IAAe,aAAf,MAA0B;AAAA,EAS/B,YACE,KACA;AANF,iBAAQ;AAER,iBAAqC;AAKnC,SAAK,MAAM;AACX,SAAK,KAAK;AAAA,EACZ;AAAA,EAEA,SAAS,MAAkB;AACzB,QAAI,KAAK,OAAO;AACd,WAAK,MAAM,IAAI,IAAI;AAAA,IACrB,OAAO;AACL,WAAK,QAAQ,oBAAI,IAAI,CAAC,IAAI,CAAC;AAAA,IAC7B;AAAA,EACF;AAAA,EAMA,OAAO;AACL,QAAI,KAAK,OAAO;AACd,WAAK,IAAI;AAAA,IACX;AAAA,EACF;AACF;AAEO,IAAM,YAAN,cAAwB,WAAW;AAAA,EACxC,KAAK,MAAwB;AAC3B,SAAK,SAAS,IAAI;AAClB,SAAK,SAAS,IAAI;AAAA,EACpB;AAAA,EAEA,QAAQ,OAAwB;AAC9B,QAAI,KAAK,OAAO;AACd,iBAAW,QAAQ,KAAK,MAAM,KAAK,GAAG;AACpC,aAAK,QAAQ,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM;AACJ,QAAI,KAAK,OAAO;AACd,iBAAW,QAAQ,KAAK,MAAM,KAAK,GAAG;AACpC,aAAK,KAAK;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAU;AACR,SAAK,QAAQ;AAAA,EACf;AACF;AAEO,IAAe,aAAf,cAAkC,WAAW;AAAA,EAClD,QAAQ,OAAwB;AAM9B,UAAM,OAAO,IAAI;AACjB,UAAM,IAAI,IAAI;AAAA,EAChB;AAAA,EAIA,QAAQ;AACN,QAAI,KAAK,OAAO;AACd,iBAAW,QAAQ,KAAK,MAAM,KAAK,GAAG;AACpC,YAAI,KAAK,iBAAiB,KAAK;AAC7B,eAAK,MAAM,OAAO,IAAI;AAAA,QACxB,OAAO;AACL,eAAK,QAAQ;AAAA,QACf;AAAA,MACF;AACA,WAAK,MAAM,MAAM;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,UAAU;AACR,SAAK,QAAQ;AACb,SAAK,MAAM;AAAA,EACb;AACF;;;AChFA,IAAI,gBAAgB;AACpB,IAAI,sBAAsB;AAC1B,IAAI,mBAAmB;AACvB,IAAM,YAAoB,CAAC;AAC3B,IAAI,cAA2B;AAC/B,IAAI,oBAA4C;AAChD,IAAM,gBAAgB;AACtB,IAAI,WAAW;AACf,IAAM,mBAAmB;AACzB,IAAI,mBAAwC;AAC5C,IAAI,oBAA0F;AAE9F,IAAM,oBAAoB;AAE1B,SAAS,iBAAiB;AACxB,QAAM,UAAU,IAAI,eAAe;AACnC,QAAM,OAAO,QAAQ;AACrB,qBAAmB,MAAM,KAAK,YAAY,IAAI;AAC9C,UAAQ,MAAM,YAAY,MAAM;AAC9B,QAAI,sBAAsB,MAAM;AAC9B,YAAM,cAAc,YAAY,IAAI;AACpC,iBAAW,cAAc;AACzB,YAAM,mBAAmB;AACzB,UAAI;AACF,cAAM,cAAc,kBAAkB,kBAAkB,WAAW;AACnE,YAAI,CAAC,aAAa;AAChB,8BAAoB;AAAA,QACtB;AAAO,eAAK,YAAY,IAAI;AAAA,MAC9B,SAAS,OAAP;AAGA,aAAK,YAAY,IAAI;AACrB,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,MACE,OAAO,cAAc,eACjB,UAAkC,cAClC,UAAkC,WAAW,gBACjD;AACA,UAAM,EAAE,WAAW,IAAI;AACvB,wBAAoB,MAAM;AACxB,YAAM,cAAc,YAAY,IAAI;AACpC,UAAI,eAAe,UAAU;AAS3B,YAAI,WAAW,eAAgB,GAAG;AAChC,iBAAO;AAAA,QACT;AAGA,eAAO,eAAe;AAAA,MACxB;AAEA,aAAO;AAAA,IACT;AAAA,EACF,OAAO;AAGL,wBAAoB,MAAM,YAAY,IAAI,KAAK;AAAA,EACjD;AACF;AAEA,SAAS,QAAQ,OAAeA,OAAY;AAC1C,WAAS,YAAY;AACnB,QAAI,IAAI;AACR,QAAI,IAAI,MAAM,SAAS;AAEvB,WAAO,KAAK,GAAG;AACb,YAAM,IAAK,IAAI,KAAM;AACrB,YAAM,MAAMA,MAAK,iBAAiB,MAAM,GAAG;AAC3C,UAAI,MAAM;AAAG,YAAI,IAAI;AAAA,eACZ,MAAM;AAAG,YAAI,IAAI;AAAA;AACrB,eAAO;AAAA,IACd;AACA,WAAO;AAAA,EACT;AACA,QAAM,OAAO,UAAU,GAAG,GAAGA,KAAI;AACnC;AAEA,SAAS,SAAS,kBAA2B,aAAqB;AAChE,MAAI,cAAc;AAClB,gBAAc,UAAU,MAAM;AAC9B,SAAO,gBAAgB,MAAM;AAC3B,QAAI,YAAY,iBAAiB,gBAAgB,CAAC,oBAAoB,kBAAmB,IAAI;AAE3F;AAAA,IACF;AACA,UAAM,WAAW,YAAY;AAC7B,QAAI,aAAa,MAAM;AACrB,kBAAY,KAAK;AACjB,YAAM,yBAAyB,YAAY,kBAAkB;AAC7D,eAAS,sBAAsB;AAC/B,oBAAc,YAAY,IAAI;AAC9B,UAAI,gBAAgB,UAAU,IAAI;AAChC,kBAAU,MAAM;AAAA,MAClB;AAAA,IACF;AAAO,gBAAU,MAAM;AACvB,kBAAc,UAAU,MAAM;AAAA,EAChC;AAEA,SAAO,gBAAgB;AACzB;AAEA,SAAS,UAAU,kBAA2B,aAAqB;AAEjE,wBAAsB;AACtB,qBAAmB;AACnB,MAAI;AACF,WAAO,SAAS,kBAAkB,WAAW;AAAA,EAC/C,UAAE;AACA,kBAAc;AACd,uBAAmB;AAAA,EACrB;AACF;AAEO,SAAS,gBAAgB,IAAgB,SAAsC;AACpF,MAAI,CAAC;AAAkB,mBAAe;AACtC,QAAM,YAAY,YAAY,IAAI;AAClC,MAAI,UAAU;AAEd,MAAI,WAAW,QAAQ;AAAS,cAAU,QAAQ;AAElD,QAAM,UAAgB;AAAA,IACpB,IAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA,gBAAgB,YAAY;AAAA,EAC9B;AAEA,UAAQ,WAAW,OAAO;AAC1B,MAAI,CAAC,uBAAuB,CAAC,kBAAkB;AAC7C,0BAAsB;AACtB,wBAAoB;AACpB,QAAI,kBAAkB;AACpB,uBAAiB;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,eAAeA,OAAkB;AAC/C,EAAAA,MAAK,KAAK;AACZ;;;AClHA,IAAM,EAAE,GAAG,IAAI;AAGf,IAAM,YAAY;AAClB,IAAM,mBAAmB;AACzB,IAAM,cAAc;AACpB,IAAM,mBAAmB;AAKlB,IAAI;AAEX,IAAI;AAEJ,IAAI;AAEJ,IAAI;AAEG,IAAI;AAEJ,SAAS,QAAW,UAAsB;AAC/C,QAAM,SAAS;AACf,kBAAgB;AAChB,MAAI;AACF,WAAO,SAAS;AAAA,EAClB,UAAE;AACA,oBAAgB;AAAA,EAClB;AACF;AAEO,SAAS,eAAkB,UAAsB;AACtD,QAAM,SAAS;AACf,YAAU;AACV,MAAI;AACF,WAAO,SAAS;AAAA,EAClB,UAAE;AACA,cAAU;AAAA,EACZ;AACF;AAEO,SAAS,QAAW,UAAsB;AAC/C,QAAM,SAAS;AACf,aAAW;AACX,MAAI;AACF,WAAO,SAAS;AAAA,EAClB,UAAE;AACA,eAAW;AAAA,EACb;AACF;AAEO,SAAS,WAAc,UAAsB;AAClD,QAAM,qBAAqB;AAC3B,QAAM,iBAAiB;AACvB,QAAM,gBAAgB;AACtB,kBAAgB;AAChB,aAAW;AACX,YAAU;AACV,MAAI;AACF,WAAO,SAAS;AAAA,EAClB,UAAE;AACA,cAAU;AACV,eAAW;AACX,oBAAgB;AAAA,EAClB;AACF;AAEO,SAAS,qBACd,UACmB;AACnB,QAAM,UAAU;AAChB,SAAO,IAAI,SAAS;AAClB,UAAM,SAAS;AACf,cAAU;AACV,QAAI;AACF,aAAO,SAAS,GAAG,IAAI;AAAA,IACzB,UAAE;AACA,gBAAU;AAAA,IACZ;AAAA,EACF;AACF;AAEO,SAAS,sBACd,UACmB;AACnB,QAAM,UAAU;AAChB,SAAO,IAAI,SAAS;AAClB,UAAM,SAAS;AACf,qBAAiB;AACjB,QAAI;AACF,aAAO,SAAS,GAAG,IAAI;AAAA,IACzB,UAAE;AACA,uBAAiB;AAAA,IACnB;AAAA,EACF;AACF;AAEO,SAAS,gBACd,UACmB;AACnB,QAAM,UAAU;AAChB,SAAO,IAAI,SAAS;AAClB,UAAM,SAAS;AACf,cAAU;AACV,QAAI;AACF,aAAO,SAAS,GAAG,IAAI;AAAA,IACzB,UAAE;AACA,gBAAU;AAAA,IACZ;AAAA,EACF;AACF;AAEO,SAAS,SACd,UACmB;AACnB,QAAM,uBAAuB;AAC7B,QAAM,iBAAiB;AACvB,QAAM,iBAAiB;AACvB,SAAO,IAAI,SAAS;AAClB,UAAM,sBAAsB;AAC5B,UAAM,gBAAgB;AACtB,UAAM,gBAAgB;AACtB,qBAAiB;AACjB,cAAU;AACV,cAAU;AACV,QAAI;AACF,aAAO,SAAS,GAAG,IAAI;AAAA,IACzB,UAAE;AACA,gBAAU;AACV,gBAAU;AACV,uBAAiB;AAAA,IACnB;AAAA,EACF;AACF;AAEO,SAAS,UAAU,SAA2B;AACnD,MAAI,SAAS;AACX,YAAQ,IAAI,OAAO;AAAA,EACrB;AACA,SAAO;AACT;AAEA,SAAS,eACP,UACM;AACN,aAAW,WAAW,UAAU;AAC9B,YAAQ;AAAA,EACV;AACF;AAEO,SAAS,aAAa,UAA+B;AAC1D,QAAM,WAAW,oBAAI,IAAa;AAClC,QAAM,gBAAgB;AACtB,YAAU;AACV,MAAI;AACF,aAAS;AAAA,EACX,UAAE;AACA,cAAU;AAAA,EACZ;AACA,MAAI,QAAQ;AAEZ,SAAO,UAAU,MAAM;AACrB,QAAI,OAAO;AACT,cAAQ;AACR,UAAI,SAAS,MAAM;AAEjB,cAAM,SAAS;AACf,mBAAW;AACX,YAAI;AACF,yBAAe,QAAQ;AAAA,QACzB,UAAE;AACA,qBAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAQA,SAAS,oBAAoB,QAAuC;AAClE,SAAO,EAAE,QAAQ,OAAO,OAAU;AACpC;AAEA,SAAS,iBAAiB,OAAuC,OAAsB;AACrF,aAAW,QAAQ,OAAO;AACxB,SAAK,KAAK;AAAA,EACZ;AACF;AAEA,SAAS,YAAY,UAAqC,OAAsB;AAC9E,MAAI,UAAU;AACZ,UAAM,EAAE,OAAO,OAAO,IAAI;AAE1B,QAAI,SAAS,MAAM,MAAM;AAEvB,YAAM,iBAAiB;AACvB,iBAAW;AACX,UAAI;AACF,yBAAiB,MAAM,KAAK,GAAG,KAAK;AAAA,MACtC,SAAS,OAAP;AAEA,oBAAY,QAAQ,KAAK;AACzB,oBAAY,QAAQ,KAAK;AAAA,MAC3B,UAAE;AACA,mBAAW;AAAA,MACb;AAAA,IACF,OAAO;AAEL,kBAAY,QAAQ,KAAK;AAAA,IAC3B;AAAA,EACF,OAAO;AACL,UAAM;AAAA,EACR;AACF;AAEA,SAAS,qBACP,UACA,SACS;AACT,MAAI,CAAC,SAAS,OAAO;AACnB,aAAS,QAAQ,oBAAI,IAAI;AAAA,EAC3B;AACA,WAAS,MAAM,IAAI,OAAO;AAC1B,SAAO,MAAM;AACX,QAAI,SAAS,OAAO;AAClB,eAAS,MAAM,OAAO,OAAO;AAAA,IAC/B;AAAA,EACF;AACF;AAEA,SAAS,QAAQ;AAEjB;AAEO,SAAS,QAAQ,cAAqC;AAC3D,MAAI,gBAAgB;AAClB,WAAO,UAAU,qBAAqB,gBAAgB,YAAY,CAAC;AAAA,EACrE;AACA,SAAO;AACT;AAEO,SAAS,cAAiB,UAAsB;AACrD,QAAM,iBAAiB;AACvB,mBAAiB,oBAAoB,cAAc;AACnD,MAAI;AACF,WAAO,SAAS;AAAA,EAClB,UAAE;AACA,qBAAiB;AAAA,EACnB;AACF;AAEO,SAAS,eAA6B;AAC3C,QAAM,WAAW;AACjB,SAAO,CAAC,UAAU;AAChB,gBAAY,UAAU,KAAK;AAAA,EAC7B;AACF;AAOO,SAAS,qBAAmC;AACjD,SAAO,IAAI,UAAU,SAAS;AAChC;AAEO,SAAS,oBAAoB,QAA4B;AAC9D,SAAO,QAAQ;AACjB;AAEO,SAAS,8BAA8B,QAA4B;AACxE,MAAI,SAAS;AACX,YAAQ,IAAI,MAAM,OAAO,QAAQ,CAAC;AAAA,EACpC;AACF;AAEO,SAAS,kBAAkB,QAA4B;AAC5D,SAAO,KAAK,QAAS;AACvB;AAEA,SAAS,eAAe,UAAiC;AACvD,aAAW,QAAQ,UAAU;AAC3B,QAAI,KAAK,OAAO;AACd,WAAK,KAAK;AAAA,IACZ;AAAA,EACF;AACF;AAEA,SAAS,WAAW,UAA2B;AAC7C,kBAAgB;AAChB,MAAI;AACF,mBAAe,QAAQ;AAAA,EACzB,UAAE;AACA,oBAAgB;AAAA,EAClB;AACF;AAEO,SAAS,mBAAmB,QAA4B;AAC7D,MAAI,OAAO,OAAO;AAChB,QAAI,eAAe;AACjB,aAAO,QAAQ,aAAa;AAAA,IAC9B,OAAO;AACL,YAAM,WAAW,oBAAI,IAAgB;AACrC,aAAO,QAAQ,QAAQ;AACvB,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF;AACF;AAEO,SAAS,MACd,aACG,MACG;AACN,MAAI,eAAe;AACjB,aAAS,GAAG,IAAI;AAAA,EAClB,OAAO;AACL,UAAM,WAAW,oBAAI,IAAgB;AACrC,oBAAgB;AAChB,QAAI;AACF,eAAS,GAAG,IAAI;AAAA,IAClB,UAAE;AACA,sBAAgB;AAAA,IAClB;AACA,eAAW,QAAQ;AAAA,EACrB;AACF;AAEA,IAAe,cAAf,cAAmC,WAAW;AAAA,EAO5C,YAAY,KAAa;AACvB,UAAM,GAAG;AAPX,mBAA+B;AAQ7B,SAAK,gBAAgB;AACrB,SAAK,UAAU;AAAA,EACjB;AAAA,EAIA,MAAM;AACJ,SAAK,MAAM;AACX,UAAM,gBAAgB;AACtB,UAAM,iBAAiB;AACvB,UAAM,sBAAsB;AAC5B,qBAAiB,KAAK;AAEtB,eAAW;AACX,cAAU,KAAK;AACf,QAAI;AACF,WAAK,QAAQ;AAAA,IACf,SAAS,OAAP;AACA,kBAAY,KAAK,eAAe,KAAK;AAAA,IACvC,UAAE;AACA,gBAAU;AACV,iBAAW;AACX,uBAAiB;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,UAAM,QAAQ;AACd,UAAM,MAAM;AACV,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ;AAAA,MACf;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAM,kBAAN,cAAiC,YAAY;AAAA,EAK3C,YAAY,UAA2B,SAAa;AAClD,UAAM,gBAAgB;AACtB,SAAK,WAAW;AAChB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,UAAgB;AACd,UAAM,MAAM;AACV,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ;AAAA,MACf;AACA,WAAK,UAAU,aAAa,MAAM;AAChC,aAAK,UAAU,KAAK,SAAS,KAAK,OAAO;AAAA,MAC3C,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAEO,SAAS,YAAe,UAA2B,SAAsB;AAC9E,QAAM,OAAO,IAAI,gBAAgB,UAAU,OAAO;AAClD,OAAK,KAAK;AACV,SAAO,UAAU,MAAM;AACrB,SAAK,QAAQ;AAAA,EACf,CAAC;AACH;AAEA,IAAM,iBAAN,cAA6B,YAAY;AAAA,EAGvC,YAAY,UAAkB;AAC5B,UAAM,gBAAgB;AACtB,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,UAAgB;AACd,UAAM,MAAM;AACV,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ;AAAA,MACf;AACA,WAAK,UAAU,aAAa,KAAK,QAAQ;AAAA,IAC3C,CAAC;AAAA,EACH;AACF;AAEO,SAAS,WAAW,UAA2B;AACpD,QAAM,OAAuB,IAAI,eAAe,QAAQ;AACxD,OAAK,KAAK;AACV,SAAO,UAAU,MAAM;AACrB,SAAK,QAAQ;AAAA,EACf,CAAC;AACH;AAEA,IAAM,aAAN,cAAyB,YAAY;AAAA,EAKnC,YAAY,UAAkB;AAC5B,UAAM,WAAW;AAHnB,mBAA0D;AAIxD,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,UAAgB;AACd,UAAM,MAAM;AACV,UAAI,KAAK,SAAS;AAChB,aAAK,QAAQ;AAAA,MACf;AACA,WAAK,UAAU,aAAa,KAAK,QAAQ;AAAA,IAC3C,CAAC;AAAA,EACH;AAAA,EAEA,MAAY;AACV,UAAM,cAAc,SAAS,MAAM;AACjC,YAAM,IAAI;AAAA,IACZ,CAAC;AAED,QAAI,KAAK,SAAS;AAChB,qBAAe,KAAK,OAAO;AAAA,IAC7B;AACA,SAAK,UAAU,gBAAgB,WAAW;AAAA,EAC5C;AAAA,EAEA,UAAgB;AACd,UAAM,QAAQ;AACd,QAAI,KAAK,SAAS;AAChB,qBAAe,KAAK,OAAO;AAAA,IAC7B;AAAA,EACF;AACF;AAEO,SAAS,OAAO,UAA2B;AAChD,QAAM,OAAmB,IAAI,WAAW,QAAQ;AAChD,OAAK,KAAK;AACV,SAAO,UAAU,MAAM;AACrB,SAAK,QAAQ;AAAA,EACf,CAAC;AACH;AAMO,SAAS,MACd,QACA,QACA,UAAyC,IAChC;AACT,MAAIC;AACJ,MAAI;AACJ,MAAI;AAEJ,SAAO,MAAM;AACX,UAAM,OAAO,OAAO;AACpB,UAAM,OAAOA,QAAA,gBAAAA,KAAK;AAClB,QAAKA,QAAO,CAAC,QAAQ,MAAMA,KAAI,OAAO,KAAM,CAACA,MAAK;AAChD,UAAI,SAAS;AACX,gBAAQ;AAAA,MACV;AACA,gBAAU,aAAa,MAAM;AAC3B,QAAAA,OAAM,EAAE,SAAS,KAAK;AACtB,iBAAS,EAAE,SAAS,OAAO,MAAM,IAAI,EAAE;AAAA,MACzC,CAAC;AAAA,IACH;AACA,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC7C;AACA,WAAO,OAAO;AAAA,EAChB;AACF;AAOO,SAAS,OACd,OACA,UAAyC,IAC9B;AACX,QAAM,WAAW,mBAAmB;AACpC,gCAA8B,QAAQ;AACtC,SAAO;AAAA,IACL,MAAM;AACJ,UAAI,UAAU;AACZ,0BAAkB,QAAQ;AAAA,MAC5B;AACA,aAAO;AAAA,IACT;AAAA,IACA,CAAC,SAAS;AACR,UAAI,CAAC,QAAQ,MAAM,KAAK,GAAG;AACzB,gBAAQ;AACR,2BAAmB,QAAQ;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AACF;AAOO,SAAS,KAAQ,OAAU,UAAyC,IAAa;AACtF,QAAM,WAAW,mBAAmB;AACpC,gCAA8B,QAAQ;AACtC,SAAO,IAAI,SAAmB;AAC5B,QAAI,KAAK,WAAW,GAAG;AACrB,YAAM,OAAO,KAAK;AAClB,UAAI,CAAC,QAAQ,MAAM,KAAK,GAAG;AACzB,gBAAQ;AACR,2BAAmB,QAAQ;AAAA,MAC7B;AAAA,IACF,WAAW,UAAU;AACnB,wBAAkB,QAAQ;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,SACd,SACA,UAAyC,IAChC;AACT,QAAM,WAAW,mBAAmB;AACpC,gCAA8B,QAAQ;AAEtC,MAAI;AACJ,MAAI,UAAU;AACd,MAAI;AAEJ,QAAM,QAAQ,SAAS,MAAM;AAC3B,cAAU,WAAW,MAAM;AACzB,YAAM,OAAO,QAAQ;AACrB,UAAI,SAAS;AACX,kBAAU;AACV,gBAAQ;AAAA,MACV,WAAW,CAAC,QAAQ,OAAO,IAAI,GAAG;AAChC,gBAAQ;AACR,2BAAmB,QAAQ;AAAA,MAC7B;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,SAAO,MAAM;AACX,QAAI,UAAU;AACZ,wBAAkB,QAAQ;AAC1B,UAAI,SAAS,SAAS,SAAS,MAAM,SAAS,GAAG;AAC/C,cAAM;AAAA,MACR;AACA,gBAAU,MAAM;AACd,YAAI,SAAS,SAAS,SAAS,MAAM,SAAS,KAAK,SAAS;AAC1D,kBAAQ;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH,OAAO;AACL,cAAQ,QAAQ;AAAA,IAClB;AACA,WAAO;AAAA,EACT;AACF;AAOO,SAAS,WAAc,UAAsB;AAClD,QAAM,SAAS;AACf,YAAU;AAAA,IACR;AAAA,IACA,MAAM,CAAC;AAAA,EACT;AACA,MAAI;AACF,WAAO,SAAS;AAAA,EAClB,UAAE;AACA,cAAU;AAAA,EACZ;AACF;AAOA,IAAI,aAAa;AAEV,SAAS,cAAiB,cAA6B;AAC5D,SAAO;AAAA,IACL,IAAI;AAAA,IACJ;AAAA,EACF;AACF;AAEO,SAAS,aAAgB,SAAqB,OAAgB;AACnE,QAAM,SAAS;AACf,MAAI,QAAQ;AACV,WAAO,KAAK,QAAQ,MAAM,EAAE,MAAM;AAIlC,QAAI,SAAS;AACX,cAAQ,IAAI,MAAM;AAChB,eAAO,KAAK,QAAQ,MAAM;AAAA,MAC5B,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEO,SAAS,YAAe,SAAwB;AACrD,MAAI,UAAU;AACd,SAAO,SAAS;AACd,UAAM,cAAc,QAAQ,KAAK,QAAQ;AACzC,QAAI,aAAa;AACf,aAAO,YAAY;AAAA,IACrB;AACA,QAAI,SAAS;AACX,gBAAU,QAAQ;AAAA,IACpB,OAAO;AACL;AAAA,IACF;AAAA,EACF;AACA,SAAO,QAAQ;AACjB;AAEO,SAAS,SACd,QACA,UAAmC,IACb;AACtB,QAAM,OAAO,oBAAI,IAAwB;AACzC,MAAI;AACJ;AAAA,IACE,MAAM,QAAQ,CAAC,SAAS,SAAS;AAC/B,iBAAW,OAAO,KAAK,KAAK,GAAG;AAC7B,YAAI,QAAQ,KAAK,OAAO,KAAM,SAAS,UAAa,QAAQ,KAAK,IAAI,GAAI;AACvE,gBAAM,YAAY,KAAK,IAAI,GAAG;AAC9B,cAAI,aAAa,UAAU,MAAM;AAC/B,uBAAW,YAAY,WAAW;AAChC,kBAAI,SAAS,OAAO;AAClB,yBAAS,QAAQ,aAAc;AAAA,cACjC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,UAAI;AAAA,IACN,CAAC;AAAA,EACH;AACA,SAAO,CAAC,QAAW;AACjB,UAAM,UAAU;AAChB,QAAI,SAAS;AACX,UAAI;AACJ,YAAM,mBAAmB,KAAK,IAAI,GAAG;AACrC,UAAI,kBAAkB;AACpB,oBAAY;AAAA,MACd,OAAO;AACL,oBAAY,oBAAI,IAAI,CAAC,OAAO,CAAC;AAC7B,aAAK,IAAI,KAAK,SAAS;AAAA,MACzB;AACA,UAAI,SAAS;AACX,gBAAQ,IAAI,MAAM;AAChB,cAAI,UAAU,OAAO,GAAG;AACtB,sBAAU,OAAO,OAAO;AAAA,UAC1B,OAAO;AACL,iBAAK,OAAO,GAAG;AAAA,UACjB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO,QAAQ,KAAK,CAAC;AAAA,EACvB;AACF;AAEA,IAAM,cAAc,oBAAI,IAAgB;AACxC,IAAM,CAAC,uBAAuB,sBAAsB,IAAI,OAAO,KAAK;AACpE,IAAI;AAEJ,SAAS,kBAAkB;AACzB,yBAAuB,KAAK;AAC5B,SAAO;AACP,MAAI,YAAY,MAAM;AACpB,UAAM,cAAc,IAAI,IAAI,WAAW;AAIvC,gBAAY,MAAM;AAClB,eAAW,WAAW;AAAA,EACxB;AACF;AAEA,SAAS,qBAAqB;AAC5B,yBAAuB,IAAI;AAC3B,MAAI,MAAM;AACR,mBAAe,IAAI;AAAA,EACrB;AACA,SAAO,gBAAgB,eAAe;AACxC;AAEO,SAAS,gBAAgB,UAA4B;AAC1D,QAAM,SAAS;AACf,kBAAgB;AAChB,MAAI;AACF,aAAS;AAAA,EACX,UAAE;AACA,oBAAgB;AAAA,EAClB;AACA,qBAAmB;AACrB;AAEO,SAAS,sBAA+B;AAC7C,SAAO,sBAAsB;AAC/B;AAEO,SAAS,SACd,UACA,UAAyC,IAChC;AACT,QAAM,WAAW,mBAAmB;AACpC,gCAA8B,QAAQ;AAEtC,MAAI;AAEJ,QAAM,QAAQ,SAAS,MAAM;AAC3B,WAAO,MAAM;AACX,YAAM,OAAO,SAAS;AACtB,UAAI,CAAC,QAAQ,OAAO,IAAI,GAAG;AACzB,gBAAQ;AACR,2BAAmB,QAAQ;AAAA,MAC7B;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,MAAI,UAAU;AAEd,SAAO,MAAM;AACX,QAAI,SAAS;AACX,cAAQ,QAAQ,QAAQ;AACxB,YAAM;AACN,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU;AACZ,wBAAkB,QAAQ;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AACF;;;ACt0BO,IAAM,WAAW,OAAO,qBAAqB;AAM7C,SAAS,WAAyC,QAAkC;AACzF,SAAO,UAAU,OAAO,WAAW,YAAY,YAAY;AAC7D;AAEA,IAAM,UAAU;AAAA,EACd,MAAM;AACJ,WAAO;AAAA,EACT;AACF;AAEO,SAAS,SAAuC,QAAc;AACnE,MAAI,WAAW,MAAM,GAAG;AACtB,WAAO;AAAA,EACT;AACA,QAAM,cAAc,IAAI,MAAM,QAAQ,OAAO;AAC7C,EAAC,YAA6B,YAAY;AAC1C,SAAO;AACT;;;ACnBO,IAAM,YAAY,OAAO,sBAAsB;AAM/C,SAAS,kBACd,UACA,WACG;AACH,EAAC,UAAuC,aAAa;AACrD,SAAO;AACT;AAEO,SAAS,YACd,WACS;AACT,SAAO,aAAa,OAAO,cAAc,YAAY,aAAa;AACpE;AAEO,SAAS,iBACd,WAC0B;AAC1B,SAAQ,UAAuC;AACjD;AAEO,SAAS,MAAS,QAAc;AACrC,MAAI,UAAU;AACZ,UAAM,WAAW,iBAAiB,MAAM;AACxC,QAAI,UAAU;AACZ,wBAAkB,QAAQ;AAAA,IAC5B;AAAA,EACF;AACA,SAAO;AACT;;;AChBA,IAAM,EAAE,IAAAC,IAAG,IAAI;AAER,IAAM,MAAM,OAAO,gBAAgB;AAMnC,SAAS,MAAS,QAA+B;AACtD,SAAO,UAAU,OAAO,WAAW,YAAY,OAAO;AACxD;AAEO,SAAS,YACd,SACA,UAAyCA,KACvB;AAClB,QAAM,WAAW,mBAAmB;AACpC,gCAA8B,QAAQ;AAEtC,MAAI;AACJ,MAAI,UAAU;AACd,MAAI,UAAU;AAEd,QAAM,QAAQ,SAAS,MAAM;AAC3B;AAAA,MACE,MAAM,SAAS,CAAC,YAAY;AAC1B,gBAAQ;AACR,YAAI,SAAS;AACX,oBAAU;AAAA,QACZ,OAAO;AACL,6BAAmB,QAAQ;AAAA,QAC7B;AAAA,MACF,GAAG,OAAO;AAAA,IACZ;AAAA,EACF,CAAC;AAED,QAAM,OAAyC,SAAS;AAAA,IACtD,CAAC,MAAM;AAAA,IACP,CAAC,YAAY;AAAA,IACb,IAAI,QAAW;AACb,UAAI,SAAS;AACX,cAAM;AACN,kBAAU;AAAA,MACZ;AACA,UAAI,UAAU;AACZ,0BAAkB,QAAQ;AAAA,MAC5B;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEA,IAAM,UAAN,MAAoC;AAAA,EASlC,YACE,OACA,UACA,SACA;AACA,SAAK,MAAM;AACX,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,IAAI,QAAQ;AACV,QAAI,UAAU;AACZ,wBAAkB,KAAK,QAAQ;AAAA,IACjC;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,MAAM,MAAS;AACjB,QAAI,CAAC,KAAK,QAAQ,MAAM,KAAK,GAAG,GAAG;AACjC,WAAK,MAAM;AACX,yBAAmB,KAAK,QAAQ;AAAA,IAClC;AAAA,EACF;AACF;AA1BG;AA4BI,SAAS,IACd,OACA,UAAyCA,KACjC;AACR,QAAM,WAAW,mBAAmB;AACpC,gCAA8B,QAAQ;AACtC,SAAO,IAAI,QAAQ,OAAO,UAAU,OAAO;AAC7C;AAEO,SAAS,YACd,UACA,UAAyCA,KACvB;AAClB,QAAM,WAAW,mBAAmB;AACpC,gCAA8B,QAAQ;AAEtC,MAAI;AAEJ,QAAM,QAAQ,SAAS,MAAM;AAC3B,WAAO,MAAM;AACX,YAAM,OAAO,SAAS;AACtB,UAAI,CAAC,QAAQ,OAAO,IAAI,GAAG;AACzB,gBAAQ;AACR,2BAAmB,QAAQ;AAAA,MAC7B;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,MAAI,UAAU;AAEd,QAAM,OAAyC,SAAS;AAAA,IACtD,CAAC,MAAM;AAAA,IACP,CAAC,YAAY;AAAA,IACb,IAAI,QAAW;AACb,UAAI,SAAS;AACX,gBAAQ,QAAQ,QAAQ;AACxB,cAAM;AACN,kBAAU;AAAA,MACZ;AACA,UAAI,UAAU;AACZ,0BAAkB,QAAQ;AAAA,MAC5B;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SAAO;AACT;;;ACvJA,SAAS,QAAQ,GAAc;AAC7B,WAAS,IAAI,GAAG,MAAM,EAAE,QAAQ,IAAI,KAAK;AAAK,MAAE,GAAG;AACrD;AASO,SAAS,IACd,MACA,OACW;AACX,MAAI,QAAa,CAAC;AAClB,MAAI,SAAc,CAAC;AACnB,MAAI,YAA4B,CAAC;AACjC,MAAI,MAAM;AACV,MAAI,UAAyB,CAAC;AAE9B,YAAU,MAAM,QAAQ,SAAS,CAAC;AAElC,SAAO,MAAM;AACX,UAAM,WAAW,KAAK;AACtB,QAAI;AACJ,QAAI;AAEJ,aAAS,SAAS;AAChB,UAAI;AACJ,gBAAU,KAAK,aAAa,MAAM;AAChC,YAAI,MAAM,WAAW,GAAG;AACtB,mBAAS,MAAM,SAAS,EAAE;AAAA,QAC5B,OAAO;AACL,gBAAM,MAAM,IAAI,CAAC;AACjB,kBAAQ,KAAK;AACb,mBAAS,MAAM,SAAS,IAAI,GAAG;AAAA,QACjC;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT;AACA,WAAO,QAAQ,MAAM;AACnB,YAAM,SAAS,SAAS;AACxB,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AAGJ,UAAI,WAAW,GAAG;AAChB,YAAI,QAAQ,GAAG;AACb,kBAAQ,SAAS;AACjB,sBAAY,CAAC;AACb,kBAAQ,CAAC;AACT,mBAAS,CAAC;AACV,gBAAM;AACN,oBAAU,CAAC;AAAA,QACb;AAAA,MACF,WAAW,QAAQ,GAAG;AAEpB,iBAAS,IAAI,MAAS,MAAM;AAC5B,aAAK,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC3B,gBAAM,KAAK,SAAS;AACpB,iBAAO,KAAK,WAAW,MAAM;AAAA,QAC/B;AACA,cAAM;AAAA,MACR,OAAO;AACL,eAAO,IAAI,MAAS,MAAM;AAC1B,wBAAgB,IAAI,MAAe,MAAM;AACzC,sBAAc,IAAI,MAAmB,MAAM;AAG3C,aACE,QAAQ,GAAG,MAAM,KAAK,IAAI,KAAK,MAAM,GACrC,QAAQ,OAAO,MAAM,WAAW,SAAS,QACzC;AACD;AAGD,aACE,MAAM,MAAM,GAAG,SAAS,SAAS,GACjC,OAAO,SAAS,UAAU,SAAS,MAAM,SAAS,SAAS,SAC3D,OAAO,UACP;AACA,eAAK,UAAU,OAAO;AACtB,wBAAc,UAAU,UAAU;AAClC,sBAAY,UAAU,QAAQ;AAAA,QAChC;AAIA,qBAAa,oBAAI,IAAe;AAChC,yBAAiB,IAAI,MAAc,SAAS,CAAC;AAC7C,aAAK,IAAI,QAAQ,KAAK,OAAO,KAAK;AAChC,iBAAO,SAAS;AAChB,cAAI,WAAW,IAAI,IAAI;AACvB,yBAAe,KAAK,MAAM,SAAY,KAAK;AAC3C,qBAAW,IAAI,MAAM,CAAC;AAAA,QACxB;AAIA,aAAK,IAAI,OAAO,KAAK,KAAK,KAAK;AAC7B,iBAAO,MAAM;AACb,cAAI,WAAW,IAAI,IAAI;AACvB,cAAI,MAAM,UAAa,MAAM,IAAI;AAC/B,iBAAK,KAAK,OAAO;AACjB,0BAAc,KAAK,UAAU;AAC7B,wBAAY,KAAK,QAAQ;AACzB,gBAAI,eAAe;AACnB,uBAAW,IAAI,MAAM,CAAC;AAAA,UACxB;AAAO,sBAAU,GAAG;AAAA,QACtB;AAGA,aAAK,IAAI,OAAO,IAAI,QAAQ,KAAK;AAC/B,cAAI,KAAK,MAAM;AACb,mBAAO,KAAK,KAAK;AACjB,sBAAU,KAAK,cAAc;AAC7B,kBAAM,WAAW,YAAY;AAC7B,gBAAI,UAAU;AACZ,sBAAQ,KAAK;AACb,sBAAQ,GAAG,QAAQ;AAAA,YACrB;AAAA,UACF;AAAO,mBAAO,KAAK,WAAW,MAAM;AAAA,QACtC;AAEA,iBAAS,OAAO,MAAM,GAAI,MAAM,MAAO;AAEvC,gBAAQ,SAAS,MAAM,CAAC;AAAA,MAC1B;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;AAEO,SAAS,MACd,MACA,OACW;AACX,MAAI,QAAa,CAAC;AAClB,MAAI,SAAc,CAAC;AACnB,MAAI,YAA4B,CAAC;AACjC,MAAI,OAAiB,CAAC;AACtB,MAAI,MAAM;AACV,MAAI;AAEJ,YAAU,MAAM,QAAQ,SAAS,CAAC;AAClC,SAAO,MAAM;AACX,UAAM,WAAW,KAAK;AAEtB,aAAS,SAAS;AAChB,UAAI;AACJ,gBAAU,KAAK,aAAa,MAAM;AAChC,cAAM,OAAO,IAAI,SAAS,EAAE;AAC5B,aAAK,KAAK;AACV,iBAAS,MAAM,MAAM,CAAC;AAAA,MACxB,CAAC;AACD,aAAO;AAAA,IACT;AAEA,WAAO,QAAQ,MAAM;AACnB,UAAI,SAAS,WAAW,GAAG;AACzB,YAAI,QAAQ,GAAG;AACb,kBAAQ,SAAS;AACjB,sBAAY,CAAC;AACb,kBAAQ,CAAC;AACT,mBAAS,CAAC;AACV,gBAAM;AACN,iBAAO,CAAC;AAAA,QACV;AACA,eAAO;AAAA,MACT;AAEA,WAAK,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACpC,YAAI,IAAI,MAAM,UAAU,MAAM,OAAO,SAAS,IAAI;AAChD,eAAK,GAAG,QAAQ,SAAS;AAAA,QAC3B,WAAW,KAAK,MAAM,QAAQ;AAC5B,iBAAO,KAAK,WAAW,MAAM;AAAA,QAC/B;AAAA,MACF;AACA,aAAO,IAAI,MAAM,QAAQ,KAAK;AAC5B,kBAAU,GAAG;AAAA,MACf;AACA,YAAM,SAAS;AACf,gBAAU,SAAS;AACnB,WAAK,SAAS;AACd,cAAQ,SAAS,MAAM,CAAC;AACxB,eAAS,OAAO,MAAM,GAAG,GAAG;AAC5B,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;;;AC7LA,IAAM,EAAE,IAAAC,IAAG,IAAI;AAER,SAAS,aACd,QACA,WACA,UAAyCA,KACjC;AACR,QAAM,WAAW,mBAAmB;AACpC,gCAA8B,QAAQ;AAEtC,MAAI;AAEJ,QAAM,QAAQ,SAAS,MAAM;AAC3B;AAAA,MACE,MAAM,QAAQ,CAAC,SAAS;AACtB,cAAM,UAAU,WAAW,MAAM;AAC/B,kBAAQ;AACR,6BAAmB,QAAQ;AAAA,QAC7B,GAAG,SAAS;AAEZ,kBAAU,MAAM;AACd,uBAAa,OAAO;AAAA,QACtB,CAAC;AAAA,MACH,GAAG,OAAO;AAAA,IACZ;AAAA,EACF,CAAC;AAED,MAAI,UAAU;AAEd,QAAM,OAAyC,SAAS;AAAA,IACtD,CAAC,MAAM;AAAA,IACP,CAAC,YAAY;AAAA,IACb,IAAI,QAAW;AACb,UAAI,SAAS;AACX,gBAAQ,QAAQ,MAAM;AACtB,cAAM;AACN,kBAAU;AAAA,MACZ;AACA,UAAI,UAAU;AACZ,0BAAkB,QAAQ;AAAA,MAC5B;AACA,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEO,SAAS,UACd,QACA,WACA,UAAyCA,KAChC;AACT,QAAM,WAAW,mBAAmB;AACpC,gCAA8B,QAAQ;AAEtC,MAAI;AAEJ,QAAM,QAAQ,SAAS,MAAM;AAC3B;AAAA,MACE,MAAM,QAAQ,CAAC,SAAS;AACtB,cAAM,UAAU,WAAW,MAAM;AAC/B,kBAAQ;AACR,6BAAmB,QAAQ;AAAA,QAC7B,GAAG,SAAS;AAEZ,kBAAU,MAAM;AACd,uBAAa,OAAO;AAAA,QACtB,CAAC;AAAA,MACH,GAAG,OAAO;AAAA,IACZ;AAAA,EACF,CAAC;AAED,MAAI,UAAU;AAEd,SAAO,MAAM;AACX,QAAI,SAAS;AACX,cAAQ,QAAQ,MAAM;AACtB,YAAM;AACN,gBAAU;AAAA,IACZ;AACA,QAAI,UAAU;AACZ,wBAAkB,QAAQ;AAAA,IAC5B;AACA,WAAO;AAAA,EACT;AACF;;;AC5Ee,SAAR,cAA+B,KAAmD;AAEvF,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAE3C,QAAI,OAAO,OAAO,mBAAmB,YAAY;AAC/C,YAAM,QAAQ,OAAO,eAAe,GAAG;AACvC,aAAO,UAAU,OAAO,aAAa,UAAU;AAAA,IACjD;AAIA,WAAO,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM;AAAA,EACjD;AAGA,SAAO;AACT;;;ACNO,SAAS,qBAAyC;AACvD,SAAO,oBAAI,IAAI;AACjB;AAEO,SAAS,oBAAuB,MAA6B;AAClE,aAAW,SAAS,KAAK,OAAO,GAAG;AACjC,wBAAoB,KAAK;AAAA,EAC3B;AACF;AAEA,SAAS,QAAW,OAAwB,KAAsB;AAChE,QAAM,UAAU,MAAM,IAAI,GAAG;AAC7B,MAAI,SAAS;AACX,WAAO;AAAA,EACT;AACA,QAAMC,QAAO,mBAAmB;AAChC,QAAM,IAAI,KAAKA,KAAI;AACnB,SAAOA;AACT;AAEO,SAAS,mBACd,MACA,KACA,SACM;AACN,QAAMA,QAAO,QAAQ,MAAM,GAAG;AAC9B,qBAAmBA,KAAI;AACvB,MAAI,SAAS;AACX,wBAAoBA,KAAI;AAAA,EAC1B;AACF;AAEO,SAAS,kBACd,MACA,KACM;AACN,oBAAkB,QAAQ,MAAM,GAAG,CAAC;AACtC;AAEO,SAAS,sBACd,MACA,SACM;AACN,MAAI,KAAK,MAAM;AACb,eAAW,SAAS,KAAK,OAAO,GAAG;AACjC,yBAAmB,KAAK;AACxB,UAAI,SAAS;AACX,4BAAoB,KAAK;AAAA,MAC3B;AAAA,IACF;AACA,QAAI,SAAS;AACX,WAAK,MAAM;AAAA,IACb;AAAA,EACF;AACF;;;AC/CA,IAAqB,cAArB,MAA4D;AAAA,EAO1D,YAAY,QAAmB;AAJ/B,SAAQ,OAAO,mBAAmB;AAKhC,SAAK,SAAS;AAEd,cAAU,MAAM;AACd,UAAI,KAAK,YAAY;AACnB,4BAAoB,KAAK,UAAU;AAAA,MACrC;AACA,0BAAoB,KAAK,IAAI;AAAA,IAC/B,CAAC;AAED,sBAAkB,KAAK,MAAM,IAAI;AAAA,EACnC;AAAA,EAEA,QAAc;AACZ,SAAK,OAAO,MAAM;AAClB,QAAI,KAAK,YAAY;AACnB,4BAAsB,KAAK,YAAY,IAAI;AAAA,IAC7C;AACA,uBAAmB,KAAK,IAAI;AAAA,EAC9B;AAAA,EAEA,OAAO,KAAiB;AACtB,UAAM,SAAS,KAAK,OAAO,OAAO,GAAG;AACrC,QAAI,QAAQ;AACV,UAAI,KAAK,YAAY;AACnB,2BAAmB,KAAK,YAAY,KAAK,IAAI;AAAA,MAC/C;AACA,yBAAmB,KAAK,IAAI;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,QACE,YACA,SACM;AACN,SAAK,QAAQ,YAAY,OAAO;AAAA,EAClC;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,UAAoC;AAClC,WAAO,KAAK,OAAO,QAAQ;AAAA,EAC7B;AAAA,EAEA,OAA4B;AAC1B,WAAO,KAAK,OAAO,KAAK;AAAA,EAC1B;AAAA,EAEA,SAA8B;AAC5B,WAAO,KAAK,OAAO,OAAO;AAAA,EAC5B;AAAA,EAEA,CAAC,OAAO,YAAsC;AAC5C,WAAO,KAAK,OAAO,OAAO,UAAU;AAAA,EACtC;AAAA,EAEA,KAAK,OAAO,eAAuB;AACjC,WAAO,KAAK,OAAO,OAAO;AAAA,EAC5B;AAAA,EAEA,IAAI,KAAuB;AACzB,QAAI,UAAU;AACZ,UAAI,CAAC,KAAK,YAAY;AACpB,aAAK,aAAa,mBAAmB;AAAA,MACvC;AACA,wBAAkB,KAAK,YAAY,GAAG;AAAA,IACxC;AACA,WAAO,KAAK,OAAO,IAAI,GAAG;AAAA,EAC5B;AAAA,EAEA,IAAI,KAAQ,OAAgB;AAC1B,UAAM,UAAU,KAAK,OAAO,IAAI,GAAG;AACnC,QAAI,CAAC,OAAO,GAAG,SAAS,KAAK,GAAG;AAC9B,WAAK,OAAO,IAAI,KAAK,KAAK;AAC1B,UAAI,KAAK,YAAY;AACnB,2BAAmB,KAAK,YAAY,GAAG;AAAA,MACzC;AACA,yBAAmB,KAAK,IAAI;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,KAAiB;AACnB,QAAI,UAAU;AACZ,UAAI,CAAC,KAAK,YAAY;AACpB,aAAK,aAAa,mBAAmB;AAAA,MACvC;AACA,wBAAkB,KAAK,YAAY,GAAG;AAAA,IACxC;AACA,WAAO,KAAK,OAAO,IAAI,GAAG;AAAA,EAC5B;AACF;;;ACrGA,IAAM,wBAAN,MAAsD;AAAA,EAAtD;AAGE,gBAAO,mBAAmB;AAAA;AAAA,EAE1B,UAAU;AACR,QAAI,KAAK,YAAY;AACnB,0BAAoB,KAAK,UAAU;AAAA,IACrC;AACA,wBAAoB,KAAK,IAAI;AAAA,EAC/B;AAAA,EAEA,IAAI,QAAW,KAAsB,UAAe;AAClD,QAAI,UAAU;AACZ,UAAI,CAAC,KAAK,YAAY;AACpB,aAAK,aAAa,mBAAmB;AAAA,MACvC;AACA,wBAAkB,KAAK,YAAY,GAAG;AAAA,IACxC;AACA,WAAO,QAAQ,IAAI,QAAQ,KAAK,QAAQ;AAAA,EAC1C;AAAA,EAEA,IAAI,QAAW,KAAsB;AACnC,QAAI,UAAU;AACZ,UAAI,CAAC,KAAK,YAAY;AACpB,aAAK,aAAa,mBAAmB;AAAA,MACvC;AACA,wBAAkB,KAAK,YAAY,GAAG;AAAA,IACxC;AACA,WAAO,QAAQ,IAAI,QAAQ,GAAG;AAAA,EAChC;AAAA,EAEA,eAAe,QAAW,KAAsB;AAC9C,UAAM,UAAU,QAAQ,eAAe,QAAQ,GAAG;AAClD,QAAI,SAAS;AACX,UAAI,KAAK,YAAY;AACnB,2BAAmB,KAAK,YAAY,KAAK,IAAI;AAAA,MAC/C;AACA,yBAAmB,KAAK,IAAI;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,QAAW,KAAsB,OAAY,UAAe;AAC9D,UAAM,UAAU,QAAQ,IAAI,QAAQ,KAAK,QAAQ;AAEjD,UAAM,SAAS,QAAQ,IAAI,QAAQ,KAAK,OAAO,QAAQ;AAEvD,QAAI,UAAU,CAAC,OAAO,GAAG,SAAS,KAAK,GAAG;AACxC,UAAI,KAAK,YAAY;AACnB,2BAAmB,KAAK,YAAY,GAAG;AAAA,MACzC;AACA,yBAAmB,KAAK,IAAI;AAAA,IAC9B;AAEA,WAAO;AAAA,EACT;AACF;AAEe,SAAR,qBACL,QACG;AACH,QAAM,UAAU,IAAI,sBAAsB;AAE1C,YAAU,MAAM;AACd,YAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,QAAM,QAAQ,IAAI,MAAM,QAAQ,OAAO;AAEvC,oBAAkB,QAAQ,MAAM,KAAK;AAErC,SAAO;AACT;;;ACzEA,IAAqB,cAArB,MAAsD;AAAA,EAOpD,YAAY,QAAgB;AAJ5B,SAAQ,OAAO,mBAAmB;AAKhC,SAAK,SAAS;AAEd,cAAU,MAAM;AACd,UAAI,KAAK,YAAY;AACnB,4BAAoB,KAAK,UAAU;AAAA,MACrC;AACA,0BAAoB,KAAK,IAAI;AAAA,IAC/B,CAAC;AAED,sBAAkB,KAAK,MAAM,IAAI;AAAA,EACnC;AAAA,EAEA,QAAc;AACZ,SAAK,OAAO,MAAM;AAClB,QAAI,KAAK,YAAY;AACnB,4BAAsB,KAAK,YAAY,IAAI;AAAA,IAC7C;AACA,uBAAmB,KAAK,IAAI;AAAA,EAC9B;AAAA,EAEA,OAAO,OAAmB;AACxB,UAAM,SAAS,KAAK,OAAO,OAAO,KAAK;AACvC,QAAI,QAAQ;AACV,UAAI,KAAK,YAAY;AACnB,2BAAmB,KAAK,YAAY,OAAO,IAAI;AAAA,MACjD;AACA,yBAAmB,KAAK,IAAI;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,QACE,YACA,SACM;AACN,SAAK,QAAQ,YAAY,OAAO;AAAA,EAClC;AAAA,EAEA,IAAI,OAAe;AACjB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,UAAoC;AAClC,WAAO,KAAK,OAAO,QAAQ;AAAA,EAC7B;AAAA,EAEA,OAA4B;AAC1B,WAAO,KAAK,OAAO,KAAK;AAAA,EAC1B;AAAA,EAEA,SAA8B;AAC5B,WAAO,KAAK,OAAO,OAAO;AAAA,EAC5B;AAAA,EAEA,CAAC,OAAO,YAAiC;AACvC,WAAO,KAAK,OAAO,OAAO,UAAU;AAAA,EACtC;AAAA,EAEA,KAAK,OAAO,eAAuB;AACjC,WAAO,KAAK,OAAO,OAAO;AAAA,EAC5B;AAAA,EAEA,IAAI,OAAgB;AAClB,UAAM,eAAe,CAAC,KAAK,OAAO,IAAI,KAAK;AAC3C,SAAK,OAAO,IAAI,KAAK;AACrB,QAAI,cAAc;AAChB,UAAI,KAAK,YAAY;AACnB,2BAAmB,KAAK,YAAY,KAAK;AAAA,MAC3C;AACA,yBAAmB,KAAK,IAAI;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAmB;AACrB,QAAI,UAAU;AACZ,UAAI,CAAC,KAAK,YAAY;AACpB,aAAK,aAAa,mBAAmB;AAAA,MACvC;AACA,wBAAkB,KAAK,YAAY,KAAK;AAAA,IAC1C;AACA,WAAO,KAAK,OAAO,IAAI,KAAK;AAAA,EAC9B;AACF;;;AClGO,SAAS,yBAAgE;AAC9E,SAAO,oBAAI,QAAyB;AACtC;AAEA,SAASC,SAA0B,OAA4B,KAAsB;AACnF,QAAM,UAAU,MAAM,IAAI,GAAG;AAC7B,MAAI,SAAS;AACX,WAAO;AAAA,EACT;AACA,QAAMC,QAAO,mBAAmB;AAChC,QAAM,IAAI,KAAKA,KAAI;AACnB,SAAOA;AACT;AAEO,SAAS,uBACd,OACA,KACA,SACM;AACN,QAAMA,QAAOD,SAAQ,OAAO,GAAG;AAC/B,qBAAmBC,KAAI;AACvB,MAAI,SAAS;AACX,wBAAoBA,KAAI;AAAA,EAC1B;AACF;AAEO,SAAS,sBACd,OACA,KACM;AACN,oBAAkBD,SAAQ,OAAO,GAAG,CAAC;AACvC;;;ACzBA,IAAqB,kBAArB,MAAmF;AAAA,EAOjF,YAAY,QAAuB;AAJnC,SAAQ,OAAO,mBAAmB;AAKhC,SAAK,SAAS;AAEd,cAAU,MAAM;AACd,0BAAoB,KAAK,IAAI;AAAA,IAC/B,CAAC;AAED,sBAAkB,KAAK,MAAM,IAAI;AAAA,EACnC;AAAA,EAEA,OAAO,KAAiB;AACtB,UAAM,SAAS,KAAK,OAAO,OAAO,GAAG;AACrC,QAAI,QAAQ;AACV,UAAI,KAAK,YAAY;AACnB,+BAAuB,KAAK,YAAY,KAAK,IAAI;AAAA,MACnD;AACA,yBAAmB,KAAK,IAAI;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,OAAO,eAAuB;AACjC,WAAO,KAAK,OAAO,OAAO;AAAA,EAC5B;AAAA,EAEA,IAAI,KAAuB;AACzB,QAAI,UAAU;AACZ,UAAI,CAAC,KAAK,YAAY;AACpB,aAAK,aAAa,uBAAuB;AAAA,MAC3C;AACA,4BAAsB,KAAK,YAAY,GAAG;AAAA,IAC5C;AACA,WAAO,KAAK,OAAO,IAAI,GAAG;AAAA,EAC5B;AAAA,EAEA,IAAI,KAAQ,OAAgB;AAC1B,UAAM,UAAU,KAAK,OAAO,IAAI,GAAG;AACnC,QAAI,CAAC,OAAO,GAAG,SAAS,KAAK,GAAG;AAC9B,WAAK,OAAO,IAAI,KAAK,KAAK;AAC1B,UAAI,KAAK,YAAY;AACnB,+BAAuB,KAAK,YAAY,GAAG;AAAA,MAC7C;AACA,yBAAmB,KAAK,IAAI;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,KAAiB;AACnB,QAAI,UAAU;AACZ,UAAI,CAAC,KAAK,YAAY;AACpB,aAAK,aAAa,uBAAuB;AAAA,MAC3C;AACA,4BAAsB,KAAK,YAAY,GAAG;AAAA,IAC5C;AACA,WAAO,KAAK,OAAO,IAAI,GAAG;AAAA,EAC5B;AACF;;;AChEA,IAAqB,kBAArB,MAA6E;AAAA,EAO3E,YAAY,QAAoB;AANhC,SAAQ,OAAO,mBAAmB;AAOhC,SAAK,SAAS;AAEd,cAAU,MAAM;AACd,0BAAoB,KAAK,IAAI;AAAA,IAC/B,CAAC;AAED,sBAAkB,KAAK,MAAM,IAAI;AAAA,EACnC;AAAA,EAEA,OAAO,OAAmB;AACxB,UAAM,SAAS,KAAK,OAAO,OAAO,KAAK;AACvC,QAAI,QAAQ;AACV,UAAI,KAAK,YAAY;AACnB,+BAAuB,KAAK,YAAY,OAAO,IAAI;AAAA,MACrD;AACA,yBAAmB,KAAK,IAAI;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,OAAO,eAAuB;AACjC,WAAO,KAAK,OAAO,OAAO;AAAA,EAC5B;AAAA,EAEA,IAAI,OAAgB;AAClB,UAAM,eAAe,CAAC,KAAK,OAAO,IAAI,KAAK;AAC3C,SAAK,OAAO,IAAI,KAAK;AACrB,QAAI,cAAc;AAChB,UAAI,KAAK,YAAY;AACnB,+BAAuB,KAAK,YAAY,KAAK;AAAA,MAC/C;AACA,yBAAmB,KAAK,IAAI;AAAA,IAC9B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAmB;AACrB,QAAI,UAAU;AACZ,UAAI,CAAC,KAAK,YAAY;AACpB,aAAK,aAAa,uBAAuB;AAAA,MAC3C;AACA,4BAAsB,KAAK,YAAY,KAAK;AAAA,IAC9C;AACA,WAAO,KAAK,OAAO,IAAI,KAAK;AAAA,EAC9B;AACF;;;AC5DA,IAAM,UAAU,oBAAI,QAAQ;AAE5B,SAAS,YAAY,QAAsB;AACzC,MAAI,kBAAkB,KAAK;AACzB,WAAO,IAAI,YAAY,MAAM;AAAA,EAC/B;AACA,MAAI,kBAAkB,KAAK;AACzB,WAAO,IAAI,YAAY,MAAM;AAAA,EAC/B;AACA,MAAI,kBAAkB,SAAS;AAC7B,WAAO,IAAI,gBAAgB,MAAM;AAAA,EACnC;AACA,MAAI,kBAAkB,SAAS;AAC7B,WAAO,IAAI,gBAAgB,MAAM;AAAA,EACnC;AACA,MAAI,MAAM,QAAQ,MAAM,KAAK,cAAc,MAAM,GAAG;AAClD,WAAO,qBAAqB,MAAM;AAAA,EACpC;AACA,QAAM,IAAI,MAAM,yBAAyB;AAC3C;AAQA,SAAS,SAAS,QAAkB;AAClC,QAAM,eAAe,QAAQ,IAAI,MAAM;AACvC,MAAI,cAAc;AAChB,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,YAAY,MAAM;AACnC,UAAQ,IAAI,QAAQ,QAAQ;AAC5B,SAAO;AACT;AAEA,IAAO,mBAAQ;;;AC3CA,SAAR,SACL,SACA,UAA8B,CAAC,GAClB;AACb,QAAM,YAAyB,QAAQ,gBAAgB,OACnD,EAAE,QAAQ,WAAW,OAAO,QAAQ,aAAa,IACjD,EAAE,QAAQ,UAAU;AAExB,QAAM,QAAQ,iBAAsB,SAAS;AAE7C,SAAO,MAAM;AACX,QAAI,QAAQ;AAEZ,UAAM,UAAU,QAAQ;AAExB,UAAM,OAAO,WAAW,MAAM;AAG5B,UAAI,QAAQ,WAAW;AACrB,cAAM,UAAU,WAAW,MAAM;AAG/B,gBAAM,SAAS;AAAA,QACjB,GAAG,QAAQ,SAAS;AAEpB,kBAAU,MAAM;AACd,uBAAa,OAAO;AAAA,QACtB,CAAC;AAAA,MACH,OAAO;AACL,cAAM,SAAS;AAAA,MACjB;AAAA,IACF,CAAC;AAED,YAAQ;AAAA,MACN,CAAC,UAAU;AACT,YAAI,OAAO;AACT,eAAK;AACL,gBAAM,MAAM;AACV,kBAAM,SAAS;AACf,kBAAM,QAAQ;AAAA,UAChB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,CAAC,UAAe;AACd,YAAI,OAAO;AACT,eAAK;AACL,gBAAM,MAAM;AACV,kBAAM,SAAS;AACf,kBAAM,QAAQ;AAAA,UAChB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,cAAU,MAAM;AACd,cAAQ;AAAA,IACV,CAAC;AAAA,EACH,CAAC;AAED,SAAO;AACT;;;ACtFA,SAAS,OAAU,OAA8B;AAC/C,SAAO,OAAO,UAAU;AAC1B;AACO,SAAS,YACd,YACG,MACU;AACb,SAAO,YAAY,MAAM;AACvB,QAAI,SAAS;AACb,QAAI,IAAI;AACR,aAAS,IAAI,GAAG,MAAM,QAAQ,QAAQ,IAAI,KAAK,KAAK;AAClD,eAAS,GAAG,SAAS,QAAQ;AAC7B,UAAI,IAAI,KAAK,QAAQ;AACnB,cAAM,OAAO,KAAK;AAClB,YAAI,MAAM,IAAI,GAAG;AACf,mBAAS,GAAG,SAAS,OAAO,KAAK,KAAK;AAAA,QACxC,WAAW,OAAO,IAAI,GAAG;AACvB,mBAAS,GAAG,SAAS,OAAO,KAAK,CAAC;AAAA,QACpC,OAAO;AACL,mBAAS,GAAG,SAAS,OAAO,IAAI;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AACH;AAEO,SAAS,SACd,YACG,MACW;AACd,SAAO,SAAS,MAAM;AACpB,QAAI,SAAS;AACb,QAAI,IAAI;AACR,aAAS,IAAI,GAAG,MAAM,QAAQ,QAAQ,IAAI,KAAK,KAAK;AAClD,eAAS,GAAG,SAAS,QAAQ;AAC7B,UAAI,IAAI,KAAK,QAAQ;AACnB,cAAM,OAAO,KAAK;AAClB,YAAI,MAAM,IAAI,GAAG;AACf,mBAAS,GAAG,SAAS,OAAO,KAAK,KAAK;AAAA,QACxC,WAAW,OAAO,IAAI,GAAG;AACvB,mBAAS,GAAG,SAAS,OAAO,KAAK,CAAC;AAAA,QACpC,OAAO;AACL,mBAAS,GAAG,SAAS,OAAO,IAAI;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AACH;",
  "names": ["task", "ref", "is", "is", "atom", "getAtom", "atom"]
}
